code="add x1, x2, x3"           x1=q:0x0 x2=q:0x12345678 x3=q:0x76543210 => x1=q:0x88888888
code="add x1, x2, x3, lsl #8"   x1=q:0x0 x2=q:0x0        x3=q:0xff       => x1=q:0xff00
code="add x1, x2, x3, lsr #8"   x1=q:0x0 x2=q:0x0        x3=q:0xff00     => x1=q:0x00ff
code="add x1, x2, x3, asr #8"   x1=q:0x0 x2=q:0x0        x3=q:0xff00     => x1=q:0x00ff
code="add sp, x4, #48"          sp=q:0x0 x4=q:0x0                        => sp=q:0x30

code="adds x0, x1, #1, lsl #12" x0=q:0x0 x1=q:0x1                   n=00 z=00 c=00 v=00 => x0=q:0x1001         n=00 z=00 c=00 v=00
code="adds w0, w1, w2"          x0=q:0x0 x1=q:2147483647  x2=q:1    n=00 z=00 c=00 v=00 => x0=0000008000000000 n=01 z=00 c=00 v=01

code="sub x1, x2, x3"           x1=q:0x0 x2=q:100 x3=q:90       => x1=q:10
code="sub x1, x2, x3, lsl #8"   x1=q:0x0 x2=q:257 x3=q:1        => x1=q:1
code="sub x1, x2, x3, lsr #8"   x1=q:0x0 x2=q:2   x3=q:256      => x1=q:1
code="sub x1, x2, x3, asr #8"   x1=q:0x0 x2=q:0   x3=q:-1024    => x1=q:4
code="sub sp, x4, #48"          sp=q:0x0 x4=q:64                => sp=q:16

code="cmp x1, x2" x1=q:0  x2=q:0 n=00 z=00 c=00 v=00 => n=00 z=01 c=01 v=00
code="cmp x1, x2" x1=q:0  x2=q:1 n=00 z=00 c=00 v=00 => n=01 z=00 c=00 v=00
code="cmp x1, x2" x1=q:1  x2=q:0 n=00 z=00 c=00 v=00 => n=00 z=00 c=01 v=00
code="cmp x1, x2" x1=q:-1 x2=q:0 n=00 z=00 c=00 v=00 => n=01 z=00 c=01 v=00
code="cmp x1, x2" x1=q:-1 x2=q:1 n=00 z=00 c=00 v=00 => n=01 z=00 c=01 v=00

code="cmn x1, x2" x1=q:0  x2=q:0 n=00 z=00 c=00 v=00 => n=00 z=01 c=00 v=00
code="cmn x1, x2" x1=q:0  x2=q:1 n=00 z=00 c=00 v=00 => n=00 z=00 c=00 v=00
code="cmn x1, x2" x1=q:1  x2=q:0 n=00 z=00 c=00 v=00 => n=00 z=00 c=00 v=00
code="cmn x1, x2" x1=q:-1 x2=q:0 n=00 z=00 c=00 v=00 => n=01 z=00 c=00 v=00
code="cmn x1, x2" x1=q:-1 x2=q:1 n=00 z=00 c=00 v=00 => n=00 z=01 c=01 v=00

code="mov w0, w1" x0=q:0x0 x1=aabbccddffffffff => x0=aabbccdd00000000
code="mov x0, x1" x0=q:0x0 x1=ffffffffffffffff => x0=ffffffffffffffff
code="mov wsp, w1" sp=q:0x0 x1=aabbccddffffffff => sp=aabbccdd00000000
code="mov x0, sp"  x0=q:0x0 sp=ffffffffffffffff => x0=ffffffffffffffff
code="mvn x0, x1" x0=q:0x0 x1=fff0fff00fff00ff => x0=000f000ff000ff00
code="mvn x0, x1, lsr 8" x1=q:0x1122334455667788 => x0=q:0xffeeddccbbaa9988

code="mov w0, #1234"   x0=q:0x0            => x0=q:1234
code="mov w0, #0xffff" x0=q:0x0            => x0=ffff000000000000
code="mov w0, #0xffff" x0=f0f0f0f0f0f0f0f0 => x0=ffff000000000000
code="mov x0, #0xffff" x0=f0f0f0f0f0f0f0f0 => x0=ffff000000000000

code="movn x0, #0"     x0=q:0              => x0=q:-1
code="movn w0, #0"     x0=q:0              => x0=ffffffff00000000
code="movn x0, #0xaaaa, lsl #32" x0=q:0    => x0=q:0xffff5555ffffffff
code="movz w0, #0xfaf, lsl #16"  x0=q:0    => x0=q:0xfaf0000
code="movk x0, #0x11"          x0=q:0xaaaaaaaaaaaaaaaa => x0=q:0xaaaaaaaaaaaa0011
code="movk x0, #0x11, lsl #16" x0=q:0xaaaaaaaaaaaaaaaa => x0=q:0xaaaaaaaa0011aaaa

# XXX cannot test adrp: test_assembler: [...]: Assertion `false && "relocations not supported"' failed.
# This reads "adrp x0, imm=0"
code=".4byte 0x90000000"            => x0=q:0x1000000
# The lowest 12 bits are always zero.
code="mov x0, 0; .4byte 0x90000000" => x0=q:0x1000000
# This reads "adrp x0, imm=1"
code=".4byte 0xb0000000"            => x0=q:0x1001000
# This reads "adrp x0, imm=0xae"
code=".4byte 0xd0000560"            => x0=q:0x10ae000
code="mov x0, 0; .4byte 0xb0000000" => x0=q:0x1001000
code="adr x0, ."         => x0=q:0x1000000
code="adr x0, foo; foo:" => x0=q:0x1000004
code="adr x0, ."         x0=q:0x0 => x0=q:0x1000000
code="adr x0, foo; foo:" x0=q:0x0 => x0=q:0x1000004

code="and x0, x0, #0xff"   x0=q:0xaabb => x0=q:0xbb
code="orr x0, x0, #0x100"  x0=q:0x0    => x0=q:0x100
code="eor w0, w0, #1"      x0=q:0x1    => x0=q:0x0
code="ands x0, x0, #1"     x0=q:0x0        n=00 z=00 c=00 v=00 => x0=q:0x0 n=00 z=01 c=00 v=00
code="tst w0, #0xffff0000" x0=q:0xffff0000 n=00 z=00 c=00 v=00 => n=01 z=00 c=00 v=00

code="and x0, x1, x2"  x0=q:0x0 x1=q:0xaabb     x2=q:0xff  => x0=q:0xbb
code="bic x0, x1, x2"  x0=q:0x0 x1=q:0xaabb     x2=q:0xff  => x0=q:0xaa00
code="orr x0, x1, x2"  x0=q:0x0 x1=q:0x0        x2=q:0x100 => x0=q:0x100
code="orn x0, x1, x2"  x0=q:0x0 x1=q:0x0        x2=q:0x100 => x0=q:0xfffffffffffffeff
code="eor w0, w1, w2"  x0=q:0x0 x1=q:0x1        x2=q:0x1   => x0=q:0x0
code="eon w0, w1, w2"  x0=q:0x0 x1=q:0x1        x2=q:0x1   => x0=q:0xffffffff
code="ands w0, w1, w2" x0=q:0x0 x1=q:0x0        x2=q:0x1        n=00 z=00 c=00 v=00 => x0=q:0x0 n=00 z=01 c=00 v=00
code="tst w1, w2"               x1=q:0xffff0000 x2=q:0xffff0000 n=00 z=00 c=00 v=00 => n=01 z=00 c=00 v=00

code="udiv x0, x1, x2" x0=q:0 x1=q:100 x2=q:25  => x0=q:4
code="udiv w0, w1, w2" x0=q:0 x1=q:301 x2=q:12  => x0=q:25
code="sdiv x0, x1, x2" x0=q:0 x1=q:100 x2=q:-25 => x0=q:-4
code="sdiv w0, w1, w2" x0=q:0 x1=q:-301 x2=q:12 => x0=e7ffffff00000000
code="udiv x0, x1, x2" x0=q:1 x1=q:100 x2=q:0                   => x0=q:0
code="sdiv w0, w1, w2" x0=q:0 x1=q:-2147483648 x2=q:-1          => x0=0000008000000000
code="sdiv x0, x1, x2" x0=q:0 x1=q:-9223372036854775808 x2=q:-1 => x0=q:-9223372036854775808

code="lslv x0, x1, x2" x0=q:0 x1=q:0xff x2=q:8  => x0=q:0xff00
code="lslv x0, x1, x2" x0=q:0 x1=q:0xff x2=q:63 => x0=q:0x8000000000000000
code="lslv x0, x1, x2" x0=q:0 x1=q:0xff x2=q:72 => x0=q:0xff00
code="lslv w0, w1, w2" x0=q:0 x1=q:0xff x2=q:31 => x0=q:0x80000000
code="lslv w0, w1, w2" x0=q:0 x1=q:0xff x2=q:36 => x0=q:0xff0

code="lsrv x0, x1, x2" x0=q:0 x1=q:0xff               x2=q:4  => x0=q:0xf
code="lsrv x0, x1, x2" x0=q:0 x1=q:0xff00000000000000 x2=q:63 => x0=q:0x1
code="lsrv x0, x1, x2" x0=q:0 x1=q:0xff00000000000000 x2=q:72 => x0=q:0x00ff000000000000
code="lsrv w0, w1, w2" x0=q:0 x1=q:0xff000000         x2=q:31 => x0=q:0x1
code="lsrv w0, w1, w2" x0=q:0 x1=q:0xff000000         x2=q:36 => x0=q:0x0ff00000

code="asrv x0, x1, x2" x0=q:0 x1=q:0xff               x2=q:4  => x0=q:0xf
code="asrv x0, x1, x2" x0=q:0 x1=q:0xff00000000000000 x2=q:63 => x0=q:-1
code="asrv x0, x1, x2" x0=q:0 x1=q:0xff00000000000000 x2=q:72 => x0=q:0xffff000000000000
code="asrv w0, w1, w2" x0=q:0 x1=q:0xff000000         x2=q:31 => x0=ffffffff00000000
code="asrv w0, w1, w2" x0=q:0 x1=q:0xff000000         x2=q:36 => x0=q:0xfff00000

# Without +jit: LLVM ERROR: Code generator does not support intrinsic function 'llvm.fshr.i64'!
+jit code="rorv x0, x1, x2" x0=q:0 x1=q:0xff               x2=q:4  => x0=q:0xf00000000000000f
+jit code="rorv x0, x1, x2" x0=q:0 x1=q:0xff00000000000000 x2=q:63 => x0=q:0xfe00000000000001
+jit code="rorv x0, x1, x2" x0=q:0 x1=q:0xff00000000000000 x2=q:72 => x0=q:0x00ff000000000000
+jit code="rorv w0, w1, w2" x0=q:0 x1=q:0xff000000         x2=q:31 => x0=q:0xfe000001
+jit code="rorv w0, w1, w2" x0=q:0 x1=q:0xff000000         x2=q:36 => x0=q:0x0ff00000

code="lsl x0, x1, #8"  x0=q:0 x1=q:0xff => x0=q:0xff00
code="lsl x0, x1, #63" x0=q:0 x1=q:0xff => x0=q:0x8000000000000000
code="lsl w0, w1, #31" x0=q:0 x1=q:0xff => x0=q:0x80000000
code="lsl w0, w1, #4"  x0=q:0 x1=q:0xff => x0=q:0xff0

code="lsr x0, x1, #4"  x0=q:0 x1=q:0xff               => x0=q:0xf
code="lsr x0, x1, #63" x0=q:0 x1=q:0xff00000000000000 => x0=q:0x1
code="lsr x0, x1, #8"  x0=q:0 x1=q:0xff00000000000000 => x0=q:0x00ff000000000000
code="lsr w0, w1, #31" x0=q:0 x1=q:0xff000000         => x0=q:0x1
code="lsr w0, w1, #4"  x0=q:0 x1=q:0xff000000         => x0=q:0x0ff00000

code="asr x0, x1, #4"  x0=q:0 x1=q:0xff               => x0=q:0xf
code="asr x0, x1, #62" x0=q:0 x1=q:0xff00000000000000 => x0=q:-1
code="asr x0, x1, #8"  x0=q:0 x1=q:0xff00000000000000 => x0=q:0xffff000000000000
code="asr w0, w1, #31" x0=q:0 x1=q:0xff000000         => x0=ffffffff00000000
code="asr w0, w1, #4"  x0=q:0 x1=q:0xff000000         => x0=q:0xfff00000

# See above for +jit (LLVM ERROR)
+jit code="ror x0, x1, #4"  x0=q:0 x1=q:0xff               x2=q:4  => x0=q:0xf00000000000000f
+jit code="ror x0, x1, #63" x0=q:0 x1=q:0xff00000000000000 x2=q:63 => x0=q:0xfe00000000000001
+jit code="ror x0, x1, #8"  x0=q:0 x1=q:0xff00000000000000 x2=q:72 => x0=q:0x00ff000000000000
+jit code="ror w0, w1, #31" x0=q:0 x1=q:0xff000000         x2=q:31 => x0=q:0xfe000001
+jit code="ror w0, w1, #4"  x0=q:0 x1=q:0xff000000         x2=q:36 => x0=q:0x0ff00000

code="bfc x0, #4, #8"   x0=q:0xffffffffffffffff => x0=q:0xfffffffffffff00f
code="bfc x0, #1, #1"   x0=q:0xffffffffffffffff => x0=q:0xfffffffffffffffd
code="bfc x0, #32, #32" x0=q:0xffffffffffffffff => x0=q:0x00000000ffffffff
code="bfc w0, #4, #8"   x0=q:0xffffffff => x0=q:0xfffff00f
code="bfc w0, #1, #1"   x0=q:0xffffffff => x0=q:0xfffffffd
code="bfc w0, #16, #16" x0=q:0xffffffff => x0=q:0x0000ffff

code="bfi x0, x1, #4, #20"  x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xffffffffff0abcdf
code="bfi x0, x1, #4, #8"   x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xfffffffffffffcdf
code="bfi x0, x1, #32, #32" x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0x0000abcdffffffff
code="bfi w0, w1, #4, #20"  x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xff0abcdf
code="bfi w0, w1, #4, #4"   x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xffffffdf
code="bfi w0, w1, #16, #16" x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xabcdffff

code="bfxil x0, x1, #4, #16"  x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xffffffffffff0abc
code="bfxil x0, x1, #8, #8"   x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xffffffffffffffab
code="bfxil w0, w1, #4, #16"  x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xffff0abc
code="bfxil w0, w1, #4, #4"   x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xfffffffc
code="bfxil w0, w1, #16, #16" x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xffff0000

code="ubfiz x0, x1, #4, #20"  x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0x0abcd0
code="ubfiz x0, x1, #4, #8"   x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xcd0
code="ubfiz x0, x1, #32, #32" x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0x0000abcd00000000
code="ubfiz w0, w1, #4, #20"  x0=q:0xffffffff x1=q:0x0abcd => x0=q:0x000abcd0
code="ubfiz w0, w1, #4, #4"   x0=q:0xffffffff x1=q:0x0abcd => x0=q:0x000000d0
code="ubfiz w0, w1, #16, #16" x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xabcd0000

code="ubfx x0, x1, #4, #16"  x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0x0abc
code="ubfx x0, x1, #8, #8"   x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xab
code="ubfx w0, w1, #4, #16"  x0=q:0xffffffff x1=q:0x0abcd => x0=q:0x0abc
code="ubfx w0, w1, #4, #4"   x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xc
code="ubfx w0, w1, #16, #16" x0=q:0xffffffff x1=q:0x0abcd => x0=q:0x0000

code="sbfiz x0, x1, #4, #16"  x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xfffffffffffabcd0
code="sbfiz x0, x1, #4, #8"   x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xfffffffffffffcd0
code="sbfiz x0, x1, #32, #32" x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0x0000abcd00000000
code="sbfiz w0, w1, #4, #16"  x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xfffabcd0
code="sbfiz w0, w1, #4, #4"   x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xffffffd0
code="sbfiz w0, w1, #16, #16" x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xabcd0000

code="sbfx x0, x1, #4, #12"  x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xfffffffffffffabc
code="sbfx x0, x1, #8, #8"   x0=q:0xffffffffffffffff x1=q:0x0abcd => x0=q:0xffffffffffffffab
code="sbfx w0, w1, #4, #16"  x0=q:0xffffffff x1=q:0x0abcd => x0=q:0x0abc
code="sbfx w0, w1, #4, #4"   x0=q:0xffffffff x1=q:0x0abcd => x0=q:0xfffffffc
code="sbfx w0, w1, #16, #16" x0=q:0xffffffff x1=q:0x0abcd => x0=q:0x0000

code="sxtb w0, w1" x0=q:0 x1=q:0xff       => x0=q:0xffffffff
code="sxtb x0, w1" x0=q:0 x1=q:0xff       => x0=q:0xffffffffffffffff
code="sxth w0, w1" x0=q:0 x1=q:0xffff     => x0=q:0xffffffff
code="sxth x0, w1" x0=q:0 x1=q:0xffff     => x0=q:0xffffffffffffffff
code="sxtw x0, w1" x0=q:0 x1=q:0xffffffff => x0=q:-1
code="sxtb w0, w1" x0=q:0 x1=q:0x7f       => x0=q:0x7f
code="sxtb x0, w1" x0=q:0 x1=q:0x7f       => x0=q:0x7f
code="sxth w0, w1" x0=q:0 x1=q:0x7fff     => x0=q:0x7fff
code="sxth x0, w1" x0=q:0 x1=q:0x7fff     => x0=q:0x7fff
code="sxtw x0, w1" x0=q:0 x1=q:0x7fffffff => x0=q:0x7fffffff

code="uxtb w0, w1" x0=q:0 x1=q:0xaaff       => x0=q:0xff
code="uxth w0, w1" x0=q:0 x1=q:0xaaffff     => x0=q:0xffff

code="clz w0, w1" x0=q:0 x1=q:0                  => x0=q:32
code="clz x0, x1" x0=q:0 x1=q:0                  => x0=q:64
code="clz w0, w1" x0=q:0 x1=q:0x1ff              => x0=q:23
code="clz w0, w1" x0=q:0 x1=q:0xffffffff         => x0=q:0
code="clz x0, x1" x0=q:0 x1=q:0x1ff              => x0=q:55
code="clz x0, x1" x0=q:0 x1=q:0xffffffffffffffff => x0=q:0
code="clz x1, x2" x2=q:0xffffffffffffffff        => x1=q:0x00
code="clz x1, x2" x2=q:0x0000000000000000        => x1=q:0x40
code="clz x1, x2" x2=q:0x0070ffff01ffffff        => x1=q:0x09
code="clz w1, w2" x2=q:0xffffffffffffffff        => x1=q:0x00
code="clz w1, w2" x2=q:0x0000000000000000        => x1=q:0x20
code="clz w1, w2" x2=q:0x0070ffff01ffffff        => x1=q:0x07

code="cls x1, x2" x2=q:0x0fffffffffffffff => x1=q:0x03
code="cls x1, x2" x2=q:0x1fffffffffffffff => x1=q:0x02
code="cls x1, x2" x2=q:0x2fffffffffffffff => x1=q:0x01
code="cls x1, x2" x2=q:0x3fffffffffffffff => x1=q:0x01
code="cls x1, x2" x2=q:0x4fffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0x5fffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0x6fffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0x7fffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0x8fffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0x9fffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0xafffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0xbfffffffffffffff => x1=q:0x00
code="cls x1, x2" x2=q:0xcfffffffffffffff => x1=q:0x01
code="cls x1, x2" x2=q:0xdfffffffffffffff => x1=q:0x01
code="cls x1, x2" x2=q:0xefffffffffffffff => x1=q:0x02
code="cls x1, x2" x2=q:0xffffffffffffffff => x1=q:0x3f
code="cls x1, x2" x2=q:0xfffffffffffffff0 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff1 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff2 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff3 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff4 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff5 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff6 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff7 => x1=q:0x3b
code="cls x1, x2" x2=q:0xfffffffffffffff8 => x1=q:0x3c
code="cls x1, x2" x2=q:0xfffffffffffffff9 => x1=q:0x3c
code="cls x1, x2" x2=q:0xfffffffffffffffa => x1=q:0x3c
code="cls x1, x2" x2=q:0xfffffffffffffffb => x1=q:0x3c
code="cls x1, x2" x2=q:0xfffffffffffffffc => x1=q:0x3d
code="cls x1, x2" x2=q:0xfffffffffffffffd => x1=q:0x3d
code="cls x1, x2" x2=q:0xfffffffffffffffe => x1=q:0x3e
code="cls x1, x2" x2=q:0xffffffffffffffff => x1=q:0x3f
code="cls x1, x2" x2=q:0x0000000000000000 => x1=q:0x3f
code="cls x1, x2" x2=q:0x1000000000000000 => x1=q:0x02
code="cls x1, x2" x2=q:0x2000000000000000 => x1=q:0x01
code="cls x1, x2" x2=q:0x3000000000000000 => x1=q:0x01
code="cls x1, x2" x2=q:0x4000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0x5000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0x6000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0x7000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0x8000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0x9000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0xa000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0xb000000000000000 => x1=q:0x00
code="cls x1, x2" x2=q:0xc000000000000000 => x1=q:0x01
code="cls x1, x2" x2=q:0xd000000000000000 => x1=q:0x01
code="cls x1, x2" x2=q:0xe000000000000000 => x1=q:0x02
code="cls x1, x2" x2=q:0xf000000000000000 => x1=q:0x03
code="cls x1, x2" x2=q:0x0000000000000000 => x1=q:0x3f
code="cls x1, x2" x2=q:0x0000000000000001 => x1=q:0x3e
code="cls x1, x2" x2=q:0x0000000000000002 => x1=q:0x3d
code="cls x1, x2" x2=q:0x0000000000000003 => x1=q:0x3d
code="cls x1, x2" x2=q:0x0000000000000004 => x1=q:0x3c
code="cls x1, x2" x2=q:0x0000000000000005 => x1=q:0x3c
code="cls x1, x2" x2=q:0x0000000000000006 => x1=q:0x3c
code="cls x1, x2" x2=q:0x0000000000000007 => x1=q:0x3c
code="cls x1, x2" x2=q:0x0000000000000008 => x1=q:0x3b
code="cls x1, x2" x2=q:0x0000000000000009 => x1=q:0x3b
code="cls x1, x2" x2=q:0x000000000000000a => x1=q:0x3b
code="cls x1, x2" x2=q:0x000000000000000b => x1=q:0x3b
code="cls x1, x2" x2=q:0x000000000000000c => x1=q:0x3b
code="cls x1, x2" x2=q:0x000000000000000d => x1=q:0x3b
code="cls x1, x2" x2=q:0x000000000000000e => x1=q:0x3b
code="cls x1, x2" x2=q:0x000000000000000f => x1=q:0x3b
code="cls x1, x2" x2=q:0x0070ffff01ffffff => x1=q:0x08
code="cls w1, w2" x2=q:0xffffffffffffffff => x1=q:0x1f
code="cls w1, w2" x2=q:0xffffffffffffffff => x1=q:0x1f
code="cls w1, w2" x2=q:0xffffffff5fffffff => x1=q:0x00
code="cls w1, w2" x2=q:0xffffffffafffffff => x1=q:0x00
code="cls w1, w2" x2=q:0xffffffff0fffffff => x1=q:0x03
code="cls w1, w2" x2=q:0xffffffffffffffff => x1=q:0x1f
code="cls w1, w2" x2=q:0xfffffffffffffff5 => x1=q:0x1b
code="cls w1, w2" x2=q:0xfffffffffffffffa => x1=q:0x1c
code="cls w1, w2" x2=q:0xfffffffffffffff0 => x1=q:0x1b
code="cls w1, w2" x2=q:0x0000000000000000 => x1=q:0x1f
code="cls w1, w2" x2=q:0x0070ffff01ffffff => x1=q:0x06

code="extr w0, w1, w2, #0"  x0=q:0 x1=89abcdef00000000 x2=0123456700000000 => x0=0123456700000000
code="extr w0, w1, w2, #16" x0=q:0 x1=89abcdef00000000 x2=0123456700000000 => x0=456789ab00000000
code="extr x0, x1, x2, #0"  x0=q:0 x1=89abcdef00000000 x2=0123456700000000 => x0=0123456700000000
code="extr x0, x1, x2, #32" x0=q:0 x1=89abcdef00000000 x2=0123456700000000 => x0=0000000089abcdef

code="mul w0, w1, w2" x0=q:1 x1=q:0                  x2=q:0   => x0=q:0
code="mul w0, w1, w2" x0=q:1 x1=q:640                x2=q:480 => x0=q:307200
code="mul w0, w1, w2" x0=q:1 x1=q:0xffffffff         x2=q:2   => x0=q:0xfffffffe
code="mul x0, x1, x2" x0=q:1 x1=q:0xffffffffffffffff x2=q:2   => x0=q:0xfffffffffffffffe

code="madd w0, w1, w2, w3" x0=q:1 x1=q:0                  x2=q:0   x3=q:100 => x0=q:100
code="madd w0, w1, w2, w3" x0=q:1 x1=q:640                x2=q:480 x3=q:100 => x0=q:307300
code="madd w0, w1, w2, w3" x0=q:1 x1=q:0xffffffff         x2=q:2   x3=q:100 => x0=q:98
code="madd x0, x1, x2, x3" x0=q:1 x1=q:0xffffffffffffffff x2=q:2   x3=q:100 => x0=q:98

code="msub x0, x1, x2, x3" x0=q:1 x1=q:0   x2=q:0   x3=q:100 => x0=q:100
code="msub x0, x1, x2, x3" x0=q:1 x1=q:640 x2=q:480 x3=q:100 => x0=q:-307100
code="msub x0, x1, x2, x3" x0=q:1 x1=q:-1  x2=q:2   x3=q:100 => x0=q:102

code="smaddl x0, w1, w2, x3" x0=q:1 x1=q:0                  x2=q:0   x3=q:0x100000000 => x0=q:0x100000000
code="smaddl x0, w1, w2, x3" x0=q:1 x1=q:0xffffffff         x2=q:2   x3=q:0x100000000 => x0=q:0x0fffffffe
code="umaddl x0, w1, w2, x3" x0=q:1 x1=q:0                  x2=q:0   x3=q:0x100000000 => x0=q:0x100000000
code="umaddl x0, w1, w2, x3" x0=q:1 x1=q:0xffffffff         x2=q:2   x3=q:0x100000000 => x0=q:0x2fffffffe

code="smsubl x0, w1, w2, x3" x0=q:1 x1=q:0          x2=q:0 x3=q:0x100000000 => x0=q:0x100000000
code="smsubl x0, w1, w2, x3" x0=q:1 x1=q:0xffffffff x2=q:2 x3=q:0x100000000 => x0=q:0x100000002
code="umsubl x0, w1, w2, x3" x0=q:1 x1=q:0          x2=q:0 x3=q:0x100000000 => x0=q:0x100000000
code="umsubl x0, w1, w2, x3" x0=q:1 x1=q:0xffffffff x2=q:2 x3=q:0x100000000 => x0=q:0xffffffff00000002

# i128 -2 → all 64 upper bits 1 → x0=q:-1
code="smulh x0, x1, x2" x0=q:1 x1=q:-1 x2=q:2                  => x0=q:-1
# (2^64 - 1) * 2 → 2^65 - 2 → 64th bit set → x0=q:1
code="umulh x0, x1, x2" x0=q:1 x1=q:0xfffffffffffffffff x2=q:2 => x0=q:1

# Without +jit: LLVM ERROR: Code generator does not support intrinsic function 'llvm.bitreverse.i32'!
+jit code="rbit w0, w1" x0=q:0 x1=f0f0f0f000000000 => x0=0f0f0f0f00000000
+jit code="rbit x0, x1" x0=q:0 x1=f0f0f0f0f0f0f0f0 => x0=0f0f0f0f0f0f0f0f

code="rev16 w0, w1" x0=q:0 x1=aabbccddeeff0011 => x0=bbaaddcc00000000
code="rev16 x0, x1" x0=q:0 x1=aabbccddeeff0011 => x0=bbaaddccffee1100
code="rev32 x0, x1" x0=q:0 x1=aabbccddeeff0011 => x0=ddccbbaa1100ffee
code="rev w0, w1" x0=q:0 x1=aabbccddeeff0011 => x0=ddccbbaa00000000
code="rev x0, x1" x0=q:0 x1=aabbccddeeff0011 => x0=1100ffeeddccbbaa

code="adc x1, x2, x3"  x1=q:0x0 x2=q:0x12345678 x3=q:0x76543210 c=00 => x1=q:0x88888888
code="adc x1, x2, x3"  x1=q:0x0 x2=q:0x12345678 x3=q:0x76543210 c=01 => x1=q:0x88888889
code="adcs w0, w1, w2" x0=q:0x0 x1=q:2147483647 x2=q:1 c=01  => x0=0100008000000000 n=01 z=00 c=00 v=01

code="sbc x1, x2, x3"  x1=q:0x0 x2=q:100 x3=q:90 c=00 => x1=q:9
code="sbc w1, w2, w3"  x1=q:0x0 x2=q:100 x3=q:90 c=01 => x1=q:10
code="ngc x1, x2"      x1=q:0x0 x2=q:100 c=01 => x1=q:-100
code="sbcs w1, w2, w3" x1=q:0x0 x2=q:100 x3=q:90 n=00 z=00 c=01 v=00 => x1=q:10 n=00 z=00 c=01 v=00
