NAME=ARM pseudo compares set v and b<cc> tests it
FILE=malloc://80
ARGS=-a arm -b 32 -e asm.pseudo=true -e asm.comments=false
CMDS=<<EOF
wx 020051e1 0100000a 0100001a 010000aa 010000ba 010000ca 010000da 0100008a 0100002a 0100003a 0100009a 0100004a 0100005a 0100006a 0100007a 020071e1 020031e1 020011e1
pi 18
EOF
EXPECT=<<EOF
v = r1 - r2
if (!v) goto 0x10
if (v) goto 0x14
if (v >= 0) goto 0x18
if (v < 0) goto 0x1c
if (v > 0) goto 0x20
if (v <= 0) goto 0x24
if (((unsigned) v) > 0) goto 0x28
if (((unsigned) v) >= 0) goto 0x2c
if (((unsigned) v) < 0) goto 0x30
if (((unsigned) v) <= 0) goto 0x34
if (v < 0) goto 0x38
if (v >= 0) goto 0x3c
if (overflow) goto 0x40
if (!overflow) goto 0x44
v = r1 + r2
v = r1 ^ r2
v = r1 & r2
EOF
RUN

NAME=Thumb2 wide compares and branches share the narrow pseudo
FILE=malloc://32
ARGS=-a arm -b 16 -e asm.pseudo=true -e asm.comments=false
CMDS=<<EOF
wx b1eb020f 40f08080 02d0 11ea020f
pi 4
EOF
EXPECT=<<EOF
v = r1 - r2
if (v) goto 0x108
if (!v) goto 0x10
v = r1 & r2
EOF
RUN

NAME=ARM pseudo keeps the shifted compare operand
FILE=malloc://16
ARGS=-a arm -b 32 -e asm.pseudo=true -e asm.comments=false
CMDS=<<EOF
wx 020151e1 120251e1 020111e1
pi 3
EOF
EXPECT=<<EOF
v = r1 - (r2 << 2)
v = r1 - (r2 << r2)
v = r1 & (r2 << 2)
EOF
RUN

NAME=arm32 pc-relative ldrb/ldrh read their access width
FILE=malloc://64
ARGS=-a arm -b 16
CMDS=<<EOF
wx 9ff80400bff80400000000001122334455667788
pd 2
EOF
EXPECT=<<EOF
            0x00000000      9ff80400       ldrb.w r0, [0x00000008]     ; [0x8:1]=0
            0x00000004      bff80400       ldrh.w r0, [0x0000000c]     ; [0xc:2]=0x2211
EOF
RUN

NAME=arm32 pc-relative ldr reads a word
FILE=malloc://64
ARGS=-a arm -b 32
CMDS=<<EOF
wx 04009fe50000000000000000aabbccdd
pd 1
EOF
EXPECT=<<EOF
            0x00000000      04009fe5       ldr r0, [0x0000000c]        ; [0xc:4]=0xddccbbaa
EOF
RUN

NAME=arm32 pc-relative ldrsb/ldrsh/ldrd refptr follows the access width
FILE=malloc://64
ARGS=-a arm -b 16
CMDS=<<EOF
wx 9ff90400bff90400dfe90201000000001122334455667788
pd 3
e asm.esil=true
ao~refptr
s 4
ao~refptr
s 8
ao~refptr
EOF
EXPECT=<<EOF
            0x00000000      9ff90400       ldrsb.w r0, [0x00000008]    ; [0x8:1]=223
            0x00000004      bff90400       ldrsh.w r0, [0x0000000c]    ; [0xc:2]=0
            0x00000008      dfe90201       ldrd r0, r1, [0x00000014]   ; [0x14:8]=0x88776655
refptr: 1
refptr: 2
refptr: 8
EOF
RUN

NAME=arm32 pc-relative ldrb/ldrh/ldrd with negative offset refptr follows the access width
FILE=malloc://64
ARGS=-a arm -b 16
CMDS=<<EOF
wx 11223344556677881ff808003ff80c005fe90401
s 8
pd 3
e asm.esil=true
ao~refptr
s 0xc
ao~refptr
s 0x10
ao~refptr
EOF
EXPECT=<<EOF
            0x00000008      1ff80800       ldrb.w r0, [0x00000004]     ; [0x4:1]=85
            0x0000000c      3ff80c00       ldrh.w r0, [0x00000004]     ; [0x4:2]=0x6655
            0x00000010      5fe90401       ldrd r0, r1, [0x00000004]   ; [0x4:8]=0x8f81f88776655
refptr: 1
refptr: 2
refptr: 8
EOF
RUN

NAME=arm32 pc-relative ldrd shows both words of the 8-byte literal
FILE=malloc://64
ARGS=-a arm -b 16
CMDS=<<EOF
wx dfe90201000000000000000011223344aabbccdd
pd 1
EOF
EXPECT=<<EOF
            0x00000000      dfe90201       ldrd r0, r1, [0x0000000c]   ; [0xc:8]=0xddccbbaa44332211
EOF
RUN
