Compiler projects using llvm
// RUN: not llvm-mc -triple aarch64 -show-encoding -mattr=+mte < %s 2>&1| FileCheck %s

irg
irg x0
irg q0, x0
irg w0, x0
irg x0, q0
irg x0, w0
irg x0, x1, q0
irg x0, x1, w0
irg x0, x1, sp
irg x0, x1, #1
irg x0, #1, x1
irg #1, x0, x1
irg x0, x1, x2, x3

// CHECK: too few operands for instruction
// CHECK-NEXT: irg
// CHECK: too few operands for instruction
// CHECK-NEXT: irg x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg q0, x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg w0, x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, q0
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, w0
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, x1, q0
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, x1, w0
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, x1, sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, x1, #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, #1, x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg #1, x0, x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: irg x0, x1, x2, x3

addg
addg x0
addg x0, x1
addg x0, x1, #0
addg x0, x1, #1024, #0
addg x0, x1, #8, #0
addg x0, x1, #-16, #0
addg x0, x1, #0, #16
addg q0, x1, #0, #0
addg w0, x1, #0, #0
addg x0, q1, #0, #0
addg x0, w1, #0, #0
addg #0, x1, #0, #0
addg x0, #0, #0, #0
addg x0, x1, x0, #0
addg x0, x1, #0, x0
addg x0, x1, #16, #2, #99

subg
subg x0
subg x0, x1
subg x0, x1, #0
subg x0, x1, #1024, #0
subg x0, x1, #8, #0
subg x0, x1, #-16, #0
subg x0, x1, #0, #16
subg q0, x1, #0, #0
subg w0, x1, #0, #0
subg x0, q1, #0, #0
subg x0, w1, #0, #0
subg #0, x1, #0, #0
subg x0, #0, #0, #0
subg x0, x1, x0, #0
subg x0, x1, #0, x0
subg x0, x1, #16, #2, #99

// CHECK: too few operands for instruction
// CHECK-NEXT: addg
// CHECK: too few operands for instruction
// CHECK-NEXT: addg x0
// CHECK: too few operands for instruction
// CHECK-NEXT: addg x0, x1
// CHECK: too few operands for instruction
// CHECK-NEXT: addg x0, x1, #0
// CHECK: index must be a multiple of 16 in range [0, 1008]
// CHECK-NEXT: addg x0, x1, #1024, #0
// CHECK: index must be a multiple of 16 in range [0, 1008]
// CHECK-NEXT: addg x0, x1, #8, #0
// CHECK: index must be a multiple of 16 in range [0, 1008]
// CHECK-NEXT: addg x0, x1, #-16, #0
// CHECK: immediate must be an integer in range [0, 15]
// CHECK-NEXT: addg x0, x1, #0, #16
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg q0, x1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg w0, x1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg x0, q1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg x0, w1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg #0, x1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg x0, #0, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg x0, x1, x0, #0
// CHECK: immediate must be an integer in range [0, 15]
// CHECK-NEXT: addg x0, x1, #0, x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: addg x0, x1, #16, #2, #99

// CHECK: too few operands for instruction
// CHECK-NEXT: subg
// CHECK: too few operands for instruction
// CHECK-NEXT: subg x0
// CHECK: too few operands for instruction
// CHECK-NEXT: subg x0, x1
// CHECK: too few operands for instruction
// CHECK-NEXT: subg x0, x1, #0
// CHECK: index must be a multiple of 16 in range [0, 1008]
// CHECK-NEXT: subg x0, x1, #1024, #0
// CHECK: index must be a multiple of 16 in range [0, 1008]
// CHECK-NEXT: subg x0, x1, #8, #0
// CHECK: index must be a multiple of 16 in range [0, 1008]
// CHECK-NEXT: subg x0, x1, #-16, #0
// CHECK: immediate must be an integer in range [0, 15]
// CHECK-NEXT: subg x0, x1, #0, #16
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg q0, x1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg w0, x1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg x0, q1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg x0, w1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg #0, x1, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg x0, #0, #0, #0
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg x0, x1, x0, #0
// CHECK: immediate must be an integer in range [0, 15]
// CHECK-NEXT: subg x0, x1, #0, x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: subg x0, x1, #16, #2, #99

gmi
gmi x0
gmi x0, x1
gmi sp, x0, x1
gmi x0, x1, sp
gmi x0, x1, x2, #1
gmi w0, x1, x2
gmi x0, w1, x2
gmi x0, x1, w2
gmi #1, x1, x2
gmi x0, #1, x2
gmi x0, x1, #1

// CHECK: too few operands for instruction
// CHECK-NEXT: gmi
// CHECK: too few operands for instruction
// CHECK-NEXT: gmi x0
// CHECK: too few operands for instruction
// CHECK-NEXT: gmi x0, x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi sp, x0, x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi x0, x1, sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi x0, x1, x2, #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi w0, x1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi x0, w1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi x0, x1, w2
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi #1, x1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi x0, #1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: gmi x0, x1, #1
stg
stg x0
stg w0
stg sp
stg #1
stg x0, [x0, #-4112]
stg x0, [x0, #4096]
stg x0, [x0, #8]
stg x0, [x0, x1]
stg x0, [w0]
stg x0, [xzr]
stg x0, [#1]

// CHECK: too few operands for instruction
// CHECK-NEXT: stg
// CHECK: too few operands for instruction
// CHECK-NEXT: stg x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg w0
// CHECK: too few operands for instruction
// CHECK-NEXT: stg sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg #1
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [x0, x1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [w0]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [xzr]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [#1]

stzg
stzg x0
stzg w0
stzg sp
stzg #1
stzg x0, [x0, #-4112]
stzg x0, [x0, #4096]
stzg x0, [x0, #8]
stzg x0, [x0, x1]
stzg x0, [w0]
stzg x0, [xzr]
stzg x0, [#1]

// CHECK: too few operands for instruction
// CHECK-NEXT: stzg
// CHECK: too few operands for instruction
// CHECK-NEXT: stzg x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg w0
// CHECK: too few operands for instruction
// CHECK-NEXT: stzg sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg #1
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [x0, x1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [w0]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [xzr]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [#1]

stg x0, [x0, #-4112]!
stg x0, [x0, #4096]!
stg x0, [x0, #8]!
stg x0, [x0, x1]!
stg x0, [w0]!
stg x0, [xzr]!
stg x0, [#1]!

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [x0, x1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [w0]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [xzr]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [#1]!

stzg x0, [x0, #-4112]!
stzg x0, [x0, #4096]!
stzg x0, [x0, #8]!
stzg x0, [x0, x1]!
stzg x0, [w0]!
stzg x0, [xzr]!
stzg x0, [#1]!

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [x0, x1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [w0]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [xzr]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [#1]!

stg x0, [x0], #-4112
stg x0, [x0], #4096
stg x0, [x0], #8
stg x0, [x0], x1
stg x0, [w0], #255
stg x0, [xzr], #255
stg x0, [#1], #255

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [x0], x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [w0], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [xzr], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: stg x0, [#1], #255

stzg x0, [x0], #-4112
stzg x0, [x0], #4096
stzg x0, [x0], #8
stzg x0, [x0], x1
stzg x0, [w0], #255
stzg x0, [xzr], #255
stzg x0, [#1], #255

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [x0], x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [w0], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [xzr], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: stzg x0, [#1], #255

st2g
st2g x0
st2g w0
st2g sp
st2g #1
st2g x0, [x0, #-4112]
st2g x0, [x0, #4096]
st2g x0, [x0, #8]
st2g x0, [x0, x1]
st2g x0, [w0]
st2g x0, [xzr]
st2g x0, [#1]

// CHECK: too few operands for instruction
// CHECK-NEXT: st2g
// CHECK: too few operands for instruction
// CHECK-NEXT: st2g x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g w0
// CHECK: too few operands for instruction
// CHECK-NEXT: st2g sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g #1
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [x0, x1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [w0]
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [xzr]
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [#1]

stz2g
stz2g x0
stz2g w0
stz2g sp
stz2g #1
stz2g x0, [x0, #-4112]
stz2g x0, [x0, #4096]
stz2g x0, [x0, #8]
stz2g x0, [x0, x1]
stz2g x0, [w0]
stz2g x0, [xzr]
stz2g x0, [#1]

// CHECK: too few operands for instruction
// CHECK-NEXT: stz2g
// CHECK: too few operands for instruction
// CHECK-NEXT: stz2g x0
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g w0
// CHECK: too few operands for instruction
// CHECK-NEXT: stz2g sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g #1
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [x0, x1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [w0]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [xzr]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [#1]

st2g x0, [x0, #-4112]!
st2g x0, [x0, #4096]!
st2g x0, [x0, #8]!
st2g x0, [x0, x1]!
st2g x0, [w0, #256]!
st2g x0, [xzr, #256]!
st2g x0, [#1, #256]!

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [x0, x1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [w0, #256]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [xzr, #256]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [#1, #256]!

stz2g x0, [x0, #-4112]!
stz2g x0, [x0, #4096]!
stz2g x0, [x0, #8]!
stz2g x0, [x0, x1]!
stz2g x0, [w0, #255]!
stz2g x0, [xzr, #255]!
stz2g x0, [#1, #255]!

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [x0, x1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [w0, #255]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [xzr, #255]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [#1, #255]!

st2g x0, [x0], #-4112
st2g x0, [x0], #4096
st2g x0, [x0], #8
st2g x0, [x0], x1
st2g x0, [w0], #255
st2g x0, [xzr], #255
st2g x0, [#1], #255

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [x0], x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [w0], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [xzr], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: st2g x0, [#1], #255

stz2g x0, [x0], #-4112
stz2g x0, [x0], #4096
stz2g x0, [x0], #8
stz2g x0, [x0], x1
stz2g x0, [w0], #255
stz2g x0, [xzr], #255
stz2g x0, [#1], #255

// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #-4112
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #4096
// CHECK: index must be a multiple of 16 in range [-4096, 4080]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [x0], x1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [w0], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [xzr], #255
// CHECK: invalid operand for instruction
// CHECK-NEXT: stz2g x0, [#1], #255

stgp sp, x1, [x2, #16]
stgp x0, sp, [x2, #16]
stgp x0, x1, [xzr, #16]
stgp x0, x1, [x2, #-1040]
stgp x0, x1, [x2, #1024]
stgp x0, x1, [x2, #8]
stgp x0, x1, [x2, x3]
stgp w0, x1, [x2, #1]
stgp x0, w1, [x2, #1]
stgp x0, x1, [w2, #1]
stgp #1, x1, [x3, #1]
stgp x0, #1, [x3, #1]
stgp x0, x1, [#1, #1]

// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [xzr
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #-1040
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #1024
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [x2, x3]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp w0, x1, [x2, #1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, w1, [x2, #1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [w2, #1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp #1, x1, [x3, #1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, #1, [x3, #1]
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [#1, #1]

stgp sp, x1, [x2, #16]!
stgp x0, sp, [x2, #16]!
stgp x0, x1, [xzr, #16]!
stgp x0, x1, [x2, #-1040]!
stgp x0, x1, [x2, #1024]!
stgp x0, x1, [x2, #8]!
stgp x0, x1, [x2, x3]!
stgp w0, x1, [x2, #1]!
stgp x0, w1, [x2, #1]!
stgp x0, x1, [w2, #1]!
stgp #1, x1, [x3, #1]!
stgp x0, #1, [x3, #1]!
stgp x0, x1, [#1, #1]!

// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [xzr
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #-1040
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #1024
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [x2, x3]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp w0, x1, [x2, #1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, w1, [x2, #1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [w2, #1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp #1, x1, [x3, #1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, #1, [x3, #1]!
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [#1, #1]!

stgp sp, x1, [x2], #16
stgp x0, sp, [x2], #16
stgp x0, x1, [xzr], #16
stgp x0, x1, [x2], #-1040
stgp x0, x1, [x2], #1024
stgp x0, x1, [x2], #8
stgp x0, x1, [x2], x3
stgp w0, x1, [x2], #1
stgp x0, w1, [x2], #1
stgp x0, x1, [w2], #1
stgp #1, x1, [x2], #1
stgp x0, #1, [x2], #1
stgp x0, x1, [#1], #1

// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, sp
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [xzr
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #-1040
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #1024
// CHECK: index must be a multiple of 16 in range [-1024, 1008]
// CHECK-NEXT: #8
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [x2], x3
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp w0, x1, [x2], #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, w1, [x2], #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [w2], #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp #1, x1, [x2], #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, #1, [x2], #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: stgp x0, x1, [#1], #1

mrs tco
mrs gcr_el1
mrs rgsr_el1
mrs tfsr_el1
mrs tfsr_el2
mrs tfsr_el3
mrs tfsr_el12
mrs tfsre0_el1
mrs gmid_el1

// CHECK:      invalid operand for instruction
// CHECK-NEXT: tco
// CHECK:      invalid operand for instruction
// CHECK-NEXT: gcr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: rgsr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el3
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el12
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsre0_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: gmid_el1

mrs tco, #0
mrs tco, x0
mrs gcr_el1, x1
mrs rgsr_el1, x2
mrs tfsr_el1, x3
mrs tfsr_el2, x4
mrs tfsr_el3, x5
mrs tfsr_el12, x6
mrs tfsre0_el1, x7
mrs gmid_el1, x7

// CHECK:      invalid operand for instruction
// CHECK-NEXT: tco, #0
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tco, x0
// CHECK:      invalid operand for instruction
// CHECK-NEXT: gcr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: rgsr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el3
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el12
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsre0_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: gmid_el1

msr tco
msr gcr_el1
msr rgsr_el1
msr tfsr_el1
msr tfsr_el2
msr tfsr_el3
msr tfsr_el12
msr tfsre0_el1
msr gmid_el1

// CHECK:      too few operands for instruction
// CHECK-NEXT: tco
// CHECK:      too few operands for instruction
// CHECK-NEXT: gcr_el1
// CHECK:      too few operands for instruction
// CHECK-NEXT: rgsr_el1
// CHECK:      too few operands for instruction
// CHECK-NEXT: tfsr_el1
// CHECK:      too few operands for instruction
// CHECK-NEXT: tfsr_el2
// CHECK:      too few operands for instruction
// CHECK-NEXT: tfsr_el3
// CHECK:      too few operands for instruction
// CHECK-NEXT: tfsr_el12
// CHECK:      too few operands for instruction
// CHECK-NEXT: tfsre0_el1
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: gmid_el1

msr x0, tco
msr x1, gcr_el1
msr x2, rgsr_el1
msr x3, tfsr_el1
msr x4, tfsr_el2
msr x5, tfsr_el3
msr x6, tfsr_el12
msr x7, tfsre0_el1
msr x7, gmid_el1

// CHECK:      expected writable system register or pstate
// CHECK-NEXT: tco
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: gcr_el1
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: rgsr_el1
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: tfsr_el1
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: tfsr_el2
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: tfsr_el3
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: tfsr_el12
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: tfsre0_el1
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: gmid_el1

msr gmid_el1, x7

// CHECK:      expected writable system register or pstate
// CHECK-NEXT: gmid_el1

// Among the system registers added by MTE, only TCO can be used with MSR (imm).
// The rest can only be used with MSR (reg).
msr gcr_el1, #1
msr rgsr_el1, #2
msr tfsr_el1, #3
msr tfsr_el2, #4
msr tfsr_el3, #5
msr tfsr_el12, #6
msr tfsre0_el1, #7
// Is read only
msr gmid_el1, #7

// CHECK:      invalid operand for instruction
// CHECK-NEXT: gcr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: rgsr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el1
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el3
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsr_el12
// CHECK:      invalid operand for instruction
// CHECK-NEXT: tfsre0_el1
// CHECK:      expected writable system register or pstate
// CHECK-NEXT: gmid_el1

// Xd cannot be the stack pointer, the rest can
subps sp, x0, x1
subp  sp, x2, x3
subp  w0, x1, x2
subp  x0, w1, x2
subp  x0, x1, w2
subps w0, x1, x2
subps x0, w1, x2
subps x0, x1, w2
subp  #1, x1, x2
subp  x0, #1, x2
subp  x0, x1, #1
subps #1, x1, x2
subps x0, #1, x2
subps x0, x1, #1

// CHECK:      invalid operand for instruction
// CHECK-NEXT: sp
// CHECK:      invalid operand for instruction
// CHECK-NEXT: sp
// CHECK:      invalid operand for instruction
// CHECK-NEXT: subp  w0, x1, x2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: subp  x0, w1, x2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: subp  x0, x1, w2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: subps w0, x1, x2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: subps x0, w1, x2
// CHECK:      invalid operand for instruction
// CHECK-NEXT: subps x0, x1, w2
// CHECK: invalid operand for instruction
// CHECK-NEXT: subp  #1, x1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: subp  x0, #1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: subp  x0, x1, #1
// CHECK: invalid operand for instruction
// CHECK-NEXT: subps #1, x1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: subps x0, #1, x2
// CHECK: invalid operand for instruction
// CHECK-NEXT: subps x0, x1, #1

subps x0, x1, x2, x3
subp  x0, x1, x2, x3

// CHECK: invalid operand for instruction
// CHECK-NEXT: subps x0, x1, x2, x3
// CHECK: invalid operand for instruction
// CHECK-NEXT: subp x0, x1, x2, x3

subps
subp
cmpp
subps x0
subp  x0
cmpp  x0
subps x0, x1
subp  x0, x1

// CHECK:      too few operands for instruction
// CHECK-NEXT: subps
// CHECK:      too few operands for instruction
// CHECK-NEXT: subp
// CHECK:      too few operands for instruction
// CHECK-NEXT: cmpp
// CHECK:      too few operands for instruction
// CHECK-NEXT: subps x0
// CHECK:      too few operands for instruction
// CHECK-NEXT: subp x0
// CHECK:      too few operands for instruction
// CHECK-NEXT: cmpp x0
// CHECK:      too few operands for instruction
// CHECK-NEXT: subps x0, x1
// CHECK:      too few operands for instruction
// CHECK-NEXT: subp x0, x1

ldg sp, [x0, #0]
ldg x0, [x0, x0]
ldg x0, [x0, #4096]
ldg x0, [x0, #-4112]
ldg #1, [x0, #255]
ldg x0, [#1, #255]

// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldg sp, [x0, #0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldg x0, [x0, x0]
// CHECK:      index must be a multiple of 16 in range [-4096, 4080].
// CHECK-NEXT: ldg x0, [x0, #4096]
// CHECK:      index must be a multiple of 16 in range [-4096, 4080].
// CHECK-NEXT: ldg x0, [x0, #-4112]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldg #1, [x0, #255]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldg x0, [#1, #255]

ldg
ldg x0
ldg x0, [#0]
ldg w0, [x1]
ldg x0, [w1]

// CHECK:      too few operands for instruction
// CHECK-NEXT: ldg
// CHECK:      too few operands for instruction
// CHECK-NEXT: ldg x0
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldg x0, [#0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldg w0, [x1]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldg x0, [w1]

ldgm
ldgm x0
ldgm w0, [x1]
ldgm x0, [w1]
ldgm #1, [x1]
ldgm x0, [#1]
ldgm sp, [x0]

// CHECK:      too few operands for instruction
// CHECK-NEXT: ldgm
// CHECK:      too few operands for instruction
// CHECK-NEXT: ldgm x0
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldgm w0, [x1]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldgm x0, [w1]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldgm #1, [x1]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldgm x0, [#1]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: ldgm sp, [x0]

stgm
stgm x0
stgm sp, [x0]
stgm w0, [x0]
stgm x0, [w0]
stgm #1, [x1]
stgm x0, [#1]

// CHECK:      too few operands for instruction
// CHECK-NEXT: stgm
// CHECK:      too few operands for instruction
// CHECK-NEXT: stgm x0
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stgm sp, [x0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stgm w0, [x0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stgm x0, [w0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stgm #1, [x1]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stgm x0, [#1]

stzgm
stzgm x0
stzgm sp, [x0]
stzgm w0, [x0]
stzgm x0, [w0]
stzgm #1, [x1]
stzgm x0, [#1]

// CHECK:      too few operands for instruction
// CHECK-NEXT: stzgm
// CHECK:      too few operands for instruction
// CHECK-NEXT: stzgm x0
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stzgm sp, [x0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stzgm w0, [x0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stzgm x0, [w0]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stzgm #1, [x1]
// CHECK:      invalid operand for instruction
// CHECK-NEXT: stzgm x0, [#1]