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