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