NAME=ands (opcode) triggers zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0
wx 022012e0
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=ands (opcode) triggers zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=5
ar cpsr=0x40000000
wx 022012e0
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=ands triggers zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0
wa "ands r2, r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=ands triggers zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=5
ar cpsr=0x40000000
wa "ands r2, r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=and (no s flag) does not trigger zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0x00000000
wa and r2, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=and (no s flag) does not trigger zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=5
ar cpsr=0x40000000
wa and r2, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=orrs triggers zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0
wa "orrs r2, r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=orrs triggers zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=5
ar cpsr=0x40000000
wa "orrs r2, r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=orrs (opcode) triggers zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0
wx 022092e1
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=orrs (opcode) triggers zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=5
ar cpsr=0x40000000
wx 022092e1
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=orr (no s flag) does not trigger zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0x00000000
wa orr r2, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=orr (no s flag) does not trigger zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=5
ar cpsr=0x40000000
wa orr r2, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=adds triggers zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0
wa "adds r2, r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=adds triggers zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=2
ar r1=5
ar cpsr=0x40000000
wa "adds r1,r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=add (no s flag) does not trigger zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0
ar cpsr=0
wa add r2, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=add (no s flag) does not trigger zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=2
ar r1=5
ar cpsr=0x40000000
wa add r1, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=eors (opcode) triggers zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=1
ar cpsr=0
wx 022032e0
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=eors (opcode) triggers zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=2
ar r1=5
ar cpsr=0x40000000
wx 021031e0
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=eors triggers zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=1
ar cpsr=0
wa "eors r2, r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=eors triggers zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=2
ar r1=5
ar cpsr=0x40000000
wa "eors r1,r2"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=eor (no s flag) does not trigger zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=1
ar cpsr=0
wa eor r2, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=eor (no s flag) does not trigger zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=2
ar r1=5
ar cpsr=0x40000000
wa eor r1, r2
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=subs triggers zf and cf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=1
ar cpsr=0
wa "subs r2, r2, 1"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x60000000
EOF
RUN

NAME=subs triggers cf and zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=2
ar cpsr=0x40000000
wa "subs r2, r2, 1"
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x20000000
EOF
RUN

NAME=sub (no s flag) does not trigger zf
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=1
ar cpsr=0
wa sub r2, r2, 1
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x00000000
EOF
RUN

NAME=sub (no s flag) does not trigger zf off
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=2
ar cpsr=0x40000000
wa sub r2, r2, 1
aes
ar cpsr
EOF
EXPECT=<<EOF
cpsr = 0x40000000
EOF
RUN

NAME=cmp neq unchanged zf
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
aei
aeim
ar sp=0x00108000
.arf
wa "cmp r1, 16"
aes
%v cpsr & 0xf0000000
EOF
EXPECT=<<EOF
0x80000000
EOF
RUN

NAME=cmp neq changed zf
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
aei
aeim
ar sp=0x00108000
ar cpsr=0xffffffff
.arf
wa "cmp r1, 16"
aes
%v cpsr & 0xf0000000
EOF
EXPECT=<<EOF
0x80000000
EOF
RUN

NAME=cmp eq unchanged zf
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
aei
aeim
ar sp=0x00108000
ar r1=0x10
ar cpsr=0x40000000
.arf
wa "cmp r1, 16"
aes
%v cpsr & 0xf0000000
EOF
EXPECT=<<EOF
0x60000000
EOF
RUN

NAME=cmp eq changed zf
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
aei
aeim
ar sp=0x00108000
ar cpsr=0xffffffff
.arf
wa "cmp r1, 16"
aes
%v cpsr & 0xf0000000
EOF
EXPECT=<<EOF
0x80000000
EOF
RUN

NAME=tst nz
FILE==
CMDS=<<EOF
e asm.bytes=true
e asm.arch=arm
e asm.bits=32
wx 050010e3 0100a003
pd 2
ao 2~esil
aei
ar r0=4
2aes
ar r0
EOF
EXPECT=<<EOF
            0x00000000      050010e3       tst   r0, 5
            0x00000004      0100a003       moveq r0, 1
esilcost: 0
esil: 0,5,r0,&,==,$z,zf,:=,31,$s,nf,:=
esilcost: 0
esil: zf,?{,1,r0,=,}
r0 = 0x00000004
EOF
RUN

NAME=ldr r0, [r1, 7]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar > /dev/null
ar r0=0
ar r1=1
wx 070091e5
wx aaaaaaaabbbbbbbb44332211@ 4
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0xbbbbbbbb
EOF
RUN

NAME=ldr r0, [r0, 7]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar > /dev/null
ar r0=0
wx 070090e5
wx aaaaaaaabbbbbbbb44332211@ 4
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0xbbbbbbaa
EOF
RUN

NAME=ldr r0, [r0, r1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar > /dev/null
ar r0=4
ar r1=2
wx 010090e7
wx aaaaaaaabbbbbbbb44332211 @ 4
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0xbbbbaaaa
EOF
RUN

NAME=ldr r2, [r3, r1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r3=4
ar r1=2
wx 012093e7aabbccddeeff
aes
ar r2
EOF
EXPECT=<<EOF
r2 = 0xffeeddcc
EOF
RUN

NAME=ldr r0, [pc, r0]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
s 0x20
wx 00009fe7 # ldr r0, [pc, r0]
ar r0=0x20
wx 01000000 @ 0x48
wx 02000000 @ 0x28
pd 1
aes
ar r0
EOF
EXPECT=<<EOF
            ;-- r0:
            0x00000020      ldr   r0, [pc, r0]                         ; [0x28:4]=2
r0 = 0x00000001
EOF
RUN

NAME=ldrb r1, [r3, r2, lsl 2]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r3=4
ar r2=1
wx 0211d3e7
wx aabbccdd @ 8
aes
ar r1
EOF
EXPECT=<<EOF
r1 = 0x000000aa
EOF
RUN

NAME=ldrd r2, r3, [r1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=8
# put value at r1 into r2 and at r1+4 into r3
wx d020c1e1 # ldrd r2,r3,[r1]
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r2
ar r3
EOF
EXPECT=<<EOF
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1, #4]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=4
# put value at r1+4 into r2 and at r1+4+4 into r3
wx d420c1e1 # ldrd r2,r3,[r1, 4]
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r2
ar r3
EOF
EXPECT=<<EOF
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [pc, #4]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
# put value at pc+4 into r2 and at pc+4+4 into r3
wx d420CFe1 # ldrd r2, r3, [pc, #4]
wx ddccbbaa @ 12
wx efbeadde @ 16
aes
ar r2
ar r3
EOF
EXPECT=<<EOF
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1, #4]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=4
# put value at r1+4 into r2 and at r1+4+4 into r3 then put r1+4 into r1
wx d420e1e1 # ldrd r2, r3, [r1, #4]!
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
r1 = 0x00000008
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1], #4
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=8
# put value at r1 into r2 and at r1+4 into r3 then put r1+4 into r1
wx d420c1e0 # ldrd r2,r3,[r1], 4
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
r1 = 0x0000000c
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1, r4]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=4
ar r4=4
# put value at r1+r4 into r2 and at r1+r4+4 into r3
wx d42081e1 # ldrd r2,r3,[r1, r4]
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r2
ar r3
EOF
EXPECT=<<EOF
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1, -r4]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=12
ar r4=4
# put value at r1-r4 into r2 and at r1-r4+4 into r3
wx d42001e1 # ldrd r2,r3,[r1, -r4]
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r2
ar r3
EOF
EXPECT=<<EOF
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [pc, r4]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r4=4
# put value at pc+r4 into r2 and at pc+r4+4 into r3
wx d4208fe1 # ldrd r2, r3, [pc, r4]
wx ddccbbaa @ 12
wx efbeadde @ 16
aes
ar r2
ar r3
EOF
EXPECT=<<EOF
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1, r4]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=4
ar r4=4
# put value at r1+r4 into r2 and at r1+r4+4 into r3 then put r1+r4 into r1
wx d420a1e1 # ldrd r2,r3,[r1, r4]!
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
r1 = 0x00000008
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1, -r4]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=12
ar r4=4
# put value at r1-r4 into r2 and at r1-r4+4 into r3 then put r1-r4 into r1
wx d42021e1 # ldrd r2,r3,[r1, -r4]!
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
r1 = 0x00000008
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1], r4
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=8
ar r4=4
# put value at r1 into r2 and at r1+4 into r3 then put r1+r4 into r1
wx d42081e0 # ldrd r2,r3,[r1], r4
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
r1 = 0x0000000c
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=ldrd r2, r3, [r1], -r4
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=8
ar r4=4
# put value at r1 into r2 and at r1+4 into r3 then put r1-r4 into r1
wx d42001e0 # ldrd r2,r3,[r1], -r4
wx ddccbbaa @ 8
wx efbeadde @ 12
aes
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
r1 = 0x00000004
r2 = 0xaabbccdd
r3 = 0xdeadbeef
EOF
RUN

NAME=str r2, [r3, 4]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=0
wx 042083e5aabbccddeeff
aes
p8 4 @ 4
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000000
EOF
RUN

NAME=str r2, [r3, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=0
wx 052083e5aabbccddeeff
aes
p8 4 @ 5
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000000
EOF
RUN

NAME=str r2, [r3, r1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=4
ar r1=2
wx 012083e7aabbccddeeff
aes
p8 4 @ 6
ar r2
ar r3
ar r1
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000004
r1 = 0x00000002
EOF
RUN

NAME=str r2, [r3, r1]; ldr r2, [r3, r1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=8
ar r1=4
wx 012083e7012093e7aabbccddeeff11223344
aes
aes
ar r2
ar r3
ar r1
EOF
EXPECT=<<EOF
r2 = 0xdeadbeef
r3 = 0x00000008
r1 = 0x00000004
EOF
RUN

NAME=str r1, [r2, r3, lsl 1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx 831082e7aabbccddeeff
aes
p8 4 @ 8
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000004
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2, r3, lsr 1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx a31082e7aabbccddeeff
aes
p8 4 @ 5
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000004
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2, r3, asr 1]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx c31082e7aabbccddeeff
aes
p8 4 @ 5
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000004
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2, r3, ror 23]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=1
wx e31c82e7aabbccddeeff
aes
p8 4 @ 0x84
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000004
r3 = 0x00000001
EOF
RUN

NAME=str r2, [r3], 5
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=0
wx 052083e4aabbccddeeff
aes
p8 4 @ 0
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000005
EOF
RUN

NAME=str r2, [r3], r1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=4
ar r1=2
wx 012083e6aabbccddeeff
aes
p8 4 @ 4
ar r2
ar r3
ar r1
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000006
r1 = 0x00000002
EOF
RUN

NAME=str r1, [r2], r3, lsl 1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx 831082e6aabbccddeeff
aes
p8 4 @ 4
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000008
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2], r3, lsr 1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx a31082e6aabbccddeeff
aes
p8 4 @ 4
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000005
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2], r3, asr 1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx c31082e6aabbccddeeff
aes
p8 4 @ 4
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000005
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2], r3, ror 23
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=1
wx e31c82e6aabbccddeeff
aes
p8 4 @ 4
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000084
r3 = 0x00000001
EOF
RUN

NAME=str r2, [r3, 5]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=0
wx 0520a3e5aabbccddeeff
aes
p8 4 @ 5
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000005
EOF
RUN

NAME=str r2, [r3, -5]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=10
wx 052023e5aabbccddeeff
aes
p8 4 @ 5
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000005
EOF
RUN

NAME=str r2, [r3, r1]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=4
ar r1=2
wx 0120a3e7aabbccddeeff
aes
p8 4 @ 6
ar r2
ar r3
ar r1
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000006
r1 = 0x00000002
EOF
RUN

NAME=str r2, [r3, r1]! (negative r1)
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r2=0xdeadbeef
ar r3=8
ar r1=-2
wx 0120a3e7aabbccddeeff
aes
p8 4 @ 6
ar r2
ar r3
ar r1
EOF
EXPECT=<<EOF
efbeadde
r2 = 0xdeadbeef
r3 = 0x00000006
r1 = 0xfffffffe
EOF
RUN

NAME=str r1, [r2, r3, lsl 1]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx 8310a2e7aabbccddeeff
aes
p8 4 @ 8
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000008
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2, r3, lsr 1]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx a310a2e7aabbccddeeff
aes
p8 4 @ 5
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000005
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2, r3, asr 1]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=2
wx c310a2e7aabbccddeeff
aes
p8 4 @ 5
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000005
r3 = 0x00000002
EOF
RUN

NAME=str r1, [r2, r3, ror 23]!
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xdeadbeef
ar r2=4
ar r3=1
wx e31ca2e7aabbccddeeff
aes
p8 4 @ 0x84
ar r1
ar r2
ar r3
EOF
EXPECT=<<EOF
efbeadde
r1 = 0xdeadbeef
r2 = 0x00000084
r3 = 0x00000001
EOF
RUN

NAME=streq r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508605aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=streq r5, [r6, 5] zf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508605aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strne r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508615aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strne r5, [r6, 5] zf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508615aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strhs r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508625aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strhs r5, [r6, 5] cf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508625aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strlo r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508635aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strlo r5, [r6, 5] cf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508635aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strmi r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508645aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strmi r5, [r6, 5] nf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508645aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strpl r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508655aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strpl r5, [r6, 5] nf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508655aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strvs r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508665aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strvs r5, [r6, 5] vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508665aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strvc r5, [r6, 5]
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508675aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strvc r5, [r6, 5] vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508675aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strhi r5, [r6, 5] cf==0, zf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=0
ar zf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508685aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strhi r5, [r6, 5] cf==0, zf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=0
ar zf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508685aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strhi r5, [r6, 5] cf==1, zf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=1
ar zf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508685aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strhi r5, [r6, 5] zf==0 cf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=1
ar zf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508685aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strls r5, [r6, 5] zf==1 cf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=0
ar zf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508695aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strls r5, [r6, 5] cf==0, zf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=0
ar zf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508695aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strls r5, [r6, 5] cf==1, zf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=1
ar zf=0
ar r5=0xdeadbeef
ar r6=1
wx 05508695aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strls r5, [r6, 5] cf==1, zf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar cf=1
ar zf=1
ar r5=0xdeadbeef
ar r6=1
wx 05508695aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strge r5, [r6, 5] nf==1, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=1
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086a5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strge r5, [r6, 5] nf==0, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=0
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086a5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strge r5, [r6, 5] nf==1 vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=1
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086a5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strge r5, [r6, 5] nf==0 vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=0
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086a5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strlt r5, [r6, 5] nf==1 vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=1
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086b5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strlt r5, [r6, 5] nf==0 vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=0
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086b5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strlt r5, [r6, 5] nf==0, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=0
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086b5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strlt r5, [r6, 5] nf==1, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar nf=1
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086b5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strgt r5, [r6, 5] zf==1 nf==1, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar nf=1
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086c5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strgt r5, [r6, 5] zf==1 nf==0, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar nf=0
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086c5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strgt r5, [r6, 5] zf==1 nf==0, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar nf=0
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086c5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strgt r5, [r6, 5] zf==0 nf==0, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar nf=0
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086c5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strgt r5, [r6, 5] zf==0 nf==1, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar nf=1
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086c5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strgt r5, [r6, 5] zf==0 nf==0, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar nf=0
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086c5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strgt r5, [r6, 5] zf==0 nf==1, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar nf=1
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086c5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strle r5, [r6, 5] zf==1 nf==1, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar nf=1
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086d5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strle r5, [r6, 5] zf==1 nf==0, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar nf=0
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086d5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strle r5, [r6, 5] zf==0 nf==0, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar nf=0
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086d5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
ccddeeff
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strle r5, [r6, 5] zf==0 nf==0, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar nf=0
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086d5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strle r5, [r6, 5] zf==0 nf==0, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=0
ar nf=0
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086d5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strle r5, [r6, 5] zf==1 nf==1, vf==0
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar nf=1
ar vf=0
ar r5=0xdeadbeef
ar r6=1
wx 055086d5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=strle r5, [r6, 5] zf==1 nf==0, vf==1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar zf=1
ar nf=0
ar vf=1
ar r5=0xdeadbeef
ar r6=1
wx 055086d5aabbccddeeff
aes
p8 4 @ 6
ar r5
ar r6
EOF
EXPECT=<<EOF
efbeadde
r5 = 0xdeadbeef
r6 = 0x00000001
EOF
RUN

NAME=add reg
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=1
ar r2=2
wv 0xe0810002
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000003
EOF
RUN

NAME=add reg in place
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r0=1
ar r1=2
wv 0xe0800001
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000003
EOF
RUN

NAME=add reg shifted
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=1
ar r2=4
wv 0xe08100a2
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000003
EOF
RUN

NAME=add reg asr
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=2
ar r2=-1
wv 0xe08100c2
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000001
EOF
RUN

NAME=add imm
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=1
wv 0xe2810002
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000003
EOF
RUN

NAME=add imm rotated
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=2
wv 0xe2810104
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000003
EOF
RUN

NAME=sub imm rotated
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xa
wv 0xe2410104
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000009
EOF
RUN

NAME=mul reg
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xa
ar r2=0x2
wv 0xe0000291
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000014
EOF
RUN

NAME=and imm rotated
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xf
wv 0xe2010104
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000001
EOF
RUN

NAME=orr imm rotated
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0x2
wv 0xe3810104
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000003
EOF
RUN

NAME=eor imm rotated
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xf
wv 0xe2210104
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x0000000e
EOF
RUN

NAME=lsr reg
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xa
ar r2=0x2
wv 0xe1a00231
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000002
EOF
RUN

NAME=lsl reg
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0xa
ar r2=0x2
wv 0xe1a00211
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000028
EOF
RUN

NAME=lsl reg same destination and source
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r3=0xffffffaa
wx 0331a0e1
aes
ar r3
ar cpsr
EOF
EXPECT=<<EOF
r3 = 0xfffffea8
cpsr = 0x00000000
EOF
RUN

NAME=add pc op1
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wv 0xe28f0002
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x0000000a
EOF
RUN

NAME=add pc op2
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
ar r1=0x2
wv 0xe081000f
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x0000000a
EOF
RUN

NAME=pc points to next instruction
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0f00a0e1 # mov r0, pc
aes
ar r0
EOF
EXPECT=<<EOF
r0 = 0x00000004
EOF
RUN

NAME=lr correct after bl
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 000000eb # bl 8
aes
ar lr
ar pc
EOF
EXPECT=<<EOF
lr = 0x00000004
pc = 0x00000008
EOF
RUN

NAME=r0 correct after stmia post-increment
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0600a0e8 # stm r0!, {r1, r2}
aes
ar r0
ar pc
EOF
EXPECT=<<EOF
r0 = 0x00000008
pc = 0x00000004
EOF
RUN

NAME=r0 correct after stmia no increment
FILE=malloc://0x200
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 060080e8 # stm r0, {r1, r2}
aes
ar r0
ar pc
EOF
EXPECT=<<EOF
r0 = 0x00000000
pc = 0x00000004
EOF
RUN

NAME=stmib no writeback
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0a0080e9 # stmib r0, {r1, r3}
ar r0=8
ar r1=9
ar r3=10
aes
ar r0
p8 12 @ 8
EOF
EXPECT=<<EOF
r0 = 0x00000008
00000000090000000a000000
EOF
RUN

NAME=stmda writeback
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0a0020e8 # stmda r0!, {r1, r3}
ar r0=16
ar r1=9
ar r3=10
aes
ar r0
p8 12 @ 8
EOF
EXPECT=<<EOF
r0 = 0x00000008
00000000090000000a000000
EOF
RUN

NAME=stmdb no writeback
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0a0000e9 # stmdb r0, {r1, r3}
ar r0=16
ar r1=9
ar r3=10
aes
ar r0
p8 12 @ 8
EOF
EXPECT=<<EOF
r0 = 0x00000010
090000000a00000000000000
EOF
RUN

NAME=r0 and mem correct after vstmia
FILE=malloc://0x200
CMDS=<<EOF
e esil.verbose=2
e asm.arch=arm
e asm.bits=32
wx 041b80ec # vstmia r0, {d1, d2}
ar r0=0x100
ar d1=0x01c00df0fecadec0
ar d2=0xaaaaaaaaaaaaaaaa
aes
ar r0
ar pc
p8 16 @ 0x100
EOF
EXPECT=<<EOF
r0 = 0x00000100
pc = 0x00000004
c0decafef00dc001aaaaaaaaaaaaaaaa
EOF
RUN

NAME=r0 and mem correct after vstmia writeback
FILE=malloc://0x200
CMDS=<<EOF
e esil.verbose=2
e asm.arch=arm
e asm.bits=32
wx 041ba0ec # vstmia r0!, {d1, d2}
ar r0=0x100
ar d1=0x01c00df0fecadec0
ar d2=0xaaaaaaaaaaaaaaaa
aes
ar r0
ar pc
p8 16 @ 0x100
EOF
EXPECT=<<EOF
r0 = 0x00000110
pc = 0x00000004
c0decafef00dc001aaaaaaaaaaaaaaaa
EOF
RUN


NAME=r0 and mem correct after vstmdb
FILE=malloc://0x200
CMDS=<<EOF
e esil.verbose=2
e asm.arch=arm
e asm.bits=32
wx 041b20ed # vstmdb r0!, {d1, d2}
ar r0=0x110
ar d1=0x01c00df0fecadec0
ar d2=0xaaaaaaaaaaaaaaaa
aes
ar r0
ar pc
p8 16 @ 0x100
EOF
EXPECT=<<EOF
r0 = 0x00000100
pc = 0x00000004
c0decafef00dc001aaaaaaaaaaaaaaaa
EOF
RUN

NAME=ldmda no writeback
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0a0010e8 # ldmda r0, {r1, r3}
wx 01234567 @ 8
wx 890abcde @ 12
ar r0=12
aes
ar r0
ar r1
ar r3
EOF
EXPECT=<<EOF
r0 = 0x0000000c
r1 = 0x67452301
r3 = 0xdebc0a89
EOF
RUN

NAME=ldmdb writeback
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0a0030e9 # ldmdb r0!, {r1, r3}
wx 01234567 @ 8
wx 890abcde @ 12
ar r0=16
aes
ar r0
ar r1
ar r3
EOF
EXPECT=<<EOF
r0 = 0x00000008
r1 = 0x67452301
r3 = 0xdebc0a89
EOF
RUN

NAME=ldm no writeback
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0a0090e8 # ldm r0, {r1, r3}
wx 01234567 @ 8
wx 890abcde @ 12
ar r0=8
aes
ar r0
ar r1
ar r3
EOF
EXPECT=<<EOF
r0 = 0x00000008
r1 = 0x67452301
r3 = 0xdebc0a89
EOF
RUN

NAME=ldmib writeback
FILE==
CMDS=<<EOF
e asm.arch=arm
e asm.bits=32
wx 0a00b0e9 # ldmib r0!, {r1, r3}
wx 01234567 @ 8
wx 890abcde @ 12
ar r0=4
aes
ar r0
ar r1
ar r3
EOF
EXPECT=<<EOF
r0 = 0x0000000c
r1 = 0x67452301
r3 = 0xdebc0a89
EOF
RUN

NAME=regs correct after vldmia
FILE=malloc://0x200
CMDS=<<EOF
e esil.verbose=2
e asm.arch=arm
e asm.bits=32
wx 080b93ec # vldmia r3, {d0-d3}
wx c0decafef00dc001aaaaaaaaaaaaaaaa @ 0x100
ar r3=0x100
aes
ar r3
ar pc
ar d0
ar d1
EOF
EXPECT=<<EOF
r3 = 0x00000100
pc = 0x00000004
d0 = 0x01c00df0fecadec0
d1 = 0xaaaaaaaaaaaaaaaa
EOF
RUN

NAME=regs correct after vldmia writeback
FILE=malloc://0x200
CMDS=<<EOF
e esil.verbose=2
e asm.arch=arm
e asm.bits=32
wx 080bb4ec # vldmia r4!, {d0-d3}
wx c0decafef00dc001aaaaaaaaaaaaaaaa @ 0x100
ar r4=0x100
aes
ar r4
ar pc
ar d0
ar d1
EOF
EXPECT=<<EOF
r4 = 0x00000120
pc = 0x00000004
d0 = 0x01c00df0fecadec0
d1 = 0xaaaaaaaaaaaaaaaa
EOF
RUN

NAME=regs correct after vldmdb
FILE=malloc://0x200
CMDS=<<EOF
e esil.verbose=2
e asm.arch=arm
e asm.bits=32
wx 080b35ed # vldmdb r5!, {d0-d3}
wx c0decafef00dc001aaaaaaaaaaaaaaaa @ 0x100
ar r5=0x120
aes
ar r5
ar pc
ar d0
ar d1
EOF
EXPECT=<<EOF
r5 = 0x00000100
pc = 0x00000004
d0 = 0x01c00df0fecadec0
d1 = 0xaaaaaaaaaaaaaaaa
EOF
RUN

NAME=reachable capstone assert
FILE=malloc://0x100
CMDS=<<EOF
e esil.verbose=2
e asm.arch=arm
e asm.bits=32
wx fbfd21b3 # msrlt cpsr_c, #0x3ec0
pi 1
pie 1
EOF
EXPECT=<<EOF
msrlt cpsr_c, 0x3ec0
0x00000000 nf,vf,^,?{,,}
EOF
RUN
