| // RUN: llvm-mc -triple thumbv7 -show-encoding < %s | FileCheck %s |
| |
| // Test each of the Thumb1 data-processing instructions |
| // The assembly syntax for these instructions allows an optional Rd register |
| // OP{S}{<c>}{<q>} {<Rd>,} <Rn>, <Rm> |
| // Assemblers should chose the narrow thumb encoding when possible, i.e. |
| // - Rd == Rn |
| // - Rd, Rn and Rm are < r8 |
| // In addition, some operations are commutative, allowing the transformation |
| // when: |
| // - Rd == Rn || Rd == Rm |
| // - Rd, Rn and Rm are < r8 |
| |
| // ADD immediate (not SP) A8.8.4 |
| ADDS r0, r0, #5 // T1 |
| // CHECK: adds r0, r0, #5 @ encoding: [0x40,0x1d] |
| ADDS r1, r1, #8 // T2 |
| // CHECK: adds r1, #8 @ encoding: [0x08,0x31] |
| ADDS.W r1, r1, #8 // .w => T3 |
| // CHECK: adds.w r1, r1, #8 @ encoding: [0x11,0xf1,0x08,0x01] |
| ADDS r8, r8, #8 // T3 |
| // CHECK: adds.w r8, r8, #8 @ encoding: [0x18,0xf1,0x08,0x08] |
| |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDEQ r0, r0, #5 // T1 |
| // CHECK: addeq r0, r0, #5 @ encoding: [0x40,0x1d] |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDEQ r1, r1, #8 // T2 |
| // CHECK: addeq r1, #8 @ encoding: [0x08,0x31] |
| |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDSEQ r0, r0, #5 // T3 |
| // CHECK: addseq.w r0, r0, #5 @ encoding: [0x10,0xf1,0x05,0x00] |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDSEQ r1, r1, #8 // T3 |
| // CHECK: addseq.w r1, r1, #8 @ encoding: [0x11,0xf1,0x08,0x01] |
| |
| // ADD register (not SP) A8.8.6 (commutative) |
| ADDS r0, r2, r1 // ADDS has T1 narrow 3 operand |
| // CHECK: adds r0, r2, r1 @ encoding: [0x50,0x18] |
| ADDS r2, r2, r1 // ADDS has T1 narrow 3 operand |
| // CHECK: adds r2, r2, r1 @ encoding: [0x52,0x18] |
| ADD r3, r1, r3 // T2 |
| // CHECK: add r3, r1 @ encoding: [0x0b,0x44] |
| |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDEQ r0, r2, r1 // (In IT) ADD has T1 narrow 3 operand |
| // CHECK: addeq r0, r2, r1 @ encoding: [0x50,0x18] |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDEQ r2, r2, r1 // (In IT) ADD has T1 narrow 3 operand |
| // CHECK: addeq r2, r2, r1 @ encoding: [0x52,0x18] |
| |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDSEQ r0, r2, r1 // T3 |
| // CHECK: addseq.w r0, r2, r1 @ encoding: [0x12,0xeb,0x01,0x00] |
| IT EQ |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| ADDSEQ r2, r2, r1 // T3 |
| // CHECK: addseq.w r2, r2, r1 @ encoding: [0x12,0xeb,0x01,0x02] |
| |
| ADD r3, r3, r1 // T2 |
| // CHECK: add r3, r1 @ encoding: [0x0b,0x44] |
| ADD r4, r4, pc // T2 |
| // CHECK: add r4, pc @ encoding: [0x7c,0x44] |
| ADD r4, pc, r4 // T2 |
| // CHECK: add r4, pc @ encoding: [0x7c,0x44] |
| ADD pc, pc, r2 // T2 |
| // CHECK: add pc, r2 @ encoding: [0x97,0x44] |
| ADD pc, r2, pc // T2 |
| // CHECK: add pc, r2 @ encoding: [0x97,0x44] |
| ADD pc, pc, sp // T2 |
| // CHECK: add pc, sp @ encoding: [0xef,0x44] |
| ADD pc, sp, pc // T2 |
| // CHECK: add pc, sp, pc @ encoding: [0xef,0x44] |
| |
| // ADD (SP plus immediate) A8.8.9 |
| ADD sp, sp, #20 // T2 |
| // FIXME: ARMARM says 'add sp, sp, #20' |
| // CHECK: add sp, #20 @ encoding: [0x05,0xb0] |
| ADD sp, sp, #508 // T2 |
| // CHECK: add sp, #508 @ encoding: [0x7f,0xb0] |
| ADD sp, sp, #512 // T3 |
| // CHECK: add.w sp, sp, #512 @ encoding: [0x0d,0xf5,0x00,0x7d] |
| |
| // ADD (SP plus register) A8.8.10 (commutative) |
| ADD r9, sp, r9 // T1 |
| // CHECK: add r9, sp, r9 @ encoding: [0xe9,0x44] |
| ADD r9, r9, sp // T1 |
| // FIXME: ARMARM says 'add r9, sp, r9' |
| // CHECK: add r9, sp @ encoding: [0xe9,0x44] |
| ADD sp, sp, r10 // T2 |
| // CHECK: add sp, r10 @ encoding: [0xd5,0x44] |
| ADD sp, r10, sp // T2 |
| // CHECK: add sp, r10 @ encoding: [0xd5,0x44] |
| ADD sp, sp, pc // T2 |
| // CHECK: add sp, pc @ encoding: [0xfd,0x44] |
| |
| // AND (commutative) |
| ANDS r0, r2, r1 // Must be wide - 3 distinct registers |
| ANDS r2, r2, r1 // Should choose narrow |
| ANDS r2, r1, r2 // Should choose narrow - commutative |
| ANDS.W r0, r0, r1 // Explicitly wide |
| ANDS.W r3, r1, r3 |
| AND r0, r1, r0 // Must use wide encoding as not flag-setting |
| ANDS r7, r7, r1 // Should use narrow |
| ANDS r7, r1, r7 // Commutative |
| ANDS r8, r1, r8 // high registers so must use wide encoding |
| ANDS r8, r8, r1 |
| ANDS r0, r8, r0 |
| ANDS r1, r1, r8 |
| ANDS r2, r2, r1, lsl #1 // Must use wide - shifted register |
| ANDS r0, r1, r0, lsr #1 |
| // CHECK: ands.w r0, r2, r1 @ encoding: [0x12,0xea,0x01,0x00] |
| // CHECK: ands r2, r1 @ encoding: [0x0a,0x40] |
| // CHECK: ands r2, r1 @ encoding: [0x0a,0x40] |
| // CHECK: ands.w r0, r0, r1 @ encoding: [0x10,0xea,0x01,0x00] |
| // CHECK: ands.w r3, r1, r3 @ encoding: [0x11,0xea,0x03,0x03] |
| // CHECK: and.w r0, r1, r0 @ encoding: [0x01,0xea,0x00,0x00] |
| // CHECK: ands r7, r1 @ encoding: [0x0f,0x40] |
| // CHECK: ands r7, r1 @ encoding: [0x0f,0x40] |
| // CHECK: ands.w r8, r1, r8 @ encoding: [0x11,0xea,0x08,0x08] |
| // CHECK: ands.w r8, r8, r1 @ encoding: [0x18,0xea,0x01,0x08] |
| // CHECK: ands.w r0, r8, r0 @ encoding: [0x18,0xea,0x00,0x00] |
| // CHECK: ands.w r1, r1, r8 @ encoding: [0x11,0xea,0x08,0x01] |
| // CHECK: ands.w r2, r2, r1, lsl #1 @ encoding: [0x12,0xea,0x41,0x02] |
| // CHECK: ands.w r0, r1, r0, lsr #1 @ encoding: [0x11,0xea,0x50,0x00] |
| |
| IT EQ |
| ANDEQ r0, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| ANDEQ r3, r3, r1 // Should choose narrow |
| IT EQ |
| ANDEQ r3, r1, r3 // Should choose narrow - commutative |
| IT EQ |
| ANDEQ.W r0, r0, r1 // Explicitly wide |
| IT EQ |
| ANDEQ.W r2, r1, r2 |
| IT EQ |
| ANDSEQ r0, r1, r0 // Must use wide encoding as flag-setting |
| IT EQ |
| ANDEQ r7, r7, r1 // Should use narrow |
| IT EQ |
| ANDEQ r7, r1, r7 // Commutative |
| IT EQ |
| ANDEQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| ANDEQ r8, r8, r1 |
| IT EQ |
| ANDEQ r4, r8, r4 |
| IT EQ |
| ANDEQ r4, r4, r8 |
| IT EQ |
| ANDEQ r0, r0, r1, lsl #1 // Must use wide - shifted register |
| IT EQ |
| ANDEQ r5, r1, r5, lsr #1 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r0, r2, r1 @ encoding: [0x02,0xea,0x01,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq r3, r1 @ encoding: [0x0b,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq r3, r1 @ encoding: [0x0b,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r0, r0, r1 @ encoding: [0x00,0xea,0x01,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r2, r1, r2 @ encoding: [0x01,0xea,0x02,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andseq.w r0, r1, r0 @ encoding: [0x11,0xea,0x00,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq r7, r1 @ encoding: [0x0f,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq r7, r1 @ encoding: [0x0f,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r8, r1, r8 @ encoding: [0x01,0xea,0x08,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r8, r8, r1 @ encoding: [0x08,0xea,0x01,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r4, r8, r4 @ encoding: [0x08,0xea,0x04,0x04] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r4, r4, r8 @ encoding: [0x04,0xea,0x08,0x04] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r0, r0, r1, lsl #1 @ encoding: [0x00,0xea,0x41,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: andeq.w r5, r1, r5, lsr #1 @ encoding: [0x01,0xea,0x55,0x05] |
| |
| // EOR (commutative) |
| EORS r0, r2, r1 // Must be wide - 3 distinct registers |
| EORS r5, r5, r1 // Should choose narrow |
| EORS r5, r1, r5 // Should choose narrow - commutative |
| EORS.W r0, r0, r1 // Explicitly wide |
| EORS.W r2, r1, r2 |
| EOR r1, r1, r1 // Must use wide encoding as not flag-setting |
| EORS r7, r7, r1 // Should use narrow |
| EORS r7, r1, r7 // Commutative |
| EORS r8, r1, r8 // high registers so must use wide encoding |
| EORS r8, r8, r1 |
| EORS r6, r8, r6 |
| EORS r0, r0, r8 |
| EORS r2, r2, r1, lsl #1 // Must use wide - shifted register |
| EORS r0, r1, r0, lsr #1 |
| // CHECK: eors.w r0, r2, r1 @ encoding: [0x92,0xea,0x01,0x00] |
| // CHECK: eors r5, r1 @ encoding: [0x4d,0x40] |
| // CHECK: eors r5, r1 @ encoding: [0x4d,0x40] |
| // CHECK: eors.w r0, r0, r1 @ encoding: [0x90,0xea,0x01,0x00] |
| // CHECK: eors.w r2, r1, r2 @ encoding: [0x91,0xea,0x02,0x02] |
| // CHECK: eor.w r1, r1, r1 @ encoding: [0x81,0xea,0x01,0x01] |
| // CHECK: eors r7, r1 @ encoding: [0x4f,0x40] |
| // CHECK: eors r7, r1 @ encoding: [0x4f,0x40] |
| // CHECK: eors.w r8, r1, r8 @ encoding: [0x91,0xea,0x08,0x08] |
| // CHECK: eors.w r8, r8, r1 @ encoding: [0x98,0xea,0x01,0x08] |
| // CHECK: eors.w r6, r8, r6 @ encoding: [0x98,0xea,0x06,0x06] |
| // CHECK: eors.w r0, r0, r8 @ encoding: [0x90,0xea,0x08,0x00] |
| // CHECK: eors.w r2, r2, r1, lsl #1 @ encoding: [0x92,0xea,0x41,0x02] |
| // CHECK: eors.w r0, r1, r0, lsr #1 @ encoding: [0x91,0xea,0x50,0x00] |
| |
| IT EQ |
| EOREQ r3, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| EOREQ r0, r0, r1 // Should choose narrow |
| IT EQ |
| EOREQ r2, r1, r2 // Should choose narrow - commutative |
| IT EQ |
| EOREQ.W r3, r3, r1 // Explicitly wide |
| IT EQ |
| EOREQ.W r0, r1, r0 |
| IT EQ |
| EORSEQ r1, r1, r1 // Must use wide encoding as flag-setting |
| IT EQ |
| EOREQ r7, r7, r1 // Should use narrow |
| IT EQ |
| EOREQ r7, r1, r7 // Commutative |
| IT EQ |
| EOREQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| EOREQ r8, r8, r1 |
| IT EQ |
| EOREQ r0, r8, r0 |
| IT EQ |
| EOREQ r3, r3, r8 |
| IT EQ |
| EOREQ r4, r4, r1, lsl #1 // Must use wide - shifted register |
| IT EQ |
| EOREQ r0, r1, r0, lsr #1 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r3, r2, r1 @ encoding: [0x82,0xea,0x01,0x03] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq r0, r1 @ encoding: [0x48,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq r2, r1 @ encoding: [0x4a,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r3, r3, r1 @ encoding: [0x83,0xea,0x01,0x03] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r0, r1, r0 @ encoding: [0x81,0xea,0x00,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eorseq.w r1, r1, r1 @ encoding: [0x91,0xea,0x01,0x01] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq r7, r1 @ encoding: [0x4f,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq r7, r1 @ encoding: [0x4f,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r8, r1, r8 @ encoding: [0x81,0xea,0x08,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r8, r8, r1 @ encoding: [0x88,0xea,0x01,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r0, r8, r0 @ encoding: [0x88,0xea,0x00,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r3, r3, r8 @ encoding: [0x83,0xea,0x08,0x03] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r4, r4, r1, lsl #1 @ encoding: [0x84,0xea,0x41,0x04] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: eoreq.w r0, r1, r0, lsr #1 @ encoding: [0x81,0xea,0x50,0x00] |
| |
| // LSL |
| LSLS r0, r2, r1 // Must be wide - 3 distinct registers |
| LSLS r2, r2, r1 // Should choose narrow |
| LSLS r2, r1, r2 // Should choose wide - not commutative |
| LSLS.W r0, r0, r1 // Explicitly wide |
| LSLS.W r4, r1, r4 |
| LSL r4, r1, r4 // Must use wide encoding as not flag-setting |
| LSLS r7, r7, r1 // Should use narrow |
| LSLS r8, r1, r8 // high registers so must use wide encoding |
| LSLS r8, r8, r1 |
| LSLS r3, r8, r3 |
| LSLS r5, r5, r8 |
| // CHECK: lsls.w r0, r2, r1 @ encoding: [0x12,0xfa,0x01,0xf0] |
| // CHECK: lsls r2, r1 @ encoding: [0x8a,0x40] |
| // CHECK: lsls.w r2, r1, r2 @ encoding: [0x11,0xfa,0x02,0xf2] |
| // CHECK: lsls.w r0, r0, r1 @ encoding: [0x10,0xfa,0x01,0xf0] |
| // CHECK: lsls.w r4, r1, r4 @ encoding: [0x11,0xfa,0x04,0xf4] |
| // CHECK: lsl.w r4, r1, r4 @ encoding: [0x01,0xfa,0x04,0xf4] |
| // CHECK: lsls r7, r1 @ encoding: [0x8f,0x40] |
| // CHECK: lsls.w r8, r1, r8 @ encoding: [0x11,0xfa,0x08,0xf8] |
| // CHECK: lsls.w r8, r8, r1 @ encoding: [0x18,0xfa,0x01,0xf8] |
| // CHECK: lsls.w r3, r8, r3 @ encoding: [0x18,0xfa,0x03,0xf3] |
| // CHECK: lsls.w r5, r5, r8 @ encoding: [0x15,0xfa,0x08,0xf5] |
| |
| IT EQ |
| LSLEQ r0, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| LSLEQ r2, r2, r1 // Should choose narrow |
| IT EQ |
| LSLEQ r2, r1, r2 // Should choose wide - not commutative |
| IT EQ |
| LSLEQ.W r0, r0, r1 // Explicitly wide |
| IT EQ |
| LSLEQ.W r3, r1, r3 |
| IT EQ |
| LSLSEQ r4, r1, r4 // Must use wide encoding as flag-setting |
| IT EQ |
| LSLEQ r7, r7, r1 // Should use narrow |
| IT EQ |
| LSLEQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| LSLEQ r8, r8, r1 |
| IT EQ |
| LSLEQ r0, r8, r0 |
| IT EQ |
| LSLEQ r3, r3, r8 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r0, r2, r1 @ encoding: [0x02,0xfa,0x01,0xf0] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq r2, r1 @ encoding: [0x8a,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r2, r1, r2 @ encoding: [0x01,0xfa,0x02,0xf2] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r0, r0, r1 @ encoding: [0x00,0xfa,0x01,0xf0] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r3, r1, r3 @ encoding: [0x01,0xfa,0x03,0xf3] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lslseq.w r4, r1, r4 @ encoding: [0x11,0xfa,0x04,0xf4] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq r7, r1 @ encoding: [0x8f,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r8, r1, r8 @ encoding: [0x01,0xfa,0x08,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r8, r8, r1 @ encoding: [0x08,0xfa,0x01,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r0, r8, r0 @ encoding: [0x08,0xfa,0x00,0xf0] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsleq.w r3, r3, r8 @ encoding: [0x03,0xfa,0x08,0xf3] |
| |
| // LSR |
| LSRS r6, r2, r1 // Must be wide - 3 distinct registers |
| LSRS r2, r2, r1 // Should choose narrow |
| LSRS r2, r1, r2 // Should choose wide - not commutative |
| LSRS.W r2, r2, r1 // Explicitly wide |
| LSRS.W r3, r1, r3 |
| LSR r4, r1, r4 // Must use wide encoding as not flag-setting |
| LSRS r7, r7, r1 // Should use narrow |
| LSRS r8, r1, r8 // high registers so must use wide encoding |
| LSRS r8, r8, r1 |
| LSRS r2, r8, r2 |
| LSRS r5, r5, r8 |
| // CHECK: lsrs.w r6, r2, r1 @ encoding: [0x32,0xfa,0x01,0xf6] |
| // CHECK: lsrs r2, r1 @ encoding: [0xca,0x40] |
| // CHECK: lsrs.w r2, r1, r2 @ encoding: [0x31,0xfa,0x02,0xf2] |
| // CHECK: lsrs.w r2, r2, r1 @ encoding: [0x32,0xfa,0x01,0xf2] |
| // CHECK: lsrs.w r3, r1, r3 @ encoding: [0x31,0xfa,0x03,0xf3] |
| // CHECK: lsr.w r4, r1, r4 @ encoding: [0x21,0xfa,0x04,0xf4] |
| // CHECK: lsrs r7, r1 @ encoding: [0xcf,0x40] |
| // CHECK: lsrs.w r8, r1, r8 @ encoding: [0x31,0xfa,0x08,0xf8] |
| // CHECK: lsrs.w r8, r8, r1 @ encoding: [0x38,0xfa,0x01,0xf8] |
| // CHECK: lsrs.w r2, r8, r2 @ encoding: [0x38,0xfa,0x02,0xf2] |
| // CHECK: lsrs.w r5, r5, r8 @ encoding: [0x35,0xfa,0x08,0xf5] |
| |
| IT EQ |
| LSREQ r6, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| LSREQ r7, r7, r1 // Should choose narrow |
| IT EQ |
| LSREQ r7, r1, r7 // Should choose wide - not commutative |
| IT EQ |
| LSREQ.W r7, r7, r1 // Explicitly wide |
| IT EQ |
| LSREQ.W r2, r1, r2 |
| IT EQ |
| LSRSEQ r0, r1, r0 // Must use wide encoding as flag-setting |
| IT EQ |
| LSREQ r7, r7, r1 // Should use narrow |
| IT EQ |
| LSREQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| LSREQ r8, r8, r1 |
| IT EQ |
| LSREQ r1, r8, r1 |
| IT EQ |
| LSREQ r4, r4, r8 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r6, r2, r1 @ encoding: [0x22,0xfa,0x01,0xf6] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq r7, r1 @ encoding: [0xcf,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r7, r1, r7 @ encoding: [0x21,0xfa,0x07,0xf7] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r7, r7, r1 @ encoding: [0x27,0xfa,0x01,0xf7] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r2, r1, r2 @ encoding: [0x21,0xfa,0x02,0xf2] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsrseq.w r0, r1, r0 @ encoding: [0x31,0xfa,0x00,0xf0] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq r7, r1 @ encoding: [0xcf,0x40] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r8, r1, r8 @ encoding: [0x21,0xfa,0x08,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r8, r8, r1 @ encoding: [0x28,0xfa,0x01,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r1, r8, r1 @ encoding: [0x28,0xfa,0x01,0xf1] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: lsreq.w r4, r4, r8 @ encoding: [0x24,0xfa,0x08,0xf4] |
| |
| // ASR |
| ASRS r7, r6, r5 // Must be wide - 3 distinct registers |
| ASRS r0, r0, r1 // Should choose narrow |
| ASRS r0, r1, r0 // Should choose wide - not commutative |
| ASRS.W r3, r3, r1 // Explicitly wide |
| ASRS.W r1, r1, r1 |
| ASR r0, r1, r0 // Must use wide encoding as not flag-setting |
| ASRS r7, r7, r1 // Should use narrow |
| ASRS r8, r1, r8 // high registers so must use wide encoding |
| ASRS r8, r8, r1 |
| ASRS r5, r8, r5 |
| ASRS r5, r5, r8 |
| // CHECK: asrs.w r7, r6, r5 @ encoding: [0x56,0xfa,0x05,0xf7] |
| // CHECK: asrs r0, r1 @ encoding: [0x08,0x41] |
| // CHECK: asrs.w r0, r1, r0 @ encoding: [0x51,0xfa,0x00,0xf0] |
| // CHECK: asrs.w r3, r3, r1 @ encoding: [0x53,0xfa,0x01,0xf3] |
| // CHECK: asrs.w r1, r1, r1 @ encoding: [0x51,0xfa,0x01,0xf1] |
| // CHECK: asr.w r0, r1, r0 @ encoding: [0x41,0xfa,0x00,0xf0] |
| // CHECK: asrs r7, r1 @ encoding: [0x0f,0x41] |
| // CHECK: asrs.w r8, r1, r8 @ encoding: [0x51,0xfa,0x08,0xf8] |
| // CHECK: asrs.w r8, r8, r1 @ encoding: [0x58,0xfa,0x01,0xf8] |
| // CHECK: asrs.w r5, r8, r5 @ encoding: [0x58,0xfa,0x05,0xf5] |
| // CHECK: asrs.w r5, r5, r8 @ encoding: [0x55,0xfa,0x08,0xf5] |
| |
| IT EQ |
| ASREQ r0, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| ASREQ r2, r2, r1 // Should choose narrow |
| IT EQ |
| ASREQ r1, r2, r1 // Should choose wide - not commutative |
| IT EQ |
| ASREQ.W r4, r4, r1 // Explicitly wide |
| IT EQ |
| ASREQ.W r6, r1, r6 |
| IT EQ |
| ASRSEQ r3, r1, r3 // Must use wide encoding as flag-setting |
| IT EQ |
| ASREQ r7, r7, r1 // Should use narrow |
| IT EQ |
| ASREQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| ASREQ r8, r8, r1 |
| IT EQ |
| ASREQ r1, r8, r1 |
| IT EQ |
| ASREQ r3, r3, r8 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r0, r2, r1 @ encoding: [0x42,0xfa,0x01,0xf0] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq r2, r1 @ encoding: [0x0a,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r1, r2, r1 @ encoding: [0x42,0xfa,0x01,0xf1] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r4, r4, r1 @ encoding: [0x44,0xfa,0x01,0xf4] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r6, r1, r6 @ encoding: [0x41,0xfa,0x06,0xf6] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asrseq.w r3, r1, r3 @ encoding: [0x51,0xfa,0x03,0xf3] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq r7, r1 @ encoding: [0x0f,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r8, r1, r8 @ encoding: [0x41,0xfa,0x08,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r8, r8, r1 @ encoding: [0x48,0xfa,0x01,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r1, r8, r1 @ encoding: [0x48,0xfa,0x01,0xf1] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: asreq.w r3, r3, r8 @ encoding: [0x43,0xfa,0x08,0xf3] |
| |
| // ADC (commutative) |
| ADCS r5, r2, r1 // Must be wide - 3 distinct registers |
| ADCS r5, r5, r1 // Should choose narrow |
| ADCS r3, r1, r3 // Should choose narrow - commutative |
| ADCS.W r2, r2, r1 // Explicitly wide |
| ADCS.W r3, r1, r3 |
| ADC r0, r1, r0 // Must use wide encoding as not flag-setting |
| ADCS r7, r7, r1 // Should use narrow |
| ADCS r7, r1, r7 // Commutative |
| ADCS r8, r1, r8 // high registers so must use wide encoding |
| ADCS r8, r8, r1 |
| ADCS r5, r8, r5 |
| ADCS r2, r2, r8 |
| ADCS r3, r3, r1, lsl #1 // Must use wide - shifted register |
| ADCS r4, r1, r4, lsr #1 |
| // CHECK: adcs.w r5, r2, r1 @ encoding: [0x52,0xeb,0x01,0x05] |
| // CHECK: adcs r5, r1 @ encoding: [0x4d,0x41] |
| // CHECK: adcs r3, r1 @ encoding: [0x4b,0x41] |
| // CHECK: adcs.w r2, r2, r1 @ encoding: [0x52,0xeb,0x01,0x02] |
| // CHECK: adcs.w r3, r1, r3 @ encoding: [0x51,0xeb,0x03,0x03] |
| // CHECK: adc.w r0, r1, r0 @ encoding: [0x41,0xeb,0x00,0x00] |
| // CHECK: adcs r7, r1 @ encoding: [0x4f,0x41] |
| // CHECK: adcs r7, r1 @ encoding: [0x4f,0x41] |
| // CHECK: adcs.w r8, r1, r8 @ encoding: [0x51,0xeb,0x08,0x08] |
| // CHECK: adcs.w r8, r8, r1 @ encoding: [0x58,0xeb,0x01,0x08] |
| // CHECK: adcs.w r5, r8, r5 @ encoding: [0x58,0xeb,0x05,0x05] |
| // CHECK: adcs.w r2, r2, r8 @ encoding: [0x52,0xeb,0x08,0x02] |
| // CHECK: adcs.w r3, r3, r1, lsl #1 @ encoding: [0x53,0xeb,0x41,0x03] |
| // CHECK: adcs.w r4, r1, r4, lsr #1 @ encoding: [0x51,0xeb,0x54,0x04] |
| |
| IT EQ |
| ADCEQ r1, r2, r3 // Must be wide - 3 distinct registers |
| IT EQ |
| ADCEQ r1, r1, r1 // Should choose narrow |
| IT EQ |
| ADCEQ r3, r1, r3 // Should choose narrow - commutative |
| IT EQ |
| ADCEQ.W r3, r3, r1 // Explicitly wide |
| IT EQ |
| ADCEQ.W r0, r1, r0 |
| IT EQ |
| ADCSEQ r3, r1, r3 // Must use wide encoding as flag-setting |
| IT EQ |
| ADCEQ r7, r7, r1 // Should use narrow |
| IT EQ |
| ADCEQ r7, r1, r7 // Commutative |
| IT EQ |
| ADCEQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| ADCEQ r8, r8, r1 |
| IT EQ |
| ADCEQ r3, r8, r3 |
| IT EQ |
| ADCEQ r1, r1, r8 |
| IT EQ |
| ADCEQ r2, r2, r1, lsl #1 // Must use wide - shifted register |
| IT EQ |
| ADCEQ r1, r1, r1, lsr #1 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r1, r2, r3 @ encoding: [0x42,0xeb,0x03,0x01] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq r1, r1 @ encoding: [0x49,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq r3, r1 @ encoding: [0x4b,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r3, r3, r1 @ encoding: [0x43,0xeb,0x01,0x03] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r0, r1, r0 @ encoding: [0x41,0xeb,0x00,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adcseq.w r3, r1, r3 @ encoding: [0x51,0xeb,0x03,0x03] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq r7, r1 @ encoding: [0x4f,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq r7, r1 @ encoding: [0x4f,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r8, r1, r8 @ encoding: [0x41,0xeb,0x08,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r8, r8, r1 @ encoding: [0x48,0xeb,0x01,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r3, r8, r3 @ encoding: [0x48,0xeb,0x03,0x03] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r1, r1, r8 @ encoding: [0x41,0xeb,0x08,0x01] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r2, r2, r1, lsl #1 @ encoding: [0x42,0xeb,0x41,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: adceq.w r1, r1, r1, lsr #1 @ encoding: [0x41,0xeb,0x51,0x01] |
| |
| // SBC |
| SBCS r3, r2, r1 // Must be wide - 3 distinct registers |
| SBCS r4, r4, r1 // Should choose narrow |
| SBCS r1, r4, r1 // Should choose wide - not commutative |
| SBCS.W r4, r4, r1 // Explicitly wide |
| SBCS.W r2, r1, r2 |
| SBC r0, r1, r0 // Must use wide encoding as not flag-setting |
| SBCS r7, r7, r1 // Should use narrow |
| SBCS r8, r1, r8 // high registers so must use wide encoding |
| SBCS r8, r8, r1 |
| SBCS r4, r8, r4 |
| SBCS r3, r3, r8 |
| SBCS r2, r2, r1, lsl #1 // Must use wide - shifted register |
| SBCS r5, r1, r5, lsr #1 |
| // CHECK: sbcs.w r3, r2, r1 @ encoding: [0x72,0xeb,0x01,0x03] |
| // CHECK: sbcs r4, r1 @ encoding: [0x8c,0x41] |
| // CHECK: sbcs.w r1, r4, r1 @ encoding: [0x74,0xeb,0x01,0x01] |
| // CHECK: sbcs.w r4, r4, r1 @ encoding: [0x74,0xeb,0x01,0x04] |
| // CHECK: sbcs.w r2, r1, r2 @ encoding: [0x71,0xeb,0x02,0x02] |
| // CHECK: sbc.w r0, r1, r0 @ encoding: [0x61,0xeb,0x00,0x00] |
| // CHECK: sbcs r7, r1 @ encoding: [0x8f,0x41] |
| // CHECK: sbcs.w r8, r1, r8 @ encoding: [0x71,0xeb,0x08,0x08] |
| // CHECK: sbcs.w r8, r8, r1 @ encoding: [0x78,0xeb,0x01,0x08] |
| // CHECK: sbcs.w r4, r8, r4 @ encoding: [0x78,0xeb,0x04,0x04] |
| // CHECK: sbcs.w r3, r3, r8 @ encoding: [0x73,0xeb,0x08,0x03] |
| // CHECK: sbcs.w r2, r2, r1, lsl #1 @ encoding: [0x72,0xeb,0x41,0x02] |
| // CHECK: sbcs.w r5, r1, r5, lsr #1 @ encoding: [0x71,0xeb,0x55,0x05] |
| |
| IT EQ |
| SBCEQ r5, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| SBCEQ r5, r5, r1 // Should choose narrow |
| IT EQ |
| SBCEQ r1, r5, r1 // Should choose narrow |
| IT EQ |
| SBCEQ.W r5, r5, r1 // Explicitly wide |
| IT EQ |
| SBCEQ.W r0, r1, r0 |
| IT EQ |
| SBCSEQ r2, r1, r2 // Must use wide encoding as flag-setting |
| IT EQ |
| SBCEQ r7, r7, r1 // Should use narrow |
| IT EQ |
| SBCEQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| SBCEQ r8, r8, r1 |
| IT EQ |
| SBCEQ r7, r8, r7 |
| IT EQ |
| SBCEQ r7, r7, r8 |
| IT EQ |
| SBCEQ r2, r2, r1, lsl #1 // Must use wide - shifted register |
| IT EQ |
| SBCEQ r5, r1, r5, lsr #1 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r5, r2, r1 @ encoding: [0x62,0xeb,0x01,0x05] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq r5, r1 @ encoding: [0x8d,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r1, r5, r1 @ encoding: [0x65,0xeb,0x01,0x01] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r5, r5, r1 @ encoding: [0x65,0xeb,0x01,0x05] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r0, r1, r0 @ encoding: [0x61,0xeb,0x00,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbcseq.w r2, r1, r2 @ encoding: [0x71,0xeb,0x02,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq r7, r1 @ encoding: [0x8f,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r8, r1, r8 @ encoding: [0x61,0xeb,0x08,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r8, r8, r1 @ encoding: [0x68,0xeb,0x01,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r7, r8, r7 @ encoding: [0x68,0xeb,0x07,0x07] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r7, r7, r8 @ encoding: [0x67,0xeb,0x08,0x07] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r2, r2, r1, lsl #1 @ encoding: [0x62,0xeb,0x41,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: sbceq.w r5, r1, r5, lsr #1 @ encoding: [0x61,0xeb,0x55,0x05] |
| |
| // ROR |
| RORS r3, r2, r1 // Must be wide - 3 distinct registers |
| RORS r0, r0, r1 // Should choose narrow |
| RORS r1, r0, r1 // Should choose wide - not commutative |
| RORS.W r2, r2, r1 // Explicitly wide |
| RORS.W r2, r1, r2 |
| ROR r5, r1, r5 // Must use wide encoding as not flag-setting |
| RORS r7, r7, r1 // Should use narrow |
| RORS r8, r1, r8 // high registers so must use wide encoding |
| RORS r8, r8, r1 |
| RORS r6, r8, r6 |
| RORS r6, r6, r8 |
| // CHECK: rors.w r3, r2, r1 @ encoding: [0x72,0xfa,0x01,0xf3] |
| // CHECK: rors r0, r1 @ encoding: [0xc8,0x41] |
| // CHECK: rors.w r1, r0, r1 @ encoding: [0x70,0xfa,0x01,0xf1] |
| // CHECK: rors.w r2, r2, r1 @ encoding: [0x72,0xfa,0x01,0xf2] |
| // CHECK: rors.w r2, r1, r2 @ encoding: [0x71,0xfa,0x02,0xf2] |
| // CHECK: ror.w r5, r1, r5 @ encoding: [0x61,0xfa,0x05,0xf5] |
| // CHECK: rors r7, r1 @ encoding: [0xcf,0x41] |
| // CHECK: rors.w r8, r1, r8 @ encoding: [0x71,0xfa,0x08,0xf8] |
| // CHECK: rors.w r8, r8, r1 @ encoding: [0x78,0xfa,0x01,0xf8] |
| // CHECK: rors.w r6, r8, r6 @ encoding: [0x78,0xfa,0x06,0xf6] |
| // CHECK: rors.w r6, r6, r8 @ encoding: [0x76,0xfa,0x08,0xf6] |
| |
| IT EQ |
| ROREQ r4, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| ROREQ r4, r4, r1 // Should choose narrow |
| IT EQ |
| ROREQ r1, r4, r1 // Should choose wide - not commutative |
| IT EQ |
| ROREQ.W r4, r4, r1 // Explicitly wide |
| IT EQ |
| ROREQ.W r0, r1, r0 |
| IT EQ |
| RORSEQ r0, r1, r0 // Must use wide encoding as flag-setting |
| IT EQ |
| ROREQ r7, r7, r1 // Should use narrow |
| IT EQ |
| ROREQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| ROREQ r8, r8, r1 |
| IT EQ |
| ROREQ r3, r8, r3 |
| IT EQ |
| ROREQ r1, r1, r8 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r4, r2, r1 @ encoding: [0x62,0xfa,0x01,0xf4] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq r4, r1 @ encoding: [0xcc,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r1, r4, r1 @ encoding: [0x64,0xfa,0x01,0xf1] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r4, r4, r1 @ encoding: [0x64,0xfa,0x01,0xf4] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r0, r1, r0 @ encoding: [0x61,0xfa,0x00,0xf0] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: rorseq.w r0, r1, r0 @ encoding: [0x71,0xfa,0x00,0xf0] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq r7, r1 @ encoding: [0xcf,0x41] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r8, r1, r8 @ encoding: [0x61,0xfa,0x08,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r8, r8, r1 @ encoding: [0x68,0xfa,0x01,0xf8] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r3, r8, r3 @ encoding: [0x68,0xfa,0x03,0xf3] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: roreq.w r1, r1, r8 @ encoding: [0x61,0xfa,0x08,0xf1] |
| |
| // TST - only two register version available |
| // RSB - only two register version available |
| // CMP - only two register version available |
| // CMN - only two register version available |
| |
| // ORR (commutative) |
| ORRS r7, r2, r1 // Must be wide - 3 distinct registers |
| ORRS r2, r2, r1 // Should choose narrow |
| ORRS r3, r1, r3 // Should choose narrow - commutative |
| ORRS.W r4, r4, r1 // Explicitly wide |
| ORRS.W r5, r1, r5 |
| ORR r2, r1, r2 // Must use wide encoding as not flag-setting |
| ORRS r7, r7, r1 // Should use narrow |
| ORRS r7, r1, r7 // Commutative |
| ORRS r8, r1, r8 // high registers so must use wide encoding |
| ORRS r8, r8, r1 |
| ORRS r1, r8, r1 |
| ORRS r0, r0, r8 |
| ORRS r1, r1, r1, lsl #1 // Must use wide - shifted register |
| ORRS r0, r1, r0, lsr #1 |
| // CHECK: orrs.w r7, r2, r1 @ encoding: [0x52,0xea,0x01,0x07] |
| // CHECK: orrs r2, r1 @ encoding: [0x0a,0x43] |
| // CHECK: orrs r3, r1 @ encoding: [0x0b,0x43] |
| // CHECK: orrs.w r4, r4, r1 @ encoding: [0x54,0xea,0x01,0x04] |
| // CHECK: orrs.w r5, r1, r5 @ encoding: [0x51,0xea,0x05,0x05] |
| // CHECK: orr.w r2, r1, r2 @ encoding: [0x41,0xea,0x02,0x02] |
| // CHECK: orrs r7, r1 @ encoding: [0x0f,0x43] |
| // CHECK: orrs r7, r1 @ encoding: [0x0f,0x43] |
| // CHECK: orrs.w r8, r1, r8 @ encoding: [0x51,0xea,0x08,0x08] |
| // CHECK: orrs.w r8, r8, r1 @ encoding: [0x58,0xea,0x01,0x08] |
| // CHECK: orrs.w r1, r8, r1 @ encoding: [0x58,0xea,0x01,0x01] |
| // CHECK: orrs.w r0, r0, r8 @ encoding: [0x50,0xea,0x08,0x00] |
| // CHECK: orrs.w r1, r1, r1, lsl #1 @ encoding: [0x51,0xea,0x41,0x01] |
| // CHECK: orrs.w r0, r1, r0, lsr #1 @ encoding: [0x51,0xea,0x50,0x00] |
| |
| IT EQ |
| ORREQ r0, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| ORREQ r5, r5, r1 // Should choose narrow |
| IT EQ |
| ORREQ r5, r1, r5 // Should choose narrow - commutative |
| IT EQ |
| ORREQ.W r2, r2, r1 // Explicitly wide |
| IT EQ |
| ORREQ.W r3, r1, r3 |
| IT EQ |
| ORRSEQ r4, r1, r4 // Must use wide encoding as flag-setting |
| IT EQ |
| ORREQ r7, r7, r1 // Should use narrow |
| IT EQ |
| ORREQ r7, r1, r7 // Commutative |
| IT EQ |
| ORREQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| ORREQ r8, r8, r1 |
| IT EQ |
| ORREQ r0, r8, r0 |
| IT EQ |
| ORREQ r0, r0, r8 |
| IT EQ |
| ORREQ r2, r2, r1, lsl #1 // Must use wide - shifted register |
| IT EQ |
| ORREQ r2, r1, r2, lsr #1 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r0, r2, r1 @ encoding: [0x42,0xea,0x01,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq r5, r1 @ encoding: [0x0d,0x43] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq r5, r1 @ encoding: [0x0d,0x43] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r2, r2, r1 @ encoding: [0x42,0xea,0x01,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r3, r1, r3 @ encoding: [0x41,0xea,0x03,0x03] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orrseq.w r4, r1, r4 @ encoding: [0x51,0xea,0x04,0x04] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq r7, r1 @ encoding: [0x0f,0x43] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq r7, r1 @ encoding: [0x0f,0x43] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r8, r1, r8 @ encoding: [0x41,0xea,0x08,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r8, r8, r1 @ encoding: [0x48,0xea,0x01,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r0, r8, r0 @ encoding: [0x48,0xea,0x00,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r0, r0, r8 @ encoding: [0x40,0xea,0x08,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r2, r2, r1, lsl #1 @ encoding: [0x42,0xea,0x41,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: orreq.w r2, r1, r2, lsr #1 @ encoding: [0x41,0xea,0x52,0x02] |
| |
| // MUL - not affected by this change |
| |
| // BIC |
| BICS r3, r2, r1 // Must be wide - 3 distinct registers |
| BICS r2, r2, r1 // Should choose narrow |
| BICS r1, r2, r1 // Should choose wide - not commutative |
| BICS.W r2, r2, r1 // Explicitly wide |
| BICS.W r0, r1, r0 |
| BIC r0, r1, r0 // Must use wide encoding as not flag-setting |
| BICS r7, r7, r1 // Should use narrow |
| BICS r8, r1, r8 // high registers so must use wide encoding |
| BICS r8, r8, r1 |
| BICS r7, r8, r7 |
| BICS r5, r5, r8 |
| BICS r3, r3, r1, lsl #1 // Must use wide - shifted register |
| BICS r4, r1, r4, lsr #1 |
| // CHECK: bics.w r3, r2, r1 @ encoding: [0x32,0xea,0x01,0x03] |
| // CHECK: bics r2, r1 @ encoding: [0x8a,0x43] |
| // CHECK: bics.w r1, r2, r1 @ encoding: [0x32,0xea,0x01,0x01] |
| // CHECK: bics.w r2, r2, r1 @ encoding: [0x32,0xea,0x01,0x02] |
| // CHECK: bics.w r0, r1, r0 @ encoding: [0x31,0xea,0x00,0x00] |
| // CHECK: bic.w r0, r1, r0 @ encoding: [0x21,0xea,0x00,0x00] |
| // CHECK: bics r7, r1 @ encoding: [0x8f,0x43] |
| // CHECK: bics.w r8, r1, r8 @ encoding: [0x31,0xea,0x08,0x08] |
| // CHECK: bics.w r8, r8, r1 @ encoding: [0x38,0xea,0x01,0x08] |
| // CHECK: bics.w r7, r8, r7 @ encoding: [0x38,0xea,0x07,0x07] |
| // CHECK: bics.w r5, r5, r8 @ encoding: [0x35,0xea,0x08,0x05] |
| // CHECK: bics.w r3, r3, r1, lsl #1 @ encoding: [0x33,0xea,0x41,0x03] |
| // CHECK: bics.w r4, r1, r4, lsr #1 @ encoding: [0x31,0xea,0x54,0x04] |
| |
| IT EQ |
| BICEQ r0, r2, r1 // Must be wide - 3 distinct registers |
| IT EQ |
| BICEQ r5, r5, r1 // Should choose narrow |
| IT EQ |
| BICEQ r1, r5, r1 // Should choose wide - not commutative |
| IT EQ |
| BICEQ.W r4, r4, r1 // Explicitly wide |
| IT EQ |
| BICEQ.W r2, r1, r2 |
| IT EQ |
| BICSEQ r5, r1, r5 // Must use wide encoding as flag-setting |
| IT EQ |
| BICEQ r7, r7, r1 // Should use narrow |
| IT EQ |
| BICEQ r8, r1, r8 // high registers so must use wide encoding |
| IT EQ |
| BICEQ r8, r8, r1 |
| IT EQ |
| BICEQ r0, r8, r0 |
| IT EQ |
| BICEQ r2, r2, r8 |
| IT EQ |
| BICEQ r4, r4, r1, lsl #1 // Must use wide - shifted register |
| IT EQ |
| BICEQ r5, r1, r5, lsr #1 |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r0, r2, r1 @ encoding: [0x22,0xea,0x01,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq r5, r1 @ encoding: [0x8d,0x43] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r1, r5, r1 @ encoding: [0x25,0xea,0x01,0x01] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r4, r4, r1 @ encoding: [0x24,0xea,0x01,0x04] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r2, r1, r2 @ encoding: [0x21,0xea,0x02,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: bicseq.w r5, r1, r5 @ encoding: [0x31,0xea,0x05,0x05] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq r7, r1 @ encoding: [0x8f,0x43] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r8, r1, r8 @ encoding: [0x21,0xea,0x08,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r8, r8, r1 @ encoding: [0x28,0xea,0x01,0x08] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r0, r8, r0 @ encoding: [0x28,0xea,0x00,0x00] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r2, r2, r8 @ encoding: [0x22,0xea,0x08,0x02] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r4, r4, r1, lsl #1 @ encoding: [0x24,0xea,0x41,0x04] |
| // CHECK: it eq @ encoding: [0x08,0xbf] |
| // CHECK: biceq.w r5, r1, r5, lsr #1 @ encoding: [0x21,0xea,0x55,0x05] |
| |
| // CMN - only two register version available |