basic-thumb2-instructions.s revision 12c7e90d369b4605aac0ddbd252231beacb2aabb
1@ RUN: llvm-mc -triple=thumbv7-apple-darwin -show-encoding < %s | FileCheck %s 2 .syntax unified 3 .globl _func 4 5@ Check that the assembler can handle the documented syntax from the ARM ARM. 6@ For complex constructs like shifter operands, check more thoroughly for them 7@ once then spot check that following instructions accept the form generally. 8@ This gives us good coverage while keeping the overall size of the test 9@ more reasonable. 10 11 12@ FIXME: Some 3-operand instructions have a 2-operand assembly syntax. 13 14_func: 15@ CHECK: _func 16 17@------------------------------------------------------------------------------ 18@ ADC (immediate) 19@------------------------------------------------------------------------------ 20 adc r0, r1, #4 21 adcs r0, r1, #0 22 adc r1, r2, #255 23 adc r3, r7, #0x00550055 24 adc r8, r12, #0xaa00aa00 25 adc r9, r7, #0xa5a5a5a5 26 adc r5, r3, #0x87000000 27 adc r4, r2, #0x7f800000 28 adc r4, r2, #0x00000680 29 30@ CHECK: adc r0, r1, #4 @ encoding: [0x41,0xf1,0x04,0x00] 31@ CHECK: adcs r0, r1, #0 @ encoding: [0x51,0xf1,0x00,0x00] 32@ CHECK: adc r1, r2, #255 @ encoding: [0x42,0xf1,0xff,0x01] 33@ CHECK: adc r3, r7, #5570645 @ encoding: [0x47,0xf1,0x55,0x13] 34@ CHECK: adc r8, r12, #2852170240 @ encoding: [0x4c,0xf1,0xaa,0x28] 35@ CHECK: adc r9, r7, #2779096485 @ encoding: [0x47,0xf1,0xa5,0x39] 36@ CHECK: adc r5, r3, #2264924160 @ encoding: [0x43,0xf1,0x07,0x45] 37@ CHECK: adc r4, r2, #2139095040 @ encoding: [0x42,0xf1,0xff,0x44] 38@ CHECK: adc r4, r2, #1664 @ encoding: [0x42,0xf5,0xd0,0x64] 39 40@------------------------------------------------------------------------------ 41@ ADC (register) 42@------------------------------------------------------------------------------ 43 adc r4, r5, r6 44 adcs r4, r5, r6 45 adc.w r9, r1, r3 46 adcs.w r9, r1, r3 47 adc r0, r1, r3, ror #4 48 adcs r0, r1, r3, lsl #7 49 adc.w r0, r1, r3, lsr #31 50 adcs.w r0, r1, r3, asr #32 51 52@ CHECK: adc.w r4, r5, r6 @ encoding: [0x45,0xeb,0x06,0x04] 53@ CHECK: adcs.w r4, r5, r6 @ encoding: [0x55,0xeb,0x06,0x04] 54@ CHECK: adc.w r9, r1, r3 @ encoding: [0x41,0xeb,0x03,0x09] 55@ CHECK: adcs.w r9, r1, r3 @ encoding: [0x51,0xeb,0x03,0x09] 56@ CHECK: adc.w r0, r1, r3, ror #4 @ encoding: [0x41,0xeb,0x33,0x10] 57@ CHECK: adcs.w r0, r1, r3, lsl #7 @ encoding: [0x51,0xeb,0xc3,0x10] 58@ CHECK: adc.w r0, r1, r3, lsr #31 @ encoding: [0x41,0xeb,0xd3,0x70] 59@ CHECK: adcs.w r0, r1, r3, asr #32 @ encoding: [0x51,0xeb,0x23,0x00] 60 61 62@------------------------------------------------------------------------------ 63@ ADD (immediate) 64@------------------------------------------------------------------------------ 65 itet eq 66 addeq r1, r2, #4 67 addwne r5, r3, #1023 68 addeq r4, r5, #293 69 add r2, sp, #1024 70 add r2, r8, #0xff00 71 add r2, r3, #257 72 addw r2, r3, #257 73 add r12, r6, #0x100 74 addw r12, r6, #0x100 75 adds r1, r2, #0x1f0 76 77@ CHECK: itet eq @ encoding: [0x0a,0xbf] 78@ CHECK: addeq r1, r2, #4 @ encoding: [0x11,0x1d] 79@ CHECK: addwne r5, r3, #1023 @ encoding: [0x03,0xf2,0xff,0x35] 80@ CHECK: addweq r4, r5, #293 @ encoding: [0x05,0xf2,0x25,0x14] 81@ CHECK: add.w r2, sp, #1024 @ encoding: [0x0d,0xf5,0x80,0x62] 82@ CHECK: add.w r2, r8, #65280 @ encoding: [0x08,0xf5,0x7f,0x42] 83@ CHECK: addw r2, r3, #257 @ encoding: [0x03,0xf2,0x01,0x12] 84@ CHECK: addw r2, r3, #257 @ encoding: [0x03,0xf2,0x01,0x12] 85@ CHECK: add.w r12, r6, #256 @ encoding: [0x06,0xf5,0x80,0x7c] 86@ CHECK: addw r12, r6, #256 @ encoding: [0x06,0xf2,0x00,0x1c] 87@ CHECK: adds.w r1, r2, #496 @ encoding: [0x12,0xf5,0xf8,0x71] 88 89 90@------------------------------------------------------------------------------ 91@ ADD (register) 92@------------------------------------------------------------------------------ 93 add r1, r2, r8 94 add r5, r9, r2, asr #32 95 adds r7, r3, r1, lsl #31 96 adds.w r0, r3, r6, lsr #25 97 add.w r4, r8, r1, ror #12 98 99@ CHECK: add.w r1, r2, r8 @ encoding: [0x02,0xeb,0x08,0x01] 100@ CHECK: add.w r5, r9, r2, asr #32 @ encoding: [0x09,0xeb,0x22,0x05] 101@ CHECK: adds.w r7, r3, r1, lsl #31 @ encoding: [0x13,0xeb,0xc1,0x77] 102@ CHECK: adds.w r0, r3, r6, lsr #25 @ encoding: [0x13,0xeb,0x56,0x60] 103@ CHECK: add.w r4, r8, r1, ror #12 @ encoding: [0x08,0xeb,0x31,0x34] 104 105 106@------------------------------------------------------------------------------ 107@ FIXME: ADR 108@------------------------------------------------------------------------------ 109 110 subw r11, pc, #3270 111 adr.w r11, #-826 112 113@ CHECK: subw r11, pc, #3270 @ encoding: [0xaf,0xf6,0xc6,0x4b] 114@ CHECK: adr.w r11, #-826 @ encoding: [0xaf,0xf2,0x3a,0x3b] 115 116@------------------------------------------------------------------------------ 117@ AND (immediate) 118@------------------------------------------------------------------------------ 119 and r2, r5, #0xff000 120 ands r3, r12, #0xf 121 and r1, #0xff 122 and r1, r1, #0xff 123 124@ CHECK: and r2, r5, #1044480 @ encoding: [0x05,0xf4,0x7f,0x22] 125@ CHECK: ands r3, r12, #15 @ encoding: [0x1c,0xf0,0x0f,0x03] 126@ CHECK: and r1, r1, #255 @ encoding: [0x01,0xf0,0xff,0x01] 127@ CHECK: and r1, r1, #255 @ encoding: [0x01,0xf0,0xff,0x01] 128 129 130@------------------------------------------------------------------------------ 131@ AND (register) 132@------------------------------------------------------------------------------ 133 and r4, r9, r8 134 and r1, r4, r8, asr #3 135 ands r2, r1, r7, lsl #1 136 ands.w r4, r5, r2, lsr #20 137 and.w r9, r12, r1, ror #17 138 139@ CHECK: and.w r4, r9, r8 @ encoding: [0x09,0xea,0x08,0x04] 140@ CHECK: and.w r1, r4, r8, asr #3 @ encoding: [0x04,0xea,0xe8,0x01] 141@ CHECK: ands.w r2, r1, r7, lsl #1 @ encoding: [0x11,0xea,0x47,0x02] 142@ CHECK: ands.w r4, r5, r2, lsr #20 @ encoding: [0x15,0xea,0x12,0x54] 143@ CHECK: and.w r9, r12, r1, ror #17 @ encoding: [0x0c,0xea,0x71,0x49] 144 145@------------------------------------------------------------------------------ 146@ ASR (immediate) 147@------------------------------------------------------------------------------ 148 asr r2, r3, #12 149 asrs r8, r3, #32 150 asrs.w r2, r3, #1 151 asr r2, r3, #4 152 asrs r2, r12, #15 153 154 asr r3, #19 155 asrs r8, #2 156 asrs.w r7, #5 157 asr.w r12, #21 158 159@ CHECK: asr.w r2, r3, #12 @ encoding: [0x4f,0xea,0x23,0x32] 160@ CHECK: asrs.w r8, r3, #32 @ encoding: [0x5f,0xea,0x23,0x08] 161@ CHECK: asrs.w r2, r3, #1 @ encoding: [0x5f,0xea,0x63,0x02] 162@ CHECK: asr.w r2, r3, #4 @ encoding: [0x4f,0xea,0x23,0x12] 163@ CHECK: asrs.w r2, r12, #15 @ encoding: [0x5f,0xea,0xec,0x32] 164 165@ CHECK: asr.w r3, r3, #19 @ encoding: [0x4f,0xea,0xe3,0x43] 166@ CHECK: asrs.w r8, r8, #2 @ encoding: [0x5f,0xea,0xa8,0x08] 167@ CHECK: asrs.w r7, r7, #5 @ encoding: [0x5f,0xea,0x67,0x17] 168@ CHECK: asr.w r12, r12, #21 @ encoding: [0x4f,0xea,0x6c,0x5c] 169 170 171@------------------------------------------------------------------------------ 172@ ASR (register) 173@------------------------------------------------------------------------------ 174 asr r3, r4, r2 175 asr.w r1, r2 176 asrs r3, r4, r8 177 178@ CHECK: asr.w r3, r4, r2 @ encoding: [0x44,0xfa,0x02,0xf3] 179@ CHECK: asr.w r1, r1, r2 @ encoding: [0x41,0xfa,0x02,0xf1] 180@ CHECK: asrs.w r3, r4, r8 @ encoding: [0x54,0xfa,0x08,0xf3] 181 182 183@------------------------------------------------------------------------------ 184@ B 185@------------------------------------------------------------------------------ 186 b.w _bar 187 beq.w _bar 188 it eq 189 beq.w _bar 190 bmi.w #-183396 191 192@ CHECK: b.w _bar @ encoding: [A,0xf0'A',A,0x90'A'] 193 @ fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch 194@ CHECK: beq.w _bar @ encoding: [A,0xf0'A',A,0x80'A'] 195 @ fixup A - offset: 0, value: _bar, kind: fixup_t2_condbranch 196@ CHECK: it eq @ encoding: [0x08,0xbf] 197@ CHECK: beq.w _bar @ encoding: [A,0xf0'A',A,0x90'A'] 198 @ fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch 199@ CHECK: bmi.w #-183396 @ encoding: [0x13,0xf5,0xce,0xa9] 200 201 202@------------------------------------------------------------------------------ 203@ BFC 204@------------------------------------------------------------------------------ 205 bfc r5, #3, #17 206 it lo 207 bfccc r5, #3, #17 208 209@ CHECK: bfc r5, #3, #17 @ encoding: [0x6f,0xf3,0xd3,0x05] 210@ CHECK: it lo @ encoding: [0x38,0xbf] 211@ CHECK: bfclo r5, #3, #17 @ encoding: [0x6f,0xf3,0xd3,0x05] 212 213 214@------------------------------------------------------------------------------ 215@ BFI 216@------------------------------------------------------------------------------ 217 bfi r5, r2, #3, #17 218 it ne 219 bfine r5, r2, #3, #17 220 221@ CHECK: bfi r5, r2, #3, #17 @ encoding: [0x62,0xf3,0xd3,0x05] 222@ CHECK: it ne @ encoding: [0x18,0xbf] 223@ CHECK: bfine r5, r2, #3, #17 @ encoding: [0x62,0xf3,0xd3,0x05] 224 225 226@------------------------------------------------------------------------------ 227@ BIC 228@------------------------------------------------------------------------------ 229 bic r10, r1, #0xf 230 bic r12, r3, r6 231 bic r11, r2, r6, lsl #12 232 bic r8, r4, r1, lsr #11 233 bic r7, r5, r7, lsr #15 234 bic r6, r7, r9, asr #32 235 bic r5, r6, r8, ror #1 236 237 @ destination register is optional 238 bic r1, #0xf 239 bic r1, r1 240 bic r4, r2, lsl #31 241 bic r6, r3, lsr #12 242 bic r7, r4, lsr #7 243 bic r8, r5, asr #15 244 bic r12, r6, ror #29 245 246@ CHECK: bic r10, r1, #15 @ encoding: [0x21,0xf0,0x0f,0x0a] 247@ CHECK: bic.w r12, r3, r6 @ encoding: [0x23,0xea,0x06,0x0c] 248@ CHECK: bic.w r11, r2, r6, lsl #12 @ encoding: [0x22,0xea,0x06,0x3b] 249@ CHECK: bic.w r8, r4, r1, lsr #11 @ encoding: [0x24,0xea,0xd1,0x28] 250@ CHECK: bic.w r7, r5, r7, lsr #15 @ encoding: [0x25,0xea,0xd7,0x37] 251@ CHECK: bic.w r6, r7, r9, asr #32 @ encoding: [0x27,0xea,0x29,0x06] 252@ CHECK: bic.w r5, r6, r8, ror #1 @ encoding: [0x26,0xea,0x78,0x05] 253 254@ CHECK: bic r1, r1, #15 @ encoding: [0x21,0xf0,0x0f,0x01] 255@ CHECK: bic.w r1, r1, r1 @ encoding: [0x21,0xea,0x01,0x01] 256@ CHECK: bic.w r4, r4, r2, lsl #31 @ encoding: [0x24,0xea,0xc2,0x74] 257@ CHECK: bic.w r6, r6, r3, lsr #12 @ encoding: [0x26,0xea,0x13,0x36] 258@ CHECK: bic.w r7, r7, r4, lsr #7 @ encoding: [0x27,0xea,0xd4,0x17] 259@ CHECK: bic.w r8, r8, r5, asr #15 @ encoding: [0x28,0xea,0xe5,0x38] 260@ CHECK: bic.w r12, r12, r6, ror #29 @ encoding: [0x2c,0xea,0x76,0x7c] 261 262 263@------------------------------------------------------------------------------ 264@ BXJ 265@------------------------------------------------------------------------------ 266 bxj r5 267 it ne 268 bxjne r7 269 270@ CHECK: bxj r5 @ encoding: [0xc5,0xf3,0x00,0x8f] 271@ CHECK: it ne @ encoding: [0x18,0xbf] 272@ CHECK: bxjne r7 @ encoding: [0xc7,0xf3,0x00,0x8f] 273 274 275@------------------------------------------------------------------------------ 276@ CBZ/CBNZ 277@------------------------------------------------------------------------------ 278 cbnz r7, #6 279 cbnz r7, #12 280 cbz r6, _bar 281 cbnz r6, _bar 282 283@ CHECK: cbnz r7, #6 @ encoding: [0x1f,0xb9] 284@ CHECK: cbnz r7, #12 @ encoding: [0x37,0xb9] 285@ CHECK: cbz r6, _bar @ encoding: [0x06'A',0xb1'A'] 286 @ fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb 287@ CHECK: cbnz r6, _bar @ encoding: [0x06'A',0xb9'A'] 288 @ fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb 289 290 291@------------------------------------------------------------------------------ 292@ CDP/CDP2 293@------------------------------------------------------------------------------ 294 cdp p7, #1, c1, c1, c1, #4 295 cdp2 p7, #1, c1, c1, c1, #4 296 297@ CHECK: cdp p7, #1, c1, c1, c1, #4 @ encoding: [0x11,0xee,0x81,0x17] 298@ CHECK: cdp2 p7, #1, c1, c1, c1, #4 @ encoding: [0x11,0xfe,0x81,0x17] 299 300 301@------------------------------------------------------------------------------ 302@ CLREX 303@------------------------------------------------------------------------------ 304 clrex 305 it ne 306 clrexne 307 308@ CHECK: clrex @ encoding: [0xbf,0xf3,0x2f,0x8f] 309@ CHECK: it ne @ encoding: [0x18,0xbf] 310@ CHECK: clrexne @ encoding: [0xbf,0xf3,0x2f,0x8f] 311 312 313@------------------------------------------------------------------------------ 314@ CLZ 315@------------------------------------------------------------------------------ 316 clz r1, r2 317 it eq 318 clzeq r1, r2 319 320@ CHECK: clz r1, r2 @ encoding: [0xb2,0xfa,0x82,0xf1] 321@ CHECK: it eq @ encoding: [0x08,0xbf] 322@ CHECK: clzeq r1, r2 @ encoding: [0xb2,0xfa,0x82,0xf1] 323 324 325@------------------------------------------------------------------------------ 326@ CMN 327@------------------------------------------------------------------------------ 328 cmn r1, #0xf 329 cmn r8, r6 330 cmn r1, r6, lsl #10 331 cmn r1, r6, lsr #10 332 cmn sp, r6, lsr #10 333 cmn r1, r6, asr #10 334 cmn r1, r6, ror #10 335 336@ CHECK: cmn.w r1, #15 @ encoding: [0x11,0xf1,0x0f,0x0f] 337@ CHECK: cmn.w r8, r6 @ encoding: [0x18,0xeb,0x06,0x0f] 338@ CHECK: cmn.w r1, r6, lsl #10 @ encoding: [0x11,0xeb,0x86,0x2f] 339@ CHECK: cmn.w r1, r6, lsr #10 @ encoding: [0x11,0xeb,0x96,0x2f] 340@ CHECK: cmn.w sp, r6, lsr #10 @ encoding: [0x1d,0xeb,0x96,0x2f] 341@ CHECK: cmn.w r1, r6, asr #10 @ encoding: [0x11,0xeb,0xa6,0x2f] 342@ CHECK: cmn.w r1, r6, ror #10 @ encoding: [0x11,0xeb,0xb6,0x2f] 343 344 345@------------------------------------------------------------------------------ 346@ CMP 347@------------------------------------------------------------------------------ 348 cmp r5, #0xff00 349 cmp.w r4, r12 350 cmp r9, r6, lsl #12 351 cmp r3, r7, lsr #31 352 cmp sp, r6, lsr #1 353 cmp r2, r5, asr #24 354 cmp r1, r4, ror #15 355 356@ CHECK: cmp.w r5, #65280 @ encoding: [0xb5,0xf5,0x7f,0x4f] 357@ CHECK: cmp.w r4, r12 @ encoding: [0xb4,0xeb,0x0c,0x0f] 358@ CHECK: cmp.w r9, r6, lsl #12 @ encoding: [0xb9,0xeb,0x06,0x3f] 359@ CHECK: cmp.w r3, r7, lsr #31 @ encoding: [0xb3,0xeb,0xd7,0x7f] 360@ CHECK: cmp.w sp, r6, lsr #1 @ encoding: [0xbd,0xeb,0x56,0x0f] 361@ CHECK: cmp.w r2, r5, asr #24 @ encoding: [0xb2,0xeb,0x25,0x6f] 362@ CHECK: cmp.w r1, r4, ror #15 @ encoding: [0xb1,0xeb,0xf4,0x3f] 363 364 365@------------------------------------------------------------------------------ 366@ DBG 367@------------------------------------------------------------------------------ 368 dbg #5 369 dbg #0 370 dbg #15 371 372@ CHECK: dbg #5 @ encoding: [0xaf,0xf3,0xf5,0x80] 373@ CHECK: dbg #0 @ encoding: [0xaf,0xf3,0xf0,0x80] 374@ CHECK: dbg #15 @ encoding: [0xaf,0xf3,0xff,0x80] 375 376 377@------------------------------------------------------------------------------ 378@ DMB 379@------------------------------------------------------------------------------ 380 dmb sy 381 dmb st 382 dmb sh 383 dmb ish 384 dmb shst 385 dmb ishst 386 dmb un 387 dmb nsh 388 dmb unst 389 dmb nshst 390 dmb osh 391 dmb oshst 392 dmb 393 394@ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f] 395@ CHECK: dmb st @ encoding: [0xbf,0xf3,0x5e,0x8f] 396@ CHECK: dmb ish @ encoding: [0xbf,0xf3,0x5b,0x8f] 397@ CHECK: dmb ish @ encoding: [0xbf,0xf3,0x5b,0x8f] 398@ CHECK: dmb ishst @ encoding: [0xbf,0xf3,0x5a,0x8f] 399@ CHECK: dmb ishst @ encoding: [0xbf,0xf3,0x5a,0x8f] 400@ CHECK: dmb nsh @ encoding: [0xbf,0xf3,0x57,0x8f] 401@ CHECK: dmb nsh @ encoding: [0xbf,0xf3,0x57,0x8f] 402@ CHECK: dmb nshst @ encoding: [0xbf,0xf3,0x56,0x8f] 403@ CHECK: dmb nshst @ encoding: [0xbf,0xf3,0x56,0x8f] 404@ CHECK: dmb osh @ encoding: [0xbf,0xf3,0x53,0x8f] 405@ CHECK: dmb oshst @ encoding: [0xbf,0xf3,0x52,0x8f] 406@ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f] 407 408 409@------------------------------------------------------------------------------ 410@ DSB 411@------------------------------------------------------------------------------ 412 dsb sy 413 dsb st 414 dsb sh 415 dsb ish 416 dsb shst 417 dsb ishst 418 dsb un 419 dsb nsh 420 dsb unst 421 dsb nshst 422 dsb osh 423 dsb oshst 424 dsb 425 426@ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f] 427@ CHECK: dsb st @ encoding: [0xbf,0xf3,0x4e,0x8f] 428@ CHECK: dsb ish @ encoding: [0xbf,0xf3,0x4b,0x8f] 429@ CHECK: dsb ish @ encoding: [0xbf,0xf3,0x4b,0x8f] 430@ CHECK: dsb ishst @ encoding: [0xbf,0xf3,0x4a,0x8f] 431@ CHECK: dsb ishst @ encoding: [0xbf,0xf3,0x4a,0x8f] 432@ CHECK: dsb nsh @ encoding: [0xbf,0xf3,0x47,0x8f] 433@ CHECK: dsb nsh @ encoding: [0xbf,0xf3,0x47,0x8f] 434@ CHECK: dsb nshst @ encoding: [0xbf,0xf3,0x46,0x8f] 435@ CHECK: dsb nshst @ encoding: [0xbf,0xf3,0x46,0x8f] 436@ CHECK: dsb osh @ encoding: [0xbf,0xf3,0x43,0x8f] 437@ CHECK: dsb oshst @ encoding: [0xbf,0xf3,0x42,0x8f] 438@ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f] 439 440 441@------------------------------------------------------------------------------ 442@ EOR 443@------------------------------------------------------------------------------ 444 eor r4, r5, #0xf000 445 eor r4, r5, r6 446 eor r4, r5, r6, lsl #5 447 eor r4, r5, r6, lsr #5 448 eor r4, r5, r6, lsr #5 449 eor r4, r5, r6, asr #5 450 eor r4, r5, r6, ror #5 451 452@ CHECK: eor r4, r5, #61440 @ encoding: [0x85,0xf4,0x70,0x44] 453@ CHECK: eor.w r4, r5, r6 @ encoding: [0x85,0xea,0x06,0x04] 454@ CHECK: eor.w r4, r5, r6, lsl #5 @ encoding: [0x85,0xea,0x46,0x14] 455@ CHECK: eor.w r4, r5, r6, lsr #5 @ encoding: [0x85,0xea,0x56,0x14] 456@ CHECK: eor.w r4, r5, r6, lsr #5 @ encoding: [0x85,0xea,0x56,0x14] 457@ CHECK: eor.w r4, r5, r6, asr #5 @ encoding: [0x85,0xea,0x66,0x14] 458@ CHECK: eor.w r4, r5, r6, ror #5 @ encoding: [0x85,0xea,0x76,0x14] 459 460 461@------------------------------------------------------------------------------ 462@ ISB 463@------------------------------------------------------------------------------ 464 isb sy 465 isb 466 467@ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f] 468@ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f] 469 470 471@------------------------------------------------------------------------------ 472@ LDMIA 473@------------------------------------------------------------------------------ 474 ldmia.w r4, {r4, r5, r8, r9} 475 ldmia.w r4, {r5, r6} 476 ldmia.w r5!, {r3, r8} 477 ldm.w r4, {r4, r5, r8, r9} 478 ldm.w r4, {r5, r6} 479 ldm.w r5!, {r3, r8} 480 ldm.w r5!, {r1, r2} 481 ldm.w r2, {r1, r2} 482 483 ldmia r4, {r4, r5, r8, r9} 484 ldmia r4, {r5, r6} 485 ldmia r5!, {r3, r8} 486 ldm r4, {r4, r5, r8, r9} 487 ldm r4, {r5, r6} 488 ldm r5!, {r3, r8} 489 ldmfd r5!, {r3, r8} 490 491@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03] 492@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00] 493@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01] 494@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03] 495@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00] 496@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01] 497@ CHECK: ldm.w r5!, {r1, r2} @ encoding: [0xb5,0xe8,0x06,0x00] 498@ CHECK: ldm.w r2, {r1, r2} @ encoding: [0x92,0xe8,0x06,0x00] 499 500@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03] 501@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00] 502@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01] 503@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03] 504@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00] 505@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01] 506@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01] 507 508 509@------------------------------------------------------------------------------ 510@ LDMDB 511@------------------------------------------------------------------------------ 512 ldmdb r4, {r4, r5, r8, r9} 513 ldmdb r4, {r5, r6} 514 ldmdb r5!, {r3, r8} 515 ldmea r5!, {r3, r8} 516 517@ CHECK: ldmdb r4, {r4, r5, r8, r9} @ encoding: [0x14,0xe9,0x30,0x03] 518@ CHECK: ldmdb r4, {r5, r6} @ encoding: [0x14,0xe9,0x60,0x00] 519@ CHECK: ldmdb r5!, {r3, r8} @ encoding: [0x35,0xe9,0x08,0x01] 520@ CHECK: ldmdb r5!, {r3, r8} @ encoding: [0x35,0xe9,0x08,0x01] 521 522 523@------------------------------------------------------------------------------ 524@ LDR(immediate) 525@------------------------------------------------------------------------------ 526 ldr r5, [r5, #-4] 527 ldr r5, [r6, #32] 528 ldr r5, [r6, #33] 529 ldr r5, [r6, #257] 530 ldr.w pc, [r7, #257] 531 532@ CHECK: ldr r5, [r5, #-4] @ encoding: [0x55,0xf8,0x04,0x5c] 533@ CHECK: ldr r5, [r6, #32] @ encoding: [0x35,0x6a] 534@ CHECK: ldr.w r5, [r6, #33] @ encoding: [0xd6,0xf8,0x21,0x50] 535@ CHECK: ldr.w r5, [r6, #257] @ encoding: [0xd6,0xf8,0x01,0x51] 536@ CHECK: ldr.w pc, [r7, #257] @ encoding: [0xd7,0xf8,0x01,0xf1] 537 538 539@------------------------------------------------------------------------------ 540@ LDR(literal) 541@------------------------------------------------------------------------------ 542 ldr.w r5, _foo 543 544@ CHECK: ldr.w r5, _foo @ encoding: [0x5f'A',0xf8'A',A,0x50'A'] 545 @ fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12 546 547 548@------------------------------------------------------------------------------ 549@ LDR(register) 550@------------------------------------------------------------------------------ 551 ldr r1, [r8, r1] 552 ldr.w r4, [r5, r2] 553 ldr r6, [r0, r2, lsl #3] 554 ldr r8, [r8, r2, lsl #2] 555 ldr r7, [sp, r2, lsl #1] 556 ldr r7, [sp, r2, lsl #0] 557 ldr r2, [r4, #255]! 558 ldr r8, [sp, #4]! 559 ldr lr, [sp, #-4]! 560 ldr r2, [r4], #255 561 ldr r8, [sp], #4 562 ldr lr, [sp], #-4 563 564@ CHECK: ldr.w r1, [r8, r1] @ encoding: [0x58,0xf8,0x01,0x10] 565@ CHECK: ldr.w r4, [r5, r2] @ encoding: [0x55,0xf8,0x02,0x40] 566@ CHECK: ldr.w r6, [r0, r2, lsl #3] @ encoding: [0x50,0xf8,0x32,0x60] 567@ CHECK: ldr.w r8, [r8, r2, lsl #2] @ encoding: [0x58,0xf8,0x22,0x80] 568@ CHECK: ldr.w r7, [sp, r2, lsl #1] @ encoding: [0x5d,0xf8,0x12,0x70] 569@ CHECK: ldr.w r7, [sp, r2] @ encoding: [0x5d,0xf8,0x02,0x70] 570@ CHECK: ldr r2, [r4, #255]! @ encoding: [0x54,0xf8,0xff,0x2f] 571@ CHECK: ldr r8, [sp, #4]! @ encoding: [0x5d,0xf8,0x04,0x8f] 572@ CHECK: ldr lr, [sp, #-4]! @ encoding: [0x5d,0xf8,0x04,0xed] 573@ CHECK: ldr r2, [r4], #255 @ encoding: [0x54,0xf8,0xff,0x2b] 574@ CHECK: ldr r8, [sp], #4 @ encoding: [0x5d,0xf8,0x04,0x8b] 575@ CHECK: ldr lr, [sp], #-4 @ encoding: [0x5d,0xf8,0x04,0xe9] 576 577 578@------------------------------------------------------------------------------ 579@ LDRB(immediate) 580@------------------------------------------------------------------------------ 581 ldrb r5, [r5, #-4] 582 ldrb r5, [r6, #32] 583 ldrb r5, [r6, #33] 584 ldrb r5, [r6, #257] 585 ldrb.w lr, [r7, #257] 586 587@ CHECK: ldrb r5, [r5, #-4] @ encoding: [0x15,0xf8,0x04,0x5c] 588@ CHECK: ldrb.w r5, [r6, #32] @ encoding: [0x96,0xf8,0x20,0x50] 589@ CHECK: ldrb.w r5, [r6, #33] @ encoding: [0x96,0xf8,0x21,0x50] 590@ CHECK: ldrb.w r5, [r6, #257] @ encoding: [0x96,0xf8,0x01,0x51] 591@ CHECK: ldrb.w lr, [r7, #257] @ encoding: [0x97,0xf8,0x01,0xe1] 592 593 594@------------------------------------------------------------------------------ 595@ LDRB(register) 596@------------------------------------------------------------------------------ 597 ldrb r1, [r8, r1] 598 ldrb.w r4, [r5, r2] 599 ldrb r6, [r0, r2, lsl #3] 600 ldrb r8, [r8, r2, lsl #2] 601 ldrb r7, [sp, r2, lsl #1] 602 ldrb r7, [sp, r2, lsl #0] 603 ldrb r5, [r8, #255]! 604 ldrb r2, [r5, #4]! 605 ldrb r1, [r4, #-4]! 606 ldrb lr, [r3], #255 607 ldrb r9, [r2], #4 608 ldrb r3, [sp], #-4 609 610@ CHECK: ldrb.w r1, [r8, r1] @ encoding: [0x18,0xf8,0x01,0x10] 611@ CHECK: ldrb.w r4, [r5, r2] @ encoding: [0x15,0xf8,0x02,0x40] 612@ CHECK: ldrb.w r6, [r0, r2, lsl #3] @ encoding: [0x10,0xf8,0x32,0x60] 613@ CHECK: ldrb.w r8, [r8, r2, lsl #2] @ encoding: [0x18,0xf8,0x22,0x80] 614@ CHECK: ldrb.w r7, [sp, r2, lsl #1] @ encoding: [0x1d,0xf8,0x12,0x70] 615@ CHECK: ldrb.w r7, [sp, r2] @ encoding: [0x1d,0xf8,0x02,0x70] 616@ CHECK: ldrb r5, [r8, #255]! @ encoding: [0x18,0xf8,0xff,0x5f] 617@ CHECK: ldrb r2, [r5, #4]! @ encoding: [0x15,0xf8,0x04,0x2f] 618@ CHECK: ldrb r1, [r4, #-4]! @ encoding: [0x14,0xf8,0x04,0x1d] 619@ CHECK: ldrb lr, [r3], #255 @ encoding: [0x13,0xf8,0xff,0xeb] 620@ CHECK: ldrb r9, [r2], #4 @ encoding: [0x12,0xf8,0x04,0x9b] 621@ CHECK: ldrb r3, [sp], #-4 @ encoding: [0x1d,0xf8,0x04,0x39] 622 623 624@------------------------------------------------------------------------------ 625@ LDRBT 626@------------------------------------------------------------------------------ 627 ldrbt r1, [r2] 628 ldrbt r1, [r8, #0] 629 ldrbt r1, [r8, #3] 630 ldrbt r1, [r8, #255] 631 632@ CHECK: ldrbt r1, [r2] @ encoding: [0x12,0xf8,0x00,0x1e] 633@ CHECK: ldrbt r1, [r8] @ encoding: [0x18,0xf8,0x00,0x1e] 634@ CHECK: ldrbt r1, [r8, #3] @ encoding: [0x18,0xf8,0x03,0x1e] 635@ CHECK: ldrbt r1, [r8, #255] @ encoding: [0x18,0xf8,0xff,0x1e] 636 637 638@------------------------------------------------------------------------------ 639@ LDRD(immediate) 640@------------------------------------------------------------------------------ 641 ldrd r3, r5, [r6, #24] 642 ldrd r3, r5, [r6, #24]! 643 ldrd r3, r5, [r6], #4 644 ldrd r3, r5, [r6], #-8 645 ldrd r3, r5, [r6] 646 ldrd r8, r1, [r3, #0] 647 648@ CHECK: ldrd r3, r5, [r6, #24] @ encoding: [0xd6,0xe9,0x06,0x35] 649@ CHECK: ldrd r3, r5, [r6, #24]! @ encoding: [0xf6,0xe9,0x06,0x35] 650@ CHECK: ldrd r3, r5, [r6], #4 @ encoding: [0xf6,0xe8,0x01,0x35] 651@ CHECK: ldrd r3, r5, [r6], #-8 @ encoding: [0x76,0xe8,0x02,0x35] 652@ CHECK: ldrd r3, r5, [r6] @ encoding: [0xd6,0xe9,0x00,0x35] 653@ CHECK: ldrd r8, r1, [r3] @ encoding: [0xd3,0xe9,0x00,0x81] 654 655 656@------------------------------------------------------------------------------ 657@ FIXME: LDRD(literal) 658@------------------------------------------------------------------------------ 659 660 661@------------------------------------------------------------------------------ 662@ LDREX/LDREXB/LDREXH/LDREXD 663@------------------------------------------------------------------------------ 664 ldrex r1, [r4] 665 ldrex r8, [r4, #0] 666 ldrex r2, [sp, #128] 667 ldrexb r5, [r7] 668 ldrexh r9, [r12] 669 ldrexd r9, r3, [r4] 670 671@ CHECK: ldrex r1, [r4] @ encoding: [0x54,0xe8,0x00,0x1f] 672@ CHECK: ldrex r8, [r4] @ encoding: [0x54,0xe8,0x00,0x8f] 673@ CHECK: ldrex r2, [sp, #128] @ encoding: [0x5d,0xe8,0x20,0x2f] 674@ CHECK: ldrexb r5, [r7] @ encoding: [0xd7,0xe8,0x4f,0x5f] 675@ CHECK: ldrexh r9, [r12] @ encoding: [0xdc,0xe8,0x5f,0x9f] 676@ CHECK: ldrexd r9, r3, [r4] @ encoding: [0xd4,0xe8,0x7f,0x93] 677 678 679@------------------------------------------------------------------------------ 680@ LDRH(immediate) 681@------------------------------------------------------------------------------ 682 ldrh r5, [r5, #-4] 683 ldrh r5, [r6, #32] 684 ldrh r5, [r6, #33] 685 ldrh r5, [r6, #257] 686 ldrh.w lr, [r7, #257] 687 688@ CHECK: ldrh r5, [r5, #-4] @ encoding: [0x35,0xf8,0x04,0x5c] 689@ CHECK: ldrh r5, [r6, #32] @ encoding: [0x35,0x8c] 690@ CHECK: ldrh.w r5, [r6, #33] @ encoding: [0xb6,0xf8,0x21,0x50] 691@ CHECK: ldrh.w r5, [r6, #257] @ encoding: [0xb6,0xf8,0x01,0x51] 692@ CHECK: ldrh.w lr, [r7, #257] @ encoding: [0xb7,0xf8,0x01,0xe1] 693 694 695@------------------------------------------------------------------------------ 696@ LDRH(register) 697@------------------------------------------------------------------------------ 698 ldrh r1, [r8, r1] 699 ldrh.w r4, [r5, r2] 700 ldrh r6, [r0, r2, lsl #3] 701 ldrh r8, [r8, r2, lsl #2] 702 ldrh r7, [sp, r2, lsl #1] 703 ldrh r7, [sp, r2, lsl #0] 704 ldrh r5, [r8, #255]! 705 ldrh r2, [r5, #4]! 706 ldrh r1, [r4, #-4]! 707 ldrh lr, [r3], #255 708 ldrh r9, [r2], #4 709 ldrh r3, [sp], #-4 710 711@ CHECK: ldrh.w r1, [r8, r1] @ encoding: [0x38,0xf8,0x01,0x10] 712@ CHECK: ldrh.w r4, [r5, r2] @ encoding: [0x35,0xf8,0x02,0x40] 713@ CHECK: ldrh.w r6, [r0, r2, lsl #3] @ encoding: [0x30,0xf8,0x32,0x60] 714@ CHECK: ldrh.w r8, [r8, r2, lsl #2] @ encoding: [0x38,0xf8,0x22,0x80] 715@ CHECK: ldrh.w r7, [sp, r2, lsl #1] @ encoding: [0x3d,0xf8,0x12,0x70] 716@ CHECK: ldrh.w r7, [sp, r2] @ encoding: [0x3d,0xf8,0x02,0x70] 717@ CHECK: ldrh r5, [r8, #255]! @ encoding: [0x38,0xf8,0xff,0x5f] 718@ CHECK: ldrh r2, [r5, #4]! @ encoding: [0x35,0xf8,0x04,0x2f] 719@ CHECK: ldrh r1, [r4, #-4]! @ encoding: [0x34,0xf8,0x04,0x1d] 720@ CHECK: ldrh lr, [r3], #255 @ encoding: [0x33,0xf8,0xff,0xeb] 721@ CHECK: ldrh r9, [r2], #4 @ encoding: [0x32,0xf8,0x04,0x9b] 722@ CHECK: ldrh r3, [sp], #-4 @ encoding: [0x3d,0xf8,0x04,0x39] 723 724 725@------------------------------------------------------------------------------ 726@ LDRH(literal) 727@------------------------------------------------------------------------------ 728 ldrh r5, _bar 729 730@ CHECK: ldrh.w r5, _bar @ encoding: [0xbf'A',0xf8'A',A,0x50'A'] 731@ CHECK: @ fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12 732 733 734@------------------------------------------------------------------------------ 735@ LDRSB(immediate) 736@------------------------------------------------------------------------------ 737 ldrsb r5, [r5, #-4] 738 ldrsb r5, [r6, #32] 739 ldrsb r5, [r6, #33] 740 ldrsb r5, [r6, #257] 741 ldrsb.w lr, [r7, #257] 742 743@ CHECK: ldrsb r5, [r5, #-4] @ encoding: [0x15,0xf9,0x04,0x5c] 744@ CHECK: ldrsb.w r5, [r6, #32] @ encoding: [0x96,0xf9,0x20,0x50] 745@ CHECK: ldrsb.w r5, [r6, #33] @ encoding: [0x96,0xf9,0x21,0x50] 746@ CHECK: ldrsb.w r5, [r6, #257] @ encoding: [0x96,0xf9,0x01,0x51] 747@ CHECK: ldrsb.w lr, [r7, #257] @ encoding: [0x97,0xf9,0x01,0xe1] 748 749 750@------------------------------------------------------------------------------ 751@ LDRSB(register) 752@------------------------------------------------------------------------------ 753 ldrsb r1, [r8, r1] 754 ldrsb.w r4, [r5, r2] 755 ldrsb r6, [r0, r2, lsl #3] 756 ldrsb r8, [r8, r2, lsl #2] 757 ldrsb r7, [sp, r2, lsl #1] 758 ldrsb r7, [sp, r2, lsl #0] 759 ldrsb r5, [r8, #255]! 760 ldrsb r2, [r5, #4]! 761 ldrsb r1, [r4, #-4]! 762 ldrsb lr, [r3], #255 763 ldrsb r9, [r2], #4 764 ldrsb r3, [sp], #-4 765 766@ CHECK: ldrsb.w r1, [r8, r1] @ encoding: [0x18,0xf9,0x01,0x10] 767@ CHECK: ldrsb.w r4, [r5, r2] @ encoding: [0x15,0xf9,0x02,0x40] 768@ CHECK: ldrsb.w r6, [r0, r2, lsl #3] @ encoding: [0x10,0xf9,0x32,0x60] 769@ CHECK: ldrsb.w r8, [r8, r2, lsl #2] @ encoding: [0x18,0xf9,0x22,0x80] 770@ CHECK: ldrsb.w r7, [sp, r2, lsl #1] @ encoding: [0x1d,0xf9,0x12,0x70] 771@ CHECK: ldrsb.w r7, [sp, r2] @ encoding: [0x1d,0xf9,0x02,0x70] 772@ CHECK: ldrsb r5, [r8, #255]! @ encoding: [0x18,0xf9,0xff,0x5f] 773@ CHECK: ldrsb r2, [r5, #4]! @ encoding: [0x15,0xf9,0x04,0x2f] 774@ CHECK: ldrsb r1, [r4, #-4]! @ encoding: [0x14,0xf9,0x04,0x1d] 775@ CHECK: ldrsb lr, [r3], #255 @ encoding: [0x13,0xf9,0xff,0xeb] 776@ CHECK: ldrsb r9, [r2], #4 @ encoding: [0x12,0xf9,0x04,0x9b] 777@ CHECK: ldrsb r3, [sp], #-4 @ encoding: [0x1d,0xf9,0x04,0x39] 778 779 780@------------------------------------------------------------------------------ 781@ LDRSB(literal) 782@------------------------------------------------------------------------------ 783 ldrsb r5, _bar 784 785@ CHECK: ldrsb.w r5, _bar @ encoding: [0x9f'A',0xf9'A',A,0x50'A'] 786@ CHECK: @ fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12 787 788 789@------------------------------------------------------------------------------ 790@ LDRSBT 791@------------------------------------------------------------------------------ 792 ldrsbt r1, [r2] 793 ldrsbt r1, [r8, #0] 794 ldrsbt r1, [r8, #3] 795 ldrsbt r1, [r8, #255] 796 797@ CHECK: ldrsbt r1, [r2] @ encoding: [0x12,0xf9,0x00,0x1e] 798@ CHECK: ldrsbt r1, [r8] @ encoding: [0x18,0xf9,0x00,0x1e] 799@ CHECK: ldrsbt r1, [r8, #3] @ encoding: [0x18,0xf9,0x03,0x1e] 800@ CHECK: ldrsbt r1, [r8, #255] @ encoding: [0x18,0xf9,0xff,0x1e] 801 802 803@------------------------------------------------------------------------------ 804@ LDRSH(immediate) 805@------------------------------------------------------------------------------ 806 ldrsh r5, [r5, #-4] 807 ldrsh r5, [r6, #32] 808 ldrsh r5, [r6, #33] 809 ldrsh r5, [r6, #257] 810 ldrsh.w lr, [r7, #257] 811 812@ CHECK: ldrsh r5, [r5, #-4] @ encoding: [0x35,0xf9,0x04,0x5c] 813@ CHECK: ldrsh.w r5, [r6, #32] @ encoding: [0xb6,0xf9,0x20,0x50] 814@ CHECK: ldrsh.w r5, [r6, #33] @ encoding: [0xb6,0xf9,0x21,0x50] 815@ CHECK: ldrsh.w r5, [r6, #257] @ encoding: [0xb6,0xf9,0x01,0x51] 816@ CHECK: ldrsh.w lr, [r7, #257] @ encoding: [0xb7,0xf9,0x01,0xe1] 817 818 819@------------------------------------------------------------------------------ 820@ LDRSH(register) 821@------------------------------------------------------------------------------ 822 ldrsh r1, [r8, r1] 823 ldrsh.w r4, [r5, r2] 824 ldrsh r6, [r0, r2, lsl #3] 825 ldrsh r8, [r8, r2, lsl #2] 826 ldrsh r7, [sp, r2, lsl #1] 827 ldrsh r7, [sp, r2, lsl #0] 828 ldrsh r5, [r8, #255]! 829 ldrsh r2, [r5, #4]! 830 ldrsh r1, [r4, #-4]! 831 ldrsh lr, [r3], #255 832 ldrsh r9, [r2], #4 833 ldrsh r3, [sp], #-4 834 835@ CHECK: ldrsh.w r1, [r8, r1] @ encoding: [0x38,0xf9,0x01,0x10] 836@ CHECK: ldrsh.w r4, [r5, r2] @ encoding: [0x35,0xf9,0x02,0x40] 837@ CHECK: ldrsh.w r6, [r0, r2, lsl #3] @ encoding: [0x30,0xf9,0x32,0x60] 838@ CHECK: ldrsh.w r8, [r8, r2, lsl #2] @ encoding: [0x38,0xf9,0x22,0x80] 839@ CHECK: ldrsh.w r7, [sp, r2, lsl #1] @ encoding: [0x3d,0xf9,0x12,0x70] 840@ CHECK: ldrsh.w r7, [sp, r2] @ encoding: [0x3d,0xf9,0x02,0x70] 841@ CHECK: ldrsh r5, [r8, #255]! @ encoding: [0x38,0xf9,0xff,0x5f] 842@ CHECK: ldrsh r2, [r5, #4]! @ encoding: [0x35,0xf9,0x04,0x2f] 843@ CHECK: ldrsh r1, [r4, #-4]! @ encoding: [0x34,0xf9,0x04,0x1d] 844@ CHECK: ldrsh lr, [r3], #255 @ encoding: [0x33,0xf9,0xff,0xeb] 845@ CHECK: ldrsh r9, [r2], #4 @ encoding: [0x32,0xf9,0x04,0x9b] 846@ CHECK: ldrsh r3, [sp], #-4 @ encoding: [0x3d,0xf9,0x04,0x39] 847 848 849@------------------------------------------------------------------------------ 850@ LDRSH(literal) 851@------------------------------------------------------------------------------ 852 ldrsh r5, _bar 853 ldrsh.w r4, #1435 854 855@ CHECK: ldrsh.w r5, _bar @ encoding: [0xbf'A',0xf9'A',A,0x50'A'] 856@ CHECK: @ fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12 857@ CHECK: ldrsh.w r4, #1435 @ encoding: [0x3f,0xf9,0x9b,0x45] 858 859@------------------------------------------------------------------------------ 860@ LDRSHT 861@------------------------------------------------------------------------------ 862 ldrsht r1, [r2] 863 ldrsht r1, [r8, #0] 864 ldrsht r1, [r8, #3] 865 ldrsht r1, [r8, #255] 866 867@ CHECK: ldrsht r1, [r2] @ encoding: [0x32,0xf9,0x00,0x1e] 868@ CHECK: ldrsht r1, [r8] @ encoding: [0x38,0xf9,0x00,0x1e] 869@ CHECK: ldrsht r1, [r8, #3] @ encoding: [0x38,0xf9,0x03,0x1e] 870@ CHECK: ldrsht r1, [r8, #255] @ encoding: [0x38,0xf9,0xff,0x1e] 871 872 873@------------------------------------------------------------------------------ 874@ LDRT 875@------------------------------------------------------------------------------ 876 ldrt r1, [r2] 877 ldrt r2, [r6, #0] 878 ldrt r3, [r7, #3] 879 ldrt r4, [r9, #255] 880 881@ CHECK: ldrt r1, [r2] @ encoding: [0x52,0xf8,0x00,0x1e] 882@ CHECK: ldrt r2, [r6] @ encoding: [0x56,0xf8,0x00,0x2e] 883@ CHECK: ldrt r3, [r7, #3] @ encoding: [0x57,0xf8,0x03,0x3e] 884@ CHECK: ldrt r4, [r9, #255] @ encoding: [0x59,0xf8,0xff,0x4e] 885 886 887@------------------------------------------------------------------------------ 888@ LSL (immediate) 889@------------------------------------------------------------------------------ 890 lsl r2, r3, #12 891 lsls r8, r3, #31 892 lsls.w r2, r3, #1 893 lsl r2, r3, #4 894 lsls r2, r12, #15 895 896 lsl r3, #19 897 lsls r8, #2 898 lsls.w r7, #5 899 lsl.w r12, #21 900 901@ CHECK: lsl.w r2, r3, #12 @ encoding: [0x4f,0xea,0x03,0x32] 902@ CHECK: lsls.w r8, r3, #31 @ encoding: [0x5f,0xea,0xc3,0x78] 903@ CHECK: lsls.w r2, r3, #1 @ encoding: [0x5f,0xea,0x43,0x02] 904@ CHECK: lsl.w r2, r3, #4 @ encoding: [0x4f,0xea,0x03,0x12] 905@ CHECK: lsls.w r2, r12, #15 @ encoding: [0x5f,0xea,0xcc,0x32] 906 907@ CHECK: lsl.w r3, r3, #19 @ encoding: [0x4f,0xea,0xc3,0x43] 908@ CHECK: lsls.w r8, r8, #2 @ encoding: [0x5f,0xea,0x88,0x08] 909@ CHECK: lsls.w r7, r7, #5 @ encoding: [0x5f,0xea,0x47,0x17] 910@ CHECK: lsl.w r12, r12, #21 @ encoding: [0x4f,0xea,0x4c,0x5c] 911 912 913@------------------------------------------------------------------------------ 914@ LSL (register) 915@------------------------------------------------------------------------------ 916 lsl r3, r4, r2 917 lsl.w r1, r2 918 lsls r3, r4, r8 919 920@ CHECK: lsl.w r3, r4, r2 @ encoding: [0x04,0xfa,0x02,0xf3] 921@ CHECK: lsl.w r1, r1, r2 @ encoding: [0x01,0xfa,0x02,0xf1] 922@ CHECK: lsls.w r3, r4, r8 @ encoding: [0x14,0xfa,0x08,0xf3] 923 924 925@------------------------------------------------------------------------------ 926@ LSR (immediate) 927@------------------------------------------------------------------------------ 928 lsr r2, r3, #12 929 lsrs r8, r3, #32 930 lsrs.w r2, r3, #1 931 lsr r2, r3, #4 932 lsrs r2, r12, #15 933 934 lsr r3, #19 935 lsrs r8, #2 936 lsrs.w r7, #5 937 lsr.w r12, #21 938 939@ CHECK: lsr.w r2, r3, #12 @ encoding: [0x4f,0xea,0x13,0x32] 940@ CHECK: lsrs.w r8, r3, #32 @ encoding: [0x5f,0xea,0x13,0x08] 941@ CHECK: lsrs.w r2, r3, #1 @ encoding: [0x5f,0xea,0x53,0x02] 942@ CHECK: lsr.w r2, r3, #4 @ encoding: [0x4f,0xea,0x13,0x12] 943@ CHECK: lsrs.w r2, r12, #15 @ encoding: [0x5f,0xea,0xdc,0x32] 944 945@ CHECK: lsr.w r3, r3, #19 @ encoding: [0x4f,0xea,0xd3,0x43] 946@ CHECK: lsrs.w r8, r8, #2 @ encoding: [0x5f,0xea,0x98,0x08] 947@ CHECK: lsrs.w r7, r7, #5 @ encoding: [0x5f,0xea,0x57,0x17] 948@ CHECK: lsr.w r12, r12, #21 @ encoding: [0x4f,0xea,0x5c,0x5c] 949 950 951@------------------------------------------------------------------------------ 952@ LSR (register) 953@------------------------------------------------------------------------------ 954 lsr r3, r4, r2 955 lsr.w r1, r2 956 lsrs r3, r4, r8 957 958@ CHECK: lsr.w r3, r4, r2 @ encoding: [0x24,0xfa,0x02,0xf3] 959@ CHECK: lsr.w r1, r1, r2 @ encoding: [0x21,0xfa,0x02,0xf1] 960@ CHECK: lsrs.w r3, r4, r8 @ encoding: [0x34,0xfa,0x08,0xf3] 961 962@------------------------------------------------------------------------------ 963@ MCR/MCR2 964@------------------------------------------------------------------------------ 965 mcr p7, #1, r5, c1, c1, #4 966 mcr2 p7, #1, r5, c1, c1, #4 967 968@ CHECK: mcr p7, #1, r5, c1, c1, #4 @ encoding: [0x21,0xee,0x91,0x57] 969@ CHECK: mcr2 p7, #1, r5, c1, c1, #4 @ encoding: [0x21,0xfe,0x91,0x57] 970 971 972@------------------------------------------------------------------------------ 973@ MCRR/MCRR2 974@------------------------------------------------------------------------------ 975 mcrr p7, #15, r5, r4, c1 976 mcrr2 p7, #15, r5, r4, c1 977 978@ CHECK: mcrr p7, #15, r5, r4, c1 @ encoding: [0x44,0xec,0xf1,0x57] 979@ CHECK: mcrr2 p7, #15, r5, r4, c1 @ encoding: [0x44,0xfc,0xf1,0x57] 980 981 982@------------------------------------------------------------------------------ 983@ MLA/MLS 984@------------------------------------------------------------------------------ 985 mla r1,r2,r3,r4 986 mls r1,r2,r3,r4 987 988@ CHECK: mla r1, r2, r3, r4 @ encoding: [0x02,0xfb,0x03,0x41] 989@ CHECK: mls r1, r2, r3, r4 @ encoding: [0x02,0xfb,0x13,0x41] 990 991 992@------------------------------------------------------------------------------ 993@ MOV(immediate) 994@------------------------------------------------------------------------------ 995 movs r1, #21 996 movs.w r1, #21 997 movs r8, #21 998 movw r0, #65535 999 movw r1, #43777 1000 movw r1, #43792 1001 mov.w r0, #0x3fc0000 1002 mov r0, #0x3fc0000 1003 movs.w r0, #0x3fc0000 1004 1005@ CHECK: movs r1, #21 @ encoding: [0x15,0x21] 1006@ CHECK: movs.w r1, #21 @ encoding: [0x5f,0xf0,0x15,0x01] 1007@ CHECK: movs.w r8, #21 @ encoding: [0x5f,0xf0,0x15,0x08] 1008@ CHECK: movw r0, #65535 @ encoding: [0x4f,0xf6,0xff,0x70] 1009@ CHECK: movw r1, #43777 @ encoding: [0x4a,0xf6,0x01,0x31] 1010@ CHECK: movw r1, #43792 @ encoding: [0x4a,0xf6,0x10,0x31] 1011@ CHECK: mov.w r0, #66846720 @ encoding: [0x4f,0xf0,0x7f,0x70] 1012@ CHECK: mov.w r0, #66846720 @ encoding: [0x4f,0xf0,0x7f,0x70] 1013@ CHECK: movs.w r0, #66846720 @ encoding: [0x5f,0xf0,0x7f,0x70] 1014 1015 1016@------------------------------------------------------------------------------ 1017@ IT 1018@------------------------------------------------------------------------------ 1019@ Test encodings of a few full IT blocks, not just the IT instruction 1020 1021 iteet eq 1022 addeq r0, r1, r2 1023 nopne 1024 subne r5, r6, r7 1025 addeq r1, r2, #4 1026 1027@ CHECK: iteet eq @ encoding: [0x0d,0xbf] 1028@ CHECK: addeq r0, r1, r2 @ encoding: [0x88,0x18] 1029@ CHECK: nopne @ encoding: [0x00,0xbf] 1030@ CHECK: subne r5, r6, r7 @ encoding: [0xf5,0x1b] 1031@ CHECK: addeq r1, r2, #4 @ encoding: [0x11,0x1d] 1032 1033@------------------------------------------------------------------------------ 1034@ SUB (register) 1035@------------------------------------------------------------------------------ 1036 sub.w r5, r2, r12, rrx 1037 1038@ CHECK: sub.w r5, r2, r12, rrx @ encoding: [0xa2,0xeb,0x3c,0x05] 1039 1040