NAME=arm64 cls
FILE=malloc://0x100
ARGS=-aarm -b64
CMDS=<<EOF
wx 6214c0da
aezi
?e -- 0x00800000
ar x3=0x00800000
aezs
ar x2
?e -- 0xffffffffff800000
ar pc=0
ar x3=0xffffffffff800000
aezs
ar x2
?e -- 0xffffffffffffffff
ar pc=0
ar x3=0xffffffffffffffff
aezs
ar x2
?e -- 0x0
ar pc=0
ar x3=0x0
aezs
ar x2
EOF
EXPECT=<<EOF
-- 0x00800000
x2 = 0x00000027
-- 0xffffffffff800000
x2 = 0x00000028
-- 0xffffffffffffffff
x2 = 0x0000003f
-- 0x0
x2 = 0x0000003f
EOF
RUN

NAME=arm clz
FILE=malloc://0x100
ARGS=-aarm -b64
CMDS=<<EOF
wx 6210c0da
aezi
?e -- 0x00800000
ar x3=0x00800000
aezs
ar x2
?e -- 0xffffffffff800000
ar pc=0
ar x3=0xffffffffff800000
aezs
ar x2
?e -- 0xffffffffffffffff
ar pc=0
ar x3=0xffffffffffffffff
aezs
ar x2
?e -- 0x0
ar pc=0
ar x3=0x0
aezs
ar x2
EOF
EXPECT=<<EOF
-- 0x00800000
x2 = 0x00000028
-- 0xffffffffff800000
x2 = 0x00000000
-- 0xffffffffffffffff
x2 = 0x00000000
-- 0x0
x2 = 0x00000040
EOF
RUN

NAME=arm64 sdiv 64-bit
FILE=malloc://0x100
ARGS=-aarm -b64
CMDS=<<EOF
wx 200cc29a
aezi
ar x1=42
ar x2=5
?e -- 42 / 5
aezs
ar x0
?e -- 42 / 0
ar pc=0
ar x1=42
ar x2=0
aezs
ar x0
?e -- 0 / 0
ar pc=0
ar x1=0
ar x2=0
aezs
ar x0
?e -- -2^63 / -1
ar pc=0
ar x1=0x8000000000000000
ar x2=0xffffffffffffffff
aezs
ar x0
?e -- -42 / 5
ar pc=0
ar x1=0xffffffffffffffd6
ar x2=5
aezs
ar x0
?e -- -42 / -5
ar pc=0
ar x1=0xffffffffffffffd6
ar x2=0xfffffffffffffffb
aezs
ar x0
EOF
EXPECT=<<EOF
-- 42 / 5
x0 = 0x00000008
-- 42 / 0
x0 = 0x00000000
-- 0 / 0
x0 = 0x00000000
-- -2^63 / -1
x0 = 0x8000000000000000
-- -42 / 5
x0 = 0xfffffffffffffff8
-- -42 / -5
x0 = 0x00000008
EOF
RUN

NAME=arm64 sdiv 32-bit
FILE=malloc://0x100
ARGS=-aarm -b64
CMDS=<<EOF
wx 200cc21a
aezi
ar x1=42
ar x2=5
?e -- 42 / 5
aezs
ar x0
?e -- 42 / 0
ar pc=0
ar x1=42
ar x2=0
aezs
ar x0
?e -- 0 / 0
ar pc=0
ar x1=0
ar x2=0
aezs
ar x0
?e -- -2^31 / -1
ar pc=0
ar x1=0x80000000
ar x2=0xffffffff
aezs
ar x0
?e -- -42 / 5
ar pc=0
ar x1=0xffffffd6
ar x2=5
aezs
ar x0
?e -- -42 / -5
ar pc=0
ar x1=0xffffffd6
ar x2=0xfffffffb
aezs
ar x0
EOF
EXPECT=<<EOF
-- 42 / 5
x0 = 0x00000008
-- 42 / 0
x0 = 0x00000000
-- 0 / 0
x0 = 0x00000000
-- -2^31 / -1
x0 = 0x80000000
-- -42 / 5
x0 = 0xfffffff8
-- -42 / -5
x0 = 0x00000008
EOF
RUN

NAME=arm udiv 64-bit
FILE=malloc://0x100
ARGS=-aarm -b64
CMDS=<<EOF
wx 0008c19a
aezi
ar x0=42
ar x1=5
?e -- 42 / 5
aezs
ar x0
?e -- 42 / 0
ar pc=0
ar x0=42
ar x1=0
aezs
ar x0
?e -- 0 / 0
ar pc=0
ar x0=0
ar x1=0
aezs
ar x0
?e -- -2^31 / -1
ar pc=0
ar x0=0x8000000000000000
ar x1=0xffffffffffffffff
aezs
ar x0
?e -- -42 / 5
ar pc=0
ar x0=0xffffffffffffffd6
ar x1=5
aezs
ar x0
?e -- -42 / -5
ar pc=0
ar x0=0xffffffffffffffd6
ar x1=0xfffffffffffffffb
aezs
ar x0
EOF
EXPECT=<<EOF
-- 42 / 5
x0 = 0x00000008
-- 42 / 0
x0 = 0x00000000
-- 0 / 0
x0 = 0x00000000
-- -2^31 / -1
x0 = 0x00000000
-- -42 / 5
x0 = 0x333333333333332a
-- -42 / -5
x0 = 0x00000000
EOF
RUN

NAME=arm udiv 32-bit
FILE=malloc://0x100
ARGS=-aarm -b64
CMDS=<<EOF
wx 0008c11a
aezi
ar x0=42
ar x1=5
?e -- 42 / 5
aezs
ar x0
?e -- 42 / 0
ar pc=0
ar x0=42
ar x1=0
aezs
ar x0
?e -- 0 / 0
ar pc=0
ar x0=0
ar x1=0
aezs
ar x0
?e -- -2^31 / -1
ar pc=0
ar x0=0x80000000
ar x1=0xffffffff
aezs
ar x0
?e -- -42 / 5
ar pc=0
ar x0=0xffffffd6
ar x1=5
aezs
ar x0
?e -- -42 / -5
ar pc=0
ar x0=0xffffffd6
ar x1=0xfffffffb
aezs
ar x0
EOF
EXPECT=<<EOF
-- 42 / 5
x0 = 0x00000008
-- 42 / 0
x0 = 0x00000000
-- 0 / 0
x0 = 0x00000000
-- -2^31 / -1
x0 = 0x00000000
-- -42 / 5
x0 = 0x3333332a
-- -42 / -5
x0 = 0x00000000
EOF
RUN

NAME=emulateme arm64
FILE=bins/elf/emulateme.arm64
TIMEOUT=30
CMDS=<<EOF
s sym.decrypt
o malloc://0x1000 0x40000
o malloc://0x10 0x50000
# oC 0x10 @ obj.seckrit # TODO: does not work
e io.cache=1 # TODO: replace this by oC above
w AnyColourYouLike @ 0x50000
ar sp=0x41000
ar x0=0x50000
aezi
aezsu 0x914
ps @ obj.seckrit
EOF
EXPECT=<<EOF
Hello from RzIL!
EOF
RUN
