Home | History | Annotate | Download | only in ARM
      1 @ RUN: not llvm-mc -triple=armv7-apple-darwin < %s 2> %t
      2 @ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
      3 
      4 @ Check for various assembly diagnostic messages on invalid input.
      5 
      6 @ 's' bit on an instruction that can't accept it.
      7         mlss r1, r2, r3, r4
      8 @ CHECK-ERRORS: error: instruction 'mls' can not set flags,
      9 @ CHECK-ERRORS: but 's' suffix specified
     10 
     11 
     12         @ Out of range shift immediate values.
     13         adc r1, r2, r3, lsl #invalid
     14         adc r4, r5, r6, lsl #-1
     15         adc r4, r5, r6, lsl #32
     16         adc r4, r5, r6, lsr #-1
     17         adc r4, r5, r6, lsr #33
     18         adc r4, r5, r6, asr #-1
     19         adc r4, r5, r6, asr #33
     20         adc r4, r5, r6, ror #-1
     21         adc r4, r5, r6, ror #32
     22 
     23 @ CHECK-ERRORS: error: invalid immediate shift value
     24 @ CHECK-ERRORS:         adc r1, r2, r3, lsl #invalid
     25 @ CHECK-ERRORS:                              ^
     26 @ CHECK-ERRORS: error: immediate shift value out of range
     27 @ CHECK-ERRORS:         adc r4, r5, r6, lsl #-1
     28 @ CHECK-ERRORS:                              ^
     29 @ CHECK-ERRORS: error: immediate shift value out of range
     30 @ CHECK-ERRORS:         adc r4, r5, r6, lsl #32
     31 @ CHECK-ERRORS:                              ^
     32 @ CHECK-ERRORS: error: immediate shift value out of range
     33 @ CHECK-ERRORS:         adc r4, r5, r6, lsr #-1
     34 @ CHECK-ERRORS:                              ^
     35 @ CHECK-ERRORS: error: immediate shift value out of range
     36 @ CHECK-ERRORS:         adc r4, r5, r6, lsr #33
     37 @ CHECK-ERRORS:                              ^
     38 @ CHECK-ERRORS: error: immediate shift value out of range
     39 @ CHECK-ERRORS:         adc r4, r5, r6, asr #-1
     40 @ CHECK-ERRORS:                              ^
     41 @ CHECK-ERRORS: error: immediate shift value out of range
     42 @ CHECK-ERRORS:         adc r4, r5, r6, asr #33
     43 @ CHECK-ERRORS:                              ^
     44 @ CHECK-ERRORS: error: immediate shift value out of range
     45 @ CHECK-ERRORS:         adc r4, r5, r6, ror #-1
     46 @ CHECK-ERRORS:                              ^
     47 @ CHECK-ERRORS: error: immediate shift value out of range
     48 @ CHECK-ERRORS:         adc r4, r5, r6, ror #32
     49 
     50 
     51         @ Out of range 16-bit immediate on BKPT
     52         bkpt #65536
     53 
     54 @ CHECK-ERRORS: error: invalid operand for instruction
     55 
     56         @ Out of range 4 and 3 bit immediates on CDP[2]
     57 
     58         @ Out of range immediates for CDP/CDP2
     59         cdp  p7, #2, c1, c1, c1, #8
     60         cdp  p7, #1, c1, c1, c1, #8
     61         cdp2  p7, #2, c1, c1, c1, #8
     62         cdp2  p7, #1, c1, c1, c1, #8
     63 
     64 @ CHECK-ERRORS: error: invalid operand for instruction
     65 @ CHECK-ERRORS: error: invalid operand for instruction
     66 @ CHECK-ERRORS: error: invalid operand for instruction
     67 @ CHECK-ERRORS: error: invalid operand for instruction
     68 
     69         @ Out of range immediates for DBG
     70         dbg #-1
     71         dbg #16
     72 
     73 @ CHECK-ERRORS: error: invalid operand for instruction
     74 @ CHECK-ERRORS: error: invalid operand for instruction
     75 @  Double-check that we're synced up with the right diagnostics.
     76 @ CHECK-ERRORS: dbg #16
     77 
     78         @ Out of range immediate for MCR/MCR2/MCRR/MCRR2
     79         mcr  p7, #8, r5, c1, c1, #4
     80         mcr  p7, #2, r5, c1, c1, #8
     81         mcr2  p7, #8, r5, c1, c1, #4
     82         mcr2  p7, #1, r5, c1, c1, #8
     83         mcrr  p7, #16, r5, r4, c1
     84         mcrr2  p7, #16, r5, r4, c1
     85 @ CHECK-ERRORS: error: invalid operand for instruction
     86 @ CHECK-ERRORS: error: invalid operand for instruction
     87 @ CHECK-ERRORS: error: invalid operand for instruction
     88 @ CHECK-ERRORS: error: invalid operand for instruction
     89 @ CHECK-ERRORS: error: invalid operand for instruction
     90 @ CHECK-ERRORS: error: invalid operand for instruction
     91 
     92 
     93         @ Out of range immediate for MOV
     94         movw r9, 0x10000
     95 @ CHECK-ERRORS: error: invalid operand for instruction
     96 
     97         @ Invalid 's' bit usage for MOVW
     98         movs r6, #0xffff
     99         movwseq r9, #0xffff
    100 @ CHECK-ERRORS: error: invalid operand for instruction
    101 @ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified
    102 
    103         @ Out of range immediate for MOVT
    104         movt r9, 0x10000
    105 @ CHECK-ERRORS: error: invalid operand for instruction
    106 
    107         @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
    108         mrc  p14, #8, r1, c1, c2, #4
    109         mrc  p14, #1, r1, c1, c2, #8
    110         mrc2  p14, #8, r1, c1, c2, #4
    111         mrc2  p14, #0, r1, c1, c2, #9
    112         mrrc  p7, #16, r5, r4, c1
    113         mrrc2  p7, #17, r5, r4, c1
    114 @ CHECK-ERRORS: error: invalid operand for instruction
    115 @ CHECK-ERRORS: error: invalid operand for instruction
    116 @ CHECK-ERRORS: error: invalid operand for instruction
    117 @ CHECK-ERRORS: error: invalid operand for instruction
    118 @ CHECK-ERRORS: error: invalid operand for instruction
    119 @ CHECK-ERRORS: error: invalid operand for instruction
    120 
    121         @ Shifter operand validation for PKH instructions.
    122         pkhbt r2, r2, r3, lsl #-1
    123         pkhbt r2, r2, r3, lsl #32
    124         pkhtb r2, r2, r3, asr #0
    125         pkhtb r2, r2, r3, asr #33
    126         pkhbt r2, r2, r3, asr #3
    127         pkhtb r2, r2, r3, lsl #3
    128 
    129 @ CHECK-ERRORS: error: immediate value out of range
    130 @ CHECK-ERRORS:         pkhbt r2, r2, r3, lsl #-1
    131 @ CHECK-ERRORS:                                ^
    132 @ CHECK-ERRORS: error: immediate value out of range
    133 @ CHECK-ERRORS:         pkhbt r2, r2, r3, lsl #32
    134 @ CHECK-ERRORS:                                ^
    135 @ CHECK-ERRORS: error: immediate value out of range
    136 @ CHECK-ERRORS:         pkhtb r2, r2, r3, asr #0
    137 @ CHECK-ERRORS:                                ^
    138 @ CHECK-ERRORS: error: immediate value out of range
    139 @ CHECK-ERRORS:         pkhtb r2, r2, r3, asr #33
    140 @ CHECK-ERRORS:                                ^
    141 @ CHECK-ERRORS: error: lsl operand expected.
    142 @ CHECK-ERRORS:         pkhbt r2, r2, r3, asr #3
    143 @ CHECK-ERRORS:                           ^
    144 @ CHECK-ERRORS: error: asr operand expected.
    145 @ CHECK-ERRORS:         pkhtb r2, r2, r3, lsl #3
    146 @ CHECK-ERRORS:                           ^
    147 
    148 
    149         @ bad values for SETEND
    150         setendne be
    151         setend me
    152         setend 1
    153 
    154 @ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified
    155 @ CHECK-ERRORS:         setendne be
    156 @ CHECK-ERRORS:         ^
    157 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
    158 @ CHECK-ERRORS:         setend me
    159 @ CHECK-ERRORS:                  ^
    160 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
    161 @ CHECK-ERRORS:         setend 1
    162 @ CHECK-ERRORS:                ^
    163 
    164 
    165         @ Out of range immediates and bad shift types for SSAT
    166 	ssat	r8, #0, r10, lsl #8
    167 	ssat	r8, #33, r10, lsl #8
    168 	ssat	r8, #1, r10, lsl #-1
    169 	ssat	r8, #1, r10, lsl #32
    170 	ssat	r8, #1, r10, asr #0
    171 	ssat	r8, #1, r10, asr #33
    172         ssat    r8, #1, r10, lsr #5
    173         ssat    r8, #1, r10, lsl fred
    174         ssat    r8, #1, r10, lsl #fred
    175 
    176 @ CHECK-ERRORS: error: invalid operand for instruction
    177 @ CHECK-ERRORS: 	ssat	r8, #0, r10, lsl #8
    178 @ CHECK-ERRORS: 	    	    ^
    179 @ CHECK-ERRORS: error: invalid operand for instruction
    180 @ CHECK-ERRORS: 	ssat	r8, #33, r10, lsl #8
    181 @ CHECK-ERRORS: 	    	    ^
    182 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
    183 @ CHECK-ERRORS: 	ssat	r8, #1, r10, lsl #-1
    184 @ CHECK-ERRORS: 	    	                  ^
    185 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
    186 @ CHECK-ERRORS: 	ssat	r8, #1, r10, lsl #32
    187 @ CHECK-ERRORS: 	    	                  ^
    188 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
    189 @ CHECK-ERRORS: 	ssat	r8, #1, r10, asr #0
    190 @ CHECK-ERRORS: 	    	                  ^
    191 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
    192 @ CHECK-ERRORS: 	ssat	r8, #1, r10, asr #33
    193 @ CHECK-ERRORS: 	    	                  ^
    194 @ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected
    195 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsr #5
    196 @ CHECK-ERRORS:                              ^
    197 @ CHECK-ERRORS: error: '#' expected
    198 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsl fred
    199 @ CHECK-ERRORS:                                  ^
    200 @ CHECK-ERRORS: error: shift amount must be an immediate
    201 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsl #fred
    202 @ CHECK-ERRORS:                                   ^
    203 
    204         @ Out of range immediates for SSAT16
    205 	ssat16	r2, #0, r7
    206 	ssat16	r3, #17, r5
    207 
    208 @ CHECK-ERRORS: error: invalid operand for instruction
    209 @ CHECK-ERRORS: 	ssat16	r2, #0, r7
    210 @ CHECK-ERRORS: 	      	    ^
    211 @ CHECK-ERRORS: error: invalid operand for instruction
    212 @ CHECK-ERRORS: 	ssat16	r3, #17, r5
    213 @ CHECK-ERRORS: 	      	    ^
    214 
    215 
    216         @ Out of order STM registers
    217         stmda sp!, {r5, r2}
    218 
    219 @ CHECK-ERRORS: error: register list not in ascending order
    220 @ CHECK-ERRORS:         stmda     sp!, {r5, r2}
    221 @ CHECK-ERRORS:                            ^
    222 
    223 
    224         @ Out of range immediate on SVC
    225         svc #0x1000000
    226 @ CHECK-ERRORS: error: invalid operand for instruction
    227 @ CHECK-ERRORS:   svc #0x1000000
    228 @ CHECK-ERRORS:       ^
    229 
    230 
    231         @ Out of order Rt/Rt2 operands for ldrexd/strexd
    232         ldrexd  r4, r3, [r8]
    233         strexd  r6, r5, r3, [r8]
    234 
    235 @ CHECK-ERRORS: error: destination operands must be sequential
    236 @ CHECK-ERRORS:         ldrexd  r4, r3, [r8]
    237 @ CHECK-ERRORS:                     ^
    238 @ CHECK-ERRORS: error: source operands must be sequential
    239 @ CHECK-ERRORS:         strexd  r6, r5, r3, [r8]
    240 @ CHECK-ERRORS:                         ^
    241 
    242         @ Illegal rotate operators for extend instructions
    243         sxtb r8, r3, #8
    244         sxtb r8, r3, ror 24
    245         sxtb r8, r3, ror #8 -
    246         sxtab r3, r8, r3, ror #(fred - wilma)
    247         sxtab r7, r8, r3, ror #25
    248         sxtah r9, r3, r3, ror #-8
    249         sxtb16ge r2, r3, lsr #24
    250 
    251 @ CHECK-ERRORS: error: invalid operand for instruction
    252 @ CHECK-ERRORS:         sxtb r8, r3, #8
    253 @ CHECK-ERRORS:                      ^
    254 @ CHECK-ERRORS: error: '#' expected
    255 @ CHECK-ERRORS:         sxtb r8, r3, ror 24
    256 @ CHECK-ERRORS:                          ^
    257 @ CHECK-ERRORS: error: unknown token in expression
    258 @ CHECK-ERRORS:         sxtb r8, r3, ror #8 -
    259 @ CHECK-ERRORS:                              ^
    260 @ CHECK-ERRORS: error: malformed rotate expression
    261 @ CHECK-ERRORS:         sxtb r8, r3, ror #8 -
    262 @ CHECK-ERRORS:                           ^
    263 @ CHECK-ERRORS: error: rotate amount must be an immediate
    264 @ CHECK-ERRORS:         sxtab r3, r8, r3, ror #(fred - wilma)
    265 @ CHECK-ERRORS:                                ^
    266 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
    267 @ CHECK-ERRORS:         sxtab r7, r8, r3, ror #25
    268 @ CHECK-ERRORS:                                ^
    269 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
    270 @ CHECK-ERRORS:         sxtah r9, r3, r3, ror #-8
    271 @ CHECK-ERRORS:                                ^
    272 @ CHECK-ERRORS: error: invalid operand for instruction
    273 @ CHECK-ERRORS:         sxtb16ge r2, r3, lsr #24
    274 @ CHECK-ERRORS:                          ^
    275 
    276         @ Out of range width for SBFX/UBFX
    277         sbfx r4, r5, #31, #2
    278         ubfxgt r4, r5, #16, #17
    279 
    280 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
    281 @ CHECK-ERRORS:         sbfx r4, r5, #31, #2
    282 @ CHECK-ERRORS:                           ^
    283 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
    284 @ CHECK-ERRORS:         ubfxgt r4, r5, #16, #17
    285 @ CHECK-ERRORS:                             ^
    286 
    287         @ Out of order Rt/Rt2 operands for ldrd
    288         ldrd  r4, r3, [r8]
    289         ldrd  r4, r3, [r8, #8]!
    290         ldrd  r4, r3, [r8], #8
    291 @ CHECK-ERRORS: error: destination operands must be sequential
    292 @ CHECK-ERRORS:         ldrd  r4, r3, [r8]
    293 @ CHECK-ERRORS:                   ^
    294 @ CHECK-ERRORS: error: destination operands must be sequential
    295 @ CHECK-ERRORS:         ldrd  r4, r3, [r8, #8]!
    296 @ CHECK-ERRORS:                   ^
    297 @ CHECK-ERRORS: error: destination operands must be sequential
    298 @ CHECK-ERRORS:         ldrd  r4, r3, [r8], #8
    299 @ CHECK-ERRORS:                   ^
    300 
    301 
    302         @ Bad register lists for VFP.
    303         vpush {s0, s3}
    304 @ CHECK-ERRORS: error: non-contiguous register range
    305 @ CHECK-ERRORS:         vpush {s0, s3}
    306 @ CHECK-ERRORS:                    ^
    307 
    308         @ Out of range coprocessor option immediate.
    309         ldc2 p2, c8, [r1], { 256 }
    310         ldc2 p2, c8, [r1], { -1 }
    311 
    312 @ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
    313 @ CHECK-ERRORS:         ldc2 p2, c8, [r1], { 256 }
    314 @ CHECK-ERRORS:                              ^
    315 @ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
    316 @ CHECK-ERRORS:         ldc2 p2, c8, [r1], { -1 }
    317 @ CHECK-ERRORS:                              ^
    318