@@ -63,6 +63,11 @@ void AArch64InstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const {
63
63
OS << markup (" <reg:" ) << getRegisterName (RegNo) << markup (" >" );
64
64
}
65
65
66
+ void AArch64InstPrinter::printRegName (raw_ostream &OS, unsigned RegNo,
67
+ unsigned AltIdx) const {
68
+ OS << markup (" <reg:" ) << getRegisterName (RegNo, AltIdx) << markup (" >" );
69
+ }
70
+
66
71
void AArch64InstPrinter::printInst (const MCInst *MI, uint64_t Address,
67
72
StringRef Annot, const MCSubtargetInfo &STI,
68
73
raw_ostream &O) {
@@ -112,8 +117,10 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
112
117
}
113
118
114
119
if (AsmMnemonic) {
115
- O << ' \t ' << AsmMnemonic << ' \t ' << getRegisterName (Op0.getReg ())
116
- << " , " << getRegisterName (getWRegFromXReg (Op1.getReg ()));
120
+ O << ' \t ' << AsmMnemonic << ' \t ' ;
121
+ printRegName (O, Op0.getReg ());
122
+ O << " , " ;
123
+ printRegName (O, getWRegFromXReg (Op1.getReg ()));
117
124
printAnnotation (O, Annot);
118
125
return ;
119
126
}
@@ -160,19 +167,23 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
160
167
161
168
// SBFIZ/UBFIZ aliases
162
169
if (Op2.getImm () > Op3.getImm ()) {
163
- O << ' \t ' << (IsSigned ? " sbfiz" : " ubfiz" ) << ' \t '
164
- << getRegisterName (Op0.getReg ()) << " , "
165
- << getRegisterName (Op1.getReg ()) << " , " << markup (" <imm:" ) << " #"
166
- << (Is64Bit ? 64 : 32 ) - Op2.getImm () << markup (" >" ) << " , "
167
- << markup (" <imm:" ) << " #" << Op3.getImm () + 1 << markup (" >" );
170
+ O << ' \t ' << (IsSigned ? " sbfiz" : " ubfiz" ) << ' \t ' ;
171
+ printRegName (O, Op0.getReg ());
172
+ O << " , " ;
173
+ printRegName (O, Op1.getReg ());
174
+ O << " , " << markup (" <imm:" ) << " #" << (Is64Bit ? 64 : 32 ) - Op2.getImm ()
175
+ << markup (" >" ) << " , " << markup (" <imm:" ) << " #" << Op3.getImm () + 1
176
+ << markup (" >" );
168
177
printAnnotation (O, Annot);
169
178
return ;
170
179
}
171
180
172
181
// Otherwise SBFX/UBFX is the preferred form
173
- O << ' \t ' << (IsSigned ? " sbfx" : " ubfx" ) << ' \t '
174
- << getRegisterName (Op0.getReg ()) << " , " << getRegisterName (Op1.getReg ())
175
- << " , " << markup (" <imm:" ) << " #" << Op2.getImm () << markup (" >" ) << " , "
182
+ O << ' \t ' << (IsSigned ? " sbfx" : " ubfx" ) << ' \t ' ;
183
+ printRegName (O, Op0.getReg ());
184
+ O << " , " ;
185
+ printRegName (O, Op1.getReg ());
186
+ O << " , " << markup (" <imm:" ) << " #" << Op2.getImm () << markup (" >" ) << " , "
176
187
<< markup (" <imm:" ) << " #" << Op3.getImm () - Op2.getImm () + 1
177
188
<< markup (" >" );
178
189
printAnnotation (O, Annot);
@@ -193,9 +204,10 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
193
204
int LSB = (BitWidth - ImmR) % BitWidth;
194
205
int Width = ImmS + 1 ;
195
206
196
- O << " \t bfc\t " << getRegisterName (Op0.getReg ()) << " , " << markup (" <imm:" )
197
- << " #" << LSB << markup (" >" ) << " , " << markup (" <imm:" ) << " #" << Width
198
- << markup (" >" );
207
+ O << " \t bfc\t " ;
208
+ printRegName (O, Op0.getReg ());
209
+ O << " , " << markup (" <imm:" ) << " #" << LSB << markup (" >" ) << " , "
210
+ << markup (" <imm:" ) << " #" << Width << markup (" >" );
199
211
printAnnotation (O, Annot);
200
212
return ;
201
213
} else if (ImmS < ImmR) {
@@ -204,20 +216,25 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
204
216
int LSB = (BitWidth - ImmR) % BitWidth;
205
217
int Width = ImmS + 1 ;
206
218
207
- O << " \t bfi\t " << getRegisterName (Op0.getReg ()) << " , "
208
- << getRegisterName (Op2.getReg ()) << " , " << markup (" <imm:" ) << " #"
209
- << LSB << markup (" >" ) << " , " << markup (" <imm:" ) << " #" << Width
210
- << markup (" >" );
219
+ O << " \t bfi\t " ;
220
+ printRegName (O, Op0.getReg ());
221
+ O << " , " ;
222
+ printRegName (O, Op2.getReg ());
223
+ O << " , " << markup (" <imm:" ) << " #" << LSB << markup (" >" ) << " , "
224
+ << markup (" <imm:" ) << " #" << Width << markup (" >" );
211
225
printAnnotation (O, Annot);
212
226
return ;
213
227
}
214
228
215
229
int LSB = ImmR;
216
230
int Width = ImmS - ImmR + 1 ;
217
231
// Otherwise BFXIL the preferred form
218
- O << " \t bfxil\t " << getRegisterName (Op0.getReg ()) << " , "
219
- << getRegisterName (Op2.getReg ()) << " , " << markup (" <imm:" ) << " #" << LSB
220
- << markup (" >" ) << " , " << markup (" <imm:" ) << " #" << Width << markup (" >" );
232
+ O << " \t bfxil\t " ;
233
+ printRegName (O, Op0.getReg ());
234
+ O << " , " ;
235
+ printRegName (O, Op2.getReg ());
236
+ O << " , " << markup (" <imm:" ) << " #" << LSB << markup (" >" ) << " , "
237
+ << markup (" <imm:" ) << " #" << Width << markup (" >" );
221
238
printAnnotation (O, Annot);
222
239
return ;
223
240
}
@@ -233,17 +250,18 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
233
250
else
234
251
O << " \t movn\t " ;
235
252
236
- O << getRegisterName ( MI->getOperand (0 ).getReg ()) << " , " << markup ( " <imm: " )
237
- << " #" ;
253
+ printRegName (O, MI->getOperand (0 ).getReg ());
254
+ O << " , " << markup ( " <imm: " ) << " #" ;
238
255
MI->getOperand (1 ).getExpr ()->print (O, &MAI);
239
256
O << markup (" >" );
240
257
return ;
241
258
}
242
259
243
260
if ((Opcode == AArch64::MOVKXi || Opcode == AArch64::MOVKWi) &&
244
261
MI->getOperand (2 ).isExpr ()) {
245
- O << " \t movk\t " << getRegisterName (MI->getOperand (0 ).getReg ()) << " , "
246
- << markup (" <imm:" ) << " #" ;
262
+ O << " \t movk\t " ;
263
+ printRegName (O, MI->getOperand (0 ).getReg ());
264
+ O << " , " << markup (" <imm:" ) << " #" ;
247
265
MI->getOperand (2 ).getExpr ()->print (O, &MAI);
248
266
O << markup (" >" );
249
267
return ;
@@ -262,9 +280,10 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
262
280
263
281
if (AArch64_AM::isMOVZMovAlias (Value, Shift,
264
282
Opcode == AArch64::MOVZXi ? 64 : 32 )) {
265
- O << " \t mov\t " << getRegisterName (MI->getOperand (0 ).getReg ()) << " , "
266
- << markup (" <imm:" ) << " #" << formatImm (SignExtend64 (Value, RegWidth))
267
- << markup (" >" );
283
+ O << " \t mov\t " ;
284
+ printRegName (O, MI->getOperand (0 ).getReg ());
285
+ O << " , " << markup (" <imm:" ) << " #"
286
+ << formatImm (SignExtend64 (Value, RegWidth)) << markup (" >" );
268
287
return ;
269
288
}
270
289
}
@@ -278,9 +297,10 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
278
297
Value = Value & 0xffffffff ;
279
298
280
299
if (AArch64_AM::isMOVNMovAlias (Value, Shift, RegWidth)) {
281
- O << " \t mov\t " << getRegisterName (MI->getOperand (0 ).getReg ()) << " , "
282
- << markup (" <imm:" ) << " #" << formatImm (SignExtend64 (Value, RegWidth))
283
- << markup (" >" );
300
+ O << " \t mov\t " ;
301
+ printRegName (O, MI->getOperand (0 ).getReg ());
302
+ O << " , " << markup (" <imm:" ) << " #"
303
+ << formatImm (SignExtend64 (Value, RegWidth)) << markup (" >" );
284
304
return ;
285
305
}
286
306
}
@@ -293,9 +313,10 @@ void AArch64InstPrinter::printInst(const MCInst *MI, uint64_t Address,
293
313
uint64_t Value = AArch64_AM::decodeLogicalImmediate (
294
314
MI->getOperand (2 ).getImm (), RegWidth);
295
315
if (!AArch64_AM::isAnyMOVWMovAlias (Value, RegWidth)) {
296
- O << " \t mov\t " << getRegisterName (MI->getOperand (0 ).getReg ()) << " , "
297
- << markup (" <imm:" ) << " #" << formatImm (SignExtend64 (Value, RegWidth))
298
- << markup (" >" );
316
+ O << " \t mov\t " ;
317
+ printRegName (O, MI->getOperand (0 ).getReg ());
318
+ O << " , " << markup (" <imm:" ) << " #"
319
+ << formatImm (SignExtend64 (Value, RegWidth)) << markup (" >" );
299
320
return ;
300
321
}
301
322
}
@@ -737,14 +758,15 @@ void AArch64AppleInstPrinter::printInst(const MCInst *MI, uint64_t Address,
737
758
738
759
bool IsTbx;
739
760
if (isTblTbxInstruction (MI->getOpcode (), Layout, IsTbx)) {
740
- O << " \t " << (IsTbx ? " tbx" : " tbl" ) << Layout << ' \t '
741
- << getRegisterName (MI->getOperand (0 ).getReg (), AArch64::vreg) << " , " ;
761
+ O << " \t " << (IsTbx ? " tbx" : " tbl" ) << Layout << ' \t ' ;
762
+ printRegName (O, MI->getOperand (0 ).getReg (), AArch64::vreg);
763
+ O << " , " ;
742
764
743
765
unsigned ListOpNum = IsTbx ? 2 : 1 ;
744
766
printVectorList (MI, ListOpNum, STI, O, " " );
745
767
746
- O << " , "
747
- << getRegisterName ( MI->getOperand (ListOpNum + 1 ).getReg (), AArch64::vreg);
768
+ O << " , " ;
769
+ printRegName (O, MI->getOperand (ListOpNum + 1 ).getReg (), AArch64::vreg);
748
770
printAnnotation (O, Annot);
749
771
return ;
750
772
}
@@ -762,14 +784,17 @@ void AArch64AppleInstPrinter::printInst(const MCInst *MI, uint64_t Address,
762
784
763
785
// Next the address: [xN]
764
786
unsigned AddrReg = MI->getOperand (OpNum++).getReg ();
765
- O << " , [" << getRegisterName (AddrReg) << ' ]' ;
787
+ O << " , [" ;
788
+ printRegName (O, AddrReg);
789
+ O << ' ]' ;
766
790
767
791
// Finally, there might be a post-indexed offset.
768
792
if (LdStDesc->NaturalOffset != 0 ) {
769
793
unsigned Reg = MI->getOperand (OpNum++).getReg ();
770
- if (Reg != AArch64::XZR)
771
- O << " , " << getRegisterName (Reg);
772
- else {
794
+ if (Reg != AArch64::XZR) {
795
+ O << " , " ;
796
+ printRegName (O, Reg);
797
+ } else {
773
798
assert (LdStDesc->NaturalOffset && " no offset on post-inc instruction?" );
774
799
O << " , " << markup (" <imm:" ) << " #" << LdStDesc->NaturalOffset
775
800
<< markup (" >" );
@@ -890,8 +915,10 @@ bool AArch64InstPrinter::printSysAlias(const MCInst *MI,
890
915
std::transform (Str.begin (), Str.end (), Str.begin (), ::tolower);
891
916
892
917
O << ' \t ' << Str;
893
- if (NeedsReg)
894
- O << " , " << getRegisterName (MI->getOperand (4 ).getReg ());
918
+ if (NeedsReg) {
919
+ O << " , " ;
920
+ printRegName (O, MI->getOperand (4 ).getReg ());
921
+ }
895
922
896
923
return true ;
897
924
}
@@ -1023,7 +1050,7 @@ void AArch64InstPrinter::printVRegOperand(const MCInst *MI, unsigned OpNo,
1023
1050
const MCOperand &Op = MI->getOperand (OpNo);
1024
1051
assert (Op.isReg () && " Non-register vreg operand!" );
1025
1052
unsigned Reg = Op.getReg ();
1026
- O << getRegisterName ( Reg, AArch64::vreg);
1053
+ printRegName (O, Reg, AArch64::vreg);
1027
1054
}
1028
1055
1029
1056
void AArch64InstPrinter::printSysCROperand (const MCInst *MI, unsigned OpNo,
@@ -1183,7 +1210,9 @@ void AArch64InstPrinter::printInverseCondCode(const MCInst *MI, unsigned OpNum,
1183
1210
void AArch64InstPrinter::printAMNoIndex (const MCInst *MI, unsigned OpNum,
1184
1211
const MCSubtargetInfo &STI,
1185
1212
raw_ostream &O) {
1186
- O << ' [' << getRegisterName (MI->getOperand (OpNum).getReg ()) << ' ]' ;
1213
+ O << ' [' ;
1214
+ printRegName (O, MI->getOperand (OpNum).getReg ());
1215
+ O << ' ]' ;
1187
1216
}
1188
1217
1189
1218
template <int Scale>
@@ -1209,7 +1238,8 @@ void AArch64InstPrinter::printUImm12Offset(const MCInst *MI, unsigned OpNum,
1209
1238
void AArch64InstPrinter::printAMIndexedWB (const MCInst *MI, unsigned OpNum,
1210
1239
unsigned Scale, raw_ostream &O) {
1211
1240
const MCOperand MO1 = MI->getOperand (OpNum + 1 );
1212
- O << ' [' << getRegisterName (MI->getOperand (OpNum).getReg ());
1241
+ O << ' [' ;
1242
+ printRegName (O, MI->getOperand (OpNum).getReg ());
1213
1243
if (MO1.isImm ()) {
1214
1244
O << " , " << markup (" <imm:" ) << " #" << formatImm (MO1.getImm () * Scale)
1215
1245
<< markup (" >" );
@@ -1366,7 +1396,9 @@ void AArch64InstPrinter::printGPRSeqPairsClassOperand(const MCInst *MI,
1366
1396
1367
1397
unsigned Even = MRI.getSubReg (Reg, Sube);
1368
1398
unsigned Odd = MRI.getSubReg (Reg, Subo);
1369
- O << getRegisterName (Even) << " , " << getRegisterName (Odd);
1399
+ printRegName (O, Even);
1400
+ O << " , " ;
1401
+ printRegName (O, Odd);
1370
1402
}
1371
1403
1372
1404
void AArch64InstPrinter::printMatrixTileList (const MCInst *MI, unsigned OpNum,
@@ -1436,9 +1468,10 @@ void AArch64InstPrinter::printVectorList(const MCInst *MI, unsigned OpNum,
1436
1468
1437
1469
for (unsigned i = 0 ; i < NumRegs; ++i, Reg = getNextVectorRegister (Reg)) {
1438
1470
if (MRI.getRegClass (AArch64::ZPRRegClassID).contains (Reg))
1439
- O << getRegisterName ( Reg) << LayoutSuffix ;
1471
+ printRegName (O, Reg);
1440
1472
else
1441
- O << getRegisterName (Reg, AArch64::vreg) << LayoutSuffix;
1473
+ printRegName (O, Reg, AArch64::vreg);
1474
+ O << LayoutSuffix;
1442
1475
1443
1476
if (i + 1 != NumRegs)
1444
1477
O << " , " ;
0 commit comments