NAME=1: ahi none
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4881ec48060000
pi 1
EOF
EXPECT=<<EOF
sub rsp, 0x648
EOF
RUN

NAME=ahi with colors
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
e asm.bytes=true
e scr.color=1
wx 4881ec48060000
pd 1
ahi 10
pd 1
EOF
EXPECT=<<EOF
            [32m[7m0x00000000[0m      [33m48[37m81[37mec[33m48[37m06[32m00[37m.[0m  [33msub[0m[37m   [0m[36mrsp[0m[37m, [0m[33m0x648[0m[0m[0m
            [32m[7m0x00000000[0m      [33m48[37m81[37mec[33m48[37m06[32m00[37m.[0m  [33msub[0m[37m   [0m[36mrsp[0m[37m, [0m[33m1608[0m[0m[0m
EOF
RUN

NAME=ahi 0x41 -> 'A'
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4881ec48060000
wx 4883f841 # cmp rax, 0x41
pi 1
ahi s
pi 1
EOF
EXPECT=<<EOF
cmp rax, 0x41
cmp rax, 'A'
EOF
RUN

NAME=ahi 0xe -> 1
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4881ec48060000
wx 4883f80e # cmp rax, 0xe
pi 1
ahi 2
pi 1
EOF
EXPECT=<<EOF
cmp rax, 0x0e
cmp rax, 1110b
EOF
RUN

NAME=ahi 4 -> 1
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4881ec48060000
wx 4883f804 # cmp rax, 4
pi 1
ahi 2
pi 1
EOF
EXPECT=<<EOF
cmp rax, 0x04
cmp rax, 100b
EOF
RUN

NAME=2: ahi none
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
e asm.bytes=true
wx 4881ec48060000
pd 1
EOF
EXPECT=<<EOF
            0x00000000      4881ec480600.  sub   rsp, 0x648
EOF
RUN

NAME=3: ahi none
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
e asm.bytes=true
ahi 16
wx 4881ec48060000
pd 1
EOF
EXPECT=<<EOF
            0x00000000      4881ec480600.  sub   rsp, 0x648
EOF
RUN

NAME=1: ahi 10
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
e asm.bytes=true
wx 4881ec48060000
ahi 10
pd 1
EOF
EXPECT=<<EOF
            0x00000000      4881ec480600.  sub   rsp, 1608
EOF
RUN

NAME=ahi 8
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
e asm.bytes=true
wx 4881ec48060000
ahi 8
pd 1
EOF
EXPECT=<<EOF
            0x00000000      4881ec480600.  sub   rsp, 03110
EOF
RUN

NAME=1: ahi 2
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
e asm.bytes=true
wx 4881ec48060000
ahi 2
pd 1
EOF
EXPECT=<<EOF
            0x00000000      4881ec480600.  sub   rsp, 11001001000b
EOF
RUN

NAME=ahi 2 - pi
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4881ec48060000
ahi 2
pi 1
EOF
EXPECT=<<EOF
sub rsp, 11001001000b
EOF
RUN

NAME=2: ahi 2
FILE=malloc://16
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4883e4f0
ahi 2
pi 1
EOF
EXPECT=<<EOF
and rsp, 1111111111111111111111111111111111111111111111111111111111110000b
EOF
RUN

NAME=2: ahi 10
FILE=malloc://16
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4883e4f0
ahi 10
pi 1
EOF
EXPECT=<<EOF
and rsp, -16
EOF
RUN

NAME=1: ahi s
FILE=malloc://16
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx b841414141
ahi s
pi 1
EOF
EXPECT=<<EOF
mov eax, 'AAAA'
EOF
RUN

NAME=ahl
FILE=malloc://16
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 4883e4f0
ahi 10 @ 0x00404879
ahl
EOF
EXPECT=<<EOF
 0x00404879 => immbase=10
EOF
RUN

NAME=ahl.
FILE=malloc://16
CMDS=<<EOF
ahi 10 @ 0x8
s 0x8
ahl.
EOF
EXPECT=<<EOF
 0x00000008 => immbase=10
EOF
RUN

NAME=64bit ahi 10
FILE==
ARGS=-m 0x100001000
CMDS=<<EOF
e io.va
e asm.sub.rel=false
e asm.bytes=true
e asm.hint.lea=false
e asm.arch=x86
e asm.bits=64
e io.va=true
wx c7055f44000000000000
pd 1
e asm.sub.rel=true; pd 1
ahi 10; pd 1
EOF
EXPECT=<<EOF
true
            0x100001000      c7055f440000.  mov   dword [rip+0x445f], 0x00 ; [0x100005469:4]=-1
            0x100001000      c7055f440000.  mov   dword [0x100005469], 0x00 ; [0x100005469:4]=-1
            0x100001000      c7055f440000.  mov   dword [4294988905], 0x00 ; [0x100005469:4]=-1
EOF
RUN

NAME=2: ahi s
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
wx 67c744246864616572
pi 1
ahi s 1
pi 1
EOF
EXPECT=<<EOF
mov dword [esp+0x68], 0x72656164
mov dword [esp+0x68], 'read'
EOF
RUN

NAME=ahi s 2
FILE==
CMDS=<<EOF
wx b868584d56
e asm.arch=x86
e asm.bits=64
ahi s
pi 1
EOF
EXPECT=<<EOF
mov eax, 'VMXh'
EOF
RUN

NAME=ahi s - pd with colors
FILE==
CMDS=<<EOF
e asm.bytes=false
e asm.comments=false
e asm.arch=x86
e asm.bits=64
wx 67c74424681b5b306d
ahi s 1
e scr.color=0
pd 1
e scr.color=1
pd 1
EOF
EXPECT=<<EOF
            0x00000000      mov   dword [esp+0x68], 'm0[\x1b'
            [32m[7m0x00000000[0m      [37mmov[0m[37m   [0m[37mdword[0m[37m [[0m[36mesp[0m[37m+[0m[33m0x68[0m[37m], [0m[33m'm0[\x1b'[0m[0m
EOF
RUN

NAME=ahi nword
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
e asm.bytes=false
wx c7458843c6ff00
pdq 1
ahi 10
pdq 1
ahi-
ahi 10 1
pdq 1
EOF
EXPECT=<<EOF
0x00000000 mov dword [rbp-0x78], 0xffc643
0x00000000 mov dword [rbp-120], 0xffc643
0x00000000 mov dword [rbp-0x78], 16762435
EOF
RUN

NAME=ahi 10 and 10u imm (x86_32)
ARGS=-a x86 -b 32
FILE==
CMDS=<<EOF
e asm.bytes=false
wa "cmp eax, -1"
pd 1
ahi 10
pd 1
ahi 10u
pd 1
EOF
EXPECT=<<EOF
            0x00000000      cmp   eax, 0xffffffff                      ; -1
            0x00000000      cmp   eax, -1
            0x00000000      cmp   eax, 4294967295
EOF
RUN

NAME=ahi 10 and 10u imm (x86_64)
ARGS=-a x86 -b 64
FILE==
CMDS=<<EOF
e asm.bytes=false
wa "cmp eax, -1"
pd 1
ahi 10
pd 1
ahi 10u
pd 1
echo
ah-
wa "cmp rax, -1"
pd 1
ahi 10
pd 1
ahi 10u
pd 1
EOF
EXPECT=<<EOF
            0x00000000      cmp   eax, 0xffffffff                      ; -1
            0x00000000      cmp   eax, -1
            0x00000000      cmp   eax, 4294967295

            0x00000000      cmp   rax, 0xffffffffffffffff
            0x00000000      cmp   rax, -1
            0x00000000      cmp   rax, 18446744073709551615
EOF
RUN

NAME=ahie enum operands
FILE==
CMDS=<<EOF
o malloc://256
td "enum E { SEVEN = 7, EIGHT = 8, MASK = 0x100, WORD = 0xffc643 };"
e asm.arch=x86
e asm.bits=64
e cfg.bigendian=false
s 0
wx 4180fc07
ahie E
pi 1
ahie-
pi 1
wx 4883f803
ahie E
pi 1
s 0x10
wx c7458843c6ff00
ahie E 1
pdq 1
e asm.arch=arm
e asm.bits=32
e cfg.bigendian=false
s 0x20
wx 0700a0e3
ahie E
pi 1
e asm.arch=arm
e asm.bits=64
s 0x30
wx e00080d2
ahie E
pi 1
e asm.arch=ppc
e asm.bits=32
e cfg.bigendian=true
s 0x40
wx 38600007
ahie E
pi 1
e asm.arch=mips
e asm.bits=32
e cfg.bigendian=true
s 0x50
wx 20020007
ahie E
pi 1
e asm.arch=8051
e asm.bits=8
s 0x60
wx 7407
ahie E
pi 1
e asm.arch=tricore
e asm.bits=32
e cfg.bigendian=true
s 0x70
wx 8f005001
ahie E
pi 1
e asm.arch=hexagon
e asm.bits=32
e cfg.bigendian=false
s 0x80
wx 01c09da0
ahie E
pi 1
EOF
EXPECT=<<EOF
cmp r12b, E.SEVEN
cmp r12b, 0x07
cmp rax, 0x03
0x00000010 mov dword [rbp-0x78], E.WORD
mov r0, E.SEVEN
mov x0, E.SEVEN
li r3, E.SEVEN
addi v0, zero, E.SEVEN
mov a, #E.SEVEN
or d0, d0, #E.MASK
[   allocframe(SP,#E.EIGHT):raw
EOF
RUN

NAME=ahie flag enum OR operands
FILE==
CMDS=<<EOF
o malloc://256
td "enum access_def { F_OK = 0, X_OK = 1, W_OK = 2, R_OK = 4 };"
e asm.arch=x86
e asm.bits=64
e cfg.bigendian=false
s 0
wx b806000000
ahie access_def
pi 1
s 0x10
wx b804000000
ahie access_def
pi 1
s 0x20
wx b808000000
ahie access_def
pi 1
EOF
EXPECT=<<EOF
mov eax, access_def.W_OK | access_def.R_OK
mov eax, access_def.R_OK
mov eax, 0x08
EOF
RUN
