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 @ Out of range shift immediate values for load/store. 51 str r1, [r2, r3, lsl #invalid] 52 ldr r4, [r5], r6, lsl #-1 53 pld r4, [r5, r6, lsl #32] 54 str r4, [r5], r6, lsr #-1 55 ldr r4, [r5, r6, lsr #33] 56 pld r4, [r5, r6, asr #-1] 57 str r4, [r5, r6, asr #33] 58 ldr r4, [r5, r6, ror #-1] 59 pld r4, [r5, r6, ror #32] 60 pld r4, [r5, r6, rrx #0] 61 62@ CHECK-ERRORS: error: shift amount must be an immediate 63@ CHECK-ERRORS: str r1, [r2, r3, lsl #invalid] 64@ CHECK-ERRORS: ^ 65@ CHECK-ERRORS: error: immediate shift value out of range 66@ CHECK-ERRORS: ldr r4, [r5], r6, lsl #-1 67@ CHECK-ERRORS: ^ 68@ CHECK-ERRORS: error: immediate shift value out of range 69@ CHECK-ERRORS: pld r4, [r5, r6, lsl #32] 70@ CHECK-ERRORS: ^ 71@ CHECK-ERRORS: error: immediate shift value out of range 72@ CHECK-ERRORS: str r4, [r5], r6, lsr #-1 73@ CHECK-ERRORS: ^ 74@ CHECK-ERRORS: error: immediate shift value out of range 75@ CHECK-ERRORS: ldr r4, [r5, r6, lsr #33] 76@ CHECK-ERRORS: ^ 77@ CHECK-ERRORS: error: immediate shift value out of range 78@ CHECK-ERRORS: pld r4, [r5, r6, asr #-1] 79@ CHECK-ERRORS: ^ 80@ CHECK-ERRORS: error: immediate shift value out of range 81@ CHECK-ERRORS: str r4, [r5, r6, asr #33] 82@ CHECK-ERRORS: ^ 83@ CHECK-ERRORS: error: immediate shift value out of range 84@ CHECK-ERRORS: ldr r4, [r5, r6, ror #-1] 85@ CHECK-ERRORS: ^ 86@ CHECK-ERRORS: error: immediate shift value out of range 87@ CHECK-ERRORS: pld r4, [r5, r6, ror #32] 88@ CHECK-ERRORS: error: ']' expected 89@ CHECK-ERRORS: pld r4, [r5, r6, rrx #0] 90 91 @ Out of range 16-bit immediate on BKPT 92 bkpt #65536 93 94@ CHECK-ERRORS: error: invalid operand for instruction 95 96 @ Out of range 4 and 3 bit immediates on CDP[2] 97 98 @ Out of range immediates for CDP/CDP2 99 cdp p7, #2, c1, c1, c1, #8 100 cdp p7, #1, c1, c1, c1, #8 101 cdp2 p7, #2, c1, c1, c1, #8 102 cdp2 p7, #1, c1, c1, c1, #8 103 104@ CHECK-ERRORS: error: invalid operand for instruction 105@ CHECK-ERRORS: error: invalid operand for instruction 106@ CHECK-ERRORS: error: invalid operand for instruction 107@ CHECK-ERRORS: error: invalid operand for instruction 108 109 @ Out of range immediates for DBG 110 dbg #-1 111 dbg #16 112 113@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 114@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 115@ Double-check that we're synced up with the right diagnostics. 116@ CHECK-ERRORS: dbg #16 117 118 @ Out of range immediate for MCR/MCR2/MCRR/MCRR2 119 mcr p7, #8, r5, c1, c1, #4 120 mcr p7, #2, r5, c1, c1, #8 121 mcr2 p7, #8, r5, c1, c1, #4 122 mcr2 p7, #1, r5, c1, c1, #8 123 mcrr p7, #16, r5, r4, c1 124 mcrr2 p7, #16, r5, r4, c1 125@ CHECK-ERRORS: error: invalid operand for instruction 126@ CHECK-ERRORS: error: invalid operand for instruction 127@ CHECK-ERRORS: error: invalid operand for instruction 128@ CHECK-ERRORS: error: invalid operand for instruction 129@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 130@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 131 132 133 @ Out of range immediate for MOV 134 movw r9, 0x10000 135@ CHECK-ERRORS: error: invalid operand for instruction 136 137 @ Invalid 's' bit usage for MOVW 138 movs r6, #0xffff 139 movwseq r9, #0xffff 140@ CHECK-ERRORS: error: invalid operand for instruction 141@ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified 142 143 @ Out of range immediate for MOVT 144 movt r9, 0x10000 145@ CHECK-ERRORS: error: invalid operand for instruction 146 147 @ Out of range immediates for MRC/MRC2/MRRC/MRRC2 148 mrc p14, #8, r1, c1, c2, #4 149 mrc p14, #1, r1, c1, c2, #8 150 mrc2 p14, #8, r1, c1, c2, #4 151 mrc2 p14, #0, r1, c1, c2, #9 152 mrrc p7, #16, r5, r4, c1 153 mrrc2 p7, #17, r5, r4, c1 154@ CHECK-ERRORS: error: invalid operand for instruction 155@ CHECK-ERRORS: error: invalid operand for instruction 156@ CHECK-ERRORS: error: invalid operand for instruction 157@ CHECK-ERRORS: error: invalid operand for instruction 158@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 159@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 160 161 @ Shifter operand validation for PKH instructions. 162 pkhbt r2, r2, r3, lsl #-1 163 pkhbt r2, r2, r3, lsl #32 164 pkhtb r2, r2, r3, asr #0 165 pkhtb r2, r2, r3, asr #33 166 pkhbt r2, r2, r3, asr #3 167 pkhtb r2, r2, r3, lsl #3 168 169@ CHECK-ERRORS: error: immediate value out of range 170@ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #-1 171@ CHECK-ERRORS: ^ 172@ CHECK-ERRORS: error: immediate value out of range 173@ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #32 174@ CHECK-ERRORS: ^ 175@ CHECK-ERRORS: error: immediate value out of range 176@ CHECK-ERRORS: pkhtb r2, r2, r3, asr #0 177@ CHECK-ERRORS: ^ 178@ CHECK-ERRORS: error: immediate value out of range 179@ CHECK-ERRORS: pkhtb r2, r2, r3, asr #33 180@ CHECK-ERRORS: ^ 181@ CHECK-ERRORS: error: lsl operand expected. 182@ CHECK-ERRORS: pkhbt r2, r2, r3, asr #3 183@ CHECK-ERRORS: ^ 184@ CHECK-ERRORS: error: asr operand expected. 185@ CHECK-ERRORS: pkhtb r2, r2, r3, lsl #3 186@ CHECK-ERRORS: ^ 187 188 189 @ bad values for SETEND 190 setendne be 191 setend me 192 setend 1 193 194@ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified 195@ CHECK-ERRORS: setendne be 196@ CHECK-ERRORS: ^ 197@ CHECK-ERRORS: error: 'be' or 'le' operand expected 198@ CHECK-ERRORS: setend me 199@ CHECK-ERRORS: ^ 200@ CHECK-ERRORS: error: 'be' or 'le' operand expected 201@ CHECK-ERRORS: setend 1 202@ CHECK-ERRORS: ^ 203 204 205 @ Out of range immediates and bad shift types for SSAT 206 ssat r8, #0, r10, lsl #8 207 ssat r8, #33, r10, lsl #8 208 ssat r8, #1, r10, lsl #-1 209 ssat r8, #1, r10, lsl #32 210 ssat r8, #1, r10, asr #0 211 ssat r8, #1, r10, asr #33 212 ssat r8, #1, r10, lsr #5 213 ssat r8, #1, r10, lsl fred 214 ssat r8, #1, r10, lsl #fred 215 216@ CHECK-ERRORS: error: invalid operand for instruction 217@ CHECK-ERRORS: ssat r8, #0, r10, lsl #8 218@ CHECK-ERRORS: ^ 219@ CHECK-ERRORS: error: invalid operand for instruction 220@ CHECK-ERRORS: ssat r8, #33, r10, lsl #8 221@ CHECK-ERRORS: ^ 222@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31] 223@ CHECK-ERRORS: ssat r8, #1, r10, lsl #-1 224@ CHECK-ERRORS: ^ 225@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31] 226@ CHECK-ERRORS: ssat r8, #1, r10, lsl #32 227@ CHECK-ERRORS: ^ 228@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32] 229@ CHECK-ERRORS: ssat r8, #1, r10, asr #0 230@ CHECK-ERRORS: ^ 231@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32] 232@ CHECK-ERRORS: ssat r8, #1, r10, asr #33 233@ CHECK-ERRORS: ^ 234@ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected 235@ CHECK-ERRORS: ssat r8, #1, r10, lsr #5 236@ CHECK-ERRORS: ^ 237@ CHECK-ERRORS: error: '#' expected 238@ CHECK-ERRORS: ssat r8, #1, r10, lsl fred 239@ CHECK-ERRORS: ^ 240@ CHECK-ERRORS: error: shift amount must be an immediate 241@ CHECK-ERRORS: ssat r8, #1, r10, lsl #fred 242@ CHECK-ERRORS: ^ 243 244 @ Out of range immediates for SSAT16 245 ssat16 r2, #0, r7 246 ssat16 r3, #17, r5 247 248@ CHECK-ERRORS: error: invalid operand for instruction 249@ CHECK-ERRORS: ssat16 r2, #0, r7 250@ CHECK-ERRORS: ^ 251@ CHECK-ERRORS: error: invalid operand for instruction 252@ CHECK-ERRORS: ssat16 r3, #17, r5 253@ CHECK-ERRORS: ^ 254 255 256 @ Out of order STM registers 257 stmda sp!, {r5, r2} 258 259@ CHECK-ERRORS: warning: register list not in ascending order 260@ CHECK-ERRORS: stmda sp!, {r5, r2} 261@ CHECK-ERRORS: ^ 262 263 264 @ Out of range immediate on SVC 265 svc #0x1000000 266@ CHECK-ERRORS: error: invalid operand for instruction 267@ CHECK-ERRORS: svc #0x1000000 268@ CHECK-ERRORS: ^ 269 270 271 @ Out of order Rt/Rt2 operands for ldrexd/strexd 272 ldrexd r4, r3, [r8] 273 strexd r6, r5, r3, [r8] 274 275@ CHECK-ERRORS: error: destination operands must be sequential 276@ CHECK-ERRORS: ldrexd r4, r3, [r8] 277@ CHECK-ERRORS: ^ 278@ CHECK-ERRORS: error: source operands must be sequential 279@ CHECK-ERRORS: strexd r6, r5, r3, [r8] 280@ CHECK-ERRORS: ^ 281 282 @ Illegal rotate operators for extend instructions 283 sxtb r8, r3, #8 284 sxtb r8, r3, ror 24 285 sxtb r8, r3, ror #8 - 286 sxtab r3, r8, r3, ror #(fred - wilma) 287 sxtab r7, r8, r3, ror #25 288 sxtah r9, r3, r3, ror #-8 289 sxtb16ge r2, r3, lsr #24 290 291@ CHECK-ERRORS: error: invalid operand for instruction 292@ CHECK-ERRORS: sxtb r8, r3, #8 293@ CHECK-ERRORS: ^ 294@ CHECK-ERRORS: error: '#' expected 295@ CHECK-ERRORS: sxtb r8, r3, ror 24 296@ CHECK-ERRORS: ^ 297@ CHECK-ERRORS: error: unknown token in expression 298@ CHECK-ERRORS: sxtb r8, r3, ror #8 - 299@ CHECK-ERRORS: ^ 300@ CHECK-ERRORS: error: malformed rotate expression 301@ CHECK-ERRORS: sxtb r8, r3, ror #8 - 302@ CHECK-ERRORS: ^ 303@ CHECK-ERRORS: error: rotate amount must be an immediate 304@ CHECK-ERRORS: sxtab r3, r8, r3, ror #(fred - wilma) 305@ CHECK-ERRORS: ^ 306@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24 307@ CHECK-ERRORS: sxtab r7, r8, r3, ror #25 308@ CHECK-ERRORS: ^ 309@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24 310@ CHECK-ERRORS: sxtah r9, r3, r3, ror #-8 311@ CHECK-ERRORS: ^ 312@ CHECK-ERRORS: error: invalid operand for instruction 313@ CHECK-ERRORS: sxtb16ge r2, r3, lsr #24 314@ CHECK-ERRORS: ^ 315 316 @ Out of range width for SBFX/UBFX 317 sbfx r4, r5, #31, #2 318 ubfxgt r4, r5, #16, #17 319 320@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb] 321@ CHECK-ERRORS: sbfx r4, r5, #31, #2 322@ CHECK-ERRORS: ^ 323@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb] 324@ CHECK-ERRORS: ubfxgt r4, r5, #16, #17 325@ CHECK-ERRORS: ^ 326 327 @ Out of order Rt/Rt2 operands for ldrd 328 ldrd r4, r3, [r8] 329 ldrd r4, r3, [r8, #8]! 330 ldrd r4, r3, [r8], #8 331@ CHECK-ERRORS: error: destination operands must be sequential 332@ CHECK-ERRORS: ldrd r4, r3, [r8] 333@ CHECK-ERRORS: ^ 334@ CHECK-ERRORS: error: destination operands must be sequential 335@ CHECK-ERRORS: ldrd r4, r3, [r8, #8]! 336@ CHECK-ERRORS: ^ 337@ CHECK-ERRORS: error: destination operands must be sequential 338@ CHECK-ERRORS: ldrd r4, r3, [r8], #8 339@ CHECK-ERRORS: ^ 340 341 342 @ Bad register lists for VFP. 343 vpush {s0, s3} 344@ CHECK-ERRORS: error: non-contiguous register range 345@ CHECK-ERRORS: vpush {s0, s3} 346@ CHECK-ERRORS: ^ 347 348 @ Out of range coprocessor option immediate. 349 ldc2 p2, c8, [r1], { 256 } 350 ldc2 p2, c8, [r1], { -1 } 351 352@ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255] 353@ CHECK-ERRORS: ldc2 p2, c8, [r1], { 256 } 354@ CHECK-ERRORS: ^ 355@ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255] 356@ CHECK-ERRORS: ldc2 p2, c8, [r1], { -1 } 357@ CHECK-ERRORS: ^ 358 359 @ Bad CPS instruction format. 360 cps f,#1 361@ CHECK-ERRORS: error: invalid operand for instruction 362@ CHECK-ERRORS: cps f,#1 363@ CHECK-ERRORS: ^ 364 365 @ Bad operands for msr 366 msr #0, #0 367 msr foo, #0 368@ CHECK-ERRORS: error: invalid operand for instruction 369@ CHECK-ERRORS: msr #0, #0 370@ CHECK-ERRORS: ^ 371@ CHECK-ERRORS: error: invalid operand for instruction 372@ CHECK-ERRORS: msr foo, #0 373@ CHECK-ERRORS: ^ 374 375 isb #-1 376 isb #16 377@ CHECK-ERRORS: error: immediate value out of range 378@ CHECK-ERRORS: error: immediate value out of range 379 380 nop.n 381@ CHECK-ERRORS: error: instruction with .n (narrow) qualifier not allowed in arm mode 382 383 dmbeq #5 384 dsble #15 385 isblo #7 386@ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified 387@ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified 388@ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified 389 390 dmblt 391 dsbne 392 isbeq 393@ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified 394@ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified 395@ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified 396 397 mcr2le p7, #1, r5, c1, c1, #4 398 mcrr2ne p7, #15, r5, r4, c1 399 mrc2lo p14, #0, r1, c1, c2, #4 400 mrrc2lo p7, #1, r5, r4, c1 401 cdp2hi p10, #0, c6, c12, c0, #7 402@ CHECK-ERRORS: error: instruction 'mcr2' is not predicable, but condition code specified 403@ CHECK-ERRORS: error: instruction 'mcrr2' is not predicable, but condition code specified 404@ CHECK-ERRORS: error: instruction 'mrc2' is not predicable, but condition code specified 405@ CHECK-ERRORS: error: instruction 'mrrc2' is not predicable, but condition code specified 406@ CHECK-ERRORS: error: instruction 'cdp2' is not predicable, but condition code specified 407 408 bkpteq #7 409@ CHECK-ERRORS: error: instruction 'bkpt' is not predicable, but condition code specified 410