brintos

brintos / llvm-project-archived public Read only

0
0
Text · 44.8 KiB · 050e971 Raw
899 lines · plain
1// RUN: llvm-mc -triple thumbv7 -show-encoding < %s | FileCheck %s2 3// Test each of the Thumb1 data-processing instructions4// The assembly syntax for these instructions allows an optional Rd register5//   OP{S}{<c>}{<q>}  {<Rd>,} <Rn>, <Rm>6// Assemblers should chose the narrow thumb encoding when possible, i.e.7//   - Rd == Rn 8//   - Rd, Rn and Rm are < r89// In addition, some operations are commutative, allowing the transformation10// when:11//   - Rd == Rn || Rd == Rm12//   - Rd, Rn and Rm are < r813 14// ADD immediate (not SP) A8.8.415    ADDS     r0, r0, #5          // T116// CHECK: adds  r0, r0, #5          @ encoding: [0x40,0x1d]17    ADDS     r1, r1, #8          // T218// CHECK: adds  r1, #8              @ encoding: [0x08,0x31]19    ADDS.W   r1, r1, #8          // .w => T320// CHECK: adds.w r1, r1, #8         @ encoding: [0x11,0xf1,0x08,0x01]21    ADDS     r8, r8, #8          // T322// CHECK: adds.w r8, r8, #8         @ encoding: [0x18,0xf1,0x08,0x08]23 24    IT EQ25// CHECK: it eq                     @ encoding: [0x08,0xbf]26    ADDEQ    r0, r0, #5          // T127// CHECK: addeq r0, r0, #5          @ encoding: [0x40,0x1d]28    IT EQ29// CHECK: it eq                     @ encoding: [0x08,0xbf]30    ADDEQ    r1, r1, #8          // T231// CHECK: addeq r1, #8              @ encoding: [0x08,0x31]32 33    IT EQ34// CHECK: it eq                     @ encoding: [0x08,0xbf]35    ADDSEQ   r0, r0, #5          // T336// CHECK: addseq.w r0, r0, #5       @ encoding: [0x10,0xf1,0x05,0x00]37    IT EQ38// CHECK: it eq                     @ encoding: [0x08,0xbf]39    ADDSEQ   r1, r1, #8          // T340// CHECK: addseq.w r1, r1, #8       @ encoding: [0x11,0xf1,0x08,0x01]41 42// ADD register (not SP) A8.8.6 (commutative)43    ADDS     r0, r2, r1          // ADDS has T1 narrow 3 operand44// CHECK: adds  r0, r2, r1          @ encoding: [0x50,0x18]45    ADDS     r2, r2, r1          // ADDS has T1 narrow 3 operand46// CHECK: adds  r2, r2, r1          @ encoding: [0x52,0x18]47    ADD      r3, r1, r3          // T248// CHECK: add  r3, r1               @ encoding: [0x0b,0x44]49 50    IT EQ51// CHECK: it eq                     @ encoding: [0x08,0xbf]52    ADDEQ    r0, r2, r1          // (In IT) ADD has T1 narrow 3 operand53// CHECK: addeq r0, r2, r1          @ encoding: [0x50,0x18]54    IT EQ55// CHECK: it eq                     @ encoding: [0x08,0xbf]56    ADDEQ    r2, r2, r1          // (In IT) ADD has T1 narrow 3 operand57// CHECK: addeq r2, r2, r1          @ encoding: [0x52,0x18]58 59    IT EQ60// CHECK: it eq                     @ encoding: [0x08,0xbf]61    ADDSEQ   r0, r2, r1          // T362// CHECK: addseq.w r0, r2, r1       @ encoding: [0x12,0xeb,0x01,0x00]63    IT EQ64// CHECK: it eq                     @ encoding: [0x08,0xbf]65    ADDSEQ   r2, r2, r1          // T366// CHECK: addseq.w r2, r2, r1       @ encoding: [0x12,0xeb,0x01,0x02]67 68    ADD      r3, r3, r1          // T269// CHECK: add  r3, r1               @ encoding: [0x0b,0x44]70    ADD      r4, r4, pc          // T271// CHECK: add  r4, pc               @ encoding: [0x7c,0x44]72    ADD      r4, pc, r4          // T273// CHECK: add  r4, pc               @ encoding: [0x7c,0x44]74    ADD      pc, pc, r2          // T275// CHECK: add  pc, r2               @ encoding: [0x97,0x44]76    ADD      pc, r2, pc          // T277// CHECK: add  pc, r2               @ encoding: [0x97,0x44]78    ADD      pc, pc, sp          // T279// CHECK: add   pc, sp              @ encoding: [0xef,0x44]80    ADD      pc, sp, pc          // T281// CHECK: add   pc, sp, pc          @ encoding: [0xef,0x44]82 83// ADD (SP plus immediate) A8.8.984    ADD      sp, sp, #20         // T285// FIXME: ARMARM says 'add   sp, sp, #20'86// CHECK: add   sp, #20             @ encoding: [0x05,0xb0]87    ADD      sp, sp, #508        // T288// CHECK: add   sp, #508            @ encoding: [0x7f,0xb0]89    ADD      sp, sp, #512        // T390// CHECK: add.w sp, sp, #512        @ encoding: [0x0d,0xf5,0x00,0x7d]91 92// ADD (SP plus register) A8.8.10 (commutative)93    ADD      r9, sp, r9          // T194// CHECK: add   r9, sp, r9          @ encoding: [0xe9,0x44]95    ADD      r9, r9, sp          // T196// FIXME: ARMARM says 'add   r9, sp, r9'97// CHECK: add   r9, sp              @ encoding: [0xe9,0x44]98    ADD      sp, sp, r10         // T299// CHECK: add   sp, r10             @ encoding: [0xd5,0x44]100    ADD      sp, r10, sp         // T2101// CHECK: add   sp, r10             @ encoding: [0xd5,0x44]102    ADD      sp, sp, pc          // T2103// CHECK: add   sp, pc              @ encoding: [0xfd,0x44]104 105// AND (commutative)106    ANDS     r0, r2, r1          // Must be wide - 3 distinct registers107    ANDS     r2, r2, r1          // Should choose narrow108    ANDS     r2, r1, r2          // Should choose narrow - commutative109    ANDS.W   r0, r0, r1          // Explicitly wide110    ANDS.W   r3, r1, r3  111    AND      r0, r1, r0          // Must use wide encoding as not flag-setting112    ANDS     r7, r7, r1          // Should use narrow113    ANDS     r7, r1, r7          // Commutative114    ANDS     r8, r1, r8          // high registers so must use wide encoding115    ANDS     r8, r8, r1116    ANDS     r0, r8, r0117    ANDS     r1, r1, r8118    ANDS     r2, r2, r1, lsl #1  // Must use wide - shifted register119    ANDS     r0, r1, r0, lsr #1120// CHECK: ands.w  r0, r2, r1              @ encoding: [0x12,0xea,0x01,0x00]121// CHECK: ands    r2, r1                  @ encoding: [0x0a,0x40]122// CHECK: ands    r2, r1                  @ encoding: [0x0a,0x40]123// CHECK: ands.w  r0, r0, r1              @ encoding: [0x10,0xea,0x01,0x00]124// CHECK: ands.w  r3, r1, r3              @ encoding: [0x11,0xea,0x03,0x03]125// CHECK: and.w   r0, r1, r0              @ encoding: [0x01,0xea,0x00,0x00]126// CHECK: ands    r7, r1                  @ encoding: [0x0f,0x40]127// CHECK: ands    r7, r1                  @ encoding: [0x0f,0x40]128// CHECK: ands.w  r8, r1, r8              @ encoding: [0x11,0xea,0x08,0x08]129// CHECK: ands.w  r8, r8, r1              @ encoding: [0x18,0xea,0x01,0x08]130// CHECK: ands.w  r0, r8, r0              @ encoding: [0x18,0xea,0x00,0x00]131// CHECK: ands.w  r1, r1, r8              @ encoding: [0x11,0xea,0x08,0x01]132// CHECK: ands.w  r2, r2, r1, lsl #1      @ encoding: [0x12,0xea,0x41,0x02]133// CHECK: ands.w  r0, r1, r0, lsr #1      @ encoding: [0x11,0xea,0x50,0x00]134 135    IT EQ136    ANDEQ    r0, r2, r1          // Must be wide - 3 distinct registers137    IT EQ138    ANDEQ    r3, r3, r1          // Should choose narrow139    IT EQ140    ANDEQ    r3, r1, r3          // Should choose narrow - commutative141    IT EQ142    ANDEQ.W  r0, r0, r1          // Explicitly wide143    IT EQ144    ANDEQ.W  r2, r1, r2  145    IT EQ146    ANDSEQ   r0, r1, r0          // Must use wide encoding as flag-setting147    IT EQ148    ANDEQ    r7, r7, r1          // Should use narrow149    IT EQ150    ANDEQ    r7, r1, r7          // Commutative151    IT EQ152    ANDEQ    r8, r1, r8          // high registers so must use wide encoding153    IT EQ154    ANDEQ    r8, r8, r1155    IT EQ156    ANDEQ    r4, r8, r4157    IT EQ158    ANDEQ    r4, r4, r8159    IT EQ160    ANDEQ    r0, r0, r1, lsl #1  // Must use wide - shifted register161    IT EQ162    ANDEQ    r5, r1, r5, lsr #1163// CHECK: it eq                           @ encoding: [0x08,0xbf]164// CHECK: andeq.w  r0, r2, r1             @ encoding: [0x02,0xea,0x01,0x00]165// CHECK: it eq                           @ encoding: [0x08,0xbf]166// CHECK: andeq    r3, r1                 @ encoding: [0x0b,0x40]167// CHECK: it eq                           @ encoding: [0x08,0xbf]168// CHECK: andeq    r3, r1                 @ encoding: [0x0b,0x40]169// CHECK: it eq                           @ encoding: [0x08,0xbf]170// CHECK: andeq.w  r0, r0, r1             @ encoding: [0x00,0xea,0x01,0x00]171// CHECK: it eq                           @ encoding: [0x08,0xbf]172// CHECK: andeq.w  r2, r1, r2             @ encoding: [0x01,0xea,0x02,0x02]173// CHECK: it eq                           @ encoding: [0x08,0xbf]174// CHECK: andseq.w r0, r1, r0             @ encoding: [0x11,0xea,0x00,0x00]175// CHECK: it eq                           @ encoding: [0x08,0xbf]176// CHECK: andeq    r7, r1                 @ encoding: [0x0f,0x40]177// CHECK: it eq                           @ encoding: [0x08,0xbf]178// CHECK: andeq    r7, r1                 @ encoding: [0x0f,0x40]179// CHECK: it eq                           @ encoding: [0x08,0xbf]180// CHECK: andeq.w  r8, r1, r8             @ encoding: [0x01,0xea,0x08,0x08]181// CHECK: it eq                           @ encoding: [0x08,0xbf]182// CHECK: andeq.w  r8, r8, r1             @ encoding: [0x08,0xea,0x01,0x08]183// CHECK: it eq                           @ encoding: [0x08,0xbf]184// CHECK: andeq.w  r4, r8, r4             @ encoding: [0x08,0xea,0x04,0x04]185// CHECK: it eq                           @ encoding: [0x08,0xbf]186// CHECK: andeq.w  r4, r4, r8             @ encoding: [0x04,0xea,0x08,0x04]187// CHECK: it eq                           @ encoding: [0x08,0xbf]188// CHECK: andeq.w  r0, r0, r1, lsl #1     @ encoding: [0x00,0xea,0x41,0x00]189// CHECK: it eq                           @ encoding: [0x08,0xbf]190// CHECK: andeq.w  r5, r1, r5, lsr #1     @ encoding: [0x01,0xea,0x55,0x05]191 192// EOR (commutative)193    EORS     r0, r2, r1          // Must be wide - 3 distinct registers194    EORS     r5, r5, r1          // Should choose narrow195    EORS     r5, r1, r5          // Should choose narrow - commutative196    EORS.W   r0, r0, r1          // Explicitly wide197    EORS.W   r2, r1, r2  198    EOR      r1, r1, r1          // Must use wide encoding as not flag-setting199    EORS     r7, r7, r1          // Should use narrow200    EORS     r7, r1, r7          // Commutative201    EORS     r8, r1, r8          // high registers so must use wide encoding202    EORS     r8, r8, r1203    EORS     r6, r8, r6204    EORS     r0, r0, r8205    EORS     r2, r2, r1, lsl #1  // Must use wide - shifted register206    EORS     r0, r1, r0, lsr #1207// CHECK: eors.w  r0, r2, r1              @ encoding: [0x92,0xea,0x01,0x00]208// CHECK: eors    r5, r1                  @ encoding: [0x4d,0x40]209// CHECK: eors    r5, r1                  @ encoding: [0x4d,0x40]210// CHECK: eors.w  r0, r0, r1              @ encoding: [0x90,0xea,0x01,0x00]211// CHECK: eors.w  r2, r1, r2              @ encoding: [0x91,0xea,0x02,0x02]212// CHECK: eor.w   r1, r1, r1              @ encoding: [0x81,0xea,0x01,0x01]213// CHECK: eors    r7, r1                  @ encoding: [0x4f,0x40]214// CHECK: eors    r7, r1                  @ encoding: [0x4f,0x40]215// CHECK: eors.w  r8, r1, r8              @ encoding: [0x91,0xea,0x08,0x08]216// CHECK: eors.w  r8, r8, r1              @ encoding: [0x98,0xea,0x01,0x08]217// CHECK: eors.w  r6, r8, r6              @ encoding: [0x98,0xea,0x06,0x06]218// CHECK: eors.w  r0, r0, r8              @ encoding: [0x90,0xea,0x08,0x00]219// CHECK: eors.w  r2, r2, r1, lsl #1      @ encoding: [0x92,0xea,0x41,0x02]220// CHECK: eors.w  r0, r1, r0, lsr #1      @ encoding: [0x91,0xea,0x50,0x00]221 222    IT EQ223    EOREQ    r3, r2, r1          // Must be wide - 3 distinct registers224    IT EQ225    EOREQ    r0, r0, r1          // Should choose narrow226    IT EQ227    EOREQ    r2, r1, r2          // Should choose narrow - commutative228    IT EQ229    EOREQ.W  r3, r3, r1          // Explicitly wide230    IT EQ231    EOREQ.W  r0, r1, r0  232    IT EQ233    EORSEQ   r1, r1, r1          // Must use wide encoding as flag-setting234    IT EQ235    EOREQ    r7, r7, r1          // Should use narrow236    IT EQ237    EOREQ    r7, r1, r7          // Commutative238    IT EQ239    EOREQ    r8, r1, r8          // high registers so must use wide encoding240    IT EQ241    EOREQ    r8, r8, r1242    IT EQ243    EOREQ    r0, r8, r0244    IT EQ245    EOREQ    r3, r3, r8246    IT EQ247    EOREQ    r4, r4, r1, lsl #1  // Must use wide - shifted register248    IT EQ249    EOREQ    r0, r1, r0, lsr #1250// CHECK: it eq                           @ encoding: [0x08,0xbf]251// CHECK: eoreq.w  r3, r2, r1             @ encoding: [0x82,0xea,0x01,0x03]252// CHECK: it eq                           @ encoding: [0x08,0xbf]253// CHECK: eoreq    r0, r1                 @ encoding: [0x48,0x40]254// CHECK: it eq                           @ encoding: [0x08,0xbf]255// CHECK: eoreq    r2, r1                 @ encoding: [0x4a,0x40]256// CHECK: it eq                           @ encoding: [0x08,0xbf]257// CHECK: eoreq.w  r3, r3, r1             @ encoding: [0x83,0xea,0x01,0x03]258// CHECK: it eq                           @ encoding: [0x08,0xbf]259// CHECK: eoreq.w  r0, r1, r0             @ encoding: [0x81,0xea,0x00,0x00]260// CHECK: it eq                           @ encoding: [0x08,0xbf]261// CHECK: eorseq.w r1, r1, r1             @ encoding: [0x91,0xea,0x01,0x01]262// CHECK: it eq                           @ encoding: [0x08,0xbf]263// CHECK: eoreq    r7, r1                 @ encoding: [0x4f,0x40]264// CHECK: it eq                           @ encoding: [0x08,0xbf]265// CHECK: eoreq    r7, r1                 @ encoding: [0x4f,0x40]266// CHECK: it eq                           @ encoding: [0x08,0xbf]267// CHECK: eoreq.w  r8, r1, r8             @ encoding: [0x81,0xea,0x08,0x08]268// CHECK: it eq                           @ encoding: [0x08,0xbf]269// CHECK: eoreq.w  r8, r8, r1             @ encoding: [0x88,0xea,0x01,0x08]270// CHECK: it eq                           @ encoding: [0x08,0xbf]271// CHECK: eoreq.w  r0, r8, r0             @ encoding: [0x88,0xea,0x00,0x00]272// CHECK: it eq                           @ encoding: [0x08,0xbf]273// CHECK: eoreq.w  r3, r3, r8             @ encoding: [0x83,0xea,0x08,0x03]274// CHECK: it eq                           @ encoding: [0x08,0xbf]275// CHECK: eoreq.w  r4, r4, r1, lsl #1     @ encoding: [0x84,0xea,0x41,0x04]276// CHECK: it eq                           @ encoding: [0x08,0xbf]277// CHECK: eoreq.w  r0, r1, r0, lsr #1     @ encoding: [0x81,0xea,0x50,0x00]278 279// LSL 280    LSLS     r0, r2, r1          // Must be wide - 3 distinct registers281    LSLS     r2, r2, r1          // Should choose narrow282    LSLS     r2, r1, r2          // Should choose wide - not commutative283    LSLS.W   r0, r0, r1          // Explicitly wide284    LSLS.W   r4, r1, r4  285    LSL      r4, r1, r4          // Must use wide encoding as not flag-setting286    LSLS     r7, r7, r1          // Should use narrow287    LSLS     r8, r1, r8          // high registers so must use wide encoding288    LSLS     r8, r8, r1289    LSLS     r3, r8, r3290    LSLS     r5, r5, r8291// CHECK: lsls.w  r0, r2, r1              @ encoding: [0x12,0xfa,0x01,0xf0]292// CHECK: lsls    r2, r1                  @ encoding: [0x8a,0x40]293// CHECK: lsls.w  r2, r1, r2              @ encoding: [0x11,0xfa,0x02,0xf2]294// CHECK: lsls.w  r0, r0, r1              @ encoding: [0x10,0xfa,0x01,0xf0]295// CHECK: lsls.w  r4, r1, r4              @ encoding: [0x11,0xfa,0x04,0xf4]296// CHECK: lsl.w   r4, r1, r4              @ encoding: [0x01,0xfa,0x04,0xf4]297// CHECK: lsls    r7, r1                  @ encoding: [0x8f,0x40]298// CHECK: lsls.w  r8, r1, r8              @ encoding: [0x11,0xfa,0x08,0xf8]299// CHECK: lsls.w  r8, r8, r1              @ encoding: [0x18,0xfa,0x01,0xf8]300// CHECK: lsls.w  r3, r8, r3              @ encoding: [0x18,0xfa,0x03,0xf3]301// CHECK: lsls.w  r5, r5, r8              @ encoding: [0x15,0xfa,0x08,0xf5]302 303    IT EQ304    LSLEQ    r0, r2, r1          // Must be wide - 3 distinct registers305    IT EQ306    LSLEQ    r2, r2, r1          // Should choose narrow307    IT EQ308    LSLEQ    r2, r1, r2          // Should choose wide - not commutative309    IT EQ310    LSLEQ.W  r0, r0, r1          // Explicitly wide311    IT EQ312    LSLEQ.W  r3, r1, r3  313    IT EQ314    LSLSEQ   r4, r1, r4          // Must use wide encoding as flag-setting315    IT EQ316    LSLEQ    r7, r7, r1          // Should use narrow317    IT EQ318    LSLEQ    r8, r1, r8          // high registers so must use wide encoding319    IT EQ320    LSLEQ    r8, r8, r1321    IT EQ322    LSLEQ    r0, r8, r0323    IT EQ324    LSLEQ    r3, r3, r8325// CHECK: it eq                           @ encoding: [0x08,0xbf]326// CHECK: lsleq.w  r0, r2, r1             @ encoding: [0x02,0xfa,0x01,0xf0]327// CHECK: it eq                           @ encoding: [0x08,0xbf]328// CHECK: lsleq    r2, r1                 @ encoding: [0x8a,0x40]329// CHECK: it eq                           @ encoding: [0x08,0xbf]330// CHECK: lsleq.w  r2, r1, r2             @ encoding: [0x01,0xfa,0x02,0xf2]331// CHECK: it eq                           @ encoding: [0x08,0xbf]332// CHECK: lsleq.w  r0, r0, r1             @ encoding: [0x00,0xfa,0x01,0xf0]333// CHECK: it eq                           @ encoding: [0x08,0xbf]334// CHECK: lsleq.w  r3, r1, r3             @ encoding: [0x01,0xfa,0x03,0xf3]335// CHECK: it eq                           @ encoding: [0x08,0xbf]336// CHECK: lslseq.w r4, r1, r4             @ encoding: [0x11,0xfa,0x04,0xf4]337// CHECK: it eq                           @ encoding: [0x08,0xbf]338// CHECK: lsleq    r7, r1                 @ encoding: [0x8f,0x40]339// CHECK: it eq                           @ encoding: [0x08,0xbf]340// CHECK: lsleq.w  r8, r1, r8             @ encoding: [0x01,0xfa,0x08,0xf8]341// CHECK: it eq                           @ encoding: [0x08,0xbf]342// CHECK: lsleq.w  r8, r8, r1             @ encoding: [0x08,0xfa,0x01,0xf8]343// CHECK: it eq                           @ encoding: [0x08,0xbf]344// CHECK: lsleq.w  r0, r8, r0             @ encoding: [0x08,0xfa,0x00,0xf0]345// CHECK: it eq                           @ encoding: [0x08,0xbf]346// CHECK: lsleq.w  r3, r3, r8             @ encoding: [0x03,0xfa,0x08,0xf3]347 348// LSR 349    LSRS     r6, r2, r1          // Must be wide - 3 distinct registers350    LSRS     r2, r2, r1          // Should choose narrow351    LSRS     r2, r1, r2          // Should choose wide - not commutative352    LSRS.W   r2, r2, r1          // Explicitly wide353    LSRS.W   r3, r1, r3  354    LSR      r4, r1, r4          // Must use wide encoding as not flag-setting355    LSRS     r7, r7, r1          // Should use narrow356    LSRS     r8, r1, r8          // high registers so must use wide encoding357    LSRS     r8, r8, r1358    LSRS     r2, r8, r2359    LSRS     r5, r5, r8360// CHECK: lsrs.w  r6, r2, r1              @ encoding: [0x32,0xfa,0x01,0xf6]361// CHECK: lsrs    r2, r1                  @ encoding: [0xca,0x40]362// CHECK: lsrs.w  r2, r1, r2              @ encoding: [0x31,0xfa,0x02,0xf2]363// CHECK: lsrs.w  r2, r2, r1              @ encoding: [0x32,0xfa,0x01,0xf2]364// CHECK: lsrs.w  r3, r1, r3              @ encoding: [0x31,0xfa,0x03,0xf3]365// CHECK: lsr.w   r4, r1, r4              @ encoding: [0x21,0xfa,0x04,0xf4]366// CHECK: lsrs    r7, r1                  @ encoding: [0xcf,0x40]367// CHECK: lsrs.w  r8, r1, r8              @ encoding: [0x31,0xfa,0x08,0xf8]368// CHECK: lsrs.w  r8, r8, r1              @ encoding: [0x38,0xfa,0x01,0xf8]369// CHECK: lsrs.w  r2, r8, r2              @ encoding: [0x38,0xfa,0x02,0xf2]370// CHECK: lsrs.w  r5, r5, r8              @ encoding: [0x35,0xfa,0x08,0xf5]371 372    IT EQ373    LSREQ    r6, r2, r1          // Must be wide - 3 distinct registers374    IT EQ375    LSREQ    r7, r7, r1          // Should choose narrow376    IT EQ377    LSREQ    r7, r1, r7          // Should choose wide - not commutative378    IT EQ379    LSREQ.W  r7, r7, r1          // Explicitly wide380    IT EQ381    LSREQ.W  r2, r1, r2  382    IT EQ383    LSRSEQ   r0, r1, r0          // Must use wide encoding as flag-setting384    IT EQ385    LSREQ    r7, r7, r1          // Should use narrow386    IT EQ387    LSREQ    r8, r1, r8          // high registers so must use wide encoding388    IT EQ389    LSREQ    r8, r8, r1390    IT EQ391    LSREQ    r1, r8, r1392    IT EQ393    LSREQ    r4, r4, r8394// CHECK: it eq                           @ encoding: [0x08,0xbf]395// CHECK: lsreq.w  r6, r2, r1             @ encoding: [0x22,0xfa,0x01,0xf6]396// CHECK: it eq                           @ encoding: [0x08,0xbf]397// CHECK: lsreq    r7, r1                 @ encoding: [0xcf,0x40]398// CHECK: it eq                           @ encoding: [0x08,0xbf]399// CHECK: lsreq.w  r7, r1, r7             @ encoding: [0x21,0xfa,0x07,0xf7]400// CHECK: it eq                           @ encoding: [0x08,0xbf]401// CHECK: lsreq.w  r7, r7, r1             @ encoding: [0x27,0xfa,0x01,0xf7]402// CHECK: it eq                           @ encoding: [0x08,0xbf]403// CHECK: lsreq.w  r2, r1, r2             @ encoding: [0x21,0xfa,0x02,0xf2]404// CHECK: it eq                           @ encoding: [0x08,0xbf]405// CHECK: lsrseq.w r0, r1, r0             @ encoding: [0x31,0xfa,0x00,0xf0]406// CHECK: it eq                           @ encoding: [0x08,0xbf]407// CHECK: lsreq    r7, r1                 @ encoding: [0xcf,0x40]408// CHECK: it eq                           @ encoding: [0x08,0xbf]409// CHECK: lsreq.w  r8, r1, r8             @ encoding: [0x21,0xfa,0x08,0xf8]410// CHECK: it eq                           @ encoding: [0x08,0xbf]411// CHECK: lsreq.w  r8, r8, r1             @ encoding: [0x28,0xfa,0x01,0xf8]412// CHECK: it eq                           @ encoding: [0x08,0xbf]413// CHECK: lsreq.w  r1, r8, r1             @ encoding: [0x28,0xfa,0x01,0xf1]414// CHECK: it eq                           @ encoding: [0x08,0xbf]415// CHECK: lsreq.w  r4, r4, r8             @ encoding: [0x24,0xfa,0x08,0xf4]416 417// ASR 418    ASRS     r7, r6, r5          // Must be wide - 3 distinct registers419    ASRS     r0, r0, r1          // Should choose narrow420    ASRS     r0, r1, r0          // Should choose wide - not commutative421    ASRS.W   r3, r3, r1          // Explicitly wide422    ASRS.W   r1, r1, r1  423    ASR      r0, r1, r0          // Must use wide encoding as not flag-setting424    ASRS     r7, r7, r1          // Should use narrow425    ASRS     r8, r1, r8          // high registers so must use wide encoding426    ASRS     r8, r8, r1427    ASRS     r5, r8, r5428    ASRS     r5, r5, r8429// CHECK: asrs.w  r7, r6, r5              @ encoding: [0x56,0xfa,0x05,0xf7]430// CHECK: asrs    r0, r1                  @ encoding: [0x08,0x41]431// CHECK: asrs.w  r0, r1, r0              @ encoding: [0x51,0xfa,0x00,0xf0]432// CHECK: asrs.w  r3, r3, r1              @ encoding: [0x53,0xfa,0x01,0xf3]433// CHECK: asrs.w  r1, r1, r1              @ encoding: [0x51,0xfa,0x01,0xf1]434// CHECK: asr.w   r0, r1, r0              @ encoding: [0x41,0xfa,0x00,0xf0]435// CHECK: asrs    r7, r1                  @ encoding: [0x0f,0x41]436// CHECK: asrs.w  r8, r1, r8              @ encoding: [0x51,0xfa,0x08,0xf8]437// CHECK: asrs.w  r8, r8, r1              @ encoding: [0x58,0xfa,0x01,0xf8]438// CHECK: asrs.w  r5, r8, r5              @ encoding: [0x58,0xfa,0x05,0xf5]439// CHECK: asrs.w  r5, r5, r8              @ encoding: [0x55,0xfa,0x08,0xf5]440 441    IT EQ442    ASREQ    r0, r2, r1          // Must be wide - 3 distinct registers443    IT EQ444    ASREQ    r2, r2, r1          // Should choose narrow445    IT EQ446    ASREQ    r1, r2, r1          // Should choose wide - not commutative447    IT EQ448    ASREQ.W  r4, r4, r1          // Explicitly wide449    IT EQ450    ASREQ.W  r6, r1, r6  451    IT EQ452    ASRSEQ   r3, r1, r3          // Must use wide encoding as flag-setting453    IT EQ454    ASREQ    r7, r7, r1          // Should use narrow455    IT EQ456    ASREQ    r8, r1, r8          // high registers so must use wide encoding457    IT EQ458    ASREQ    r8, r8, r1459    IT EQ460    ASREQ    r1, r8, r1461    IT EQ462    ASREQ    r3, r3, r8463// CHECK: it eq                           @ encoding: [0x08,0xbf]464// CHECK: asreq.w  r0, r2, r1             @ encoding: [0x42,0xfa,0x01,0xf0]465// CHECK: it eq                           @ encoding: [0x08,0xbf]466// CHECK: asreq    r2, r1                 @ encoding: [0x0a,0x41]467// CHECK: it eq                           @ encoding: [0x08,0xbf]468// CHECK: asreq.w  r1, r2, r1             @ encoding: [0x42,0xfa,0x01,0xf1]469// CHECK: it eq                           @ encoding: [0x08,0xbf]470// CHECK: asreq.w  r4, r4, r1             @ encoding: [0x44,0xfa,0x01,0xf4]471// CHECK: it eq                           @ encoding: [0x08,0xbf]472// CHECK: asreq.w  r6, r1, r6             @ encoding: [0x41,0xfa,0x06,0xf6]473// CHECK: it eq                           @ encoding: [0x08,0xbf]474// CHECK: asrseq.w r3, r1, r3             @ encoding: [0x51,0xfa,0x03,0xf3]475// CHECK: it eq                           @ encoding: [0x08,0xbf]476// CHECK: asreq    r7, r1                 @ encoding: [0x0f,0x41]477// CHECK: it eq                           @ encoding: [0x08,0xbf]478// CHECK: asreq.w  r8, r1, r8             @ encoding: [0x41,0xfa,0x08,0xf8]479// CHECK: it eq                           @ encoding: [0x08,0xbf]480// CHECK: asreq.w  r8, r8, r1             @ encoding: [0x48,0xfa,0x01,0xf8]481// CHECK: it eq                           @ encoding: [0x08,0xbf]482// CHECK: asreq.w  r1, r8, r1             @ encoding: [0x48,0xfa,0x01,0xf1]483// CHECK: it eq                           @ encoding: [0x08,0xbf]484// CHECK: asreq.w  r3, r3, r8             @ encoding: [0x43,0xfa,0x08,0xf3]485 486// ADC (commutative)487    ADCS     r5, r2, r1          // Must be wide - 3 distinct registers488    ADCS     r5, r5, r1          // Should choose narrow  489    ADCS     r3, r1, r3          // Should choose narrow - commutative490    ADCS.W   r2, r2, r1          // Explicitly wide491    ADCS.W   r3, r1, r3  492    ADC      r0, r1, r0          // Must use wide encoding as not flag-setting493    ADCS     r7, r7, r1          // Should use narrow494    ADCS     r7, r1, r7          // Commutative495    ADCS     r8, r1, r8          // high registers so must use wide encoding496    ADCS     r8, r8, r1497    ADCS     r5, r8, r5498    ADCS     r2, r2, r8499    ADCS     r3, r3, r1, lsl #1  // Must use wide - shifted register500    ADCS     r4, r1, r4, lsr #1501// CHECK: adcs.w  r5, r2, r1              @ encoding: [0x52,0xeb,0x01,0x05]502// CHECK: adcs    r5, r1                  @ encoding: [0x4d,0x41]503// CHECK: adcs    r3, r1                  @ encoding: [0x4b,0x41]504// CHECK: adcs.w  r2, r2, r1              @ encoding: [0x52,0xeb,0x01,0x02]505// CHECK: adcs.w  r3, r1, r3              @ encoding: [0x51,0xeb,0x03,0x03]506// CHECK: adc.w   r0, r1, r0              @ encoding: [0x41,0xeb,0x00,0x00]507// CHECK: adcs    r7, r1                  @ encoding: [0x4f,0x41]508// CHECK: adcs    r7, r1                  @ encoding: [0x4f,0x41]509// CHECK: adcs.w  r8, r1, r8              @ encoding: [0x51,0xeb,0x08,0x08]510// CHECK: adcs.w  r8, r8, r1              @ encoding: [0x58,0xeb,0x01,0x08]511// CHECK: adcs.w  r5, r8, r5              @ encoding: [0x58,0xeb,0x05,0x05]512// CHECK: adcs.w  r2, r2, r8              @ encoding: [0x52,0xeb,0x08,0x02]513// CHECK: adcs.w  r3, r3, r1, lsl #1      @ encoding: [0x53,0xeb,0x41,0x03]514// CHECK: adcs.w  r4, r1, r4, lsr #1      @ encoding: [0x51,0xeb,0x54,0x04]515 516    IT EQ517    ADCEQ    r1, r2, r3          // Must be wide - 3 distinct registers518    IT EQ519    ADCEQ    r1, r1, r1          // Should choose narrow520    IT EQ521    ADCEQ    r3, r1, r3          // Should choose narrow - commutative522    IT EQ523    ADCEQ.W  r3, r3, r1          // Explicitly wide524    IT EQ525    ADCEQ.W  r0, r1, r0  526    IT EQ527    ADCSEQ   r3, r1, r3          // Must use wide encoding as flag-setting528    IT EQ529    ADCEQ    r7, r7, r1          // Should use narrow 530    IT EQ531    ADCEQ    r7, r1, r7          // Commutative532    IT EQ533    ADCEQ    r8, r1, r8          // high registers so must use wide encoding534    IT EQ535    ADCEQ    r8, r8, r1536    IT EQ537    ADCEQ    r3, r8, r3538    IT EQ539    ADCEQ    r1, r1, r8540    IT EQ541    ADCEQ    r2, r2, r1, lsl #1  // Must use wide - shifted register542    IT EQ543    ADCEQ    r1, r1, r1, lsr #1544// CHECK: it eq                           @ encoding: [0x08,0xbf]545// CHECK: adceq.w  r1, r2, r3             @ encoding: [0x42,0xeb,0x03,0x01]546// CHECK: it eq                           @ encoding: [0x08,0xbf]547// CHECK: adceq    r1, r1                 @ encoding: [0x49,0x41]548// CHECK: it eq                           @ encoding: [0x08,0xbf]549// CHECK: adceq    r3, r1                 @ encoding: [0x4b,0x41]550// CHECK: it eq                           @ encoding: [0x08,0xbf]551// CHECK: adceq.w  r3, r3, r1             @ encoding: [0x43,0xeb,0x01,0x03]552// CHECK: it eq                           @ encoding: [0x08,0xbf]553// CHECK: adceq.w  r0, r1, r0             @ encoding: [0x41,0xeb,0x00,0x00]554// CHECK: it eq                           @ encoding: [0x08,0xbf]555// CHECK: adcseq.w r3, r1, r3             @ encoding: [0x51,0xeb,0x03,0x03]556// CHECK: it eq                           @ encoding: [0x08,0xbf]557// CHECK: adceq    r7, r1                 @ encoding: [0x4f,0x41]558// CHECK: it eq                           @ encoding: [0x08,0xbf]559// CHECK: adceq    r7, r1                 @ encoding: [0x4f,0x41]560// CHECK: it eq                           @ encoding: [0x08,0xbf]561// CHECK: adceq.w  r8, r1, r8             @ encoding: [0x41,0xeb,0x08,0x08]562// CHECK: it eq                           @ encoding: [0x08,0xbf]563// CHECK: adceq.w  r8, r8, r1             @ encoding: [0x48,0xeb,0x01,0x08]564// CHECK: it eq                           @ encoding: [0x08,0xbf]565// CHECK: adceq.w  r3, r8, r3             @ encoding: [0x48,0xeb,0x03,0x03]566// CHECK: it eq                           @ encoding: [0x08,0xbf]567// CHECK: adceq.w  r1, r1, r8             @ encoding: [0x41,0xeb,0x08,0x01]568// CHECK: it eq                           @ encoding: [0x08,0xbf]569// CHECK: adceq.w  r2, r2, r1, lsl #1     @ encoding: [0x42,0xeb,0x41,0x02]570// CHECK: it eq                           @ encoding: [0x08,0xbf]571// CHECK: adceq.w  r1, r1, r1, lsr #1     @ encoding: [0x41,0xeb,0x51,0x01]572 573// SBC 574    SBCS     r3, r2, r1          // Must be wide - 3 distinct registers575    SBCS     r4, r4, r1          // Should choose narrow  576    SBCS     r1, r4, r1          // Should choose wide - not commutative  577    SBCS.W   r4, r4, r1          // Explicitly wide578    SBCS.W   r2, r1, r2  579    SBC      r0, r1, r0          // Must use wide encoding as not flag-setting580    SBCS     r7, r7, r1          // Should use narrow581    SBCS     r8, r1, r8          // high registers so must use wide encoding582    SBCS     r8, r8, r1583    SBCS     r4, r8, r4584    SBCS     r3, r3, r8585    SBCS     r2, r2, r1, lsl #1  // Must use wide - shifted register586    SBCS     r5, r1, r5, lsr #1587// CHECK: sbcs.w  r3, r2, r1              @ encoding: [0x72,0xeb,0x01,0x03]588// CHECK: sbcs    r4, r1                  @ encoding: [0x8c,0x41]589// CHECK: sbcs.w  r1, r4, r1              @ encoding: [0x74,0xeb,0x01,0x01]590// CHECK: sbcs.w  r4, r4, r1              @ encoding: [0x74,0xeb,0x01,0x04]591// CHECK: sbcs.w  r2, r1, r2              @ encoding: [0x71,0xeb,0x02,0x02]592// CHECK: sbc.w   r0, r1, r0              @ encoding: [0x61,0xeb,0x00,0x00]593// CHECK: sbcs    r7, r1                  @ encoding: [0x8f,0x41]594// CHECK: sbcs.w  r8, r1, r8              @ encoding: [0x71,0xeb,0x08,0x08]595// CHECK: sbcs.w  r8, r8, r1              @ encoding: [0x78,0xeb,0x01,0x08]596// CHECK: sbcs.w  r4, r8, r4              @ encoding: [0x78,0xeb,0x04,0x04]597// CHECK: sbcs.w  r3, r3, r8              @ encoding: [0x73,0xeb,0x08,0x03]598// CHECK: sbcs.w  r2, r2, r1, lsl #1      @ encoding: [0x72,0xeb,0x41,0x02]599// CHECK: sbcs.w  r5, r1, r5, lsr #1      @ encoding: [0x71,0xeb,0x55,0x05]600 601    IT EQ602    SBCEQ    r5, r2, r1          // Must be wide - 3 distinct registers603    IT EQ604    SBCEQ    r5, r5, r1          // Should choose narrow605    IT EQ606    SBCEQ    r1, r5, r1          // Should choose narrow607    IT EQ608    SBCEQ.W  r5, r5, r1          // Explicitly wide609    IT EQ610    SBCEQ.W  r0, r1, r0  611    IT EQ612    SBCSEQ   r2, r1, r2          // Must use wide encoding as flag-setting613    IT EQ614    SBCEQ    r7, r7, r1          // Should use narrow 615    IT EQ616    SBCEQ    r8, r1, r8          // high registers so must use wide encoding617    IT EQ618    SBCEQ    r8, r8, r1619    IT EQ620    SBCEQ    r7, r8, r7621    IT EQ622    SBCEQ    r7, r7, r8623    IT EQ624    SBCEQ    r2, r2, r1, lsl #1  // Must use wide - shifted register625    IT EQ626    SBCEQ    r5, r1, r5, lsr #1627// CHECK: it eq                           @ encoding: [0x08,0xbf]628// CHECK: sbceq.w  r5, r2, r1             @ encoding: [0x62,0xeb,0x01,0x05]629// CHECK: it eq                           @ encoding: [0x08,0xbf]630// CHECK: sbceq    r5, r1                 @ encoding: [0x8d,0x41]631// CHECK: it eq                           @ encoding: [0x08,0xbf]632// CHECK: sbceq.w  r1, r5, r1             @ encoding: [0x65,0xeb,0x01,0x01]633// CHECK: it eq                           @ encoding: [0x08,0xbf]634// CHECK: sbceq.w  r5, r5, r1             @ encoding: [0x65,0xeb,0x01,0x05]635// CHECK: it eq                           @ encoding: [0x08,0xbf]636// CHECK: sbceq.w  r0, r1, r0             @ encoding: [0x61,0xeb,0x00,0x00]637// CHECK: it eq                           @ encoding: [0x08,0xbf]638// CHECK: sbcseq.w r2, r1, r2             @ encoding: [0x71,0xeb,0x02,0x02]639// CHECK: it eq                           @ encoding: [0x08,0xbf]640// CHECK: sbceq    r7, r1                 @ encoding: [0x8f,0x41]641// CHECK: it eq                           @ encoding: [0x08,0xbf]642// CHECK: sbceq.w  r8, r1, r8             @ encoding: [0x61,0xeb,0x08,0x08]643// CHECK: it eq                           @ encoding: [0x08,0xbf]644// CHECK: sbceq.w  r8, r8, r1             @ encoding: [0x68,0xeb,0x01,0x08]645// CHECK: it eq                           @ encoding: [0x08,0xbf]646// CHECK: sbceq.w  r7, r8, r7             @ encoding: [0x68,0xeb,0x07,0x07]647// CHECK: it eq                           @ encoding: [0x08,0xbf]648// CHECK: sbceq.w  r7, r7, r8             @ encoding: [0x67,0xeb,0x08,0x07]649// CHECK: it eq                           @ encoding: [0x08,0xbf]650// CHECK: sbceq.w  r2, r2, r1, lsl #1     @ encoding: [0x62,0xeb,0x41,0x02]651// CHECK: it eq                           @ encoding: [0x08,0xbf]652// CHECK: sbceq.w  r5, r1, r5, lsr #1     @ encoding: [0x61,0xeb,0x55,0x05]653 654// ROR 655    RORS     r3, r2, r1          // Must be wide - 3 distinct registers656    RORS     r0, r0, r1          // Should choose narrow657    RORS     r1, r0, r1          // Should choose wide - not commutative658    RORS.W   r2, r2, r1          // Explicitly wide659    RORS.W   r2, r1, r2  660    ROR      r5, r1, r5          // Must use wide encoding as not flag-setting661    RORS     r7, r7, r1          // Should use narrow662    RORS     r8, r1, r8          // high registers so must use wide encoding663    RORS     r8, r8, r1664    RORS     r6, r8, r6665    RORS     r6, r6, r8666// CHECK: rors.w  r3, r2, r1              @ encoding: [0x72,0xfa,0x01,0xf3]667// CHECK: rors    r0, r1                  @ encoding: [0xc8,0x41]668// CHECK: rors.w  r1, r0, r1              @ encoding: [0x70,0xfa,0x01,0xf1]669// CHECK: rors.w  r2, r2, r1              @ encoding: [0x72,0xfa,0x01,0xf2]670// CHECK: rors.w  r2, r1, r2              @ encoding: [0x71,0xfa,0x02,0xf2]671// CHECK: ror.w   r5, r1, r5              @ encoding: [0x61,0xfa,0x05,0xf5]672// CHECK: rors    r7, r1                  @ encoding: [0xcf,0x41]673// CHECK: rors.w  r8, r1, r8              @ encoding: [0x71,0xfa,0x08,0xf8]674// CHECK: rors.w  r8, r8, r1              @ encoding: [0x78,0xfa,0x01,0xf8]675// CHECK: rors.w  r6, r8, r6              @ encoding: [0x78,0xfa,0x06,0xf6]676// CHECK: rors.w  r6, r6, r8              @ encoding: [0x76,0xfa,0x08,0xf6]677 678    IT EQ679    ROREQ    r4, r2, r1          // Must be wide - 3 distinct registers680    IT EQ681    ROREQ    r4, r4, r1          // Should choose narrow682    IT EQ683    ROREQ    r1, r4, r1          // Should choose wide - not commutative684    IT EQ685    ROREQ.W  r4, r4, r1          // Explicitly wide686    IT EQ687    ROREQ.W  r0, r1, r0  688    IT EQ689    RORSEQ   r0, r1, r0          // Must use wide encoding as flag-setting690    IT EQ691    ROREQ    r7, r7, r1          // Should use narrow692    IT EQ693    ROREQ    r8, r1, r8          // high registers so must use wide encoding694    IT EQ695    ROREQ    r8, r8, r1696    IT EQ697    ROREQ    r3, r8, r3698    IT EQ699    ROREQ    r1, r1, r8700// CHECK: it eq                           @ encoding: [0x08,0xbf]701// CHECK: roreq.w  r4, r2, r1             @ encoding: [0x62,0xfa,0x01,0xf4]702// CHECK: it eq                           @ encoding: [0x08,0xbf]703// CHECK: roreq    r4, r1                 @ encoding: [0xcc,0x41]704// CHECK: it eq                           @ encoding: [0x08,0xbf]705// CHECK: roreq.w  r1, r4, r1             @ encoding: [0x64,0xfa,0x01,0xf1]706// CHECK: it eq                           @ encoding: [0x08,0xbf]707// CHECK: roreq.w  r4, r4, r1             @ encoding: [0x64,0xfa,0x01,0xf4]708// CHECK: it eq                           @ encoding: [0x08,0xbf]709// CHECK: roreq.w  r0, r1, r0             @ encoding: [0x61,0xfa,0x00,0xf0]710// CHECK: it eq                           @ encoding: [0x08,0xbf]711// CHECK: rorseq.w r0, r1, r0             @ encoding: [0x71,0xfa,0x00,0xf0]712// CHECK: it eq                           @ encoding: [0x08,0xbf]713// CHECK: roreq    r7, r1                 @ encoding: [0xcf,0x41]714// CHECK: it eq                           @ encoding: [0x08,0xbf]715// CHECK: roreq.w  r8, r1, r8             @ encoding: [0x61,0xfa,0x08,0xf8]716// CHECK: it eq                           @ encoding: [0x08,0xbf]717// CHECK: roreq.w  r8, r8, r1             @ encoding: [0x68,0xfa,0x01,0xf8]718// CHECK: it eq                           @ encoding: [0x08,0xbf]719// CHECK: roreq.w  r3, r8, r3             @ encoding: [0x68,0xfa,0x03,0xf3]720// CHECK: it eq                           @ encoding: [0x08,0xbf]721// CHECK: roreq.w  r1, r1, r8             @ encoding: [0x61,0xfa,0x08,0xf1]722 723// TST - only two register version available724// RSB - only two register version available725// CMP - only two register version available726// CMN - only two register version available727 728// ORR (commutative)729    ORRS     r7, r2, r1          // Must be wide - 3 distinct registers730    ORRS     r2, r2, r1          // Should choose narrow731    ORRS     r3, r1, r3          // Should choose narrow - commutative732    ORRS.W   r4, r4, r1          // Explicitly wide733    ORRS.W   r5, r1, r5  734    ORR      r2, r1, r2          // Must use wide encoding as not flag-setting735    ORRS     r7, r7, r1          // Should use narrow736    ORRS     r7, r1, r7          // Commutative737    ORRS     r8, r1, r8          // high registers so must use wide encoding738    ORRS     r8, r8, r1739    ORRS     r1, r8, r1740    ORRS     r0, r0, r8741    ORRS     r1, r1, r1, lsl #1  // Must use wide - shifted register742    ORRS     r0, r1, r0, lsr #1743// CHECK: orrs.w  r7, r2, r1              @ encoding: [0x52,0xea,0x01,0x07]744// CHECK: orrs    r2, r1                  @ encoding: [0x0a,0x43]745// CHECK: orrs    r3, r1                  @ encoding: [0x0b,0x43]746// CHECK: orrs.w  r4, r4, r1              @ encoding: [0x54,0xea,0x01,0x04]747// CHECK: orrs.w  r5, r1, r5              @ encoding: [0x51,0xea,0x05,0x05]748// CHECK: orr.w   r2, r1, r2              @ encoding: [0x41,0xea,0x02,0x02]749// CHECK: orrs    r7, r1                  @ encoding: [0x0f,0x43]750// CHECK: orrs    r7, r1                  @ encoding: [0x0f,0x43]751// CHECK: orrs.w  r8, r1, r8              @ encoding: [0x51,0xea,0x08,0x08]752// CHECK: orrs.w  r8, r8, r1              @ encoding: [0x58,0xea,0x01,0x08]753// CHECK: orrs.w  r1, r8, r1              @ encoding: [0x58,0xea,0x01,0x01]754// CHECK: orrs.w  r0, r0, r8              @ encoding: [0x50,0xea,0x08,0x00]755// CHECK: orrs.w  r1, r1, r1, lsl #1      @ encoding: [0x51,0xea,0x41,0x01]756// CHECK: orrs.w  r0, r1, r0, lsr #1      @ encoding: [0x51,0xea,0x50,0x00]757 758    IT EQ759    ORREQ    r0, r2, r1          // Must be wide - 3 distinct registers760    IT EQ761    ORREQ    r5, r5, r1          // Should choose narrow762    IT EQ763    ORREQ    r5, r1, r5          // Should choose narrow - commutative764    IT EQ765    ORREQ.W  r2, r2, r1          // Explicitly wide766    IT EQ767    ORREQ.W  r3, r1, r3  768    IT EQ769    ORRSEQ   r4, r1, r4          // Must use wide encoding as flag-setting770    IT EQ771    ORREQ    r7, r7, r1          // Should use narrow772    IT EQ773    ORREQ    r7, r1, r7          // Commutative774    IT EQ775    ORREQ    r8, r1, r8          // high registers so must use wide encoding776    IT EQ777    ORREQ    r8, r8, r1778    IT EQ779    ORREQ    r0, r8, r0780    IT EQ781    ORREQ    r0, r0, r8782    IT EQ783    ORREQ    r2, r2, r1, lsl #1  // Must use wide - shifted register784    IT EQ785    ORREQ    r2, r1, r2, lsr #1786// CHECK: it eq                           @ encoding: [0x08,0xbf]787// CHECK: orreq.w  r0, r2, r1             @ encoding: [0x42,0xea,0x01,0x00]788// CHECK: it eq                           @ encoding: [0x08,0xbf]789// CHECK: orreq    r5, r1                 @ encoding: [0x0d,0x43]790// CHECK: it eq                           @ encoding: [0x08,0xbf]791// CHECK: orreq    r5, r1                 @ encoding: [0x0d,0x43]792// CHECK: it eq                           @ encoding: [0x08,0xbf]793// CHECK: orreq.w  r2, r2, r1             @ encoding: [0x42,0xea,0x01,0x02]794// CHECK: it eq                           @ encoding: [0x08,0xbf]795// CHECK: orreq.w  r3, r1, r3             @ encoding: [0x41,0xea,0x03,0x03]796// CHECK: it eq                           @ encoding: [0x08,0xbf]797// CHECK: orrseq.w r4, r1, r4             @ encoding: [0x51,0xea,0x04,0x04]798// CHECK: it eq                           @ encoding: [0x08,0xbf]799// CHECK: orreq    r7, r1                 @ encoding: [0x0f,0x43]800// CHECK: it eq                           @ encoding: [0x08,0xbf]801// CHECK: orreq    r7, r1                 @ encoding: [0x0f,0x43]802// CHECK: it eq                           @ encoding: [0x08,0xbf]803// CHECK: orreq.w  r8, r1, r8             @ encoding: [0x41,0xea,0x08,0x08]804// CHECK: it eq                           @ encoding: [0x08,0xbf]805// CHECK: orreq.w  r8, r8, r1             @ encoding: [0x48,0xea,0x01,0x08]806// CHECK: it eq                           @ encoding: [0x08,0xbf]807// CHECK: orreq.w  r0, r8, r0             @ encoding: [0x48,0xea,0x00,0x00]808// CHECK: it eq                           @ encoding: [0x08,0xbf]809// CHECK: orreq.w  r0, r0, r8             @ encoding: [0x40,0xea,0x08,0x00]810// CHECK: it eq                           @ encoding: [0x08,0xbf]811// CHECK: orreq.w  r2, r2, r1, lsl #1     @ encoding: [0x42,0xea,0x41,0x02]812// CHECK: it eq                           @ encoding: [0x08,0xbf]813// CHECK: orreq.w  r2, r1, r2, lsr #1     @ encoding: [0x41,0xea,0x52,0x02]814 815// MUL - not affected by this change816 817// BIC 818    BICS     r3, r2, r1          // Must be wide - 3 distinct registers819    BICS     r2, r2, r1          // Should choose narrow  820    BICS     r1, r2, r1          // Should choose wide - not commutative  821    BICS.W   r2, r2, r1          // Explicitly wide822    BICS.W   r0, r1, r0  823    BIC      r0, r1, r0          // Must use wide encoding as not flag-setting824    BICS     r7, r7, r1          // Should use narrow825    BICS     r8, r1, r8          // high registers so must use wide encoding826    BICS     r8, r8, r1827    BICS     r7, r8, r7828    BICS     r5, r5, r8829    BICS     r3, r3, r1, lsl #1  // Must use wide - shifted register830    BICS     r4, r1, r4, lsr #1831// CHECK: bics.w  r3, r2, r1              @ encoding: [0x32,0xea,0x01,0x03]832// CHECK: bics    r2, r1                  @ encoding: [0x8a,0x43]833// CHECK: bics.w  r1, r2, r1              @ encoding: [0x32,0xea,0x01,0x01]834// CHECK: bics.w  r2, r2, r1              @ encoding: [0x32,0xea,0x01,0x02]835// CHECK: bics.w  r0, r1, r0              @ encoding: [0x31,0xea,0x00,0x00]836// CHECK: bic.w   r0, r1, r0              @ encoding: [0x21,0xea,0x00,0x00]837// CHECK: bics    r7, r1                  @ encoding: [0x8f,0x43]838// CHECK: bics.w  r8, r1, r8              @ encoding: [0x31,0xea,0x08,0x08]839// CHECK: bics.w  r8, r8, r1              @ encoding: [0x38,0xea,0x01,0x08]840// CHECK: bics.w  r7, r8, r7              @ encoding: [0x38,0xea,0x07,0x07]841// CHECK: bics.w  r5, r5, r8              @ encoding: [0x35,0xea,0x08,0x05]842// CHECK: bics.w  r3, r3, r1, lsl #1      @ encoding: [0x33,0xea,0x41,0x03]843// CHECK: bics.w  r4, r1, r4, lsr #1      @ encoding: [0x31,0xea,0x54,0x04]844 845    IT EQ846    BICEQ    r0, r2, r1          // Must be wide - 3 distinct registers847    IT EQ848    BICEQ    r5, r5, r1          // Should choose narrow849    IT EQ850    BICEQ    r1, r5, r1          // Should choose wide - not commutative851    IT EQ852    BICEQ.W  r4, r4, r1          // Explicitly wide853    IT EQ854    BICEQ.W  r2, r1, r2  855    IT EQ856    BICSEQ   r5, r1, r5          // Must use wide encoding as flag-setting857    IT EQ858    BICEQ    r7, r7, r1          // Should use narrow 859    IT EQ860    BICEQ    r8, r1, r8          // high registers so must use wide encoding861    IT EQ862    BICEQ    r8, r8, r1863    IT EQ864    BICEQ    r0, r8, r0865    IT EQ866    BICEQ    r2, r2, r8867    IT EQ868    BICEQ    r4, r4, r1, lsl #1  // Must use wide - shifted register869    IT EQ870    BICEQ    r5, r1, r5, lsr #1871// CHECK: it eq                           @ encoding: [0x08,0xbf]872// CHECK: biceq.w  r0, r2, r1             @ encoding: [0x22,0xea,0x01,0x00]873// CHECK: it eq                           @ encoding: [0x08,0xbf]874// CHECK: biceq    r5, r1                 @ encoding: [0x8d,0x43]875// CHECK: it eq                           @ encoding: [0x08,0xbf]876// CHECK: biceq.w  r1, r5, r1             @ encoding: [0x25,0xea,0x01,0x01]877// CHECK: it eq                           @ encoding: [0x08,0xbf]878// CHECK: biceq.w  r4, r4, r1             @ encoding: [0x24,0xea,0x01,0x04]879// CHECK: it eq                           @ encoding: [0x08,0xbf]880// CHECK: biceq.w  r2, r1, r2             @ encoding: [0x21,0xea,0x02,0x02]881// CHECK: it eq                           @ encoding: [0x08,0xbf]882// CHECK: bicseq.w r5, r1, r5             @ encoding: [0x31,0xea,0x05,0x05]883// CHECK: it eq                           @ encoding: [0x08,0xbf]884// CHECK: biceq    r7, r1                 @ encoding: [0x8f,0x43]885// CHECK: it eq                           @ encoding: [0x08,0xbf]886// CHECK: biceq.w  r8, r1, r8             @ encoding: [0x21,0xea,0x08,0x08]887// CHECK: it eq                           @ encoding: [0x08,0xbf]888// CHECK: biceq.w  r8, r8, r1             @ encoding: [0x28,0xea,0x01,0x08]889// CHECK: it eq                           @ encoding: [0x08,0xbf]890// CHECK: biceq.w  r0, r8, r0             @ encoding: [0x28,0xea,0x00,0x00]891// CHECK: it eq                           @ encoding: [0x08,0xbf]892// CHECK: biceq.w  r2, r2, r8             @ encoding: [0x22,0xea,0x08,0x02]893// CHECK: it eq                           @ encoding: [0x08,0xbf]894// CHECK: biceq.w  r4, r4, r1, lsl #1     @ encoding: [0x24,0xea,0x41,0x04]895// CHECK: it eq                           @ encoding: [0x08,0xbf]896// CHECK: biceq.w  r5, r1, r5, lsr #1     @ encoding: [0x21,0xea,0x55,0x05]897 898// CMN - only two register version available899