#
### Load Register
#

code="ldrb w1, [x2]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0100000000000000
code="ldrsb w1, [x2]" x1=q:0x0 x2=q:0x2000000 m2000000=ff00000000000000 => x1=ffffffff00000000
code="ldrh w1, [x2]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123000000000000
code="ldrsh w1, [x2]" x1=q:0x0 x2=q:0x2000000 m2000000=abff000000000000 => x1=abffffff00000000
code="ldr w1, [x2]"   x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123456700000000
code="ldr x1, [x2]"   x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123456789abcdef
code="ldrsw x1, [x2]" x1=q:0x0 x2=q:0x2000000 m2000000=ab456fff00000000 => x1=ab456fffffffffff

code="ldr b1, [x2]" v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdef =>                 v1=01000000000000000000000000000000
code="ldr h1, [x2]" v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdef =>                 v1=01230000000000000000000000000000
code="ldr s1, [x2]" v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdef =>                 v1=01234567000000000000000000000000
code="ldr d1, [x2]" v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdef =>                 v1=0123456789abcdef0000000000000000
code="ldr q1, [x2]" v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdeffedcba9876543210 => v1=0123456789abcdeffedcba9876543210

code="ldarb w1, [x2]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0100000000000000
code="ldarh w1, [x2]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123000000000000
code="ldar w1, [x2]"   x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123456700000000
code="ldar x1, [x2]"   x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123456789abcdef

code="ldrb w1, [x2, #1]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=2300000000000000
code="ldrh w1, [x2, #4]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=89ab000000000000
code="ldr w1, [x2, #4]"   x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef =>  x1=89abcdef00000000
code="ldr x1, [x2, #8]"   x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdeffedcba9876543210 => x1=fedcba9876543210

code="ldrb w1, [x2, x3, lsl #0]" x1=q:0x0 x2=q:0x2000000 x3=q:0x4 m2000000=0123456789abcdef => x1=8900000000000000
code="ldrh w1, [x2, x3, lsl #1]" x1=q:0x0 x2=q:0x2000000 x3=q:0x2 m2000000=0123456789abcdef => x1=89ab000000000000
code="ldr w1, [x2, x3, lsl #2]"  x1=q:0x0 x2=q:0x2000000 x3=q:0x1 m2000000=0123456789abcdef => x1=89abcdef00000000
code="ldr w1, [x2, x3, lsl #0]"  x1=q:0x0 x2=q:0x2000000 x3=q:0x4 m2000000=0123456789abcdef => x1=89abcdef00000000
code="ldr x1, [x2, x3, lsl #3]"  x1=q:0x0 x2=q:0x2000000 x3=q:0x1 m2000000=0123456789abcdeffedcba9876543210 => x1=fedcba9876543210

code="ldrb w1, [x2, w3, uxtw]"    x1=q:0x0 x2=q:0x2000000 x3=q:0x4 m2000000=0123456789abcdef => x1=8900000000000000
code="ldrh w1, [x2, w3, uxtw #1]" x1=q:0x0 x2=q:0x2000000 x3=q:0x2 m2000000=0123456789abcdef => x1=89ab000000000000
code="ldr w1, [x2, w3, sxtw #2]"  x1=q:0x0 x2=q:0x2000000 x3=q:0x1 m2000000=0123456789abcdef => x1=89abcdef00000000
code="ldr w1, [x2, w3, sxtw #0]"  x1=q:0x0 x2=q:0x2000000 x3=q:0x4 m2000000=0123456789abcdef => x1=89abcdef00000000
code="ldr x1, [x2, w3, uxtw #3]"  x1=q:0x0 x2=q:0x2000000 x3=q:0x1 m2000000=0123456789abcdeffedcba9876543210 => x1=fedcba9876543210

code="ldr w1, [x2, #8]!" x1=q:0x0 x2=q:0x1fffff8 m2000000=0123456789abcdef => x1=0123456700000000 x2=q:0x2000000
code="ldr x1, [x2], #8"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123456789abcdef x2=q:0x2000008

code="foo: ldr w1, foo" x1=q:0x0 => x1=0100001800000000

code="ldurb w1, [x2, #-4]"  x1=q:0x0 x2=q:0x2000004 m2000000=0123456789abcdef => x1=0100000000000000
code="ldursb w1, [x2, #-4]" x1=q:0x0 x2=q:0x2000004 m2000000=ff00000000000000 => x1=ffffffff00000000
code="ldurh w1, [x2, #1]"   x1=q:0x0 x2=q:0x2000004 m2000000=0123456789abcdef => x1=abcd000000000000
code="ldursh w1, [x2, #-4]" x1=q:0x0 x2=q:0x2000004 m2000000=abff000000000000 => x1=abffffff00000000
code="ldur w1, [x2, #-2]"   x1=q:0x0 x2=q:0x2000004 m2000000=0123456789abcdef => x1=456789ab00000000
code="ldur x1, [x2, #-4]"   x1=q:0x0 x2=q:0x2000004 m2000000=0123456789abcdef => x1=0123456789abcdef
code="ldursw x1, [x2, #-3]" x1=q:0x0 x2=q:0x2000004 m2000000=ab456fffff000000 => x1=456fffffffffffff

#
### Store Register
#

code="strb w1, [x2]" x1=q:0x01                   x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0100000000000000
code="strh w1, [x2]" x1=q:0x2301                 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123000000000000
code="str w1, [x2]"  x1=q:0x67452301             x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456700000000
code="str x1, [x2]"  x1=q:0xefcdab8967452301     x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456789abcdef

code="str b1, [x2]" v1=01000000000000000000000000000000 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=01000000000000000000000000000000
code="str h1, [x2]" v1=01230000000000000000000000000000 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=01230000000000000000000000000000
code="str s1, [x2]" v1=01234567000000000000000000000000 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=01234567000000000000000000000000
code="str d1, [x2]" v1=0123456789abcdef0000000000000000 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456789abcdef0000000000000000
code="str q1, [x2]" v1=0123456789abcdeffedcba9876543210 x2=q:0x2000000 m2000000=00000000000000000000000000000000 => m2000000=0123456789abcdeffedcba9876543210

code="stlrb w1, [x2]" x1=q:0x01                   x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0100000000000000
code="stlrh w1, [x2]" x1=q:0x2301                 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123000000000000
code="stlr w1, [x2]"  x1=q:0x67452301             x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456700000000
code="stlr x1, [x2]"  x1=q:0xefcdab8967452301     x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456789abcdef

code="strb w1, [x2, #1]" x1=q:0x23               x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0023000000000000
code="strh w1, [x2, #4]" x1=q:0xab89             x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0000000089ab0000
code="str w1, [x2, #4]"  x1=q:0xefcdab89         x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0000000089abcdef
code="str x1, [x2, #8]"  x1=q:0xefcdab8967452301 x2=q:0x2000000 m2000000=00000000000000000000000000000000 => m2000000=00000000000000000123456789abcdef

code="strb w1, [x2, x3, lsl #0]" x1=q:0x89               x2=q:0x2000000 x3=q:0x4 m2000000=0000000000000000 => m2000000=0000000089000000
code="strh w1, [x2, x3, lsl #1]" x1=q:0xab89             x2=q:0x2000000 x3=q:0x2 m2000000=0000000000000000 => m2000000=0000000089ab0000
code="str w1, [x2, x3, lsl #2]"  x1=q:0xefcdab89         x2=q:0x2000000 x3=q:0x1 m2000000=0000000000000000 => m2000000=0000000089abcdef
code="str w1, [x2, x3, lsl #0]"  x1=q:0xefcdab89         x2=q:0x2000000 x3=q:0x4 m2000000=0000000000000000 => m2000000=0000000089abcdef
code="str x1, [x2, x3, lsl #3]"  x1=q:0xefcdab8967452301 x2=q:0x2000000 x3=q:0x1 m2000000=00000000000000000000000000000000 => m2000000=00000000000000000123456789abcdef

code="strb w1, [x2, w3, uxtw]"    x1=q:0x89               x2=q:0x2000000 x3=q:0x4 m2000000=0000000000000000 => m2000000=0000000089000000
code="strh w1, [x2, w3, uxtw #1]" x1=q:0xab89             x2=q:0x2000000 x3=q:0x2 m2000000=0000000000000000 => m2000000=0000000089ab0000
code="str w1, [x2, w3, sxtw #2]"  x1=q:0xefcdab89         x2=q:0x2000000 x3=q:0x1 m2000000=0000000000000000 => m2000000=0000000089abcdef
code="str w1, [x2, w3, sxtw #0]"  x1=q:0xefcdab89         x2=q:0x2000000 x3=q:0x4 m2000000=0000000000000000 => m2000000=0000000089abcdef
code="str x1, [x2, w3, uxtw #3]"  x1=q:0xefcdab8967452301 x2=q:0x2000000 x3=q:0x1 m2000000=00000000000000000000000000000000 => m2000000=00000000000000000123456789abcdef

code="str w1, [x2, #8]!" x1=q:0xefcdab89         x2=q:0x1fffff8 m2000000=0000000000000000 => m2000000=89abcdef00000000 x2=q:0x2000000
code="str x1, [x2], #8"  x1=q:0xefcdab8967452301 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456789abcdef x2=q:0x2000008

code="sturb w1, [x2, #-3]" x1=q:0x23               x2=q:0x2000004 m2000000=0000000000000000 => m2000000=0023000000000000
code="sturh w1, [x2, #-1]" x1=q:0xab89             x2=q:0x2000004 m2000000=0000000000000000 => m2000000=00000089ab000000
code="stur w1, [x2, #-2]"  x1=q:0xefcdab89         x2=q:0x2000004 m2000000=0000000000000000 => m2000000=000089abcdef0000
code="stur x1, [x2, #1]"   x1=q:0xefcdab8967452301 x2=q:0x2000004 m2000000=00000000000000000000000000000000 => m2000000=00000000000123456789abcdef000000

#
### Load Pair
#

code="ldp w0, w1, [x2]"   x0=q:0x0 x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef0000000000000000 => x0=0123456700000000 x1=89abcdef00000000
code="ldp x0, x1, [x2]"   x0=q:0x0 x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdeffedcba9876543210 => x0=0123456789abcdef x1=fedcba9876543210
code="ldpsw x0, x1, [x2]" x0=q:0x0 x1=q:0x0 x2=q:0x2000000 m2000000=ab456fff01234fff => x0=ab456fffffffffff x1=01234fffffffffff

code="ldp s0, s1, [x2]"  v0=qq:0,0 v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdef0000000000000000 => v0=01234567000000000000000000000000 v1=89abcdef000000000000000000000000
code="ldp d0, d1, [x2]"  v0=qq:0,0 v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdeffedcba9876543210 => v0=0123456789abcdef0000000000000000 v1=fedcba98765432100000000000000000
code="ldp q0, q1, [x2]"  v0=qq:0,0 v1=qq:0,0 x2=q:0x2000000 m2000000=0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210 => v0=0123456789abcdeffedcba9876543210 v1=0123456789abcdeffedcba9876543210

code="ldp w0, w1, [x2, #8]"   x0=q:0x0 x1=q:0x0 x2=q:0x2000000 m2000000=0000000000000000fedcba9876543210 => x0=fedcba9800000000 x1=7654321000000000

code="ldp w0, w1, [x2, #8]!"   x0=q:0x0 x1=q:0x0 x2=q:0x1fffff8 m2000000=0123456789abcdef0000000000000000 => x0=0123456700000000 x1=89abcdef00000000 x2=q:0x2000000
code="ldp x0, x1, [x2], #8"   x0=q:0x0 x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdeffedcba9876543210 => x0=0123456789abcdef x1=fedcba9876543210 x2=q:0x2000008

#
### Store Pair
#

code="stp w0, w1, [x2]" x0=0123456700000000 x1=89abcdef00000000 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456789abcdef
code="stp x0, x1, [x2]" x0=0123456789abcdef x1=fedcba9876543210 x2=q:0x2000000 m2000000=00000000000000000000000000000000 => m2000000=0123456789abcdeffedcba9876543210

code="stp s0, s1, [x2]" v0=01234567000000000000000000000000 v1=89abcdef000000000000000000000000 x2=q:0x2000000 m2000000=0000000000000000 => m2000000=0123456789abcdef
code="stp d0, d1, [x2]" v0=0123456789abcdef0000000000000000 v1=fedcba98765432100000000000000000 x2=q:0x2000000 m2000000=00000000000000000000000000000000 => m2000000=0123456789abcdeffedcba9876543210
code="stp q0, q1, [x2]" v0=0123456789abcdeffedcba9876543210 v1=0123456789abcdeffedcba9876543210 x2=q:0x2000000 m2000000=0000000000000000000000000000000000000000000000000000000000000000 => m2000000=0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210


code="stp w0, w1, [x2, #8]!" x0=0123456700000000 x1=89abcdef00000000 x2=q:0x1fffff8 m2000000=0000000000000000 => m2000000=0123456789abcdef x2=q:0x2000000
code="stp x0, x1, [x2], #8" x0=0123456789abcdef x1=fedcba9876543210 x2=q:0x2000000 m2000000=00000000000000000000000000000000 => m2000000=0123456789abcdeffedcba9876543210 x2=q:0x2000008

#
### DC ZVA
#

# DC ZVA: clear 64-byte naturally aligned block into which the pointer x0 points.
code="dc zva, x0" x0=q:0x2000000 m2000000=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa => m2000000=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
code="dc zva, x0" x0=q:0x2000034 m2000000=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa => m2000000=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

#
### Prefetch
#

# LLVM-IR manually checked.
-jit code="prfm pldL1keep, [sp, #8]"          sp=q:0x200000 m200000=0000000000000000 =>
-jit code="foo: prfm pliL2strm, foo"          sp=q:0x200000 =>
-jit code="prfm pstL3keep, [sp, w0, sxtw #3]" sp=q:0x200000 m200000=0000000000000000 =>
-jit code="prfum pldL1strm, [sp, #-43]"       sp=q:0x200000 m200000=0000000000000000 =>

#
### Exclusive Load/Store, Fences
#

+jit code="dmb ishld" =>
+jit code="dmb ishst" =>
+jit code="dmb ish" =>

code="ldxrb w1, [x2]" x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0100000000000000
code="ldxrh w1, [x2]" x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123000000000000
code="ldxr w1, [x2]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123456700000000
code="ldxr x1, [x2]"  x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef => x1=0123456789abcdef

# w12: status register. Set to 0 on success.
code="stxrb w12, w1, [x2]" x1=q:0x01               x2=q:0x2000000 x12=q:0xf m2000000=0000000000000000 => x12=q:0 m2000000=0100000000000000
code="stxrh w12, w1, [x2]" x1=q:0x2301             x2=q:0x2000000 x12=q:0xf m2000000=0000000000000000 => x12=q:0 m2000000=0123000000000000
code="stxr w12, w1, [x2]"  x1=q:0x67452301         x2=q:0x2000000 x12=q:0xf m2000000=0000000000000000 => x12=q:0 m2000000=0123456700000000
code="stxr w12, x1, [x2]"  x1=q:0xefcdab8967452301 x2=q:0x2000000 x12=q:0xf m2000000=0000000000000000 => x12=q:0 m2000000=0123456789abcdef


code="ldxp w0, w1, [x2]" x0=q:0x0 x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdef0000000000000000 => x0=0123456700000000 x1=89abcdef00000000
code="ldxp x0, x1, [x2]" x0=q:0x0 x1=q:0x0 x2=q:0x2000000 m2000000=0123456789abcdeffedcba9876543210 => x0=0123456789abcdef x1=fedcba9876543210
code="stxp w12, w0, w1, [x2]" x0=0123456700000000 x1=89abcdef00000000 x2=q:0x2000000 x12=q:0xf m2000000=0000000000000000 => x12=q:0 m2000000=0123456789abcdef
code="stxp w12, x0, x1, [x2]" x0=0123456789abcdef x1=fedcba9876543210 x2=q:0x2000000 x12=q:0xf m2000000=00000000000000000000000000000000 => x12=q:0 m2000000=0123456789abcdeffedcba9876543210
