3801 lines
		
	
	
		
			174 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			3801 lines
		
	
	
		
			174 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| // RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t
 | |
| // RUN: FileCheck --check-prefix=CHECK-ERROR --check-prefix=CHECK-ERROR-ARM64 < %t %s
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Add/sub (extended register)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         // Mismatched final register and extend
 | |
|         add x2, x3, x5, sxtb
 | |
|         add x2, x4, w2, uxtx
 | |
|         add w5, w7, x9, sxtx
 | |
| // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR:         add x2, x3, x5, sxtb
 | |
| // CHECK-ERROR:                         ^
 | |
| // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR:         add x2, x4, w2, uxtx
 | |
| // CHECK-ERROR:                         ^
 | |
| // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR:         add w5, w7, x9, sxtx
 | |
| // CHECK-ERROR:                     ^
 | |
| 
 | |
|         // Out of range extends
 | |
|         add x9, x10, w11, uxtb #-1
 | |
|         add x3, x5, w7, uxtb #5
 | |
|         sub x9, x15, x2, uxth #5
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR:         add x9, x10, w11, uxtb #-1
 | |
| // CHECK-ERROR:                                 ^
 | |
| // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR:         add x3, x5, w7, uxtb #5
 | |
| // CHECK-ERROR:                         ^
 | |
| // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR:         sub x9, x15, x2, uxth #5
 | |
| // CHECK-ERROR:                          ^
 | |
| 
 | |
|         // Wrong registers on normal variants
 | |
|         add xzr, x3, x5, uxtx
 | |
|         sub x3, xzr, w9, sxth #1
 | |
|         add x1, x2, sp, uxtx
 | |
| // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR:         add xzr, x3, x5, uxtx
 | |
| // CHECK-ERROR:                          ^
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR:         sub x3, xzr, w9, sxth #1
 | |
| // CHECK-ERROR:                 ^
 | |
| // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR:         add x1, x2, sp, uxtx
 | |
| // CHECK-ERROR:                     ^
 | |
| 
 | |
|         // Wrong registers on flag-setting variants
 | |
|         adds sp, x3, w2, uxtb
 | |
|         adds x3, xzr, x9, uxtx
 | |
|         subs x2, x1, sp, uxtx
 | |
|         adds x2, x1, sp, uxtb #2
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR:         adds sp, x3, w2, uxtb
 | |
| // CHECK-ERROR:              ^
 | |
| // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR:         adds x3, xzr, x9, uxtx
 | |
| // CHECK-ERROR:                           ^
 | |
| // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR:         subs x2, x1, sp, uxtx
 | |
| // CHECK-ERROR:                      ^
 | |
| // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR:         adds x2, x1, sp, uxtb #2
 | |
| // CHECK-ERROR:                      ^
 | |
| 
 | |
|         // Amount not optional if lsl valid and used
 | |
|         add sp, x5, x7, lsl
 | |
| // CHECK-ERROR: error: expected #imm after shift specifier
 | |
| // CHECK-ERROR:         add sp, x5, x7, lsl
 | |
| // CHECK-ERROR:                             ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Add/sub (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| // Out of range immediates: more than 12 bits
 | |
|         add w4, w5, #-4096
 | |
|         add w5, w6, #0x1000
 | |
|         add w4, w5, #-4096, lsl #12
 | |
|         add w5, w6, #0x1000, lsl #12
 | |
| // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-NEXT:         add w4, w5, #-4096
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-AARCH64-NEXT:         add w5, w6, #0x1000
 | |
| // CHECK-ERROR-AARCH64-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-NEXT:         add w4, w5, #-4096, lsl #12
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-NEXT:         add w5, w6, #0x1000, lsl #12
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
| // Only lsl #0 and lsl #12 are allowed
 | |
|         add w2, w3, #0x1, lsl #1
 | |
|         add w5, w17, #0xfff, lsl #13
 | |
|         add w17, w20, #0x1000, lsl #12
 | |
|         sub xsp, x34, #0x100, lsl #-1
 | |
| // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-NEXT:         add w2, w3, #0x1, lsl #1
 | |
| // CHECK-ERROR-NEXT:                                ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-NEXT:         add w5, w17, #0xfff, lsl #13
 | |
| // CHECK-ERROR-NEXT:                                   ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-NEXT:         add w17, w20, #0x1000, lsl #12
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: only 'lsl #+N' valid after immediate
 | |
| // CHECK-ERROR-NEXT:         sub xsp, x34, #0x100, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                                    ^
 | |
| 
 | |
| // Incorrect registers (w31 doesn't exist at all, and 31 decodes to sp for these).
 | |
|         add w31, w20, #1234
 | |
|         add wzr, w20, #0x123
 | |
|         add w20, wzr, #0x321
 | |
|         add wzr, wzr, #0xfff
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         add w31, w20, #1234
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         add wzr, w20, #0x123
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         add w20, wzr, #0x321
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         add wzr, wzr, #0xfff
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
| // Mixed register classes
 | |
|         add xsp, w2, #123
 | |
|         sub w2, x30, #32
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         add xsp, w2, #123
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sub w2, x30, #32
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
| // Out of range immediate
 | |
|         adds w0, w5, #0x10000
 | |
| // CHECK-ERROR-AARCH64: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-AARCH64-NEXT:         adds w0, w5, #0x10000
 | |
| // CHECK-ERROR-AARCH64-NEXT:                      ^
 | |
| 
 | |
| // Wn|WSP should be in second place
 | |
|         adds w4, wzr, #0x123
 | |
| // ...but wzr is the 31 destination
 | |
|         subs wsp, w5, #123
 | |
|         subs x5, xzr, #0x456, lsl #12
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adds w4, wzr, #0x123
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         subs wsp, w5, #123
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         subs x5, xzr, #0x456, lsl #12
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         // MOV alias should not accept any fiddling
 | |
|         mov x2, xsp, #123
 | |
|         mov wsp, w27, #0xfff, lsl #12
 | |
| // CHECK-ERROR: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         mov x2, xsp, #123
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         mov wsp, w27, #0xfff, lsl #12
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         // A relocation should be provided for symbols
 | |
|         add x3, x9, #variable
 | |
| // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
 | |
| // CHECK-ERROR-NEXT:         add x3, x9, #variable
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Add-subtract (shifted register)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         add wsp, w1, w2, lsr #3
 | |
|         add x4, sp, x9, asr #5
 | |
|         add x9, x10, x5, ror #3
 | |
| // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add wsp, w1, w2, lsr #3
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add x4, sp, x9, asr #5
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add x9, x10, x5, ror #3
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| 
 | |
|         add w1, w2, w3, lsl #-1
 | |
|         add w1, w2, w3, lsl #32
 | |
|         add w1, w2, w3, lsr #-1
 | |
|         add w1, w2, w3, lsr #32
 | |
|         add w1, w2, w3, asr #-1
 | |
|         add w1, w2, w3, asr #32
 | |
|         add x1, x2, x3, lsl #-1
 | |
|         add x1, x2, x3, lsl #64
 | |
|         add x1, x2, x3, lsr #-1
 | |
|         add x1, x2, x3, lsr #64
 | |
|         add x1, x2, x3, asr #-1
 | |
|         add x1, x2, x3, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         add w1, w2, w3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add w1, w2, w3, lsl #32
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         add w1, w2, w3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add w1, w2, w3, lsr #32
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         add w1, w2, w3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add w1, w2, w3, asr #32
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         add x1, x2, x3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add x1, x2, x3, lsl #64
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         add x1, x2, x3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add x1, x2, x3, lsr #64
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         add x1, x2, x3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         add x1, x2, x3, asr #64
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| 
 | |
|         adds w1, w2, w3, lsl #-1
 | |
|         adds w1, w2, w3, lsl #32
 | |
|         adds w1, w2, w3, lsr #-1
 | |
|         adds w1, w2, w3, lsr #32
 | |
|         adds w1, w2, w3, asr #-1
 | |
|         adds w1, w2, w3, asr #32
 | |
|         adds x1, x2, x3, lsl #-1
 | |
|         adds x1, x2, x3, lsl #64
 | |
|         adds x1, x2, x3, lsr #-1
 | |
|         adds x1, x2, x3, lsr #64
 | |
|         adds x1, x2, x3, asr #-1
 | |
|         adds x1, x2, x3, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsl #32
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsr #32
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         adds w1, w2, w3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         adds w1, w2, w3, asr #32
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsl #64
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsr #64
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         adds x1, x2, x3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         adds x1, x2, x3, asr #64
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| 
 | |
|         sub w1, w2, w3, lsl #-1
 | |
|         sub w1, w2, w3, lsl #32
 | |
|         sub w1, w2, w3, lsr #-1
 | |
|         sub w1, w2, w3, lsr #32
 | |
|         sub w1, w2, w3, asr #-1
 | |
|         sub w1, w2, w3, asr #32
 | |
|         sub x1, x2, x3, lsl #-1
 | |
|         sub x1, x2, x3, lsl #64
 | |
|         sub x1, x2, x3, lsr #-1
 | |
|         sub x1, x2, x3, lsr #64
 | |
|         sub x1, x2, x3, asr #-1
 | |
|         sub x1, x2, x3, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsl #32
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsr #32
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         sub w1, w2, w3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         sub w1, w2, w3, asr #32
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsl #64
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsr #64
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         sub x1, x2, x3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         sub x1, x2, x3, asr #64
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| 
 | |
|         subs w1, w2, w3, lsl #-1
 | |
|         subs w1, w2, w3, lsl #32
 | |
|         subs w1, w2, w3, lsr #-1
 | |
|         subs w1, w2, w3, lsr #32
 | |
|         subs w1, w2, w3, asr #-1
 | |
|         subs w1, w2, w3, asr #32
 | |
|         subs x1, x2, x3, lsl #-1
 | |
|         subs x1, x2, x3, lsl #64
 | |
|         subs x1, x2, x3, lsr #-1
 | |
|         subs x1, x2, x3, lsr #64
 | |
|         subs x1, x2, x3, asr #-1
 | |
|         subs x1, x2, x3, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsl #32
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsr #32
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         subs w1, w2, w3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         subs w1, w2, w3, asr #32
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsl #64
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsr #64
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         subs x1, x2, x3, asr #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         subs x1, x2, x3, asr #64
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| 
 | |
|         cmn w9, w10, lsl #-1
 | |
|         cmn w9, w10, lsl #32
 | |
|         cmn w11, w12, lsr #-1
 | |
|         cmn w11, w12, lsr #32
 | |
|         cmn w19, wzr, asr #-1
 | |
|         cmn wzr, wzr, asr #32
 | |
|         cmn x9, x10, lsl #-1
 | |
|         cmn x9, x10, lsl #64
 | |
|         cmn x11, x12, lsr #-1
 | |
|         cmn x11, x12, lsr #64
 | |
|         cmn x19, xzr, asr #-1
 | |
|         cmn xzr, xzr, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmn w9, w10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmn w9, w10, lsl #32
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmn w11, w12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmn w11, w12, lsr #32
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmn w19, wzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         cmn wzr, wzr, asr #32
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmn x9, x10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmn x9, x10, lsl #64
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmn x11, x12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmn x11, x12, lsr #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmn x19, xzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         cmn xzr, xzr, asr #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         cmp w9, w10, lsl #-1
 | |
|         cmp w9, w10, lsl #32
 | |
|         cmp w11, w12, lsr #-1
 | |
|         cmp w11, w12, lsr #32
 | |
|         cmp w19, wzr, asr #-1
 | |
|         cmp wzr, wzr, asr #32
 | |
|         cmp x9, x10, lsl #-1
 | |
|         cmp x9, x10, lsl #64
 | |
|         cmp x11, x12, lsr #-1
 | |
|         cmp x11, x12, lsr #64
 | |
|         cmp x19, xzr, asr #-1
 | |
|         cmp xzr, xzr, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmp w9, w10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmp w9, w10, lsl #32
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmp w11, w12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmp w11, w12, lsr #32
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmp w19, wzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         cmp wzr, wzr, asr #32
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmp x9, x10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmp x9, x10, lsl #64
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmp x11, x12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
 | |
| // CHECK-ERROR-NEXT:         cmp x11, x12, lsr #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         cmp x19, xzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         cmp xzr, xzr, asr #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         neg w9, w10, lsl #-1
 | |
|         neg w9, w10, lsl #32
 | |
|         neg w11, w12, lsr #-1
 | |
|         neg w11, w12, lsr #32
 | |
|         neg w19, wzr, asr #-1
 | |
|         neg wzr, wzr, asr #32
 | |
|         neg x9, x10, lsl #-1
 | |
|         neg x9, x10, lsl #64
 | |
|         neg x11, x12, lsr #-1
 | |
|         neg x11, x12, lsr #64
 | |
|         neg x19, xzr, asr #-1
 | |
|         neg xzr, xzr, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         neg w9, w10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         neg w9, w10, lsl #32
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         neg w11, w12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         neg w11, w12, lsr #32
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         neg w19, wzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         neg wzr, wzr, asr #32
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         neg x9, x10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         neg x9, x10, lsl #64
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         neg x11, x12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         neg x11, x12, lsr #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         neg x19, xzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         neg xzr, xzr, asr #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         negs w9, w10, lsl #-1
 | |
|         negs w9, w10, lsl #32
 | |
|         negs w11, w12, lsr #-1
 | |
|         negs w11, w12, lsr #32
 | |
|         negs w19, wzr, asr #-1
 | |
|         negs wzr, wzr, asr #32
 | |
|         negs x9, x10, lsl #-1
 | |
|         negs x9, x10, lsl #64
 | |
|         negs x11, x12, lsr #-1
 | |
|         negs x11, x12, lsr #64
 | |
|         negs x19, xzr, asr #-1
 | |
|         negs xzr, xzr, asr #64
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         negs w9, w10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         negs w9, w10, lsl #32
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         negs w11, w12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         negs w11, w12, lsr #32
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         negs w19, wzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         negs wzr, wzr, asr #32
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         negs x9, x10, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         negs x9, x10, lsl #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         negs x11, x12, lsr #-1
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         negs x11, x12, lsr #64
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         negs x19, xzr, asr #-1
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         negs xzr, xzr, asr #64
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Add-subtract (shifted register)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         adc wsp, w3, w5
 | |
|         adc w1, wsp, w2
 | |
|         adc w0, w10, wsp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        adc wsp, w3, w5
 | |
| // CHECK-ERROR-NEXT:            ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adc w1, wsp, w2
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adc w0, w10, wsp
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         adc sp, x3, x5
 | |
|         adc x1, sp, x2
 | |
|         adc x0, x10, sp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adc sp, x3, x5
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adc x1, sp, x2
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adc x0, x10, sp
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         adcs wsp, w3, w5
 | |
|         adcs w1, wsp, w2
 | |
|         adcs w0, w10, wsp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adcs wsp, w3, w5
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adcs w1, wsp, w2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adcs w0, w10, wsp
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         adcs sp, x3, x5
 | |
|         adcs x1, sp, x2
 | |
|         adcs x0, x10, sp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adcs sp, x3, x5
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adcs x1, sp, x2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adcs x0, x10, sp
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         sbc wsp, w3, w5
 | |
|         sbc w1, wsp, w2
 | |
|         sbc w0, w10, wsp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbc wsp, w3, w5
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbc w1, wsp, w2
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbc w0, w10, wsp
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         sbc sp, x3, x5
 | |
|         sbc x1, sp, x2
 | |
|         sbc x0, x10, sp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbc sp, x3, x5
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbc x1, sp, x2
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbc x0, x10, sp
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         sbcs wsp, w3, w5
 | |
|         sbcs w1, wsp, w2
 | |
|         sbcs w0, w10, wsp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbcs wsp, w3, w5
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbcs w1, wsp, w2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbcs w0, w10, wsp
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         sbcs sp, x3, x5
 | |
|         sbcs x1, sp, x2
 | |
|         sbcs x0, x10, sp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbcs sp, x3, x5
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbcs x1, sp, x2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbcs x0, x10, sp
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ngc wsp, w3
 | |
|         ngc w9, wsp
 | |
|         ngc sp, x9
 | |
|         ngc x2, sp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngc wsp, w3
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngc w9, wsp
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngc sp, x9
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngc x2, sp
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         ngcs wsp, w3
 | |
|         ngcs w9, wsp
 | |
|         ngcs sp, x9
 | |
|         ngcs x2, sp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngcs wsp, w3
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngcs w9, wsp
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngcs sp, x9
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ngcs x2, sp
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Logical (immediates)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         and w2, w3, #4294967296
 | |
|         eor w2, w3, #4294967296
 | |
|         orr w2, w3, #4294967296
 | |
|         ands w2, w3, #4294967296
 | |
| // CHECK-ERROR: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         and w2, w3, #4294967296
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         eor w2, w3, #4294967296
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         orr w2, w3, #4294967296
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         ands w2, w3, #4294967296
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Bitfield
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         sbfm x3, w13, #0, #0
 | |
|         sbfm w12, x9, #0, #0
 | |
|         sbfm sp, x3, #3, #5
 | |
|         sbfm w3, wsp, #1, #9
 | |
|         sbfm x9, x5, #-1, #0
 | |
|         sbfm x9, x5, #0, #-1
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfm x3, w13, #0, #0
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfm w12, x9, #0, #0
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfm sp, x3, #3, #5
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfm w3, wsp, #1, #9
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         sbfm x9, x5, #-1, #0
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         sbfm x9, x5, #0, #-1
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| 
 | |
|         sbfm w3, w5, #32, #1
 | |
|         sbfm w7, w11, #19, #32
 | |
|         sbfm x29, x30, #64, #0
 | |
|         sbfm x10, x20, #63, #64
 | |
| // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         sbfm w3, w5, #32, #1
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         sbfm w7, w11, #19, #32
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         sbfm x29, x30, #64, #0
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         sbfm x10, x20, #63, #64
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| 
 | |
|         ubfm w3, w5, #32, #1
 | |
|         ubfm w7, w11, #19, #32
 | |
|         ubfm x29, x30, #64, #0
 | |
|         ubfm x10, x20, #63, #64
 | |
| // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         ubfm w3, w5, #32, #1
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         ubfm w7, w11, #19, #32
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         ubfm x29, x30, #64, #0
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         ubfm x10, x20, #63, #64
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| 
 | |
|         bfm w3, w5, #32, #1
 | |
|         bfm w7, w11, #19, #32
 | |
|         bfm x29, x30, #64, #0
 | |
|         bfm x10, x20, #63, #64
 | |
| // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         bfm w3, w5, #32, #1
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         bfm w7, w11, #19, #32
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         bfm x29, x30, #64, #0
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         bfm x10, x20, #63, #64
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| 
 | |
|         sxtb x3, x2
 | |
|         sxth xzr, xzr
 | |
|         sxtw x3, x5
 | |
| // CHECK-ERROR-AARCH64: error: invalid operand for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         sxtb x3, x2
 | |
| // CHECK-ERROR-AARCH64-NEXT:                  ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         sxth xzr, xzr
 | |
| // CHECK-ERROR-AARCH64-NEXT:                   ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         sxtw x3, x5
 | |
| // CHECK-ERROR-AARCH64-NEXT:                  ^
 | |
| 
 | |
|         uxtb x3, x12
 | |
|         uxth x5, x9
 | |
|         uxtw x3, x5
 | |
|         uxtb x2, sp
 | |
|         uxtb sp, xzr
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         uxtb x3, x12
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         uxth x5, x9
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: invalid instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         uxtw x3, x5
 | |
| // CHECK-ERROR-AARCH64-NEXT:         ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         uxtb x2, sp
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         uxtb sp, xzr
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         asr x3, w2, #1
 | |
|         asr sp, x2, #1
 | |
|         asr x25, x26, #-1
 | |
|         asr x25, x26, #64
 | |
|         asr w9, w8, #32
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         asr x3, w2, #1
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         asr sp, x2, #1
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         asr x25, x26, #-1
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         asr x25, x26, #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         asr w9, w8, #32
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         sbfiz w1, w2, #0, #0
 | |
|         sbfiz wsp, w9, #0, #1
 | |
|         sbfiz w9, w10, #32, #1
 | |
|         sbfiz w11, w12, #32, #0
 | |
|         sbfiz w9, w10, #10, #23
 | |
|         sbfiz x3, x5, #12, #53
 | |
|         sbfiz sp, x3, #7, #6
 | |
|         sbfiz w3, wsp, #10, #8
 | |
| // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
 | |
| // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:         sbfiz w1, w2, #0, #0
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfiz wsp, w9, #0, #1
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         sbfiz w9, w10, #32, #1
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         sbfiz w11, w12, #32, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: requested insert overflows register
 | |
| // CHECK-ERROR-NEXT:         sbfiz w9, w10, #10, #23
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: requested insert overflows register
 | |
| // CHECK-ERROR-NEXT:         sbfiz x3, x5, #12, #53
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfiz sp, x3, #7, #6
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfiz w3, wsp, #10, #8
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         sbfx w1, w2, #0, #0
 | |
|         sbfx wsp, w9, #0, #1
 | |
|         sbfx w9, w10, #32, #1
 | |
|         sbfx w11, w12, #32, #0
 | |
|         sbfx w9, w10, #10, #23
 | |
|         sbfx x3, x5, #12, #53
 | |
|         sbfx sp, x3, #7, #6
 | |
|         sbfx w3, wsp, #10, #8
 | |
| // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
 | |
| // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:         sbfx w1, w2, #0, #0
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfx wsp, w9, #0, #1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         sbfx w9, w10, #32, #1
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         sbfx w11, w12, #32, #0
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: requested extract overflows register
 | |
| // CHECK-ERROR-NEXT:         sbfx w9, w10, #10, #23
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: requested extract overflows register
 | |
| // CHECK-ERROR-NEXT:         sbfx x3, x5, #12, #53
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfx sp, x3, #7, #6
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sbfx w3, wsp, #10, #8
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         bfi w1, w2, #0, #0
 | |
|         bfi wsp, w9, #0, #1
 | |
|         bfi w9, w10, #32, #1
 | |
|         bfi w11, w12, #32, #0
 | |
|         bfi w9, w10, #10, #23
 | |
|         bfi x3, x5, #12, #53
 | |
|         bfi sp, x3, #7, #6
 | |
|         bfi w3, wsp, #10, #8
 | |
| // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
 | |
| // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:         bfi w1, w2, #0, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bfi wsp, w9, #0, #1
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         bfi w9, w10, #32, #1
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         bfi w11, w12, #32, #0
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: requested insert overflows register
 | |
| // CHECK-ERROR-NEXT:         bfi w9, w10, #10, #23
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: requested insert overflows register
 | |
| // CHECK-ERROR-NEXT:         bfi x3, x5, #12, #53
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bfi sp, x3, #7, #6
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bfi w3, wsp, #10, #8
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         bfxil w1, w2, #0, #0
 | |
|         bfxil wsp, w9, #0, #1
 | |
|         bfxil w9, w10, #32, #1
 | |
|         bfxil w11, w12, #32, #0
 | |
|         bfxil w9, w10, #10, #23
 | |
|         bfxil x3, x5, #12, #53
 | |
|         bfxil sp, x3, #7, #6
 | |
|         bfxil w3, wsp, #10, #8
 | |
| // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
 | |
| // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:         bfxil w1, w2, #0, #0
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bfxil wsp, w9, #0, #1
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         bfxil w9, w10, #32, #1
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         bfxil w11, w12, #32, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: requested extract overflows register
 | |
| // CHECK-ERROR-NEXT:         bfxil w9, w10, #10, #23
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: requested extract overflows register
 | |
| // CHECK-ERROR-NEXT:         bfxil x3, x5, #12, #53
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bfxil sp, x3, #7, #6
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bfxil w3, wsp, #10, #8
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         ubfiz w1, w2, #0, #0
 | |
|         ubfiz wsp, w9, #0, #1
 | |
|         ubfiz w9, w10, #32, #1
 | |
|         ubfiz w11, w12, #32, #0
 | |
|         ubfiz w9, w10, #10, #23
 | |
|         ubfiz x3, x5, #12, #53
 | |
|         ubfiz sp, x3, #7, #6
 | |
|         ubfiz w3, wsp, #10, #8
 | |
| // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
 | |
| // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:         ubfiz w1, w2, #0, #0
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ubfiz wsp, w9, #0, #1
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         ubfiz w9, w10, #32, #1
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         ubfiz w11, w12, #32, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: requested insert overflows register
 | |
| // CHECK-ERROR-NEXT:         ubfiz w9, w10, #10, #23
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: requested insert overflows register
 | |
| // CHECK-ERROR-NEXT:         ubfiz x3, x5, #12, #53
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ubfiz sp, x3, #7, #6
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ubfiz w3, wsp, #10, #8
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         ubfx w1, w2, #0, #0
 | |
|         ubfx wsp, w9, #0, #1
 | |
|         ubfx w9, w10, #32, #1
 | |
|         ubfx w11, w12, #32, #0
 | |
|         ubfx w9, w10, #10, #23
 | |
|         ubfx x3, x5, #12, #53
 | |
|         ubfx sp, x3, #7, #6
 | |
|         ubfx w3, wsp, #10, #8
 | |
| // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
 | |
| // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:         ubfx w1, w2, #0, #0
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ubfx wsp, w9, #0, #1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         ubfx w9, w10, #32, #1
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         ubfx w11, w12, #32, #0
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: requested extract overflows register
 | |
| // CHECK-ERROR-NEXT:         ubfx w9, w10, #10, #23
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: requested extract overflows register
 | |
| // CHECK-ERROR-NEXT:         ubfx x3, x5, #12, #53
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ubfx sp, x3, #7, #6
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ubfx w3, wsp, #10, #8
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         bfc wsp, #3, #6
 | |
|         bfc w4, #2, #31
 | |
|         bfc sp, #0, #1
 | |
|         bfc x6, #0, #0
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        bfc wsp, #3, #6
 | |
| // CHECK-ERROR-NEXT:            ^
 | |
| // CHECK-ERROR-NEXT: error: requested insert overflows register
 | |
| // CHECK-ERROR-NEXT:         bfc w4, #2, #31
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bfc sp, #0, #1
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:         bfc x6, #0, #0
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Compare & branch (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         cbnz wsp, lbl
 | |
|         cbz  sp, lbl
 | |
|         cbz  x3, x5
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:           cbnz wsp, lbl
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:           cbz sp, lbl
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:           cbz x3, x5
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         cbz w20, #1048576
 | |
|         cbnz xzr, #-1048580
 | |
|         cbz x29, #1
 | |
| // CHECK-ERROR: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:           cbz w20, #1048576
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:           cbnz xzr, #-1048580
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:           cbz x29, #1
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Conditional branch (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         b.zf lbl
 | |
| // CHECK-ERROR: error: invalid condition code
 | |
| // CHECK-ERROR-NEXT:           b.zf lbl
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         b.eq #1048576
 | |
|         b.ge #-1048580
 | |
|         b.cc #1
 | |
| // CHECK-ERROR: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:           b.eq #1048576
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:           b.ge #-1048580
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:           b.cc #1
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Conditional compare (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ccmp wsp, #4, #2, ne
 | |
|         ccmp w25, #-1, #15, hs
 | |
|         ccmp w3, #32, #0, ge
 | |
|         ccmp w19, #5, #-1, lt
 | |
|         ccmp w20, #7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmp wsp, #4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmp w25, #-1, #15, hs
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmp w3, #32, #0, ge
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp w19, #5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp w20, #7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         ccmp sp, #4, #2, ne
 | |
|         ccmp x25, #-1, #15, hs
 | |
|         ccmp x3, #32, #0, ge
 | |
|         ccmp x19, #5, #-1, lt
 | |
|         ccmp x20, #7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmp sp, #4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmp x25, #-1, #15, hs
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmp x3, #32, #0, ge
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp x19, #5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp x20, #7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         ccmn wsp, #4, #2, ne
 | |
|         ccmn w25, #-1, #15, hs
 | |
|         ccmn w3, #32, #0, ge
 | |
|         ccmn w19, #5, #-1, lt
 | |
|         ccmn w20, #7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmn wsp, #4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmn w25, #-1, #15, hs
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmn w3, #32, #0, ge
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn w19, #5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn w20, #7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         ccmn sp, #4, #2, ne
 | |
|         ccmn x25, #-1, #15, hs
 | |
|         ccmn x3, #32, #0, ge
 | |
|         ccmn x19, #5, #-1, lt
 | |
|         ccmn x20, #7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmn sp, #4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmn x25, #-1, #15, hs
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmn x3, #32, #0, ge
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn x19, #5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn x20, #7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Conditional compare (register)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ccmp wsp, w4, #2, ne
 | |
|         ccmp w3, wsp, #0, ge
 | |
|         ccmp w19, w5, #-1, lt
 | |
|         ccmp w20, w7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmp wsp, w4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmp w3, wsp, #0, ge
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp w19, w5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp w20, w7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         ccmp sp, x4, #2, ne
 | |
|         ccmp x25, sp, #15, hs
 | |
|         ccmp x19, x5, #-1, lt
 | |
|         ccmp x20, x7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmp sp, x4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmp x25, sp, #15, hs
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp x19, x5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmp x20, x7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         ccmn wsp, w4, #2, ne
 | |
|         ccmn w25, wsp, #15, hs
 | |
|         ccmn w19, w5, #-1, lt
 | |
|         ccmn w20, w7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmn wsp, w4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmn w25, wsp, #15, hs
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn w19, w5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn w20, w7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         ccmn sp, x4, #2, ne
 | |
|         ccmn x25, sp, #15, hs
 | |
|         ccmn x19, x5, #-1, lt
 | |
|         ccmn x20, x7, #16, hs
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ccmn sp, x4, #2, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        ccmn x25, sp, #15, hs
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn x19, x5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        ccmn x20, x7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Conditional select
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         csel w4, wsp, w9, eq
 | |
|         csel wsp, w2, w3, ne
 | |
|         csel w10, w11, wsp, ge
 | |
|         csel w1, w2, w3, #3
 | |
|         csel x4, sp, x9, eq
 | |
|         csel sp, x2, x3, ne
 | |
|         csel x10, x11, sp, ge
 | |
|         csel x1, x2, x3, #3
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csel w4, wsp, w9, eq
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csel wsp, w2, w3, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csel w10, w11, wsp, ge
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected AArch64 condition code
 | |
| // CHECK-ERROR-NEXT:        csel w1, w2, w3, #3
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csel x4, sp, x9, eq
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csel sp, x2, x3, ne
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csel x10, x11, sp, ge
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: expected AArch64 condition code
 | |
| // CHECK-ERROR-NEXT:        csel x1, x2, x3, #3
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| 
 | |
|         csinc w20, w21, wsp, mi
 | |
|         csinc sp, x30, x29, eq
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csinc w20, w21, wsp, mi
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csinc sp, x30, x29, eq
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         csinv w20, wsp, wsp, mi
 | |
|         csinv sp, x30, x29, le
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csinv w20, wsp, wsp, mi
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csinv sp, x30, x29, le
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         csneg w20, w21, wsp, mi
 | |
|         csneg x0, sp, x29, le
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csneg w20, w21, wsp, mi
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csneg x0, sp, x29, le
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         cset wsp, lt
 | |
|         csetm sp, ge
 | |
|         cset w1, al
 | |
|         csetm x6, nv
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        cset wsp, lt
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        csetm sp, ge
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
 | |
| // CHECK-ERROR-NEXT:        cset w1, al
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
 | |
| // CHECK-ERROR-NEXT:        csetm x6, nv
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
|         cinc w3, wsp, ne
 | |
|         cinc sp, x9, eq
 | |
|         cinc x2, x0, nv
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        cinc w3, wsp, ne
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        cinc sp, x9, eq
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
 | |
| // CHECK-ERROR-NEXT:        cinc x2, x0, nv
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         cinv w3, wsp, ne
 | |
|         cinv sp, x9, eq
 | |
|         cinv w8, x7, nv
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        cinv w3, wsp, ne
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        cinv sp, x9, eq
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
 | |
| // CHECK-ERROR-NEXT:        cinv w8, x7, nv
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         cneg w3, wsp, ne
 | |
|         cneg sp, x9, eq
 | |
|         cneg x4, x5, al
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        cneg w3, wsp, ne
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        cneg sp, x9, eq
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
 | |
| // CHECK-ERROR-NEXT:        cneg x4, x5, al
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Data Processing (1 source)
 | |
| //------------------------------------------------------------------------------
 | |
|         rbit x23, w2
 | |
| //CHECK-ERROR: error: invalid operand for instruction
 | |
| //CHECK-ERROR-NEXT:     rbit x23, w2
 | |
| 
 | |
|         cls sp, x2
 | |
| //CHECK-ERROR: error: invalid operand for instruction
 | |
| //CHECK-ERROR-NEXT:     cls sp, x2
 | |
| 
 | |
|         clz wsp, w3
 | |
| //CHECK-ERROR: error: invalid operand for instruction
 | |
| //CHECK-ERROR-NEXT:     clz wsp, w3
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Data Processing (2 sources)
 | |
| //------------------------------------------------------------------------------
 | |
|         udiv x23, w2, x18
 | |
| //CHECK-ERROR: error: invalid operand for instruction
 | |
| //CHECK-ERROR-NEXT:     udiv x23, w2, x18
 | |
| 
 | |
|         lsl sp, x2, x4
 | |
| //CHECK-ERROR: error: invalid operand for instruction
 | |
| //CHECK-ERROR-NEXT:     lsl sp, x2, x4
 | |
| 
 | |
|         asr wsp, w3, w9
 | |
| //CHECK-ERROR: error: invalid operand for instruction
 | |
| //CHECK-ERROR-NEXT:     asr wsp, w3, w9
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Data Processing (3 sources)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         madd sp, x3, x9, x10
 | |
| //CHECK-ERROR: error: invalid operand for instruction
 | |
| //CHECK-ERROR-NEXT:     madd sp, x3, x9, x10
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Exception generation
 | |
| //------------------------------------------------------------------------------
 | |
|         svc #-1
 | |
|         hlt #65536
 | |
|         dcps4 #43
 | |
|         dcps4
 | |
| // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         svc #-1
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         hlt #65536
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
 | |
| // CHECK-ERROR-NEXT:         dcps4 #43
 | |
| // CHECK-ERROR-NEXT:         ^
 | |
| // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
 | |
| // CHECK-ERROR-NEXT:         dcps4
 | |
| // CHECK-ERROR-NEXT:         ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Extract (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         extr w2, w20, w30, #-1
 | |
|         extr w9, w19, w20, #32
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         extr w2, w20, w30, #-1
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         extr w9, w19, w20, #32
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| 
 | |
|         extr x10, x15, x20, #-1
 | |
|         extr x20, x25, x30, #64
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         extr x10, x15, x20, #-1
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         extr x20, x25, x30, #64
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| 
 | |
|         ror w9, w10, #32
 | |
|         ror x10, x11, #64
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         ror w9, w10, #32
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         ror x10, x11, #64
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point compare
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fcmp s3, d2
 | |
| // CHECK-ERROR-AARCH64: error: expected floating-point constant #0.0
 | |
| // CHECK-ERROR-ARM64: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         fcmp s3, d2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         fcmp s9, #-0.0
 | |
|         fcmp d3, #-0.0
 | |
|         fcmp s1, #1.0
 | |
|         fcmpe s30, #-0.0
 | |
| // CHECK-ERROR: error: expected floating-point constant #0.0
 | |
| // CHECK-ERROR-NEXT:         fcmp s9, #-0.0
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
 | |
| // CHECK-ERROR-NEXT:         fcmp d3, #-0.0
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
 | |
| // CHECK-ERROR-NEXT:         fcmp s1, #1.0
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
 | |
| // CHECK-ERROR-NEXT:         fcmpe s30, #-0.0
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point conditional compare
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fccmp s19, s5, #-1, lt
 | |
|         fccmp s20, s7, #16, hs
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmp s19, s5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmp s20, s7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         fccmp d19, d5, #-1, lt
 | |
|         fccmp d20, d7, #16, hs
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmp d19, d5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmp d20, d7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         fccmpe s19, s5, #-1, lt
 | |
|         fccmpe s20, s7, #16, hs
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmpe s19, s5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmpe s20, s7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         fccmpe d19, d5, #-1, lt
 | |
|         fccmpe d20, d7, #16, hs
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmpe d19, d5, #-1, lt
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:        fccmpe d20, d7, #16, hs
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point conditional compare
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fcsel q3, q20, q9, pl
 | |
|         fcsel h9, h10, h11, mi
 | |
|         fcsel b9, b10, b11, mi
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         fcsel q3, q20, q9, pl
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: instruction requires: fullfp16
 | |
| // CHECK-ERROR-NEXT:         fcsel h9, h10, h11, mi
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         fcsel b9, b10, b11, mi
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point data-processing (1 source)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fmov d0, s3
 | |
|         fcvt d0, d1
 | |
| // CHECK-ERROR: error: expected compatible register or floating-point constant
 | |
| // CHECK-ERROR-NEXT:           fmov d0, s3
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:           fcvt d0, d1
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point data-processing (2 sources)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fadd s0, d3, d7
 | |
|         fmaxnm d3, s19, d12
 | |
|         fnmul d1, d9, s18
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:           fadd s0, d3, d7
 | |
| // CHECK-ERROR-NEXT: ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:           fmaxnm d3, s19, d12
 | |
| // CHECK-ERROR-NEXT: ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:           fnmul d1, d9, s18
 | |
| // CHECK-ERROR-NEXT: ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point data-processing (3 sources)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fmadd b3, b4, b5, b6
 | |
|         fmsub h1, h2, h3, h4
 | |
|         fnmadd q3, q5, q6, q7
 | |
|         fnmsub s2, s4, d5, h9
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         fmadd b3, b4, b5, b6
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: instruction requires: fullfp16
 | |
| // CHECK-ERROR-NEXT:         fmsub h1, h2, h3, h4
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         fnmadd q3, q5, q6, q7
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         fnmsub s2, s4, d5, h9
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point conditional compare
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fcvtzs w13, s31, #0
 | |
|         fcvtzs w19, s20, #33
 | |
|         fcvtzs wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:        fcvtzs w13, s31, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:        fcvtzs w19, s20, #33
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        fcvtzs wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| 
 | |
|         fcvtzs x13, s31, #0
 | |
|         fcvtzs x19, s20, #65
 | |
|         fcvtzs sp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
 | |
| // CHECK-ERROR-NEXT:        fcvtzs x13, s31, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
 | |
| // CHECK-ERROR-NEXT:        fcvtzs x19, s20, #65
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        fcvtzs sp, s19, #14
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| 
 | |
|         fcvtzu w13, s31, #0
 | |
|         fcvtzu w19, s20, #33
 | |
|         fcvtzu wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:        fcvtzu w13, s31, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
 | |
| // CHECK-ERROR-NEXT:        fcvtzu w19, s20, #33
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        fcvtzu wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| 
 | |
|         fcvtzu x13, s31, #0
 | |
|         fcvtzu x19, s20, #65
 | |
|         fcvtzu sp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
 | |
| // CHECK-ERROR-NEXT:        fcvtzu x13, s31, #0
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
 | |
| // CHECK-ERROR-NEXT:        fcvtzu x19, s20, #65
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        fcvtzu sp, s19, #14
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| 
 | |
|         scvtf w13, s31, #0
 | |
|         scvtf w19, s20, #33
 | |
|         scvtf wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        scvtf w13, s31, #0
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        scvtf w19, s20, #33
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        scvtf wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         scvtf x13, s31, #0
 | |
|         scvtf x19, s20, #65
 | |
|         scvtf sp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        scvtf x13, s31, #0
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        scvtf x19, s20, #65
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        scvtf sp, s19, #14
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         ucvtf w13, s31, #0
 | |
|         ucvtf w19, s20, #33
 | |
|         ucvtf wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ucvtf w13, s31, #0
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ucvtf w19, s20, #33
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ucvtf wsp, s19, #14
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         ucvtf x13, s31, #0
 | |
|         ucvtf x19, s20, #65
 | |
|         ucvtf sp, s19, #14
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ucvtf x13, s31, #0
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ucvtf x19, s20, #65
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ucvtf sp, s19, #14
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point immediate
 | |
| //------------------------------------------------------------------------------
 | |
|         ;; Exponent too large
 | |
|         fmov d3, #0.0625
 | |
|         fmov s2, #32.0
 | |
| // CHECK-ERROR: error: expected compatible register or floating-point constant
 | |
| // CHECK-ERROR-NEXT:           fmov d3, #0.0625
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
 | |
| // CHECK-ERROR-NEXT:           fmov s2, #32.0
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
|         ;; Fraction too precise
 | |
|         fmov s9, #1.03125
 | |
|         fmov s28, #1.96875
 | |
| // CHECK-ERROR: error: expected compatible register or floating-point constant
 | |
| // CHECK-ERROR-NEXT:           fmov s9, #1.03125
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
 | |
| // CHECK-ERROR-NEXT:           fmov s28, #1.96875
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ;; No particular reason, but a striking omission
 | |
|         fmov d0, #0.0
 | |
| // CHECK-ERROR-AARCH64: error: expected compatible register or floating-point constant
 | |
| // CHECK-ERROR-AARCH64-NEXT:           fmov d0, #0.0
 | |
| // CHECK-ERROR-AARCH64-NEXT:                    ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Floating-point <-> integer conversion
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         fmov x3, v0.d[0]
 | |
|         fmov v29.1d[1], x2
 | |
|         fmov x7, v0.d[2]
 | |
|         fcvtns sp, s5
 | |
|         scvtf s6, wsp
 | |
| // CHECK-ERROR: error: expected lane specifier '[1]'
 | |
| // CHECK-ERROR-NEXT:         fmov x3, v0.d[0]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
 | |
| // CHECK-ERROR-ARM64-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT: fmov v29.1d[1], x2
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
 | |
| // CHECK-ERROR-ARM64-NEXT: error: expected lane specifier '[1]'
 | |
| // CHECK-ERROR-NEXT: fmov x7, v0.d[2]
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         fcvtns sp, s5
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         scvtf s6, wsp
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load-register (literal)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ldr sp, some_label
 | |
|         ldrsw w3, somewhere
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr sp, some_label
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrsw w3, somewhere
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| 
 | |
|         ldrsw x2, #1048576
 | |
|         ldr q0, #-1048580
 | |
|         ldr x0, #2
 | |
| // CHECK-ERROR: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         ldrsw x2, #1048576
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         ldr q0, #-1048580
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         ldr x0, #2
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store exclusive
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|        stxrb w2, w3, [x4, #20]
 | |
|        stlxrh w10, w11, [w2]
 | |
| // CHECK-ERROR-AARCH64: error: expected '#0'
 | |
| // CHECK-ERROR-ARM64: error: index must be absent or #0
 | |
| // CHECK-ERROR-NEXT:         stxrb w2, w3, [x4, #20]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stlxrh w10, w11, [w2]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| 
 | |
|        stlxr  x20, w21, [sp]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stlxr  x20, w21, [sp]
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| 
 | |
|        ldxr   sp, [sp]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldxr   sp, [sp]
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| 
 | |
|        stxp x1, x2, x3, [x4]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stxp x1, x2,  x3, [x4]
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|        stlxp w5, x1, w4, [x5]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stlxp w5, x1, w4, [x5]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|        stlxp w17, w6, x7, [x22]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stlxp w17, w6, x7, [x22]
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store (unscaled immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ldurb w2, [sp, #256]
 | |
|         sturh w17, [x1, #256]
 | |
|         ldursw x20, [x1, #256]
 | |
|         ldur x12, [sp, #256]
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:        ldurb w2, [sp, #256]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         sturh w17, [x1, #256]
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldursw x20, [x1, #256]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldur x12, [sp, #256]
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         stur h2, [x2, #-257]
 | |
|         stur b2, [x2, #-257]
 | |
|         ldursb x9, [sp, #-257]
 | |
|         ldur w2, [x30, #-257]
 | |
|         stur q9, [x20, #-257]
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         stur h2, [x2, #-257]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         stur b2, [x2, #-257]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldursb x9, [sp, #-257]
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldur w2, [x30, #-257]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         stur q9, [x20, #-257]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         prfum pstl3strm, [xzr]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         prfum pstl3strm, [xzr]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load-store register (immediate post-indexed)
 | |
| //------------------------------------------------------------------------------
 | |
|         ldr x3, [x4, #25], #0
 | |
|         ldr x4, [x9, #0], #4
 | |
| // CHECK-ERROR-AARCH64: error: {{expected symbolic reference or integer|index must be a multiple of 8}} in range [0, 32760]
 | |
| // CHECK-ERROR-ARM64: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr x3, [x4, #25], #0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         ldr x4, [x9, #0], #4
 | |
| // CHECK-ERROR-AARCH64-NEXT:                           ^
 | |
| 
 | |
|         strb w1, [x19], #256
 | |
|         strb w9, [sp], #-257
 | |
|         strh w1, [x19], #256
 | |
|         strh w9, [sp], #-257
 | |
|         str w1, [x19], #256
 | |
|         str w9, [sp], #-257
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         strb w1, [x19], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         strb w9, [sp], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         strh w1, [x19], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         strh w9, [sp], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str w1, [x19], #256
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str w9, [sp], #-257
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldrb w1, [x19], #256
 | |
|         ldrb w9, [sp], #-257
 | |
|         ldrh w1, [x19], #256
 | |
|         ldrh w9, [sp], #-257
 | |
|         ldr w1, [x19], #256
 | |
|         ldr w9, [sp], #-257
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrb w1, [x19], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrb w9, [sp], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrh w1, [x19], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrh w9, [sp], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr w1, [x19], #256
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr w9, [sp], #-257
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldrsb x2, [x3], #256
 | |
|         ldrsb x22, [x13], #-257
 | |
|         ldrsh x2, [x3], #256
 | |
|         ldrsh x22, [x13], #-257
 | |
|         ldrsw x2, [x3], #256
 | |
|         ldrsw x22, [x13], #-257
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsb x2, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsb x22, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsh x2, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsh x22, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsw x2, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsw x22, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| 
 | |
|         ldrsb w2, [x3], #256
 | |
|         ldrsb w22, [x13], #-257
 | |
|         ldrsh w2, [x3], #256
 | |
|         ldrsh w22, [x13], #-257
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsb w2, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsb w22, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsh w2, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsh w22, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| 
 | |
|         str b3, [x3], #256
 | |
|         str b3, [x13], #-257
 | |
|         str h3, [x3], #256
 | |
|         str h3, [x13], #-257
 | |
|         str s3, [x3], #256
 | |
|         str s3, [x13], #-257
 | |
|         str d3, [x3], #256
 | |
|         str d3, [x13], #-257
 | |
|         str q3, [x3], #256
 | |
|         str q3, [x13], #-257
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str b3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str b3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str h3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str h3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str s3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str s3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str d3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str d3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str q3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str q3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| 
 | |
|         ldr b3, [x3], #256
 | |
|         ldr b3, [x13], #-257
 | |
|         ldr h3, [x3], #256
 | |
|         ldr h3, [x13], #-257
 | |
|         ldr s3, [x3], #256
 | |
|         ldr s3, [x13], #-257
 | |
|         ldr d3, [x3], #256
 | |
|         ldr d3, [x13], #-257
 | |
|         ldr q3, [x3], #256
 | |
|         ldr q3, [x13], #-257
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr b3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr b3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr h3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr h3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr s3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr s3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr d3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr d3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr q3, [x3], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr q3, [x13], #-257
 | |
| // CHECK-ERROR-NEXT:                        ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load-store register (immediate pre-indexed)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ldr x3, [x4]!
 | |
| // CHECK-ERROR: error:
 | |
| // CHECK-ERROR-NEXT:         ldr x3, [x4]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         strb w1, [x19, #256]!
 | |
|         strb w9, [sp, #-257]!
 | |
|         strh w1, [x19, #256]!
 | |
|         strh w9, [sp, #-257]!
 | |
|         str w1, [x19, #256]!
 | |
|         str w9, [sp, #-257]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         strb w1, [x19, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         strb w9, [sp, #-257]!
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         strh w1, [x19, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         strh w9, [sp, #-257]!
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         str w1, [x19, #256]!
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str w9, [sp, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         ldrb w1, [x19, #256]!
 | |
|         ldrb w9, [sp, #-257]!
 | |
|         ldrh w1, [x19, #256]!
 | |
|         ldrh w9, [sp, #-257]!
 | |
|         ldr w1, [x19, #256]!
 | |
|         ldr w9, [sp, #-257]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrb w1, [x19, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrb w9, [sp, #-257]!
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrh w1, [x19, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrh w9, [sp, #-257]!
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr w1, [x19, #256]!
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr w9, [sp, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         ldrsb x2, [x3, #256]!
 | |
|         ldrsb x22, [x13, #-257]!
 | |
|         ldrsh x2, [x3, #256]!
 | |
|         ldrsh x22, [x13, #-257]!
 | |
|         ldrsw x2, [x3, #256]!
 | |
|         ldrsw x22, [x13, #-257]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrsb x2, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsb x22, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrsh x2, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsh x22, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrsw x2, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsw x22, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
|         ldrsb w2, [x3, #256]!
 | |
|         ldrsb w22, [x13, #-257]!
 | |
|         ldrsh w2, [x3, #256]!
 | |
|         ldrsh w22, [x13, #-257]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrsb w2, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsb w22, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrsh w2, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrsh w22, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
|         str b3, [x3, #256]!
 | |
|         str b3, [x13, #-257]!
 | |
|         str h3, [x3, #256]!
 | |
|         str h3, [x13, #-257]!
 | |
|         str s3, [x3, #256]!
 | |
|         str s3, [x13, #-257]!
 | |
|         str d3, [x3, #256]!
 | |
|         str d3, [x13, #-257]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         str b3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str b3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         str h3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str h3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         str s3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str s3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         str d3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str d3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         ldr b3, [x3, #256]!
 | |
|         ldr b3, [x13, #-257]!
 | |
|         ldr h3, [x3, #256]!
 | |
|         ldr h3, [x13, #-257]!
 | |
|         ldr s3, [x3, #256]!
 | |
|         ldr s3, [x13, #-257]!
 | |
|         ldr d3, [x3, #256]!
 | |
|         ldr d3, [x13, #-257]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr b3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr b3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr h3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr h3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr s3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr s3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr d3, [x3, #256]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr d3, [x13, #-257]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store (unprivileged)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ldtrb w2, [sp, #256]
 | |
|         sttrh w17, [x1, #256]
 | |
|         ldtrsw x20, [x1, #256]
 | |
|         ldtr x12, [sp, #256]
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:        ldtrb w2, [sp, #256]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         sttrh w17, [x1, #256]
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldtrsw x20, [x1, #256]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldtr x12, [sp, #256]
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         sttr h2, [x2, #-257]
 | |
|         sttr b2, [x2, #-257]
 | |
|         ldtrsb x9, [sp, #-257]
 | |
|         ldtr w2, [x30, #-257]
 | |
|         sttr q9, [x20, #-257]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sttr h2, [x2, #-257]
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sttr b2, [x2, #-257]
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldtrsb x9, [sp, #-257]
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldtr w2, [x30, #-257]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         sttr q9, [x20, #-257]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store (unsigned immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| //// Out of range immediates
 | |
|         ldr q0, [x11, #65536]
 | |
|         ldr x0, [sp, #32768]
 | |
|         ldr w0, [x4, #16384]
 | |
|         ldrh w2, [x21, #8192]
 | |
|         ldrb w3, [x12, #4096]
 | |
| // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr q0, [x11, #65536]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr x0, [sp, #32768]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldr w0, [x4, #16384]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrh w2, [x21, #8192]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         ldrb w3, [x12, #4096]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
| //// Misaligned addresses
 | |
|         ldr w0, [x0, #2]
 | |
|         ldrsh w2, [x0, #123]
 | |
|         str q0, [x0, #8]
 | |
| // CHECK-ERROR-AARCH64: error: too few operands for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         ldr w0, [x0, #2]
 | |
| // CHECK-ERROR-AARCH64-NEXT:                 ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         ldrsh w2, [x0, #123]
 | |
| // CHECK-ERROR-AARCH64-NEXT:                   ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         str q0, [x0, #8]
 | |
| // CHECK-ERROR-AARCH64-NEXT:                 ^
 | |
| 
 | |
| //// 32-bit addresses
 | |
|         ldr w0, [w20]
 | |
|         ldrsh x3, [wsp]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldr w0, [w20]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldrsh x3, [wsp]
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| 
 | |
| //// Store things
 | |
|         strb w0, [wsp]
 | |
|         strh w31, [x23, #1]
 | |
|         str x5, [x22, #12]
 | |
|         str w7, [x12, #16384]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT: strb w0, [wsp]
 | |
| // CHECK-ERROR-NEXT:           ^
 | |
| // CHECK-ERROR-AARCH64: error: invalid operand for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         strh w31, [x23, #1]
 | |
| // CHECK-ERROR-AARCH64-NEXT:              ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
 | |
| // CHECK-ERROR-AARCH64-NEXT:         str x5, [x22, #12]
 | |
| // CHECK-ERROR-AARCH64-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
 | |
| // CHECK-ERROR-NEXT:         str w7, [x12, #16384]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
| //// Bad PRFMs
 | |
|         prfm #-1, [sp]
 | |
|         prfm #32, [sp, #8]
 | |
|         prfm pldl1strm, [w3, #8]
 | |
|         prfm wibble, [sp]
 | |
| // CHECK-ERROR-AARCH64: error: Invalid immediate for instruction
 | |
| // CHECK-ERROR-ARM64: error: prefetch operand out of range, [0,31] expected
 | |
| // CHECK-ERROR-NEXT:        prfm #-1, [sp]
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: Invalid immediate for instruction
 | |
| // CHECK-ERROR-ARM64-NEXT: error: prefetch operand out of range, [0,31] expected
 | |
| // CHECK-ERROR-NEXT:        prfm #32, [sp, #8]
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        prfm pldl1strm, [w3, #8]
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
 | |
| // CHECK-ERROR-ARM64-NEXT: error: pre-fetch hint expected
 | |
| // CHECK-ERROR-NEXT:        prfm wibble, [sp]
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store register (register offset)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ldr w3, [xzr, x3]
 | |
|         ldr w4, [x0, x4, lsl]
 | |
|         ldr w9, [x5, x5, uxtw]
 | |
|         ldr w10, [x6, x9, sxtw #2]
 | |
|         ldr w11, [x7, w2, lsl #2]
 | |
|         ldr w12, [x8, w1, sxtx]
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:        ldr w3, [xzr, x3]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
 | |
| // CHECK-ERROR-NEXT:         ldr w4, [x0, x4, lsl]
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
 | |
| // CHECK-ERROR-NEXT:         ldr w9, [x5, x5, uxtw]
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
 | |
| // CHECK-ERROR-NEXT:         ldr w10, [x6, x9, sxtw #2]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
 | |
| // CHECK-ERROR-NEXT:         ldr w11, [x7, w2, lsl #2]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
 | |
| // CHECK-ERROR-NEXT:         ldr w12, [x8, w1, sxtx]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| 
 | |
|         ldrsb w9, [x4, x2, lsl #-1]
 | |
|         strb w9, [x4, x2, lsl #1]
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         ldrsb w9, [x4, x2, lsl #-1]
 | |
| // CHECK-ERROR-NEXT:                                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0
 | |
| // CHECK-ERROR-NEXT:         strb w9, [x4, x2, lsl #1]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         ldrsh w9, [x4, x2, lsl #-1]
 | |
|         ldr h13, [x4, w2, uxtw #2]
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         ldrsh w9, [x4, x2, lsl #-1]
 | |
| // CHECK-ERROR-NEXT:                                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
 | |
| // CHECK-ERROR-NEXT:         ldr h13, [x4, w2, uxtw #2]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| 
 | |
|         str w9, [x5, w9, sxtw #-1]
 | |
|         str s3, [sp, w9, uxtw #1]
 | |
|         ldrsw x9, [x15, x4, sxtx #3]
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         str w9, [x5, w9, sxtw #-1]
 | |
| // CHECK-ERROR-NEXT:                                ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
 | |
| // CHECK-ERROR-NEXT:         str s3, [sp, w9, uxtw #1]
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
 | |
| // CHECK-ERROR-NEXT:         ldrsw x9, [x15, x4, sxtx #3]
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| 
 | |
|         str xzr, [x5, x9, sxtx #-1]
 | |
|         prfm pldl3keep, [sp, x20, lsl #2]
 | |
|         ldr d3, [x20, wzr, uxtw #4]
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         str xzr, [x5, x9, sxtx #-1]
 | |
| // CHECK-ERROR-NEXT:                                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
 | |
| // CHECK-ERROR-NEXT:         prfm pldl3keep, [sp, x20, lsl #2]
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
 | |
| // CHECK-ERROR-NEXT:         ldr d3, [x20, wzr, uxtw #4]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         ldr q5, [sp, x2, lsl #-1]
 | |
|         ldr q10, [x20, w4, uxtw #2]
 | |
|         str q21, [x20, w4, uxtw #5]
 | |
| // CHECK-ERROR-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         ldr q5, [sp, x2, lsl #-1]
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
 | |
| // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
 | |
| // CHECK-ERROR-NEXT:         ldr q10, [x20, w4, uxtw #2]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
 | |
| // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
 | |
| // CHECK-ERROR-NEXT:         str q21, [x20, w4, uxtw #5]
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store register pair (offset)
 | |
| //------------------------------------------------------------------------------
 | |
|         ldp w3, w2, [x4, #1]
 | |
|         stp w1, w2, [x3, #253]
 | |
|         stp w9, w10, [x5, #256]
 | |
|         ldp w11, w12, [x9, #-260]
 | |
|         stp wsp, w9, [sp]
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp w3, w2, [x4, #1]
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp w1, w2, [x3, #253]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp w9, w10, [x5, #256]
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp w11, w12, [x9, #-260]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stp wsp, w9, [sp]
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         ldpsw x9, x2, [sp, #2]
 | |
|         ldpsw x1, x2, [x10, #256]
 | |
|         ldpsw x3, x4, [x11, #-260]
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x9, x2, [sp, #2]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x1, x2, [x10, #256]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x3, x4, [x11, #-260]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldp x2, x5, [sp, #4]
 | |
|         ldp x5, x6, [x9, #512]
 | |
|         stp x7, x8, [x10, #-520]
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp x2, x5, [sp, #4]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp x5, x6, [x9, #512]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stp x7, x8, [x10, #-520]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ldp sp, x3, [x10]
 | |
|         stp x3, sp, [x9]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp sp, x3, [x10]
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stp x3, sp, [x9]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         stp s3, s5, [sp, #-2]
 | |
|         ldp s6, s26, [x4, #-260]
 | |
|         stp s13, s19, [x5, #256]
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp s3, s5, [sp, #-2]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp s6, s26, [x4, #-260]
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp s13, s19, [x5, #256]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldp d3, d4, [xzr]
 | |
|         ldp d5, d6, [x0, #512]
 | |
|         stp d7, d8, [x0, #-520]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp d3, d4, [xzr]
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp d5, d6, [x0, #512]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stp d7, d8, [x0, #-520]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ldp d3, q2, [sp]
 | |
|         ldp q3, q5, [sp, #8]
 | |
|         stp q20, q25, [x5, #1024]
 | |
|         ldp q30, q15, [x23, #-1040]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp d3, q2, [sp]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldp q3, q5, [sp, #8]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         stp q20, q25, [x5, #1024]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldp q30, q15, [x23, #-1040]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store register pair (post-indexed)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ldp w3, w2, [x4], #1
 | |
|         stp w1, w2, [x3], #253
 | |
|         stp w9, w10, [x5], #256
 | |
|         ldp w11, w12, [x9], #-260
 | |
|         stp wsp, w9, [sp], #0
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp w3, w2, [x4], #1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp w1, w2, [x3], #253
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp w9, w10, [x5], #256
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp w11, w12, [x9], #-260
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stp wsp, w9, [sp], #0
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         ldpsw x9, x2, [sp], #2
 | |
|         ldpsw x1, x2, [x10], #256
 | |
|         ldpsw x3, x4, [x11], #-260
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x9, x2, [sp], #2
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x1, x2, [x10], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x3, x4, [x11], #-260
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldp x2, x5, [sp], #4
 | |
|         ldp x5, x6, [x9], #512
 | |
|         stp x7, x8, [x10], #-520
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp x2, x5, [sp], #4
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp x5, x6, [x9], #512
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stp x7, x8, [x10], #-520
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| 
 | |
|         ldp sp, x3, [x10], #0
 | |
|         stp x3, sp, [x9], #0
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp sp, x3, [x10], #0
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stp x3, sp, [x9], #0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         stp s3, s5, [sp], #-2
 | |
|         ldp s6, s26, [x4], #-260
 | |
|         stp s13, s19, [x5], #256
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp s3, s5, [sp], #-2
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp s6, s26, [x4], #-260
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp s13, s19, [x5], #256
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldp d3, d4, [xzr], #0
 | |
|         ldp d5, d6, [x0], #512
 | |
|         stp d7, d8, [x0], #-520
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp d3, d4, [xzr], #0
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp d5, d6, [x0], #512
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stp d7, d8, [x0], #-520
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ldp d3, q2, [sp], #0
 | |
|         ldp q3, q5, [sp], #8
 | |
|         stp q20, q25, [x5], #1024
 | |
|         ldp q30, q15, [x23], #-1040
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp d3, q2, [sp], #0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldp q3, q5, [sp], #8
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         stp q20, q25, [x5], #1024
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldp q30, q15, [x23], #-1040
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store register pair (pre-indexed)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         ldp w3, w2, [x4, #1]!
 | |
|         stp w1, w2, [x3, #253]!
 | |
|         stp w9, w10, [x5, #256]!
 | |
|         ldp w11, w12, [x9, #-260]!
 | |
|         stp wsp, w9, [sp, #0]!
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp w3, w2, [x4, #1]!
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp w1, w2, [x3, #253]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp w9, w10, [x5, #256]!
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp w11, w12, [x9, #-260]!
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stp wsp, w9, [sp, #0]!
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         ldpsw x9, x2, [sp, #2]!
 | |
|         ldpsw x1, x2, [x10, #256]!
 | |
|         ldpsw x3, x4, [x11, #-260]!
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x9, x2, [sp, #2]!
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x1, x2, [x10, #256]!
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldpsw x3, x4, [x11, #-260]!
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldp x2, x5, [sp, #4]!
 | |
|         ldp x5, x6, [x9, #512]!
 | |
|         stp x7, x8, [x10, #-520]!
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp x2, x5, [sp, #4]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp x5, x6, [x9, #512]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stp x7, x8, [x10, #-520]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ldp sp, x3, [x10, #0]!
 | |
|         stp x3, sp, [x9, #0]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp sp, x3, [x10, #0]!
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stp x3, sp, [x9, #0]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         stp s3, s5, [sp, #-2]!
 | |
|         ldp s6, s26, [x4, #-260]!
 | |
|         stp s13, s19, [x5, #256]!
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp s3, s5, [sp, #-2]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldp s6, s26, [x4, #-260]!
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stp s13, s19, [x5, #256]!
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldp d3, d4, [xzr, #0]!
 | |
|         ldp d5, d6, [x0, #512]!
 | |
|         stp d7, d8, [x0, #-520]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp d3, d4, [xzr, #0]!
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldp d5, d6, [x0, #512]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stp d7, d8, [x0, #-520]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ldp d3, q2, [sp, #0]!
 | |
|         ldp q3, q5, [sp, #8]!
 | |
|         stp q20, q25, [x5, #1024]!
 | |
|         ldp q30, q15, [x23, #-1040]!
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldp d3, q2, [sp, #0]!
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldp q3, q5, [sp, #8]!
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         stp q20, q25, [x5, #1024]!
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldp q30, q15, [x23, #-1040]!
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Load/store register pair (offset)
 | |
| //------------------------------------------------------------------------------
 | |
|         ldnp w3, w2, [x4, #1]
 | |
|         stnp w1, w2, [x3, #253]
 | |
|         stnp w9, w10, [x5, #256]
 | |
|         ldnp w11, w12, [x9, #-260]
 | |
|         stnp wsp, w9, [sp]
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldnp w3, w2, [x4, #1]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stnp w1, w2, [x3, #253]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stnp w9, w10, [x5, #256]
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldnp w11, w12, [x9, #-260]
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stnp wsp, w9, [sp]
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         ldnp x2, x5, [sp, #4]
 | |
|         ldnp x5, x6, [x9, #512]
 | |
|         stnp x7, x8, [x10, #-520]
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldnp x2, x5, [sp, #4]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldnp x5, x6, [x9, #512]
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stnp x7, x8, [x10, #-520]
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| 
 | |
|         ldnp sp, x3, [x10]
 | |
|         stnp x3, sp, [x9]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldnp sp, x3, [x10]
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         stnp x3, sp, [x9]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         stnp s3, s5, [sp, #-2]
 | |
|         ldnp s6, s26, [x4, #-260]
 | |
|         stnp s13, s19, [x5, #256]
 | |
| // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stnp s3, s5, [sp, #-2]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         ldnp s6, s26, [x4, #-260]
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
 | |
| // CHECK-ERROR-NEXT:         stnp s13, s19, [x5, #256]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
|         ldnp d3, d4, [xzr]
 | |
|         ldnp d5, d6, [x0, #512]
 | |
|         stnp d7, d8, [x0, #-520]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldnp d3, d4, [xzr]
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         ldnp d5, d6, [x0, #512]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
 | |
| // CHECK-ERROR-NEXT:         stnp d7, d8, [x0, #-520]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ldnp d3, q2, [sp]
 | |
|         ldnp q3, q5, [sp, #8]
 | |
|         stnp q20, q25, [x5, #1024]
 | |
|         ldnp q30, q15, [x23, #-1040]
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ldnp d3, q2, [sp]
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldnp q3, q5, [sp, #8]
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         stnp q20, q25, [x5, #1024]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
 | |
| // CHECK-ERROR-NEXT:         ldnp q30, q15, [x23, #-1040]
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Logical (shifted register)
 | |
| //------------------------------------------------------------------------------
 | |
|         orr w0, w1, #0xffffffff
 | |
|         and x3, x5, #0xffffffffffffffff
 | |
| // CHECK-ERROR: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         orr w0, w1, #0xffffffff
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         and x3, x5, #0xffffffffffffffff
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         ands w3, w9, #0x0
 | |
|         eor x2, x0, #0x0
 | |
| // CHECK-ERROR: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         ands w3, w9, #0x0
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         eor x2, x0, #0x0
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         eor w3, w5, #0x83
 | |
|         eor x9, x20, #0x1234
 | |
| // CHECK-ERROR: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         eor w3, w5, #0x83
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         eor x9, x20, #0x1234
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         and wzr, w4, 0xffff0000
 | |
|         eor xzr, x9, #0xffff0000ffff0000
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         and wzr, w4, 0xffff0000
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         eor xzr, x9, #0xffff0000ffff0000
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         orr w3, wsp, #0xf0f0f0f0
 | |
|         ands x3, sp, #0xaaaaaaaaaaaaaaaa
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         orr w3, wsp, #0xf0f0f0f0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ands x3, sp, #0xaaaaaaaaaaaaaaaa
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         tst sp, #0xe0e0e0e0e0e0e0e0
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         tst sp, #0xe0e0e0e0e0e0e0e0
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         // movi has been removed from the specification. Make sure it's really gone.
 | |
|         movi wzr, #0x44444444
 | |
|         movi w3, #0xffff
 | |
|         movi x9, #0x0000ffff00000000
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         movi wzr, #0x44444444
 | |
| // CHECK-ERROR-NEXT:         ^
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         movi w3, #0xffff
 | |
| // CHECK-ERROR-NEXT:         ^
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         movi x9, #0x0000ffff00000000
 | |
| // CHECK-ERROR-NEXT:         ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Logical (shifted register)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         //// Out of range shifts
 | |
|         and w2, w24, w6, lsl #-1
 | |
|         and w4, w6, w12, lsl #32
 | |
|         and x4, x6, x12, lsl #64
 | |
|         and x2, x5, x11, asr
 | |
| // CHECK-ERROR: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         and w2, w24, w6, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                               ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:         and w4, w6, w12, lsl #32
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:         and x4, x6, x12, lsl #64
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
 | |
| // CHECK-ERROR-NEXT:         and x2, x5, x11, asr
 | |
| // CHECK-ERROR-NEXT:                             ^
 | |
| 
 | |
|         //// sp not allowed
 | |
|         orn wsp, w3, w5
 | |
|         bics x20, sp, x9, lsr #0
 | |
|         orn x2, x6, sp, lsl #3
 | |
| // FIXME: the diagnostic we get for 'orn wsp, w3, w5' is from the orn alias,
 | |
| // which is a better match than the genuine ORNWri, whereas it would be better
 | |
| // to get the ORNWri diagnostic when the alias did not match, i.e. the
 | |
| // alias' diagnostics should have a lower priority.
 | |
| // CHECK-ERROR: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         orn wsp, w3, w5
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         bics x20, sp, x9, lsr #0
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         orn x2, x6, sp, lsl #3
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         //// Mismatched registers
 | |
|         and x3, w2, w1
 | |
|         ands w1, x12, w2
 | |
|         and x4, x5, w6, lsl #12
 | |
|         orr w2, w5, x7, asr #0
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         and x3, w2, w1
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         ands w1, x12, w2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         and x4, x5, w6, lsl #12
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
 | |
| // CHECK-ERROR-NEXT:         orr w2, w5, x7, asr #0
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
|         //// Shifts should not be allowed on mov
 | |
|         mov w3, w7, lsl #13
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         mov w3, w7, lsl #13
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Move wide (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         movz w3, #65536, lsl #0
 | |
|         movz w4, #65536
 | |
|         movn w1, #2, lsl #1
 | |
|         movk w3, #0, lsl #-1
 | |
|         movn w2, #-1, lsl #0
 | |
|         movz x3, #-1
 | |
|         movk w3, #1, lsl #32
 | |
|         movn x2, #12, lsl #64
 | |
| // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz w3, #65536, lsl #0
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz w4, #65536
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
 | |
| // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
 | |
| // CHECK-ERROR-NEXT:         movn w1, #2, lsl #1
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: only 'lsl #+N' valid after immediate
 | |
| // CHECK-ERROR-ARM64-NEXT: error: expected integer shift amount
 | |
| // CHECK-ERROR-NEXT:         movk w3, #0, lsl #-1
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movn w2, #-1, lsl #0
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz x3, #-1
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
 | |
| // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
 | |
| // CHECK-ERROR-NEXT:         movk w3, #1, lsl #32
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
 | |
| // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0, 16, 32 or 48
 | |
| // CHECK-ERROR-NEXT:         movn x2, #12, lsl #64
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         movz x12, #:abs_g0:sym, lsl #16
 | |
|         movz x12, #:abs_g0:sym, lsl #0
 | |
|         movn x2, #:abs_g0:sym
 | |
|         movk w3, #:abs_g0:sym
 | |
|         movz x3, #:abs_g0_nc:sym
 | |
|         movn x4, #:abs_g0_nc:sym
 | |
| // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz x12, #:abs_g0:sym, lsl #16
 | |
| // CHECK-ERROR-NEXT:                                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz x12, #:abs_g0:sym, lsl #0
 | |
| // CHECK-ERROR-NEXT:                                 ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-AARCH64-NEXT:         movn x2, #:abs_g0:sym
 | |
| // CHECK-ERROR-AARCH64-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk w3, #:abs_g0:sym
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz x3, #:abs_g0_nc:sym
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movn x4, #:abs_g0_nc:sym
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         movn x2, #:abs_g1:sym
 | |
|         movk w3, #:abs_g1:sym
 | |
|         movz x3, #:abs_g1_nc:sym
 | |
|         movn x4, #:abs_g1_nc:sym
 | |
| // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-AARCH64-NEXT:         movn x2, #:abs_g1:sym
 | |
| // CHECK-ERROR-AARCH64-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk w3, #:abs_g1:sym
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz x3, #:abs_g1_nc:sym
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movn x4, #:abs_g1_nc:sym
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
|         movz w12, #:abs_g2:sym
 | |
|         movn x12, #:abs_g2:sym
 | |
|         movk x13, #:abs_g2:sym
 | |
|         movk w3, #:abs_g2_nc:sym
 | |
|         movz x13, #:abs_g2_nc:sym
 | |
|         movn x24, #:abs_g2_nc:sym
 | |
| // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz w12, #:abs_g2:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-AARCH64-NEXT:         movn x12, #:abs_g2:sym
 | |
| // CHECK-ERROR-AARCH64-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk x13, #:abs_g2:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk w3, #:abs_g2_nc:sym
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz x13, #:abs_g2_nc:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movn x24, #:abs_g2_nc:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         movn x19, #:abs_g3:sym
 | |
|         movz w20, #:abs_g3:sym
 | |
|         movk w21, #:abs_g3:sym
 | |
| // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-AARCH64-NEXT:         movn x19, #:abs_g3:sym
 | |
| // CHECK-ERROR-AARCH64-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz w20, #:abs_g3:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk w21, #:abs_g3:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         movk x19, #:abs_g0_s:sym
 | |
|         movk w23, #:abs_g0_s:sym
 | |
| // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk x19, #:abs_g0_s:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk w23, #:abs_g0_s:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         movk x19, #:abs_g1_s:sym
 | |
|         movk w23, #:abs_g1_s:sym
 | |
| // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk x19, #:abs_g1_s:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk w23, #:abs_g1_s:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
|         movz w2, #:abs_g2_s:sym
 | |
|         movn w29, #:abs_g2_s:sym
 | |
|         movk x19, #:abs_g2_s:sym
 | |
|         movk w23, #:abs_g2_s:sym
 | |
| // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movz w2, #:abs_g2_s:sym
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movn w29, #:abs_g2_s:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk x19, #:abs_g2_s:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
 | |
| // CHECK-ERROR-NEXT:         movk w23, #:abs_g2_s:sym
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // PC-relative addressing
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         adr sp, loc             // expects xzr
 | |
|         adrp x3, #20            // Immediate unaligned
 | |
|         adrp w2, loc            // 64-bit register needed
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adr sp, loc
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         adrp x3, #20
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         adrp w2, loc
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         adr x9, #1048576
 | |
|         adr x2, #-1048577
 | |
|         adrp x9, #4294967296
 | |
|         adrp x20, #-4294971392
 | |
| // CHECK-ERROR: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         adr x9, #1048576
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         adr x2, #-1048577
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         adrp x9, #4294967296
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         adrp x20, #-4294971392
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // System
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         hint #-1
 | |
|         hint #128
 | |
| // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 127]
 | |
| // CHECK-ERROR-NEXT:         hint #-1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 127]
 | |
| // CHECK-ERROR-NEXT:         hint #128
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
|         clrex #-1
 | |
|         clrex #16
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:         clrex #-1
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:         clrex #16
 | |
| // CHECK-ERROR-NEXT:               ^
 | |
| 
 | |
|         dsb #-1
 | |
|         dsb #16
 | |
|         dmb #-1
 | |
|         dmb #16
 | |
| // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
 | |
| // CHECK-ERROR-NEXT:         dsb #-1
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
 | |
| // CHECK-ERROR-NEXT:         dsb #16
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
 | |
| // CHECK-ERROR-NEXT:         dmb #-1
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
 | |
| // CHECK-ERROR-NEXT:         dmb #16
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         isb #-1
 | |
|         isb #16
 | |
| // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
 | |
| // CHECK-ERROR-NEXT:         isb #-1
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
 | |
| // CHECK-ERROR-NEXT:         isb #16
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         msr daifset, x4
 | |
|         msr spsel, #-1
 | |
|         msr spsel #-1
 | |
|         msr daifclr, #16
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:         msr daifset, x4
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:         msr spsel, #-1
 | |
| // CHECK-ERROR-NEXT:                    ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected comma before next operand|unexpected token in argument list}}
 | |
| // CHECK-ERROR-NEXT:         msr spsel #-1
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
 | |
| // CHECK-ERROR-NEXT:         msr daifclr, #16
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| 
 | |
|         sys #8, c1, c2, #7, x9
 | |
|         sys #3, c16, c2, #3, x10
 | |
|         sys #2, c11, c16, #5
 | |
|         sys #4, c9, c8, #8, xzr
 | |
|         sysl x11, #8, c1, c2, #7
 | |
|         sysl x13, #3, c16, c2, #3
 | |
|         sysl x9, #2, c11, c16, #5
 | |
|         sysl x4, #4, c9, c8, #8
 | |
| // CHECK-ERROR-NEXT: error:  {{expected|immediate must be an}} integer in range [0, 7]
 | |
| // CHECK-ERROR-NEXT:         sys #8, c1, c2, #7, x9
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
 | |
| // CHECK-ERROR-NEXT:         sys #3, c16, c2, #3, x10
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
 | |
| // CHECK-ERROR-NEXT:         sys #2, c11, c16, #5
 | |
| // CHECK-ERROR-NEXT:                      ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
 | |
| // CHECK-ERROR-NEXT:         sys #4, c9, c8, #8, xzr
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
 | |
| // CHECK-ERROR-NEXT:         sysl x11, #8, c1, c2, #7
 | |
| // CHECK-ERROR-NEXT:                   ^
 | |
| // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
 | |
| // CHECK-ERROR-NEXT:         sysl x13, #3, c16, c2, #3
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
 | |
| // CHECK-ERROR-NEXT:         sysl x9, #2, c11, c16, #5
 | |
| // CHECK-ERROR-NEXT:                           ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
 | |
| // CHECK-ERROR-NEXT:         sysl x4, #4, c9, c8, #8
 | |
| // CHECK-ERROR-NEXT:                              ^
 | |
| 
 | |
|         ic ialluis, x2
 | |
|         ic allu, x7
 | |
|         ic ivau
 | |
| // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         ic ialluis, x2
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
 | |
| // CHECK-ERROR-ARM64-NEXT: error: invalid operand for IC instruction
 | |
| // CHECK-ERROR-NEXT:         ic allu, x7
 | |
| // CHECK-ERROR-NEXT:            ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         ic ivau
 | |
| // CHECK-ERROR-NEXT:            ^
 | |
| 
 | |
|         tlbi IPAS2E1IS
 | |
|         tlbi IPAS2LE1IS
 | |
|         tlbi VMALLE1IS, x12
 | |
|         tlbi ALLE2IS, x11
 | |
|         tlbi ALLE3IS, x20
 | |
|         tlbi VAE1IS
 | |
|         tlbi VAE2IS
 | |
|         tlbi VAE3IS
 | |
|         tlbi ASIDE1IS
 | |
|         tlbi VAAE1IS
 | |
|         tlbi ALLE1IS, x0
 | |
|         tlbi VALE1IS
 | |
|         tlbi VALE2IS
 | |
|         tlbi VALE3IS
 | |
|         tlbi VMALLS12E1IS, xzr
 | |
|         tlbi VAALE1IS
 | |
|         tlbi IPAS2E1
 | |
|         tlbi IPAS2LE1
 | |
|         tlbi VMALLE1, x9
 | |
|         tlbi ALLE2, x10
 | |
|         tlbi ALLE3, x11
 | |
|         tlbi VAE1
 | |
|         tlbi VAE2
 | |
|         tlbi VAE3
 | |
|         tlbi ASIDE1
 | |
|         tlbi VAAE1
 | |
|         tlbi ALLE1, x25
 | |
|         tlbi VALE1
 | |
|         tlbi VALE2
 | |
|         tlbi VALE3
 | |
|         tlbi VMALLS12E1, x15
 | |
|         tlbi VAALE1
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi IPAS2E1IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi IPAS2LE1IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VMALLE1IS, x12
 | |
| // CHECK-ERROR-NEXT:                         ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ALLE2IS, x11
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ALLE3IS, x20
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAE1IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAE2IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAE3IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ASIDE1IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAAE1IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ALLE1IS, x0
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VALE1IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VALE2IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VALE3IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VMALLS12E1IS, xzr
 | |
| // CHECK-ERROR-NEXT:                            ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAALE1IS
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi IPAS2E1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi IPAS2LE1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VMALLE1, x9
 | |
| // CHECK-ERROR-NEXT:                       ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ALLE2, x10
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ALLE3, x11
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAE1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAE2
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAE3
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ASIDE1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAAE1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi ALLE1, x25
 | |
| // CHECK-ERROR-NEXT:                     ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VALE1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VALE2
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VALE3
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VMALLS12E1, x15
 | |
| // CHECK-ERROR-NEXT:                          ^
 | |
| // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
 | |
| // CHECK-ERROR-NEXT:         tlbi VAALE1
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 | |
| // For the MSR/MRS instructions, first make sure read-only and
 | |
| // write-only registers actually are.
 | |
|         msr MDCCSR_EL0, x12
 | |
|         msr DBGDTRRX_EL0, x12
 | |
|         msr MDRAR_EL1, x12
 | |
|         msr OSLSR_EL1, x12
 | |
|         msr DBGAUTHSTATUS_EL1, x12
 | |
|         msr MIDR_EL1, x12
 | |
|         msr CCSIDR_EL1, x12
 | |
|         msr CLIDR_EL1, x12
 | |
|         msr CTR_EL0, x12
 | |
|         msr MPIDR_EL1, x12
 | |
|         msr REVIDR_EL1, x12
 | |
|         msr AIDR_EL1, x12
 | |
|         msr DCZID_EL0, x12
 | |
|         msr ID_PFR0_EL1, x12
 | |
|         msr ID_PFR1_EL1, x12
 | |
|         msr ID_DFR0_EL1, x12
 | |
|         msr ID_AFR0_EL1, x12
 | |
|         msr ID_MMFR0_EL1, x12
 | |
|         msr ID_MMFR1_EL1, x12
 | |
|         msr ID_MMFR2_EL1, x12
 | |
|         msr ID_MMFR3_EL1, x12
 | |
|         msr ID_MMFR4_EL1, x12
 | |
|         msr ID_ISAR0_EL1, x12
 | |
|         msr ID_ISAR1_EL1, x12
 | |
|         msr ID_ISAR2_EL1, x12
 | |
|         msr ID_ISAR3_EL1, x12
 | |
|         msr ID_ISAR4_EL1, x12
 | |
|         msr ID_ISAR5_EL1, x12
 | |
|         msr MVFR0_EL1, x12
 | |
|         msr MVFR1_EL1, x12
 | |
|         msr MVFR2_EL1, x12
 | |
|         msr ID_AA64PFR0_EL1, x12
 | |
|         msr ID_AA64PFR1_EL1, x12
 | |
|         msr ID_AA64DFR0_EL1, x12
 | |
|         msr ID_AA64DFR1_EL1, x12
 | |
|         msr ID_AA64AFR0_EL1, x12
 | |
|         msr ID_AA64AFR1_EL1, x12
 | |
|         msr ID_AA64ISAR0_EL1, x12
 | |
|         msr ID_AA64ISAR1_EL1, x12
 | |
|         msr ID_AA64MMFR0_EL1, x12
 | |
|         msr ID_AA64MMFR1_EL1, x12
 | |
|         msr PMCEID0_EL0, x12
 | |
|         msr PMCEID1_EL0, x12
 | |
|         msr RVBAR_EL1, x12
 | |
|         msr RVBAR_EL2, x12
 | |
|         msr RVBAR_EL3, x12
 | |
|         msr ISR_EL1, x12
 | |
|         msr CNTPCT_EL0, x12
 | |
|         msr CNTVCT_EL0, x12
 | |
|         msr PMEVCNTR31_EL0, x12
 | |
|         msr PMEVTYPER31_EL0, x12
 | |
| // CHECK-ERROR: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr MDCCSR_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr DBGDTRRX_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr MDRAR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr OSLSR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr DBGAUTHSTATUS_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr MIDR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr CCSIDR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr CLIDR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr CTR_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr MPIDR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr REVIDR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr AIDR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr DCZID_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_PFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_PFR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_DFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_MMFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_MMFR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_MMFR2_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_MMFR3_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_MMFR4_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_ISAR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_ISAR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_ISAR2_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_ISAR3_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_ISAR4_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_ISAR5_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr MVFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr MVFR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr MVFR2_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64PFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64PFR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64DFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64DFR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64AFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64AFR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64ISAR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64ISAR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64MMFR0_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ID_AA64MMFR1_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr PMCEID0_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr PMCEID1_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr RVBAR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr RVBAR_EL2, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr RVBAR_EL3, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr ISR_EL1, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr CNTPCT_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr CNTVCT_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr PMEVCNTR31_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: expected writable system register or pstate
 | |
| // CHECK-ERROR-NEXT:         msr PMEVTYPER31_EL0, x12
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| 
 | |
|         mrs x9, DBGDTRTX_EL0
 | |
|         mrs x9, OSLAR_EL1
 | |
|         mrs x9, PMSWINC_EL0
 | |
|         mrs x9, PMEVCNTR31_EL0
 | |
|         mrs x9, PMEVTYPER31_EL0
 | |
| // CHECK-ERROR: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x9, DBGDTRTX_EL0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x9, OSLAR_EL1
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x9, PMSWINC_EL0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x9, PMEVCNTR31_EL0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x9, PMEVTYPER31_EL0
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
| // Now check some invalid generic names
 | |
|         mrs x12, s3_8_c11_c13_2
 | |
|         mrs x19, s3_2_c15_c16_2
 | |
|         mrs x30, s3_2_c15_c1_8
 | |
|         mrs x4, s4_7_c15_c15_7
 | |
|         mrs x14, s3_7_c16_c15_7
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x12, s3_8_c11_c13_2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x19, s3_2_c15_c16_2
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x30, s3_2_c15_c1_8
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x4, s4_7_c15_c15_7
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: expected readable system register
 | |
| // CHECK-ERROR-NEXT:         mrs x14, s3_7_c16_c15_7
 | |
| // CHECK-ERROR-NEXT:                  ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Test and branch (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         tbz w3, #-1, addr
 | |
|         tbz w3, #32, nowhere
 | |
|         tbz x9, #-1, there
 | |
|         tbz x20, #64, dont
 | |
| // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:     tbz w3, #-1, addr
 | |
| // CHECK-ERROR-NEXT:             ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        tbz w3, #32, nowhere
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:        tbz x9, #-1, there
 | |
| // CHECK-ERROR-NEXT:                ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:        tbz x20, #64, dont
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| 
 | |
|         tbnz w3, #-1, addr
 | |
|         tbnz w3, #32, nowhere
 | |
|         tbnz x9, #-1, there
 | |
|         tbnz x20, #64, dont
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        tbnz w3, #-1, addr
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
 | |
| // CHECK-ERROR-NEXT:        tbnz w3, #32, nowhere
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:        tbnz x9, #-1, there
 | |
| // CHECK-ERROR-NEXT:                 ^
 | |
| // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
 | |
| // CHECK-ERROR-NEXT:        tbnz x20, #64, dont
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Unconditional branch (immediate)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         b #134217728
 | |
|         b #-134217732
 | |
|         b #1
 | |
| // CHECK-ERROR: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         b #134217728
 | |
| // CHECK-ERROR-NEXT:           ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         b #-134217732
 | |
| // CHECK-ERROR-NEXT:           ^
 | |
| // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
 | |
| // CHECK-ERROR-NEXT:         b #1
 | |
| // CHECK-ERROR-NEXT:           ^
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Unconditional branch (register)
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
|         br w2
 | |
|         br sp
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         br w2
 | |
| // CHECK-ERROR-NEXT:            ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         br sp
 | |
| // CHECK-ERROR-NEXT:            ^
 | |
| 
 | |
|         //// These ones shouldn't allow any registers
 | |
|         eret x2
 | |
|         drps x2
 | |
| // CHECK-ERROR: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         eret x2
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| // CHECK-ERROR-NEXT: error: invalid operand for instruction
 | |
| // CHECK-ERROR-NEXT:         drps x2
 | |
| // CHECK-ERROR-NEXT:              ^
 | |
| 
 |