1@ RUN: not llvm-mc -triple=armv7-apple-darwin < %s 2> %t 2@ RUN: FileCheck --check-prefix=CHECK-ERRORS --check-prefix=CHECK-ERRORS-V7 < %t %s 3@ RUN: not llvm-mc -triple=armv8 < %s 2> %t 4@ RUN: FileCheck --check-prefix=CHECK-ERRORS --check-prefix=CHECK-ERRORS-V8 < %t %s 5 6@ Check for various assembly diagnostic messages on invalid input. 7 8@ 's' bit on an instruction that can't accept it. 9 mlss r1, r2, r3, r4 10@ CHECK-ERRORS: error: instruction 'mls' can not set flags, 11@ CHECK-ERRORS: but 's' suffix specified 12 13 14 @ Out of range shift immediate values. 15 adc r1, r2, r3, lsl #invalid 16 adc r4, r5, r6, lsl #-1 17 adc r4, r5, r6, lsl #32 18 adc r4, r5, r6, lsr #-1 19 adc r4, r5, r6, lsr #33 20 adc r4, r5, r6, asr #-1 21 adc r4, r5, r6, asr #33 22 adc r4, r5, r6, ror #-1 23 adc r4, r5, r6, ror #32 24 25@ CHECK-ERRORS: error: invalid immediate shift value 26@ CHECK-ERRORS: adc r1, r2, r3, lsl #invalid 27@ CHECK-ERRORS: ^ 28@ CHECK-ERRORS: error: immediate shift value out of range 29@ CHECK-ERRORS: adc r4, r5, r6, lsl #-1 30@ CHECK-ERRORS: ^ 31@ CHECK-ERRORS: error: immediate shift value out of range 32@ CHECK-ERRORS: adc r4, r5, r6, lsl #32 33@ CHECK-ERRORS: ^ 34@ CHECK-ERRORS: error: immediate shift value out of range 35@ CHECK-ERRORS: adc r4, r5, r6, lsr #-1 36@ CHECK-ERRORS: ^ 37@ CHECK-ERRORS: error: immediate shift value out of range 38@ CHECK-ERRORS: adc r4, r5, r6, lsr #33 39@ CHECK-ERRORS: ^ 40@ CHECK-ERRORS: error: immediate shift value out of range 41@ CHECK-ERRORS: adc r4, r5, r6, asr #-1 42@ CHECK-ERRORS: ^ 43@ CHECK-ERRORS: error: immediate shift value out of range 44@ CHECK-ERRORS: adc r4, r5, r6, asr #33 45@ CHECK-ERRORS: ^ 46@ CHECK-ERRORS: error: immediate shift value out of range 47@ CHECK-ERRORS: adc r4, r5, r6, ror #-1 48@ CHECK-ERRORS: ^ 49@ CHECK-ERRORS: error: immediate shift value out of range 50@ CHECK-ERRORS: adc r4, r5, r6, ror #32 51 52 @ Out of range shift immediate values for load/store. 53 str r1, [r2, r3, lsl #invalid] 54 ldr r4, [r5], r6, lsl #-1 55 pld r4, [r5, r6, lsl #32] 56 str r4, [r5], r6, lsr #-1 57 ldr r4, [r5, r6, lsr #33] 58 pld r4, [r5, r6, asr #-1] 59 str r4, [r5, r6, asr #33] 60 ldr r4, [r5, r6, ror #-1] 61 pld r4, [r5, r6, ror #32] 62 pld r4, [r5, r6, rrx #0] 63 64@ CHECK-ERRORS: error: shift amount must be an immediate 65@ CHECK-ERRORS: str r1, [r2, r3, lsl #invalid] 66@ CHECK-ERRORS: ^ 67@ CHECK-ERRORS: error: immediate shift value out of range 68@ CHECK-ERRORS: ldr r4, [r5], r6, lsl #-1 69@ CHECK-ERRORS: ^ 70@ CHECK-ERRORS: error: immediate shift value out of range 71@ CHECK-ERRORS: pld r4, [r5, r6, lsl #32] 72@ CHECK-ERRORS: ^ 73@ CHECK-ERRORS: error: immediate shift value out of range 74@ CHECK-ERRORS: str r4, [r5], r6, lsr #-1 75@ CHECK-ERRORS: ^ 76@ CHECK-ERRORS: error: immediate shift value out of range 77@ CHECK-ERRORS: ldr r4, [r5, r6, lsr #33] 78@ CHECK-ERRORS: ^ 79@ CHECK-ERRORS: error: immediate shift value out of range 80@ CHECK-ERRORS: pld r4, [r5, r6, asr #-1] 81@ CHECK-ERRORS: ^ 82@ CHECK-ERRORS: error: immediate shift value out of range 83@ CHECK-ERRORS: str r4, [r5, r6, asr #33] 84@ CHECK-ERRORS: ^ 85@ CHECK-ERRORS: error: immediate shift value out of range 86@ CHECK-ERRORS: ldr r4, [r5, r6, ror #-1] 87@ CHECK-ERRORS: ^ 88@ CHECK-ERRORS: error: immediate shift value out of range 89@ CHECK-ERRORS: pld r4, [r5, r6, ror #32] 90@ CHECK-ERRORS: error: ']' expected 91@ CHECK-ERRORS: pld r4, [r5, r6, rrx #0] 92 93 @ Out of range 16-bit immediate on BKPT 94 bkpt #65536 95 96@ CHECK-ERRORS: error: invalid operand for instruction 97 98 @ Out of range immediates for v8 HLT instruction. 99 hlt #65536 100 hlt #-1 101@CHECK-ERRORS: error: invalid operand for instruction 102@CHECK-ERRORS: hlt #65536 103@CHECK-ERRORS: ^ 104@CHECK-ERRORS: error: invalid operand for instruction 105@CHECK-ERRORS: hlt #-1 106@CHECK-ERRORS: ^ 107 108 @ Illegal condition code for v8 HLT instruction. 109 hlteq #2 110 hltlt #23 111@CHECK-ERRORS: error: instruction 'hlt' is not predicable, but condition code specified 112@CHECK-ERRORS: hlteq #2 113@CHECK-ERRORS: ^ 114@CHECK-ERRORS: error: instruction 'hlt' is not predicable, but condition code specified 115@CHECK-ERRORS: hltlt #23 116@CHECK-ERRORS: ^ 117 118 @ Out of range 4 and 3 bit immediates on CDP[2] 119 120 @ Out of range immediates for CDP/CDP2 121 cdp p7, #2, c1, c1, c1, #8 122 cdp p7, #1, c1, c1, c1, #8 123 cdp2 p7, #2, c1, c1, c1, #8 124 cdp2 p7, #1, c1, c1, c1, #8 125 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: invalid operand for instruction 130 131 @ Out of range immediates for DBG 132 dbg #-1 133 dbg #16 134 135@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 136@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 137@ Double-check that we're synced up with the right diagnostics. 138@ CHECK-ERRORS: dbg #16 139 140 @ Out of range immediate for MCR/MCR2/MCRR/MCRR2 141 mcr p7, #8, r5, c1, c1, #4 142 mcr p7, #2, r5, c1, c1, #8 143 mcr2 p7, #8, r5, c1, c1, #4 144 mcr2 p7, #1, r5, c1, c1, #8 145 mcrr p7, #16, r5, r4, c1 146 mcrr2 p7, #16, r5, r4, c1 147@ CHECK-ERRORS: error: invalid operand for instruction 148@ CHECK-ERRORS: error: invalid operand for instruction 149@ CHECK-ERRORS: error: invalid operand for instruction 150@ CHECK-ERRORS: error: invalid operand for instruction 151@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 152@ CHECK-ERRORS-V7: error: immediate operand must be in the range [0,15] 153@ CHECK-ERRORS-V8: error: invalid operand for instruction 154 155 @ p10 and p11 are reserved for NEON 156 mcr p10, #2, r5, c1, c1, #4 157 mcrr p11, #8, r5, r4, c1 158@ CHECK-ERRORS: error: invalid operand for instruction 159@ CHECK-ERRORS: error: invalid operand for instruction 160 161 @ Out of range immediate for MOV 162 movw r9, 0x10000 163@ CHECK-ERRORS: error: invalid operand for instruction 164 165 @ Invalid 's' bit usage for MOVW 166 movs r6, #0xffff 167 movwseq r9, #0xffff 168@ CHECK-ERRORS: error: invalid operand for instruction 169@ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified 170 171 @ Out of range immediate for MOVT 172 movt r9, 0x10000 173@ CHECK-ERRORS: error: invalid operand for instruction 174 175 @ Out of range immediates for MRC/MRC2/MRRC/MRRC2 176 mrc p14, #8, r1, c1, c2, #4 177 mrc p14, #1, r1, c1, c2, #8 178 mrc2 p14, #8, r1, c1, c2, #4 179 mrc2 p14, #0, r1, c1, c2, #9 180 mrrc p7, #16, r5, r4, c1 181 mrrc2 p7, #17, r5, r4, c1 182@ CHECK-ERRORS: error: invalid operand for instruction 183@ CHECK-ERRORS: error: invalid operand for instruction 184@ CHECK-ERRORS: error: invalid operand for instruction 185@ CHECK-ERRORS: error: invalid operand for instruction 186@ CHECK-ERRORS: error: immediate operand must be in the range [0,15] 187@ CHECK-ERRORS-V7: error: immediate operand must be in the range [0,15] 188@ CHECK-ERRORS-V8: error: invalid operand for instruction 189 190 @ Shifter operand validation for PKH instructions. 191 pkhbt r2, r2, r3, lsl #-1 192 pkhbt r2, r2, r3, lsl #32 193 pkhtb r2, r2, r3, asr #0 194 pkhtb r2, r2, r3, asr #33 195 pkhbt r2, r2, r3, asr #3 196 pkhtb r2, r2, r3, lsl #3 197 198@ CHECK-ERRORS: error: immediate value out of range 199@ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #-1 200@ CHECK-ERRORS: ^ 201@ CHECK-ERRORS: error: immediate value out of range 202@ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #32 203@ CHECK-ERRORS: ^ 204@ CHECK-ERRORS: error: immediate value out of range 205@ CHECK-ERRORS: pkhtb r2, r2, r3, asr #0 206@ CHECK-ERRORS: ^ 207@ CHECK-ERRORS: error: immediate value out of range 208@ CHECK-ERRORS: pkhtb r2, r2, r3, asr #33 209@ CHECK-ERRORS: ^ 210@ CHECK-ERRORS: error: lsl operand expected. 211@ CHECK-ERRORS: pkhbt r2, r2, r3, asr #3 212@ CHECK-ERRORS: ^ 213@ CHECK-ERRORS: error: asr operand expected. 214@ CHECK-ERRORS: pkhtb r2, r2, r3, lsl #3 215@ CHECK-ERRORS: ^ 216 217 218 @ bad values for SETEND 219 setendne be 220 setend me 221 setend 1 222 223@ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified 224@ CHECK-ERRORS: setendne be 225@ CHECK-ERRORS: ^ 226@ CHECK-ERRORS: error: 'be' or 'le' operand expected 227@ CHECK-ERRORS: setend me 228@ CHECK-ERRORS: ^ 229@ CHECK-ERRORS: error: 'be' or 'le' operand expected 230@ CHECK-ERRORS: setend 1 231@ CHECK-ERRORS: ^ 232 233 234 @ Out of range immediates and bad shift types for SSAT 235 ssat r8, #0, r10, lsl #8 236 ssat r8, #33, r10, lsl #8 237 ssat r8, #1, r10, lsl #-1 238 ssat r8, #1, r10, lsl #32 239 ssat r8, #1, r10, asr #0 240 ssat r8, #1, r10, asr #33 241 ssat r8, #1, r10, lsr #5 242 ssat r8, #1, r10, lsl fred 243 ssat r8, #1, r10, lsl #fred 244 245@ CHECK-ERRORS: error: invalid operand for instruction 246@ CHECK-ERRORS: ssat r8, #0, r10, lsl #8 247@ CHECK-ERRORS: ^ 248@ CHECK-ERRORS: error: invalid operand for instruction 249@ CHECK-ERRORS: ssat r8, #33, r10, lsl #8 250@ CHECK-ERRORS: ^ 251@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31] 252@ CHECK-ERRORS: ssat r8, #1, r10, lsl #-1 253@ CHECK-ERRORS: ^ 254@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31] 255@ CHECK-ERRORS: ssat r8, #1, r10, lsl #32 256@ CHECK-ERRORS: ^ 257@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32] 258@ CHECK-ERRORS: ssat r8, #1, r10, asr #0 259@ CHECK-ERRORS: ^ 260@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32] 261@ CHECK-ERRORS: ssat r8, #1, r10, asr #33 262@ CHECK-ERRORS: ^ 263@ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected 264@ CHECK-ERRORS: ssat r8, #1, r10, lsr #5 265@ CHECK-ERRORS: ^ 266@ CHECK-ERRORS: error: '#' expected 267@ CHECK-ERRORS: ssat r8, #1, r10, lsl fred 268@ CHECK-ERRORS: ^ 269@ CHECK-ERRORS: error: shift amount must be an immediate 270@ CHECK-ERRORS: ssat r8, #1, r10, lsl #fred 271@ CHECK-ERRORS: ^ 272 273 @ Out of range immediates for SSAT16 274 ssat16 r2, #0, r7 275 ssat16 r3, #17, r5 276 277@ CHECK-ERRORS: error: invalid operand for instruction 278@ CHECK-ERRORS: ssat16 r2, #0, r7 279@ CHECK-ERRORS: ^ 280@ CHECK-ERRORS: error: invalid operand for instruction 281@ CHECK-ERRORS: ssat16 r3, #17, r5 282@ CHECK-ERRORS: ^ 283 284 285 @ Out of order STM registers 286 stmda sp!, {r5, r2} 287 288@ CHECK-ERRORS: warning: register list not in ascending order 289@ CHECK-ERRORS: stmda sp!, {r5, r2} 290@ CHECK-ERRORS: ^ 291 292 293 @ Out of range immediate on SVC 294 svc #0x1000000 295@ CHECK-ERRORS: error: invalid operand for instruction 296@ CHECK-ERRORS: svc #0x1000000 297@ CHECK-ERRORS: ^ 298 299 300 @ Out of order Rt/Rt2 operands for ldrexd/strexd 301 ldrexd r4, r3, [r8] 302 strexd r6, r5, r3, [r8] 303 304@ CHECK-ERRORS: error: destination operands must be sequential 305@ CHECK-ERRORS: ldrexd r4, r3, [r8] 306@ CHECK-ERRORS: ^ 307@ CHECK-ERRORS: error: source operands must be sequential 308@ CHECK-ERRORS: strexd r6, r5, r3, [r8] 309@ CHECK-ERRORS: ^ 310 311 @ Illegal rotate operators for extend instructions 312 sxtb r8, r3, #8 313 sxtb r8, r3, ror 24 314 sxtb r8, r3, ror #8 - 315 sxtab r3, r8, r3, ror #(fred - wilma) 316 sxtab r7, r8, r3, ror #25 317 sxtah r9, r3, r3, ror #-8 318 sxtb16ge r2, r3, lsr #24 319 320@ CHECK-ERRORS: error: invalid operand for instruction 321@ CHECK-ERRORS: sxtb r8, r3, #8 322@ CHECK-ERRORS: ^ 323@ CHECK-ERRORS: error: '#' expected 324@ CHECK-ERRORS: sxtb r8, r3, ror 24 325@ CHECK-ERRORS: ^ 326@ CHECK-ERRORS: error: unknown token in expression 327@ CHECK-ERRORS: sxtb r8, r3, ror #8 - 328@ CHECK-ERRORS: ^ 329@ CHECK-ERRORS: error: malformed rotate expression 330@ CHECK-ERRORS: sxtb r8, r3, ror #8 - 331@ CHECK-ERRORS: ^ 332@ CHECK-ERRORS: error: rotate amount must be an immediate 333@ CHECK-ERRORS: sxtab r3, r8, r3, ror #(fred - wilma) 334@ CHECK-ERRORS: ^ 335@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24 336@ CHECK-ERRORS: sxtab r7, r8, r3, ror #25 337@ CHECK-ERRORS: ^ 338@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24 339@ CHECK-ERRORS: sxtah r9, r3, r3, ror #-8 340@ CHECK-ERRORS: ^ 341@ CHECK-ERRORS: error: invalid operand for instruction 342@ CHECK-ERRORS: sxtb16ge r2, r3, lsr #24 343@ CHECK-ERRORS: ^ 344 345 @ Out of range width for SBFX/UBFX 346 sbfx r4, r5, #31, #2 347 ubfxgt r4, r5, #16, #17 348 349@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb] 350@ CHECK-ERRORS: sbfx r4, r5, #31, #2 351@ CHECK-ERRORS: ^ 352@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb] 353@ CHECK-ERRORS: ubfxgt r4, r5, #16, #17 354@ CHECK-ERRORS: ^ 355 356 @ Using pc for SBFX/UBFX 357 sbfx pc, r2, #1, #3 358 sbfx sp, pc, #4, #5 359 ubfx pc, r0, #0, #31 360 ubfx r14, pc, #1, #2 361@ CHECK-ERRORS: error: invalid operand for instruction 362@ CHECK-ERRORS: sbfx pc, r2, #1, #3 363@ CHECK-ERRORS: ^ 364@ CHECK-ERRORS: error: invalid operand for instruction 365@ CHECK-ERRORS: sbfx sp, pc, #4, #5 366@ CHECK-ERRORS: ^ 367@ CHECK-ERRORS: error: invalid operand for instruction 368@ CHECK-ERRORS: ubfx pc, r0, #0, #31 369@ CHECK-ERRORS: ^ 370@ CHECK-ERRORS: error: invalid operand for instruction 371@ CHECK-ERRORS: ubfx r14, pc, #1, #2 372@ CHECK-ERRORS: ^ 373 374 @ Out of order Rt/Rt2 operands for ldrd 375 ldrd r4, r3, [r8] 376 ldrd r4, r3, [r8, #8]! 377 ldrd r4, r3, [r8], #8 378@ CHECK-ERRORS: error: destination operands must be sequential 379@ CHECK-ERRORS: ldrd r4, r3, [r8] 380@ CHECK-ERRORS: ^ 381@ CHECK-ERRORS: error: destination operands must be sequential 382@ CHECK-ERRORS: ldrd r4, r3, [r8, #8]! 383@ CHECK-ERRORS: ^ 384@ CHECK-ERRORS: error: destination operands must be sequential 385@ CHECK-ERRORS: ldrd r4, r3, [r8], #8 386@ CHECK-ERRORS: ^ 387 388 389 @ Bad register lists for VFP. 390 vpush {s0, s3} 391@ CHECK-ERRORS: error: non-contiguous register range 392@ CHECK-ERRORS: vpush {s0, s3} 393@ CHECK-ERRORS: ^ 394 395 @ Out of range coprocessor option immediate. 396 ldc2 p2, c8, [r1], { 256 } 397 ldc2 p2, c8, [r1], { -1 } 398 399@ CHECK-ERRORS-V7: error: coprocessor option must be an immediate in range [0, 255] 400@ CHECK-ERRORS-V7: ldc2 p2, c8, [r1], { 256 } 401@ CHECK-ERRORS-V7: ^ 402@ CHECK-ERRORS-V8: error: register expected 403@ CHECK-ERRORS-V7: error: coprocessor option must be an immediate in range [0, 255] 404@ CHECK-ERRORS-V7: ldc2 p2, c8, [r1], { -1 } 405@ CHECK-ERRORS-V7: ^ 406@ CHECK-ERRORS-V8: error: register expected 407 408 @ Bad CPS instruction format. 409 cps f,#1 410@ CHECK-ERRORS: error: invalid operand for instruction 411@ CHECK-ERRORS: cps f,#1 412@ CHECK-ERRORS: ^ 413 414 @ Bad operands for msr 415 msr #0, #0 416 msr foo, #0 417@ CHECK-ERRORS: error: invalid operand for instruction 418@ CHECK-ERRORS: msr #0, #0 419@ CHECK-ERRORS: ^ 420@ CHECK-ERRORS: error: invalid operand for instruction 421@ CHECK-ERRORS: msr foo, #0 422@ CHECK-ERRORS: ^ 423 424 isb #-1 425 isb #16 426@ CHECK-ERRORS: error: immediate value out of range 427@ CHECK-ERRORS: error: immediate value out of range 428 429 nop.n 430@ CHECK-ERRORS: error: instruction with .n (narrow) qualifier not allowed in arm mode 431 432 dmbeq #5 433 dsble #15 434 isblo #7 435@ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified 436@ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified 437@ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified 438 439 dmblt 440 dsbne 441 isbeq 442@ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified 443@ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified 444@ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified 445 446 mcr2le p7, #1, r5, c1, c1, #4 447 mcrr2ne p7, #15, r5, r4, c1 448 mrc2lo p14, #0, r1, c1, c2, #4 449 mrrc2lo p7, #1, r5, r4, c1 450 cdp2hi p10, #0, c6, c12, c0, #7 451@ CHECK-ERRORS: error: instruction 'mcr2' is not predicable, but condition code specified 452@ CHECK-ERRORS: error: instruction 'mcrr2' is not predicable, but condition code specified 453@ CHECK-ERRORS: error: instruction 'mrc2' is not predicable, but condition code specified 454@ CHECK-ERRORS: error: instruction 'mrrc2' is not predicable, but condition code specified 455@ CHECK-ERRORS: error: instruction 'cdp2' is not predicable, but condition code specified 456 457 bkpteq #7 458@ CHECK-ERRORS: error: instruction 'bkpt' is not predicable, but condition code specified 459 460 ldm r2!, {r2, r3} 461 ldmdb r2!, {r2, r3} 462 ldmda r2!, {r2, r3} 463 popeq {sp} 464@ CHECK-ERRORS: error: writeback register not allowed in register list 465@ CHECK-ERRORS: error: writeback register not allowed in register list 466@ CHECK-ERRORS: error: writeback register not allowed in register list 467@ CHECK-ERRORS: error: writeback register not allowed in register list 468 469 vrintz.f32.f32 s0, s1 470 vrintr.f32 s0, s1 471 vrintx.f64.f64 d2, d5 472 vrintz.f64 d10, d9 473 vrinta.f32.f32 s6, s7 474 vrintn.f32 s8, s9 475 vrintp.f64.f64 d10, d11 476 vrintm.f64 d12, d13 477@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 478@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 479@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 480@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 481@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 482@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 483@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 484@ CHECK-ERRORS-V7: error: instruction requires: FPARMv8 485 486 stm sp!, {r0, pc}^ 487 ldm sp!, {r0}^ 488@ CHECK-ERRORS: error: system STM cannot have writeback register 489@ CHECK-ERRORS: error: writeback register only allowed on system LDM if PC in register-list 490 491foo2: 492 mov r0, foo2 493 movw r0, foo2 494@ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16 495@ CHECK-ERRORS: ^ 496@ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16 497@ CHECK-ERRORS: ^ 498 499 str r0, [r0, #4]! 500 str r0, [r0, r1]! 501 str r0, [r0], #4 502 str r0, [r0], r1 503 strh r0, [r0, #2]! 504 strh r0, [r0, r1]! 505 strh r0, [r0], #2 506 strh r0, [r0], r1 507 strb r0, [r0, #1]! 508 strb r0, [r0, r1]! 509 strb r0, [r0], #1 510 strb r0, [r0], r1 511@ CHECK-ERRORS: error: source register and base register can't be identical 512@ CHECK-ERRORS: str r0, [r0, #4]! 513@ CHECK-ERRORS: ^ 514@ CHECK-ERRORS: error: source register and base register can't be identical 515@ CHECK-ERRORS: str r0, [r0, r1]! 516@ CHECK-ERRORS: ^ 517@ CHECK-ERRORS: error: source register and base register can't be identical 518@ CHECK-ERRORS: str r0, [r0], #4 519@ CHECK-ERRORS: ^ 520@ CHECK-ERRORS: error: source register and base register can't be identical 521@ CHECK-ERRORS: str r0, [r0], r1 522@ CHECK-ERRORS: ^ 523@ CHECK-ERRORS: error: source register and base register can't be identical 524@ CHECK-ERRORS: strh r0, [r0, #2]! 525@ CHECK-ERRORS: ^ 526@ CHECK-ERRORS: error: source register and base register can't be identical 527@ CHECK-ERRORS: strh r0, [r0, r1]! 528@ CHECK-ERRORS: ^ 529@ CHECK-ERRORS: error: source register and base register can't be identical 530@ CHECK-ERRORS: strh r0, [r0], #2 531@ CHECK-ERRORS: ^ 532@ CHECK-ERRORS: error: source register and base register can't be identical 533@ CHECK-ERRORS: strh r0, [r0], r1 534@ CHECK-ERRORS: ^ 535@ CHECK-ERRORS: error: source register and base register can't be identical 536@ CHECK-ERRORS: strb r0, [r0, #1]! 537@ CHECK-ERRORS: ^ 538@ CHECK-ERRORS: error: source register and base register can't be identical 539@ CHECK-ERRORS: strb r0, [r0, r1]! 540@ CHECK-ERRORS: ^ 541@ CHECK-ERRORS: error: source register and base register can't be identical 542@ CHECK-ERRORS: strb r0, [r0], #1 543@ CHECK-ERRORS: ^ 544@ CHECK-ERRORS: error: source register and base register can't be identical 545@ CHECK-ERRORS: strb r0, [r0], r1 546@ CHECK-ERRORS: ^ 547 548 ldr r0, [r0, #4]! 549 ldr r0, [r0, r1]! 550 ldr r0, [r0], #4 551 ldr r0, [r0], r1 552 ldrh r0, [r0, #2]! 553 ldrh r0, [r0, r1]! 554 ldrh r0, [r0], #2 555 ldrh r0, [r0], r1 556 ldrsh r0, [r0, #2]! 557 ldrsh r0, [r0, r1]! 558 ldrsh r0, [r0], #2 559 ldrsh r0, [r0], r1 560 ldrb r0, [r0, #1]! 561 ldrb r0, [r0, r1]! 562 ldrb r0, [r0], #1 563 ldrb r0, [r0], r1 564 ldrsb r0, [r0, #1]! 565 ldrsb r0, [r0, r1]! 566 ldrsb r0, [r0], #1 567 ldrsb r0, [r0], r1 568@ CHECK-ERRORS: error: destination register and base register can't be identical 569@ CHECK-ERRORS: ldr r0, [r0, #4]! 570@ CHECK-ERRORS: ^ 571@ CHECK-ERRORS: error: destination register and base register can't be identical 572@ CHECK-ERRORS: ldr r0, [r0, r1]! 573@ CHECK-ERRORS: ^ 574@ CHECK-ERRORS: error: destination register and base register can't be identical 575@ CHECK-ERRORS: ldr r0, [r0], #4 576@ CHECK-ERRORS: ^ 577@ CHECK-ERRORS: error: destination register and base register can't be identical 578@ CHECK-ERRORS: ldr r0, [r0], r1 579@ CHECK-ERRORS: ^ 580@ CHECK-ERRORS: error: destination register and base register can't be identical 581@ CHECK-ERRORS: ldrh r0, [r0, #2]! 582@ CHECK-ERRORS: ^ 583@ CHECK-ERRORS: error: destination register and base register can't be identical 584@ CHECK-ERRORS: ldrh r0, [r0, r1]! 585@ CHECK-ERRORS: ^ 586@ CHECK-ERRORS: error: destination register and base register can't be identical 587@ CHECK-ERRORS: ldrh r0, [r0], #2 588@ CHECK-ERRORS: ^ 589@ CHECK-ERRORS: error: destination register and base register can't be identical 590@ CHECK-ERRORS: ldrh r0, [r0], r1 591@ CHECK-ERRORS: ^ 592@ CHECK-ERRORS: error: destination register and base register can't be identical 593@ CHECK-ERRORS: ldrsh r0, [r0, #2]! 594@ CHECK-ERRORS: ^ 595@ CHECK-ERRORS: error: destination register and base register can't be identical 596@ CHECK-ERRORS: ldrsh r0, [r0, r1]! 597@ CHECK-ERRORS: ^ 598@ CHECK-ERRORS: error: destination register and base register can't be identical 599@ CHECK-ERRORS: ldrsh r0, [r0], #2 600@ CHECK-ERRORS: ^ 601@ CHECK-ERRORS: error: destination register and base register can't be identical 602@ CHECK-ERRORS: ldrsh r0, [r0], r1 603@ CHECK-ERRORS: ^ 604@ CHECK-ERRORS: error: destination register and base register can't be identical 605@ CHECK-ERRORS: ldrb r0, [r0, #1]! 606@ CHECK-ERRORS: ^ 607@ CHECK-ERRORS: error: destination register and base register can't be identical 608@ CHECK-ERRORS: ldrb r0, [r0, r1]! 609@ CHECK-ERRORS: ^ 610@ CHECK-ERRORS: error: destination register and base register can't be identical 611@ CHECK-ERRORS: ldrb r0, [r0], #1 612@ CHECK-ERRORS: ^ 613@ CHECK-ERRORS: error: destination register and base register can't be identical 614@ CHECK-ERRORS: ldrb r0, [r0], r1 615@ CHECK-ERRORS: ^ 616@ CHECK-ERRORS: error: destination register and base register can't be identical 617@ CHECK-ERRORS: ldrsb r0, [r0, #1]! 618@ CHECK-ERRORS: ^ 619@ CHECK-ERRORS: error: destination register and base register can't be identical 620@ CHECK-ERRORS: ldrsb r0, [r0, r1]! 621@ CHECK-ERRORS: ^ 622@ CHECK-ERRORS: error: destination register and base register can't be identical 623@ CHECK-ERRORS: ldrsb r0, [r0], #1 624@ CHECK-ERRORS: ^ 625@ CHECK-ERRORS: error: destination register and base register can't be identical 626@ CHECK-ERRORS: ldrsb r0, [r0], r1 627@ CHECK-ERRORS: ^ 628 629 @ Out of range modified immediate values 630 mov r5, #-256, #6 631 mov r6, #42, #7 632 mvn r5, #256, #6 633 mvn r6, #42, #298 634 cmp r5, #65535, #6 635 cmp r6, #42, #31 636 cmn r5, #-1, #6 637 cmn r6, #42, #32 638 msr APSR_nzcvq, #-128, #2 639 msr apsr_nzcvqg, #0, #1 640 adc r7, r8, #-256, #2 641 adc r7, r8, #128, #1 642 sbc r7, r8, #-256, #2 643 sbc r7, r8, #128, #1 644 add r7, r8, #-2149, #0 645 add r7, r8, #100, #1 646 sub r7, r8, #-2149, #0 647 sub r7, r8, #100, #1 648 and r7, r8, #-2149, #0 649 and r7, r8, #100, #1 650 orr r7, r8, #-2149, #0 651 orr r7, r8, #100, #1 652 eor r7, r8, #-2149, #0 653 eor r7, r8, #100, #1 654 bic r7, r8, #-2149, #0 655 bic r7, r8, #100, #1 656 rsb r7, r8, #-2149, #0 657 rsb r7, r8, #100, #1 658 adds r7, r8, #-2149, #0 659 adds r7, r8, #100, #1 660 subs r7, r8, #-2149, #0 661 subs r7, r8, #100, #1 662 rsbs r7, r8, #-2149, #0 663 rsbs r7, r8, #100, #1 664 rsc r7, r8, #-2149, #0 665 rsc r7, r8, #100, #1 666 TST r7, #-2149, #0 667 TST r7, #100, #1 668 TEQ r7, #-2149, #0 669 TEQ r7, #100, #1 670@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 671@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 672@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 673@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 674@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 675@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 676@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 677@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 678@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 679@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 680@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 681@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 682@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 683@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 684@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 685@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 686@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 687@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 688@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 689@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 690@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 691@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 692@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 693@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 694@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 695@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 696@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 697@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 698@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 699@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 700@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 701@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 702@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 703@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 704@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 705@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 706@ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255] 707@ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30] 708