752 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			752 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
@ RUN: not llvm-mc -triple=armv7-apple-darwin < %s 2> %t
 | 
						|
@ RUN: FileCheck --check-prefix=CHECK-ERRORS --check-prefix=CHECK-ERRORS-V7 < %t %s
 | 
						|
@ RUN: not llvm-mc -triple=armv8 < %s 2> %t
 | 
						|
@ RUN: FileCheck --check-prefix=CHECK-ERRORS --check-prefix=CHECK-ERRORS-V8 < %t %s
 | 
						|
 | 
						|
@ Check for various assembly diagnostic messages on invalid input.
 | 
						|
 | 
						|
@ 's' bit on an instruction that can't accept it.
 | 
						|
        mlss r1, r2, r3, r4
 | 
						|
@ CHECK-ERRORS: error: instruction 'mls' can not set flags,
 | 
						|
@ CHECK-ERRORS: but 's' suffix specified
 | 
						|
 | 
						|
 | 
						|
        @ Out of range shift immediate values.
 | 
						|
        adc r1, r2, r3, lsl #invalid
 | 
						|
        adc r4, r5, r6, lsl #-1
 | 
						|
        adc r4, r5, r6, lsl #32
 | 
						|
        adc r4, r5, r6, lsr #-1
 | 
						|
        adc r4, r5, r6, lsr #33
 | 
						|
        adc r4, r5, r6, asr #-1
 | 
						|
        adc r4, r5, r6, asr #33
 | 
						|
        adc r4, r5, r6, ror #-1
 | 
						|
        adc r4, r5, r6, ror #32
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: invalid immediate shift value
 | 
						|
@ CHECK-ERRORS:         adc r1, r2, r3, lsl #invalid
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, lsl #-1
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, lsl #32
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, lsr #-1
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, lsr #33
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, asr #-1
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, asr #33
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, ror #-1
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         adc r4, r5, r6, ror #32
 | 
						|
 | 
						|
        @ Out of range shift immediate values for load/store.
 | 
						|
        str r1, [r2, r3, lsl #invalid]
 | 
						|
        ldr r4, [r5], r6, lsl #-1
 | 
						|
        pld r4, [r5, r6, lsl #32]
 | 
						|
        str r4, [r5], r6, lsr #-1
 | 
						|
        ldr r4, [r5, r6, lsr #33]
 | 
						|
        pld r4, [r5, r6, asr #-1]
 | 
						|
        str r4, [r5, r6, asr #33]
 | 
						|
        ldr r4, [r5, r6, ror #-1]
 | 
						|
        pld r4, [r5, r6, ror #32]
 | 
						|
        pld r4, [r5, r6, rrx #0]
 | 
						|
        ldr r4, [r5, r6, not_a_shift]
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: shift amount must be an immediate
 | 
						|
@ CHECK-ERRORS:         str r1, [r2, r3, lsl #invalid]
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         ldr r4, [r5], r6, lsl #-1
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         pld r4, [r5, r6, lsl #32]
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         str r4, [r5], r6, lsr #-1
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         ldr r4, [r5, r6, lsr #33]
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         pld r4, [r5, r6, asr #-1]
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         str r4, [r5, r6, asr #33]
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         ldr r4, [r5, r6, ror #-1]
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: immediate shift value out of range
 | 
						|
@ CHECK-ERRORS:         pld r4, [r5, r6, ror #32]
 | 
						|
@ CHECK-ERRORS: error: ']' expected
 | 
						|
@ CHECK-ERRORS:         pld r4, [r5, r6, rrx #0]
 | 
						|
@ CHECK-ERRORS: error: illegal shift operator
 | 
						|
@ CHECK-ERRORS:         ldr r4, [r5, r6, not_a_shift]
 | 
						|
        
 | 
						|
        @ Out of range 16-bit immediate on BKPT
 | 
						|
        bkpt #65536
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: invalid instruction, any one of the following would fix this:
 | 
						|
@ CHECK-ERRORS: note: operand must be an immediate in the range [0,65535]
 | 
						|
@ CHECK-ERRORS: note: too many operands for instruction
 | 
						|
@ CHECK-ERRORS:         bkpt #65536
 | 
						|
@ CHECK-ERRORS:              ^
 | 
						|
 | 
						|
        @ Out of range immediates for v8 HLT instruction.
 | 
						|
        hlt #65536
 | 
						|
        hlt #-1
 | 
						|
@CHECK-ERRORS-V7: error: invalid instruction
 | 
						|
@CHECK-ERRORS-V8: error: operand must be an immediate in the range [0,65535]
 | 
						|
@CHECK-ERRORS:         hlt #65536
 | 
						|
@CHECK-ERRORS:              ^
 | 
						|
@CHECK-ERRORS-V7: error: invalid instruction
 | 
						|
@CHECK-ERRORS-V8: error: operand must be an immediate in the range [0,65535]
 | 
						|
@CHECK-ERRORS:         hlt #-1
 | 
						|
@CHECK-ERRORS:             ^
 | 
						|
 | 
						|
        @ Illegal condition code for v8 HLT instruction.
 | 
						|
        hlteq #2
 | 
						|
        hltlt #23
 | 
						|
@CHECK-ERRORS: error: instruction 'hlt' is not predicable, but condition code specified
 | 
						|
@CHECK-ERRORS:        hlteq #2
 | 
						|
@CHECK-ERRORS:        ^
 | 
						|
@CHECK-ERRORS: error: instruction 'hlt' is not predicable, but condition code specified
 | 
						|
@CHECK-ERRORS:        hltlt #23
 | 
						|
@CHECK-ERRORS:        ^
 | 
						|
 | 
						|
        @ Out of range 4 and 3 bit immediates on CDP[2]
 | 
						|
 | 
						|
        @ Out of range immediates for CDP/CDP2
 | 
						|
        cdp  p7, #2, c1, c1, c1, #8
 | 
						|
        cdp  p7, #1, c1, c1, c1, #8
 | 
						|
        cdp2  p7, #2, c1, c1, c1, #8
 | 
						|
        cdp2  p7, #1, c1, c1, c1, #8
 | 
						|
 | 
						|
@ CHECK-ERRORS-V7: error: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V7: error: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V7: error: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V7: error: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V8: error: invalid instruction
 | 
						|
@ CHECK-ERRORS-V8: error: invalid instruction
 | 
						|
@ CHECK-ERRORS-V8: error: invalid instruction
 | 
						|
@ CHECK-ERRORS-V8: error: invalid instruction
 | 
						|
 | 
						|
        @ Out of range immediates for DBG
 | 
						|
        dbg #-1
 | 
						|
        dbg #16
 | 
						|
 | 
						|
@ CHECK-ERRORS-V7: error: operand must be an immediate in the range [0,15]
 | 
						|
@ CHECK-ERRORS-V7: error: operand must be an immediate in the range [0,15]
 | 
						|
@ CHECK-ERRORS-V8: error: operand must be an immediate in the range [0,15]
 | 
						|
@ CHECK-ERRORS-V8: error: operand must be an immediate in the range [0,15]
 | 
						|
@  Double-check that we're synced up with the right diagnostics.
 | 
						|
@ CHECK-ERRORS: dbg #16
 | 
						|
@ CHECK-ERRORS:     ^
 | 
						|
 | 
						|
        @ Out of range immediate for MCR/MCR2/MCRR/MCRR2
 | 
						|
        mcr  p7, #8, r5, c1, c1, #4
 | 
						|
        mcr  p7, #2, r5, c1, c1, #8
 | 
						|
        mcr2  p7, #8, r5, c1, c1, #4
 | 
						|
        mcr2  p7, #1, r5, c1, c1, #8
 | 
						|
        mcrr  p7, #16, r5, r4, c1
 | 
						|
        mcrr2  p7, #16, r5, r4, c1
 | 
						|
@ CHECK-ERRORS: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V7: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V7: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V8: invalid instruction
 | 
						|
@ CHECK-ERRORS-V8: too many operands for instruction
 | 
						|
@ CHECK-ERRORS: operand must be an immediate in the range [0,15]
 | 
						|
@ CHECK-ERRORS-V7: operand must be an immediate in the range [0,15]
 | 
						|
@ CHECK-ERRORS-V8: invalid instruction
 | 
						|
 | 
						|
        @ p10 and p11 are reserved for NEON
 | 
						|
        mcr p10, #2, r5, c1, c1, #4
 | 
						|
        mcrr p11, #8, r5, r4, c1
 | 
						|
@ CHECK-ERRORS: error: invalid operand for instruction
 | 
						|
@ CHECK-ERRORS: error: invalid operand for instruction
 | 
						|
 | 
						|
        @ Out of range immediate for MOV
 | 
						|
        movw r9, 0x10000
 | 
						|
@ CHECK-ERRORS: error: operand must be an immediate in the range [0,0xffff] or a relocatable expression
 | 
						|
@ CHECK-ERRORS:        movw r9, 0x10000
 | 
						|
@ CHECK-ERRORS:                 ^
 | 
						|
 | 
						|
        @ Invalid 's' bit usage for MOVW
 | 
						|
        movs r6, #0xffff
 | 
						|
        movwseq r9, #0xffff
 | 
						|
@ CHECK-ERRORS: error: invalid instruction, any one of the following would fix this:
 | 
						|
@ CHECK-ERRORS-NEXT: movs r6, #0xffff
 | 
						|
@ CHECK-ERRORS: note: invalid operand for instruction
 | 
						|
@ CHECK-ERRORS: note: operand must be a register in range [r0, r15]
 | 
						|
@ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified
 | 
						|
@ CHECK-ERRORS-NEXT: movwseq r9, #0xffff
 | 
						|
 | 
						|
        @ Out of range immediate for MOVT
 | 
						|
        movt r9, 0x10000
 | 
						|
@ CHECK-ERRORS: error: operand must be an immediate in the range [0,0xffff] or a relocatable expression
 | 
						|
@ CHECK-ERRORS:        movt r9, 0x10000
 | 
						|
@ CHECK-ERRORS:                 ^
 | 
						|
 | 
						|
        @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
 | 
						|
        mrc  p14, #8, r1, c1, c2, #4
 | 
						|
        mrc  p14, #1, r1, c1, c2, #8
 | 
						|
        mrc2  p14, #8, r1, c1, c2, #4
 | 
						|
        mrc2  p14, #0, r1, c1, c2, #9
 | 
						|
        mrrc  p7, #16, r5, r4, c1
 | 
						|
        mrrc2  p7, #17, r5, r4, c1
 | 
						|
@ CHECK-ERRORS: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V7: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V8: invalid instruction
 | 
						|
@ CHECK-ERRORS-V7: operand must be an immediate in the range [0,7]
 | 
						|
@ CHECK-ERRORS-V8: too many operands for instruction
 | 
						|
@ CHECK-ERRORS: operand must be an immediate in the range [0,15]
 | 
						|
@ CHECK-ERRORS-V7: operand must be an immediate in the range [0,15]
 | 
						|
@ CHECK-ERRORS-V8: invalid instruction
 | 
						|
 | 
						|
        @ Shifter operand validation for PKH instructions.
 | 
						|
        pkhbt r2, r2, r3, lsl #-1
 | 
						|
        pkhbt r2, r2, r3, lsl #32
 | 
						|
        pkhtb r2, r2, r3, asr #0
 | 
						|
        pkhtb r2, r2, r3, asr #33
 | 
						|
        pkhbt r2, r2, r3, asr #3
 | 
						|
        pkhtb r2, r2, r3, lsl #3
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: immediate value out of range
 | 
						|
@ CHECK-ERRORS:         pkhbt r2, r2, r3, lsl #-1
 | 
						|
@ CHECK-ERRORS:                                ^
 | 
						|
@ CHECK-ERRORS: error: immediate value out of range
 | 
						|
@ CHECK-ERRORS:         pkhbt r2, r2, r3, lsl #32
 | 
						|
@ CHECK-ERRORS:                                ^
 | 
						|
@ CHECK-ERRORS: error: immediate value out of range
 | 
						|
@ CHECK-ERRORS:         pkhtb r2, r2, r3, asr #0
 | 
						|
@ CHECK-ERRORS:                                ^
 | 
						|
@ CHECK-ERRORS: error: immediate value out of range
 | 
						|
@ CHECK-ERRORS:         pkhtb r2, r2, r3, asr #33
 | 
						|
@ CHECK-ERRORS:                                ^
 | 
						|
@ CHECK-ERRORS: error: lsl operand expected.
 | 
						|
@ CHECK-ERRORS:         pkhbt r2, r2, r3, asr #3
 | 
						|
@ CHECK-ERRORS:                           ^
 | 
						|
@ CHECK-ERRORS: error: asr operand expected.
 | 
						|
@ CHECK-ERRORS:         pkhtb r2, r2, r3, lsl #3
 | 
						|
@ CHECK-ERRORS:                           ^
 | 
						|
 | 
						|
 | 
						|
        @ bad values for SETEND
 | 
						|
        setendne be
 | 
						|
        setend me
 | 
						|
        setend 1
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS:         setendne be
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: 'be' or 'le' operand expected
 | 
						|
@ CHECK-ERRORS:         setend me
 | 
						|
@ CHECK-ERRORS:                  ^
 | 
						|
@ CHECK-ERRORS: error: 'be' or 'le' operand expected
 | 
						|
@ CHECK-ERRORS:         setend 1
 | 
						|
@ CHECK-ERRORS:                ^
 | 
						|
 | 
						|
 | 
						|
        @ Out of range immediates and bad shift types for SSAT
 | 
						|
	ssat	r8, #0, r10, lsl #8
 | 
						|
	ssat	r8, #33, r10, lsl #8
 | 
						|
	ssat	r8, #1, r10, lsl #-1
 | 
						|
	ssat	r8, #1, r10, lsl #32
 | 
						|
	ssat	r8, #1, r10, asr #0
 | 
						|
	ssat	r8, #1, r10, asr #33
 | 
						|
        ssat    r8, #1, r10, lsr #5
 | 
						|
        ssat    r8, #1, r10, lsl fred
 | 
						|
        ssat    r8, #1, r10, lsl #fred
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: operand must be an immediate in the range [1,32]
 | 
						|
@ CHECK-ERRORS: 	ssat	r8, #0, r10, lsl #8
 | 
						|
@ CHECK-ERRORS: 	    	    ^
 | 
						|
@ CHECK-ERRORS: error: operand must be an immediate in the range [1,32]
 | 
						|
@ CHECK-ERRORS: 	ssat	r8, #33, r10, lsl #8
 | 
						|
@ CHECK-ERRORS: 	    	    ^
 | 
						|
@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
 | 
						|
@ CHECK-ERRORS: 	ssat	r8, #1, r10, lsl #-1
 | 
						|
@ CHECK-ERRORS: 	    	                  ^
 | 
						|
@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
 | 
						|
@ CHECK-ERRORS: 	ssat	r8, #1, r10, lsl #32
 | 
						|
@ CHECK-ERRORS: 	    	                  ^
 | 
						|
@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
 | 
						|
@ CHECK-ERRORS: 	ssat	r8, #1, r10, asr #0
 | 
						|
@ CHECK-ERRORS: 	    	                  ^
 | 
						|
@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
 | 
						|
@ CHECK-ERRORS: 	ssat	r8, #1, r10, asr #33
 | 
						|
@ CHECK-ERRORS: 	    	                  ^
 | 
						|
@ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected
 | 
						|
@ CHECK-ERRORS:         ssat    r8, #1, r10, lsr #5
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: '#' expected
 | 
						|
@ CHECK-ERRORS:         ssat    r8, #1, r10, lsl fred
 | 
						|
@ CHECK-ERRORS:                                  ^
 | 
						|
@ CHECK-ERRORS: error: shift amount must be an immediate
 | 
						|
@ CHECK-ERRORS:         ssat    r8, #1, r10, lsl #fred
 | 
						|
@ CHECK-ERRORS:                                   ^
 | 
						|
 | 
						|
        @ Out of range immediates for SSAT16
 | 
						|
	ssat16	r2, #0, r7
 | 
						|
	ssat16	r3, #17, r5
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: operand must be an immediate in the range [1,16]
 | 
						|
@ CHECK-ERRORS: 	ssat16	r2, #0, r7
 | 
						|
@ CHECK-ERRORS: 	      	    ^
 | 
						|
@ CHECK-ERRORS: error: operand must be an immediate in the range [1,16]
 | 
						|
@ CHECK-ERRORS: 	ssat16	r3, #17, r5
 | 
						|
@ CHECK-ERRORS: 	      	    ^
 | 
						|
 | 
						|
 | 
						|
        @ Out of order STM registers
 | 
						|
        stmda sp!, {r5, r2}
 | 
						|
 | 
						|
@ CHECK-ERRORS: warning: register list not in ascending order
 | 
						|
@ CHECK-ERRORS:         stmda     sp!, {r5, r2}
 | 
						|
@ CHECK-ERRORS:                            ^
 | 
						|
 | 
						|
 | 
						|
        @ Out of range immediate on SVC
 | 
						|
        svc #0x1000000
 | 
						|
@ CHECK-ERRORS: error: operand must be an immediate in the range [0,0xffffff]
 | 
						|
@ CHECK-ERRORS:   svc #0x1000000
 | 
						|
@ CHECK-ERRORS:       ^
 | 
						|
 | 
						|
 | 
						|
        @ Out of order Rt/Rt2 operands for ldrexd/strexd
 | 
						|
        ldrexd  r4, r3, [r8]
 | 
						|
        strexd  r6, r5, r3, [r8]
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: destination operands must be sequential
 | 
						|
@ CHECK-ERRORS:         ldrexd  r4, r3, [r8]
 | 
						|
@ CHECK-ERRORS:                     ^
 | 
						|
@ CHECK-ERRORS: error: source operands must be sequential
 | 
						|
@ CHECK-ERRORS:         strexd  r6, r5, r3, [r8]
 | 
						|
@ CHECK-ERRORS:                         ^
 | 
						|
 | 
						|
        @ Illegal rotate operators for extend instructions
 | 
						|
        sxtb r8, r3, #8
 | 
						|
        sxtb r8, r3, ror 24
 | 
						|
        sxtb r8, r3, ror #8 -
 | 
						|
        sxtab r3, r8, r3, ror #(fred - wilma)
 | 
						|
        sxtab r7, r8, r3, ror #25
 | 
						|
        sxtah r9, r3, r3, ror #-8
 | 
						|
        sxtb16ge r2, r3, lsr #24
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: invalid operand for instruction
 | 
						|
@ CHECK-ERRORS:         sxtb r8, r3, #8
 | 
						|
@ CHECK-ERRORS:                      ^
 | 
						|
@ CHECK-ERRORS: error: '#' expected
 | 
						|
@ CHECK-ERRORS:         sxtb r8, r3, ror 24
 | 
						|
@ CHECK-ERRORS:                          ^
 | 
						|
@ CHECK-ERRORS: error: unknown token in expression
 | 
						|
@ CHECK-ERRORS:         sxtb r8, r3, ror #8 -
 | 
						|
@ CHECK-ERRORS:                              ^
 | 
						|
@ CHECK-ERRORS: error: malformed rotate expression
 | 
						|
@ CHECK-ERRORS:         sxtb r8, r3, ror #8 -
 | 
						|
@ CHECK-ERRORS:                           ^
 | 
						|
@ CHECK-ERRORS: error: rotate amount must be an immediate
 | 
						|
@ CHECK-ERRORS:         sxtab r3, r8, r3, ror #(fred - wilma)
 | 
						|
@ CHECK-ERRORS:                                ^
 | 
						|
@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
 | 
						|
@ CHECK-ERRORS:         sxtab r7, r8, r3, ror #25
 | 
						|
@ CHECK-ERRORS:                                ^
 | 
						|
@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
 | 
						|
@ CHECK-ERRORS:         sxtah r9, r3, r3, ror #-8
 | 
						|
@ CHECK-ERRORS:                                ^
 | 
						|
@ CHECK-ERRORS: error: operand must be a register in range [r0, r14]
 | 
						|
@ CHECK-ERRORS:         sxtb16ge r2, r3, lsr #24
 | 
						|
@ CHECK-ERRORS:                          ^
 | 
						|
 | 
						|
        @ Out of range width for SBFX/UBFX
 | 
						|
        sbfx r4, r5, #31, #2
 | 
						|
        ubfxgt r4, r5, #16, #17
 | 
						|
 | 
						|
@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
 | 
						|
@ CHECK-ERRORS:         sbfx r4, r5, #31, #2
 | 
						|
@ CHECK-ERRORS:                           ^
 | 
						|
@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
 | 
						|
@ CHECK-ERRORS:         ubfxgt r4, r5, #16, #17
 | 
						|
@ CHECK-ERRORS:                             ^
 | 
						|
 | 
						|
        @ Using pc for SBFX/UBFX
 | 
						|
        sbfx pc, r2, #1, #3
 | 
						|
        sbfx sp, pc, #4, #5
 | 
						|
        ubfx pc, r0, #0, #31
 | 
						|
        ubfx r14, pc, #1, #2
 | 
						|
@ CHECK-ERRORS: error: operand must be a register in range [r0, r14]
 | 
						|
@ CHECK-ERRORS:         sbfx pc, r2, #1, #3
 | 
						|
@ CHECK-ERRORS:              ^
 | 
						|
@ CHECK-ERRORS: error: operand must be a register in range [r0, r14]
 | 
						|
@ CHECK-ERRORS:         sbfx sp, pc, #4, #5
 | 
						|
@ CHECK-ERRORS:                  ^
 | 
						|
@ CHECK-ERRORS: error: operand must be a register in range [r0, r14]
 | 
						|
@ CHECK-ERRORS:         ubfx pc, r0, #0, #31
 | 
						|
@ CHECK-ERRORS:              ^
 | 
						|
@ CHECK-ERRORS: error: operand must be a register in range [r0, r14]
 | 
						|
@ CHECK-ERRORS:         ubfx r14, pc, #1, #2
 | 
						|
@ CHECK-ERRORS:                   ^
 | 
						|
 | 
						|
        @ Out of order Rt/Rt2 operands for ldrd
 | 
						|
        ldrd  r4, r3, [r8]
 | 
						|
        ldrd  r4, r3, [r8, #8]!
 | 
						|
        ldrd  r4, r3, [r8], #8
 | 
						|
@ CHECK-ERRORS: error: destination operands must be sequential
 | 
						|
@ CHECK-ERRORS:         ldrd  r4, r3, [r8]
 | 
						|
@ CHECK-ERRORS:                   ^
 | 
						|
@ CHECK-ERRORS: error: destination operands must be sequential
 | 
						|
@ CHECK-ERRORS:         ldrd  r4, r3, [r8, #8]!
 | 
						|
@ CHECK-ERRORS:                   ^
 | 
						|
@ CHECK-ERRORS: error: destination operands must be sequential
 | 
						|
@ CHECK-ERRORS:         ldrd  r4, r3, [r8], #8
 | 
						|
@ CHECK-ERRORS:                   ^
 | 
						|
 | 
						|
 | 
						|
        @ Bad register lists for VFP.
 | 
						|
        vpush {s0, s3}
 | 
						|
@ CHECK-ERRORS: error: non-contiguous register range
 | 
						|
@ CHECK-ERRORS:         vpush {s0, s3}
 | 
						|
@ CHECK-ERRORS:                    ^
 | 
						|
 | 
						|
        @ Out of range coprocessor option immediate.
 | 
						|
        ldc2 p2, c8, [r1], { 256 }
 | 
						|
        ldc2 p2, c8, [r1], { -1 }
 | 
						|
 | 
						|
@ CHECK-ERRORS-V7: error: coprocessor option must be an immediate in range [0, 255]
 | 
						|
@ CHECK-ERRORS-V7:         ldc2 p2, c8, [r1], { 256 }
 | 
						|
@ CHECK-ERRORS-V7:                              ^
 | 
						|
@ CHECK-ERRORS-V8: error: register expected
 | 
						|
@ CHECK-ERRORS-V7: error: coprocessor option must be an immediate in range [0, 255]
 | 
						|
@ CHECK-ERRORS-V7:         ldc2 p2, c8, [r1], { -1 }
 | 
						|
@ CHECK-ERRORS-V7:                              ^
 | 
						|
@ CHECK-ERRORS-V8: error: register expected
 | 
						|
 | 
						|
        @ Bad CPS instruction format.
 | 
						|
        cps f,#1
 | 
						|
@ CHECK-ERRORS: error: invalid operand for instruction
 | 
						|
@ CHECK-ERRORS:         cps f,#1
 | 
						|
@ CHECK-ERRORS:               ^
 | 
						|
 | 
						|
        @ Bad operands for msr
 | 
						|
        msr #0, #0
 | 
						|
        msr foo, #0
 | 
						|
@ CHECK-ERRORS: error: invalid operand for instruction
 | 
						|
@ CHECK-ERRORS:         msr #0, #0
 | 
						|
@ CHECK-ERRORS:             ^
 | 
						|
@ CHECK-ERRORS: error: invalid operand for instruction
 | 
						|
@ CHECK-ERRORS:         msr foo, #0
 | 
						|
@ CHECK-ERRORS:             ^
 | 
						|
 | 
						|
        isb #-1
 | 
						|
        isb #16
 | 
						|
@ CHECK-ERRORS: error: immediate value out of range
 | 
						|
@ CHECK-ERRORS: error: immediate value out of range
 | 
						|
 | 
						|
        nop.n
 | 
						|
@ CHECK-ERRORS: error: instruction with .n (narrow) qualifier not allowed in arm mode
 | 
						|
 | 
						|
	dmbeq #5
 | 
						|
	dsble #15
 | 
						|
	isblo #7
 | 
						|
@ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified
 | 
						|
 | 
						|
	dmblt
 | 
						|
	dsbne
 | 
						|
	isbeq
 | 
						|
@ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified
 | 
						|
 | 
						|
        mcr2le  p7, #1, r5, c1, c1, #4
 | 
						|
        mcrr2ne p7, #15, r5, r4, c1
 | 
						|
        mrc2lo  p14, #0, r1, c1, c2, #4
 | 
						|
        mrrc2lo  p7, #1, r5, r4, c1
 | 
						|
        cdp2hi   p10, #0, c6, c12, c0, #7
 | 
						|
@ CHECK-ERRORS: error: instruction 'mcr2' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'mcrr2' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'mrc2' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'mrrc2' is not predicable, but condition code specified
 | 
						|
@ CHECK-ERRORS: error: instruction 'cdp2' is not predicable, but condition code specified
 | 
						|
 | 
						|
        bkpteq #7
 | 
						|
@ CHECK-ERRORS: error: instruction 'bkpt' is not predicable, but condition code specified
 | 
						|
 | 
						|
        ldm r2!, {r2, r3}
 | 
						|
        ldmdb r2!, {r2, r3}
 | 
						|
        ldmda r2!, {r2, r3}
 | 
						|
        popeq {sp}
 | 
						|
@ CHECK-ERRORS: error: writeback register not allowed in register list
 | 
						|
@ CHECK-ERRORS: error: writeback register not allowed in register list
 | 
						|
@ CHECK-ERRORS: error: writeback register not allowed in register list
 | 
						|
@ CHECK-ERRORS: error: writeback register not allowed in register list
 | 
						|
 | 
						|
        vrintz.f32.f32 s0, s1
 | 
						|
        vrintr.f32 s0, s1
 | 
						|
        vrintx.f64.f64 d2, d5
 | 
						|
        vrintz.f64 d10, d9
 | 
						|
        vrinta.f32.f32 s6, s7
 | 
						|
        vrintn.f32 s8, s9
 | 
						|
        vrintp.f64.f64 d10, d11
 | 
						|
        vrintm.f64 d12, d13
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
 | 
						|
 | 
						|
        stm sp!, {r0, pc}^
 | 
						|
        ldm sp!, {r0}^
 | 
						|
@ CHECK-ERRORS: error: system STM cannot have writeback register
 | 
						|
@ CHECK-ERRORS: error: writeback register only allowed on system LDM if PC in register-list
 | 
						|
 | 
						|
foo2:
 | 
						|
        mov r0, foo2
 | 
						|
        movw r0, foo2
 | 
						|
        movt r0, foo2
 | 
						|
@ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
 | 
						|
@ CHECK-ERRORS:                 ^
 | 
						|
@ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
 | 
						|
@ CHECK-ERRORS:                  ^
 | 
						|
@ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
 | 
						|
@ CHECK-ERRORS:                  ^
 | 
						|
 | 
						|
        str r0, [r0, #4]!
 | 
						|
        str r0, [r0, r1]!
 | 
						|
        str r0, [r0], #4
 | 
						|
        str r0, [r0], r1
 | 
						|
        strh r0, [r0, #2]!
 | 
						|
        strh r0, [r0, r1]!
 | 
						|
        strh r0, [r0], #2
 | 
						|
        strh r0, [r0], r1
 | 
						|
        strb r0, [r0, #1]!
 | 
						|
        strb r0, [r0, r1]!
 | 
						|
        strb r0, [r0], #1
 | 
						|
        strb r0, [r0], r1
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: str r0, [r0, #4]!
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: str r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: str r0, [r0], #4
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: str r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strh r0, [r0, #2]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strh r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strh r0, [r0], #2
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strh r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strb r0, [r0, #1]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strb r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strb r0, [r0], #1
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: source register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: strb r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
 | 
						|
        ldr r0, [r0, #4]!
 | 
						|
        ldr r0, [r0, r1]!
 | 
						|
        ldr r0, [r0], #4
 | 
						|
        ldr r0, [r0], r1
 | 
						|
        ldrh r0, [r0, #2]!
 | 
						|
        ldrh r0, [r0, r1]!
 | 
						|
        ldrh r0, [r0], #2
 | 
						|
        ldrh r0, [r0], r1
 | 
						|
        ldrsh r0, [r0, #2]!
 | 
						|
        ldrsh r0, [r0, r1]!
 | 
						|
        ldrsh r0, [r0], #2
 | 
						|
        ldrsh r0, [r0], r1
 | 
						|
        ldrb r0, [r0, #1]!
 | 
						|
        ldrb r0, [r0, r1]!
 | 
						|
        ldrb r0, [r0], #1
 | 
						|
        ldrb r0, [r0], r1
 | 
						|
        ldrsb r0, [r0, #1]!
 | 
						|
        ldrsb r0, [r0, r1]!
 | 
						|
        ldrsb r0, [r0], #1
 | 
						|
        ldrsb r0, [r0], r1
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldr r0, [r0, #4]!
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldr r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldr r0, [r0], #4
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldr r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:         ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrh r0, [r0, #2]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrh r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrh r0, [r0], #2
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrh r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsh r0, [r0, #2]!
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsh r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsh r0, [r0], #2
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsh r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrb r0, [r0, #1]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrb r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrb r0, [r0], #1
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrb r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:          ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsb r0, [r0, #1]!
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsb r0, [r0, r1]!
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsb r0, [r0], #1
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
@ CHECK-ERRORS: error: destination register and base register can't be identical
 | 
						|
@ CHECK-ERRORS: ldrsb r0, [r0], r1
 | 
						|
@ CHECK-ERRORS:           ^
 | 
						|
 | 
						|
        @ Out of range modified immediate values
 | 
						|
        mov  r5, #-256, #6
 | 
						|
        mov  r6, #42, #7
 | 
						|
        mvn  r5, #256, #6
 | 
						|
        mvn  r6, #42, #298
 | 
						|
        cmp  r5, #65535, #6
 | 
						|
        cmp  r6, #42, #31
 | 
						|
        cmn  r5, #-1, #6
 | 
						|
        cmn  r6, #42, #32
 | 
						|
	msr  APSR_nzcvq, #-128, #2
 | 
						|
	msr  apsr_nzcvqg, #0, #1
 | 
						|
        adc  r7, r8, #-256, #2
 | 
						|
        adc  r7, r8, #128, #1
 | 
						|
        sbc  r7, r8, #-256, #2
 | 
						|
        sbc  r7, r8, #128, #1
 | 
						|
        add  r7, r8, #-2149, #0
 | 
						|
        add  r7, r8, #100, #1
 | 
						|
        sub  r7, r8, #-2149, #0
 | 
						|
        sub  r7, r8, #100, #1
 | 
						|
        and  r7, r8, #-2149, #0
 | 
						|
        and  r7, r8, #100, #1
 | 
						|
        orr  r7, r8, #-2149, #0
 | 
						|
        orr  r7, r8, #100, #1
 | 
						|
        eor  r7, r8, #-2149, #0
 | 
						|
        eor  r7, r8, #100, #1
 | 
						|
        bic  r7, r8, #-2149, #0
 | 
						|
        bic  r7, r8, #100, #1
 | 
						|
        rsb  r7, r8, #-2149, #0
 | 
						|
        rsb  r7, r8, #100, #1
 | 
						|
        adds r7, r8, #-2149, #0
 | 
						|
        adds r7, r8, #100, #1
 | 
						|
        subs r7, r8, #-2149, #0
 | 
						|
        subs r7, r8, #100, #1
 | 
						|
        rsbs r7, r8, #-2149, #0
 | 
						|
        rsbs r7, r8, #100, #1
 | 
						|
        rsc r7, r8, #-2149, #0
 | 
						|
        rsc r7, r8, #100, #1
 | 
						|
        TST r7, #-2149, #0
 | 
						|
        TST r7, #100, #1
 | 
						|
        TEQ r7, #-2149, #0
 | 
						|
        TEQ r7, #100, #1
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 | 
						|
@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 | 
						|
 | 
						|
        @ Generic error for too few operands
 | 
						|
        adds
 | 
						|
        adds r0
 | 
						|
@ CHECK-ERRORS: error: too few operands for instruction
 | 
						|
@ CHECK-ERRORS: error: too few operands for instruction
 | 
						|
 | 
						|
        @ Using pc for MVN
 | 
						|
	mvn pc, r6, lsl r7
 | 
						|
@ CHECK-ERRORS: error: invalid instruction, any one of the following would fix this:
 | 
						|
@ CHECK-ERRORS: note: operand must be a register in range [r0, r14]
 | 
						|
@ CHECK-ERRORS:         mvn pc, r6, lsl r7
 | 
						|
@ CHECK-ERRORS:             ^
 |