LLVM: lib/Target/ARM/MCTargetDesc/ARMInstPrinter.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
28#include
29#include
30
31using namespace llvm;
32
33#define DEBUG_TYPE "asm-printer"
34
35#define PRINT_ALIAS_INSTR
36#include "ARMGenAsmWriter.inc"
37
38
39
40
42
43 assert((imm & ~0x1f) == 0 && "Invalid shift encoding");
44
45 if (imm == 0)
46 return 32;
47 return imm;
48}
49
53 return;
54 O << ", ";
55
56 assert(!(ShOpc == ARM_AM::ror && !ShImm) && "Cannot have ror #0");
57 O << getShiftOpcStr(ShOpc);
58
60 O << " ";
63 }
64}
65
69
71 if (Opt == "reg-names-std") {
72 DefaultAltIdx = ARM::NoRegAltName;
73 return true;
74 }
75 if (Opt == "reg-names-raw") {
76 DefaultAltIdx = ARM::RegNamesRaw;
77 return true;
78 }
79 return false;
80}
81
85
89 unsigned Opcode = MI->getOpcode();
90
91 switch (Opcode) {
92 case ARM::VLLDM: {
94 O << '\t' << "vlldm" << '\t';
96 O << ", "
97 << "{d0 - d15}";
98 return;
99 }
100 case ARM::VLLDM_T2: {
101 const MCOperand &Reg = MI->getOperand(0);
102 O << '\t' << "vlldm" << '\t';
104 O << ", "
105 << "{d0 - d31}";
106 return;
107 }
108 case ARM::VLSTM: {
109 const MCOperand &Reg = MI->getOperand(0);
110 O << '\t' << "vlstm" << '\t';
112 O << ", "
113 << "{d0 - d15}";
114 return;
115 }
116 case ARM::VLSTM_T2: {
117 const MCOperand &Reg = MI->getOperand(0);
118 O << '\t' << "vlstm" << '\t';
120 O << ", "
121 << "{d0 - d31}";
122 return;
123 }
124
125 case ARM::MOVsr: {
126
127 const MCOperand &Dst = MI->getOperand(0);
128 const MCOperand &MO1 = MI->getOperand(1);
129 const MCOperand &MO2 = MI->getOperand(2);
130 const MCOperand &MO3 = MI->getOperand(3);
131
135
136 O << '\t';
138 O << ", ";
140
141 O << ", ";
145 return;
146 }
147
148 case ARM::MOVsi: {
149
150 const MCOperand &Dst = MI->getOperand(0);
151 const MCOperand &MO1 = MI->getOperand(1);
152 const MCOperand &MO2 = MI->getOperand(2);
153
157
158 O << '\t';
160 O << ", ";
162
165 return;
166 }
167
168 O << ", ";
172 return;
173 }
174
175
176 case ARM::STMDB_UPD:
177 case ARM::t2STMDB_UPD:
178 if (MI->getOperand(0).getReg() == ARM::SP && MI->getNumOperands() > 5) {
179
180 O << '\t' << "push";
182 if (Opcode == ARM::t2STMDB_UPD)
183 O << ".w";
184 O << '\t';
187 return;
188 } else
189 break;
190
191 case ARM::STR_PRE_IMM:
192 if (MI->getOperand(2).getReg() == ARM::SP &&
193 MI->getOperand(3).getImm() == -4) {
194 O << '\t' << "push";
196 O << "\t{";
198 O << "}";
200 return;
201 } else
202 break;
203
204
205 case ARM::LDMIA_UPD:
206 case ARM::t2LDMIA_UPD:
207 if (MI->getOperand(0).getReg() == ARM::SP && MI->getNumOperands() > 5) {
208
209 O << '\t' << "pop";
211 if (Opcode == ARM::t2LDMIA_UPD)
212 O << ".w";
213 O << '\t';
216 return;
217 } else
218 break;
219
220 case ARM::LDR_POST_IMM:
221 if (MI->getOperand(2).getReg() == ARM::SP &&
222 MI->getOperand(4).getImm() == 4) {
223 O << '\t' << "pop";
225 O << "\t{";
227 O << "}";
229 return;
230 } else
231 break;
232
233
234 case ARM::VSTMSDB_UPD:
235 case ARM::VSTMDDB_UPD:
236 if (MI->getOperand(0).getReg() == ARM::SP) {
237 O << '\t' << "vpush";
239 O << '\t';
242 return;
243 } else
244 break;
245
246
247 case ARM::VLDMSIA_UPD:
248 case ARM::VLDMDIA_UPD:
249 if (MI->getOperand(0).getReg() == ARM::SP) {
250 O << '\t' << "vpop";
252 O << '\t';
255 return;
256 } else
257 break;
258
259 case ARM::tLDMIA: {
260 bool Writeback = true;
261 MCRegister BaseReg = MI->getOperand(0).getReg();
262 for (unsigned i = 3; i < MI->getNumOperands(); ++i) {
263 if (MI->getOperand(i).getReg() == BaseReg)
264 Writeback = false;
265 }
266
267 O << "\tldm";
268
270 O << '\t';
272 if (Writeback)
273 O << "!";
274 O << ", ";
277 return;
278 }
279
280
281
282
283
284
285
286 case ARM::LDREXD:
287 case ARM::STREXD:
288 case ARM::LDAEXD:
289 case ARM::STLEXD: {
291 bool isStore = Opcode == ARM::STREXD || Opcode == ARM::STLEXD;
297
301 Reg, ARM::gsub_0, &MRI.getRegClass(ARM::GPRPairRegClassID)));
303
304
305 for (unsigned i = isStore ? 3 : 2; i < MI->getNumOperands(); ++i)
308 return;
309 }
310 break;
311 }
312 case ARM::TSB:
313 case ARM::t2TSB:
314 O << "\ttsb\tcsync";
315 return;
316 case ARM::t2DSB:
317 switch (MI->getOperand(0).getImm()) {
318 default:
321 break;
322 case 0:
323 O << "\tssbb";
324 break;
325 case 4:
326 O << "\tpssbb";
327 break;
328 }
330 return;
331 }
332
335
337}
338
342 if (Op.isReg()) {
345 } else if (Op.isImm()) {
347 } else {
348 assert(Op.isExpr() && "unknown operand kind in printOperand");
349 const MCExpr *Expr = Op.getExpr();
350 switch (Expr->getKind()) {
352 O << '#';
353 MAI.printExpr(O, *Expr);
354 break;
356
357
358
360 int64_t TargetAddress;
361 if (->evaluateAsAbsolute(TargetAddress)) {
362 O << '#';
363 MAI.printExpr(O, *Expr);
364 } else {
365 O << "0x";
366 O.write_hex(static_cast<uint32_t>(TargetAddress));
367 }
368 break;
369 }
370 default:
371
372
373 MAI.printExpr(O, *Expr);
374 break;
375 }
376 }
377}
378
387 Target &= 0xffffffff;
391}
392
396 const MCOperand &MO1 = MI->getOperand(OpNum);
399 return;
400 }
401
403 O << "[pc, ";
404
405 int32_t OffImm = (int32_t)MO1.getImm();
406 bool isSub = OffImm < 0;
407
408
409 if (OffImm == INT32_MIN)
410 OffImm = 0;
411 if (isSub) {
413 } else {
415 }
416 O << "]";
417}
418
419
420
421
422
423
427 const MCOperand &MO1 = MI->getOperand(OpNum);
428 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
429 const MCOperand &MO3 = MI->getOperand(OpNum + 2);
430
432
433
437 return;
438
439 O << ' ';
442}
443
447 const MCOperand &MO1 = MI->getOperand(OpNum);
448 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
449
451
452
455}
456
457
458
459
460
467
469 O << "[";
471
474 O << ", ";
478 }
479 O << "]";
480 return;
481 }
482
483 O << ", ";
486
489 O << "]";
490}
491
497
499 O << "[";
501 O << ", ";
503 O << "]";
504}
505
512 O << "[";
514 O << ", ";
516 O << ", lsl ";
518 O << "]";
519}
520
525
526 if (!MO1.isReg()) {
528 return;
529 }
530
531#ifndef NDEBUG
535#endif
536
538}
539
541 unsigned OpNum,
544 const MCOperand &MO1 = MI->getOperand(OpNum);
545 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
546
551 << ImmOffs;
552 return;
553 }
554
557
560}
561
562
563
564
565
568 bool AlwaysPrintImm0) {
572
574 O << '[';
576
580 O << ']';
581 return;
582 }
583
584
587
588 if (AlwaysPrintImm0 || ImmOffs || (op == ARM_AM::sub)) {
589 O << ", ";
591 }
592 O << ']';
593}
594
595template
600 if (!MO1.isReg()) {
602 return;
603 }
604
607 "unexpected idxmode");
609}
610
612 unsigned OpNum,
615 const MCOperand &MO1 = MI->getOperand(OpNum);
616 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
617
621 return;
622 }
623
627 << ImmOffs;
628}
629
633 const MCOperand &MO = MI->getOperand(OpNum);
634 unsigned Imm = MO.getImm();
636 << '#' << ((Imm & 256) ? "" : "-") << (Imm & 0xff);
637}
638
642 const MCOperand &MO1 = MI->getOperand(OpNum);
643 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
644
645 O << (MO2.getImm() ? "" : "-");
647}
648
652 const MCOperand &MO = MI->getOperand(OpNum);
653 unsigned Imm = MO.getImm();
655 << '#' << ((Imm & 256) ? "" : "-") << ((Imm & 0xff) << 2);
656}
657
658template
662 const MCOperand &MO1 = MI->getOperand(OpNum);
663 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
664
666 O << "[";
668 O << ", ";
670
671 if (shift > 0)
673
674 O << "]";
675}
676
684
685template
689 const MCOperand &MO1 = MI->getOperand(OpNum);
690 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
691
692 if (!MO1.isReg()) {
694 return;
695 }
696
698 O << "[";
700
703 if (AlwaysPrintImm0 || ImmOffs || Op == ARM_AM::sub) {
704 O << ", ";
707 }
708 O << "]";
709}
710
711template
715 const MCOperand &MO1 = MI->getOperand(OpNum);
716 const MCOperand &MO2 = MI->getOperand(OpNum+1);
717
718 if (!MO1.isReg()) {
720 return;
721 }
722
724 O << "[";
726
729 if (AlwaysPrintImm0 || ImmOffs || Op == ARM_AM::sub) {
730 O << ", ";
733 << ImmOffs * 2;
734 }
735 O << "]";
736}
737
741 const MCOperand &MO1 = MI->getOperand(OpNum);
742 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
743
745 O << "[";
748 O << ":" << (MO2.getImm() << 3);
749 }
750 O << "]";
751}
752
756 const MCOperand &MO1 = MI->getOperand(OpNum);
758 O << "[";
760 O << "]";
761}
762
764 unsigned OpNum,
767 const MCOperand &MO = MI->getOperand(OpNum);
769 O << "!";
770 else {
771 O << ", ";
773 }
774}
775
777 unsigned OpNum,
780 const MCOperand &MO = MI->getOperand(OpNum);
784 assert(MO.isImm() && "Not a valid bf_inv_mask_imm value!");
786 O << ", ";
788}
789
793 unsigned val = MI->getOperand(OpNum).getImm();
795}
796
800 unsigned val = MI->getOperand(OpNum).getImm();
802}
803
807 unsigned val = MI->getOperand(OpNum).getImm();
809}
810
814 unsigned ShiftOp = MI->getOperand(OpNum).getImm();
815 bool isASR = (ShiftOp & (1 << 5)) != 0;
816 unsigned Amt = ShiftOp & 0x1f;
817 if (isASR) {
818 O << ", asr ";
820 } else if (Amt) {
821 O << ", lsl ";
823 }
824}
825
829 unsigned Imm = MI->getOperand(OpNum).getImm();
830 if (Imm == 0)
831 return;
832 assert(Imm > 0 && Imm < 32 && "Invalid PKH shift immediate value!");
833 O << ", lsl ";
835}
836
840 unsigned Imm = MI->getOperand(OpNum).getImm();
841
842 if (Imm == 0)
843 Imm = 32;
844 assert(Imm > 0 && Imm <= 32 && "Invalid PKH shift immediate value!");
845 O << ", asr ";
847}
848
852 if (MI->getOpcode() != ARM::t2CLRM && MI->getOpcode() != ARM::VSCCLRMS) {
855 return MRI.getEncodingValue(LHS.getReg()) <
856 MRI.getEncodingValue(RHS.getReg());
857 }));
858 }
859
860 O << "{";
861 for (unsigned i = OpNum, e = MI->getNumOperands(); i != e; ++i) {
862 if (i != OpNum)
863 O << ", ";
865 }
866 O << "}";
867}
868
872 MCRegister Reg = MI->getOperand(OpNum).getReg();
874 O << ", ";
876}
877
882 if (Op.getImm())
883 O << "be";
884 else
885 O << "le";
886}
887
893
897 unsigned IFlags = Op.getImm();
898 for (int i = 2; i >= 0; --i)
899 if (IFlags & (1 << i))
901
902 if (IFlags == 0)
903 O << "none";
904}
905
911 if (FeatureBits[ARM::FeatureMClass]) {
912
913 unsigned SYSm = Op.getImm() & 0xFFF;
914 unsigned Opcode = MI->getOpcode();
915
916
917 if (Opcode == ARM::t2MSR_M && FeatureBits[ARM::FeatureDSP]) {
919 if (TheReg && TheReg->isInRequiredFeatures({ARM::FeatureDSP})) {
920 O << TheReg->Name;
921 return;
922 }
923 }
924
925
926 SYSm &= 0xff;
927 if (Opcode == ARM::t2MSR_M && FeatureBits [ARM::HasV7Ops]) {
928
929
931 if (TheReg) {
932 O << TheReg->Name;
933 return;
934 }
935 }
936
938 if (TheReg) {
939 O << TheReg->Name;
940 return;
941 }
942
943 O << SYSm;
944
945 return;
946 }
947
948
949
950 unsigned SpecRegRBit = Op.getImm() >> 4;
951 unsigned Mask = Op.getImm() & 0xf;
952
953 if (!SpecRegRBit && (Mask == 8 || Mask == 4 || Mask == 12)) {
954 O << "APSR_";
955 switch (Mask) {
956 default:
958 case 4:
959 O << "g";
960 return;
961 case 8:
962 O << "nzcvq";
963 return;
964 case 12:
965 O << "nzcvqg";
966 return;
967 }
968 }
969
970 if (SpecRegRBit)
971 O << "SPSR";
972 else
973 O << "CPSR";
974
975 if (Mask) {
976 O << '_';
977 if (Mask & 8)
978 O << 'f';
979 if (Mask & 4)
980 O << 's';
981 if (Mask & 2)
982 O << 'x';
983 if (Mask & 1)
984 O << 'c';
985 }
986}
987
991 uint32_t Banked = MI->getOperand(OpNum).getImm();
992 auto TheReg = ARMBankedReg::lookupBankedRegByEncoding(Banked);
993 assert(TheReg && "invalid banked register operand");
994 std::string Name = TheReg->Name;
995
996 uint32_t isSPSR = (Banked & 0x20) >> 5;
997 if (isSPSR)
998 Name.replace(0, 4, "SPSR");
999 O << Name;
1000}
1001
1006
1007 if ((unsigned)CC == 15)
1008 O << "";
1011}
1012
1017 O << "cs";
1018 else
1020}
1021
1023 unsigned OpNum,
1028}
1029
1031 unsigned OpNum,
1036}
1037
1041 if (MI->getOperand(OpNum).getReg()) {
1042 assert(MI->getOperand(OpNum).getReg() == ARM::CPSR &&
1043 "Expect ARM CPSR register!");
1044 O << 's';
1045 }
1046}
1047
1051 O << MI->getOperand(OpNum).getImm();
1052}
1053
1057 O << "p" << MI->getOperand(OpNum).getImm();
1058}
1059
1063 O << "c" << MI->getOperand(OpNum).getImm();
1064}
1065
1069 O << "{" << MI->getOperand(OpNum).getImm() << "}";
1070}
1071
1076
1077template
1081 const MCOperand &MO = MI->getOperand(OpNum);
1082
1085 return;
1086 }
1087
1088 int32_t OffImm = (int32_t)MO.getImm() << scale;
1089
1091 if (OffImm == INT32_MIN)
1092 O << "#-0";
1093 else if (OffImm < 0)
1094 O << "#-" << -OffImm;
1095 else
1096 O << "#" << OffImm;
1097}
1098
1103 << "#" << formatImm(MI->getOperand(OpNum).getImm() * 4);
1104}
1105
1109 unsigned Imm = MI->getOperand(OpNum).getImm();
1111}
1112
1116
1117 unsigned Mask = MI->getOperand(OpNum).getImm();
1119 assert(NumTZ <= 3 && "Invalid IT mask!");
1120 for (unsigned Pos = 3, e = NumTZ; Pos > e; --Pos) {
1121 if ((Mask >> Pos) & 1)
1122 O << 'e';
1123 else
1124 O << 't';
1125 }
1126}
1127
1133
1134 if (!MO1.isReg()) {
1136 return;
1137 }
1138
1140 O << "[";
1143 O << ", ";
1145 }
1146 O << "]";
1147}
1148
1150 unsigned Op,
1153 unsigned Scale) {
1156
1157 if (!MO1.isReg()) {
1159 return;
1160 }
1161
1163 O << "[";
1165 if (unsigned ImmOffs = MO2.getImm()) {
1166 O << ", ";
1168 }
1169 O << "]";
1170}
1171
1178
1185
1192
1198
1199
1200
1201
1202
1206 const MCOperand &MO1 = MI->getOperand(OpNum);
1207 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
1208
1211
1212
1213 assert(MO2.isImm() && "Not a valid t2_so_reg value!");
1216}
1217
1218template
1222 const MCOperand &MO1 = MI->getOperand(OpNum);
1223 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
1224
1225 if (!MO1.isReg()) {
1227 return;
1228 }
1229
1231 O << "[";
1233
1234 int32_t OffImm = (int32_t)MO2.getImm();
1235 bool isSub = OffImm < 0;
1236
1237 if (OffImm == INT32_MIN)
1238 OffImm = 0;
1239 if (isSub) {
1240 O << ", ";
1242 } else if (AlwaysPrintImm0 || OffImm > 0) {
1243 O << ", ";
1245 }
1246 O << "]";
1247}
1248
1249template
1251 unsigned OpNum,
1254 const MCOperand &MO1 = MI->getOperand(OpNum);
1255 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
1256
1258 O << "[";
1260
1261 int32_t OffImm = (int32_t)MO2.getImm();
1262 bool isSub = OffImm < 0;
1263
1264 if (OffImm == INT32_MIN)
1265 OffImm = 0;
1266 if (isSub) {
1267 O << ", ";
1269 } else if (AlwaysPrintImm0 || OffImm > 0) {
1270 O << ", ";
1272 }
1273 O << "]";
1274}
1275
1276template
1278 unsigned OpNum,
1281 const MCOperand &MO1 = MI->getOperand(OpNum);
1282 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
1283
1284 if (!MO1.isReg()) {
1286 return;
1287 }
1288
1290 O << "[";
1292
1293 int32_t OffImm = (int32_t)MO2.getImm();
1294 bool isSub = OffImm < 0;
1295
1296 assert(((OffImm & 0x3) == 0) && "Not a valid immediate!");
1297
1298
1299 if (OffImm == INT32_MIN)
1300 OffImm = 0;
1301 if (isSub) {
1302 O << ", ";
1304 } else if (AlwaysPrintImm0 || OffImm > 0) {
1305 O << ", ";
1307 }
1308 O << "]";
1309}
1310
1314 const MCOperand &MO1 = MI->getOperand(OpNum);
1315 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
1316
1318 O << "[";
1321 O << ", ";
1323 }
1324 O << "]";
1325}
1326
1330 const MCOperand &MO1 = MI->getOperand(OpNum);
1331 int32_t OffImm = (int32_t)MO1.getImm();
1332 O << ", ";
1334 if (OffImm == INT32_MIN)
1335 O << "#-0";
1336 else if (OffImm < 0)
1337 O << "#-" << -OffImm;
1338 else
1339 O << "#" << OffImm;
1340}
1341
1345 const MCOperand &MO1 = MI->getOperand(OpNum);
1346 int32_t OffImm = (int32_t)MO1.getImm();
1347
1348 assert(((OffImm & 0x3) == 0) && "Not a valid immediate!");
1349
1350 O << ", ";
1352 if (OffImm == INT32_MIN)
1353 O << "#-0";
1354 else if (OffImm < 0)
1355 O << "#-" << -OffImm;
1356 else
1357 O << "#" << OffImm;
1358}
1359
1361 unsigned OpNum,
1364 const MCOperand &MO1 = MI->getOperand(OpNum);
1365 const MCOperand &MO2 = MI->getOperand(OpNum + 1);
1366 const MCOperand &MO3 = MI->getOperand(OpNum + 2);
1367
1369 O << "[";
1371
1372 assert(MO2.getReg() && "Invalid so_reg load / store address!");
1373 O << ", ";
1375
1376 unsigned ShAmt = MO3.getImm();
1377 if (ShAmt) {
1378 assert(ShAmt <= 3 && "Not a valid Thumb2 addressing mode!");
1379 O << ", lsl ";
1381 }
1382 O << "]";
1383}
1384
1388 const MCOperand &MO = MI->getOperand(OpNum);
1390}
1391
1395 unsigned EncodedImm = MI->getOperand(OpNum).getImm();
1396 unsigned EltBits;
1398
1400 O << "#0x";
1401 O.write_hex(Val);
1402}
1403
1407 unsigned Imm = MI->getOperand(OpNum).getImm();
1409}
1410
1414 unsigned Imm = MI->getOperand(OpNum).getImm();
1415 if (Imm == 0)
1416 return;
1417 assert(Imm <= 3 && "illegal ror immediate!");
1418 O << ", ror ";
1420}
1421
1426
1427
1428 if (Op.isExpr())
1430
1431 unsigned Bits = Op.getImm() & 0xFF;
1432 unsigned Rot = (Op.getImm() & 0xF00) >> 7;
1433
1434 bool PrintUnsigned = false;
1435 switch (MI->getOpcode()) {
1436 case ARM::MOVi:
1437
1438 PrintUnsigned = (MI->getOperand(OpNum - 1).getReg() == ARM::PC);
1439 break;
1440 case ARM::MSRi:
1441
1442 PrintUnsigned = true;
1443 break;
1444 }
1445
1448
1449 O << "#";
1450 if (PrintUnsigned)
1452 else
1454 return;
1455 }
1456
1457
1458 O << "#";
1460 O << ", #";
1462}
1463
1468
1473
1477 O << "[" << MI->getOperand(OpNum).getImm() << "]";
1478}
1479
1483 O << "{";
1485 O << "}";
1486}
1487
1491 MCRegister Reg = MI->getOperand(OpNum).getReg();
1492 MCRegister Reg0 = MRI.getSubReg(Reg, ARM::dsub_0);
1493 MCRegister Reg1 = MRI.getSubReg(Reg, ARM::dsub_1);
1494 O << "{";
1496 O << ", ";
1498 O << "}";
1499}
1500
1504 MCRegister Reg = MI->getOperand(OpNum).getReg();
1505 MCRegister Reg0 = MRI.getSubReg(Reg, ARM::dsub_0);
1506 MCRegister Reg1 = MRI.getSubReg(Reg, ARM::dsub_2);
1507 O << "{";
1509 O << ", ";
1511 O << "}";
1512}
1513
1517
1518
1519
1520 O << "{";
1522 O << ", ";
1523 printRegName(O, MI->getOperand(OpNum).getReg() + 1);
1524 O << ", ";
1525 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1526 O << "}";
1527}
1528
1532
1533
1534
1535 O << "{";
1537 O << ", ";
1538 printRegName(O, MI->getOperand(OpNum).getReg() + 1);
1539 O << ", ";
1540 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1541 O << ", ";
1542 printRegName(O, MI->getOperand(OpNum).getReg() + 3);
1543 O << "}";
1544}
1545
1547 unsigned OpNum,
1550 O << "{";
1552 O << "[]}";
1553}
1554
1556 unsigned OpNum,
1559 MCRegister Reg = MI->getOperand(OpNum).getReg();
1560 MCRegister Reg0 = MRI.getSubReg(Reg, ARM::dsub_0);
1561 MCRegister Reg1 = MRI.getSubReg(Reg, ARM::dsub_1);
1562 O << "{";
1564 O << "[], ";
1566 O << "[]}";
1567}
1568
1570 unsigned OpNum,
1573
1574
1575
1576 O << "{";
1578 O << "[], ";
1579 printRegName(O, MI->getOperand(OpNum).getReg() + 1);
1580 O << "[], ";
1581 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1582 O << "[]}";
1583}
1584
1586 unsigned OpNum,
1589
1590
1591
1592 O << "{";
1594 O << "[], ";
1595 printRegName(O, MI->getOperand(OpNum).getReg() + 1);
1596 O << "[], ";
1597 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1598 O << "[], ";
1599 printRegName(O, MI->getOperand(OpNum).getReg() + 3);
1600 O << "[]}";
1601}
1602
1606 MCRegister Reg = MI->getOperand(OpNum).getReg();
1607 MCRegister Reg0 = MRI.getSubReg(Reg, ARM::dsub_0);
1608 MCRegister Reg1 = MRI.getSubReg(Reg, ARM::dsub_2);
1609 O << "{";
1611 O << "[], ";
1613 O << "[]}";
1614}
1615
1619
1620
1621
1622 O << "{";
1624 O << "[], ";
1625 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1626 O << "[], ";
1627 printRegName(O, MI->getOperand(OpNum).getReg() + 4);
1628 O << "[]}";
1629}
1630
1634
1635
1636
1637 O << "{";
1639 O << "[], ";
1640 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1641 O << "[], ";
1642 printRegName(O, MI->getOperand(OpNum).getReg() + 4);
1643 O << "[], ";
1644 printRegName(O, MI->getOperand(OpNum).getReg() + 6);
1645 O << "[]}";
1646}
1647
1649 unsigned OpNum,
1652
1653
1654
1655 O << "{";
1657 O << ", ";
1658 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1659 O << ", ";
1660 printRegName(O, MI->getOperand(OpNum).getReg() + 4);
1661 O << "}";
1662}
1663
1667
1668
1669
1670 O << "{";
1672 O << ", ";
1673 printRegName(O, MI->getOperand(OpNum).getReg() + 2);
1674 O << ", ";
1675 printRegName(O, MI->getOperand(OpNum).getReg() + 4);
1676 O << ", ";
1677 printRegName(O, MI->getOperand(OpNum).getReg() + 6);
1678 O << "}";
1679}
1680
1681template
1685 MCRegister Reg = MI->getOperand(OpNum).getReg();
1686 const char *Prefix = "{";
1687 for (unsigned i = 0; i < NumRegs; i++) {
1688 O << Prefix;
1690 Prefix = ", ";
1691 }
1692 O << "}";
1693}
1694
1695template<int64_t Angle, int64_t Remainder>
1699 unsigned Val = MI->getOperand(OpNo).getImm();
1700 O << "#" << (Val * Angle) + Remainder;
1701}
1702
1710
1714
1715 unsigned Mask = MI->getOperand(OpNum).getImm();
1717 assert(NumTZ <= 3 && "Invalid VPT mask!");
1718 for (unsigned Pos = 3, e = NumTZ; Pos > e; --Pos) {
1719 bool T = ((Mask >> Pos) & 1) == 0;
1720 if (T)
1721 O << 't';
1722 else
1723 O << 'e';
1724 }
1725}
1726
1730 uint32_t Val = MI->getOperand(OpNum).getImm();
1731 assert(Val <= 1 && "Invalid MVE saturate operand");
1732 O << "#" << (Val == 1 ? 48 : 64);
1733}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static bool isStore(int Opcode)
static void printRegImmShift(raw_ostream &O, ARM_AM::ShiftOpc ShOpc, unsigned ShImm, ARMInstPrinter &printer)
Definition ARMInstPrinter.cpp:50
static unsigned translateShiftImm(unsigned imm)
translateShiftImm - Convert shift immediate from 0-31 to 1-32 for printing.
Definition ARMInstPrinter.cpp:41
static uint64_t scale(uint64_t Num, uint32_t N, uint32_t D)
static MCRegister getReg(const MCDisassembler *D, unsigned RC, unsigned RegNo)
void printT2AddrModeImm0_1020s4Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1311
void printMVEVectorList(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1682
void printVectorListTwoAllLanes(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1555
void printCPSIFlag(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:894
void printSBitModifierOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1038
void printVectorListFour(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1529
void printThumbAddrModeImm5S1Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1172
void printPKHASRShiftImm(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:837
void printVPTPredicateOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1703
void printInstSyncBOption(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:797
void printAddrMode7Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:753
void printRegisterList(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:849
void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:339
void printSORegRegOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:424
void printComplexRotationOp(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1696
void printMveSaturateOp(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1727
void printVectorListTwo(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1488
void printFBits16(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1464
ARMInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
Definition ARMInstPrinter.cpp:66
void printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:461
void printPCLabel(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1072
void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:611
void printCPSIMod(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:888
void printVectorListTwoSpaced(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1501
void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1250
bool applyTargetSpecificCLOption(StringRef Opt) override
Customize the printer according to a command line option.
Definition ARMInstPrinter.cpp:70
virtual bool printAliasInstr(const MCInst *MI, uint64_t Address, const MCSubtargetInfo &STI, raw_ostream &O)
void printThumbAddrModeImm5S4Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1186
void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:596
void printMveAddrModeRQOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:659
void printThumbLdrLabelOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:393
void printVectorListTwoSpacedAllLanes(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1603
void printT2SOOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1203
void printAddrModeTBB(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:492
void printVectorListOne(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1480
void printThumbITMask(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1113
void printPostIdxImm8Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:630
void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:763
void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:686
void printVectorListThreeSpaced(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1648
void printImmPlusOneOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1404
void printTraceSyncBOption(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:804
void printInstruction(const MCInst *MI, uint64_t Address, const MCSubtargetInfo &STI, raw_ostream &O)
void printPredicateOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1002
void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:521
void printGPRPairOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:869
void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1342
void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1193
void printVectorListFourAllLanes(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1585
void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:776
void printPostIdxImm8s4Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:649
void printCImmediate(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1060
void printRegName(raw_ostream &OS, MCRegister Reg) override
Print the assembler register name.
Definition ARMInstPrinter.cpp:82
void printFBits32(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1469
void printVectorListThreeAllLanes(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1569
void printRotImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1411
void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1022
void printMemBOption(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:790
void printVectorListThreeSpacedAllLanes(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1616
void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, const MCSubtargetInfo &STI, raw_ostream &O) override
Print the specified MCInst to the specified raw_ostream.
Definition ARMInstPrinter.cpp:86
void printPostIdxRegOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:639
static const char * getRegisterName(MCRegister Reg, unsigned AltIdx=ARM::NoRegAltName)
void printFPImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1385
void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1327
void printCoprocOptionImm(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1066
void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1128
void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1360
void printShiftImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:811
void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:906
void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1277
void printSORegImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:444
void printPKHLSLShiftImm(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:826
void printBankedRegOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:988
void printThumbSRImm(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1106
void printModImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1422
void printSetendOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:878
void printVectorListOneAllLanes(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1546
void printThumbAddrModeImm5S2Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1179
void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:540
void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:738
void printMandatoryRestrictedPredicateOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1013
void printVectorListFourSpacedAllLanes(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1631
void printPImmediate(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1054
void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1099
void printVPTMask(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1711
void printVectorListThree(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1514
void printVectorListFourSpaced(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1664
void printVMOVModImmOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1392
void printAdrLabelOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1078
void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1219
void printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, raw_ostream &O, bool AlwaysPrintImm0)
Definition ARMInstPrinter.cpp:566
void printThumbAddrModeImm5SOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O, unsigned Scale)
Definition ARMInstPrinter.cpp:1149
void printAddrModeTBH(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:506
void printNoHashImmediate(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1048
void printVectorIndex(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1474
void printLdStmModeOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:677
void printAddrMode5FP16Operand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:712
void printMandatoryInvertedPredicateOperand(const MCInst *MI, unsigned OpNum, const MCSubtargetInfo &STI, raw_ostream &O)
Definition ARMInstPrinter.cpp:1030
This is an important base class in LLVM.
Container class for subtarget features.
This class is intended to be used as a base class for asm properties and features specific to the tar...
Base class for the full range of assembler expressions which are needed for parsing.
@ Constant
Constant expressions.
@ Binary
Binary expressions.
WithMarkup markup(raw_ostream &OS, Markup M)
format_object< int64_t > formatHex(int64_t Value) const
raw_ostream * CommentStream
A stream that comments can be emitted to if desired.
const MCRegisterInfo & MRI
void printAnnotation(raw_ostream &OS, StringRef Annot)
Utility function for printing annotations.
format_object< int64_t > formatImm(int64_t Value) const
Utility function to print immediates in decimal or hex.
bool getUseMarkup() const
bool PrintBranchImmAsAddress
If true, a branch immediate (e.g.
MCInstPrinter(const MCAsmInfo &mai, const MCInstrInfo &mii, const MCRegisterInfo &mri)
Instances of this class represent a single low-level machine instruction.
void addOperand(const MCOperand Op)
void setOpcode(unsigned Op)
Interface to description of machine instruction set.
Instances of this class represent operands of the MCInst class.
static MCOperand createReg(MCRegister Reg)
MCRegister getReg() const
Returns the register number.
const MCExpr * getExpr() const
MCRegisterClass - Base class of TargetRegisterClass.
bool contains(MCRegister Reg) const
contains - Return true if the specified register is included in this register class.
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Wrapper class representing physical registers. Should be passed by value.
Generic base class for all target subtargets.
bool hasFeature(unsigned Feature) const
const FeatureBitset & getFeatureBits() const
StringRef - Represent a constant reference to a string, i.e.
This class implements an extremely fast bulk output stream that can only output to a stream.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
static CondCodes getOppositeCondition(CondCodes CC)
const MClassSysReg * lookupMClassSysRegBy8bitSYSmValue(unsigned SYSm)
const MClassSysReg * lookupMClassSysRegAPSRNonDeprecated(unsigned SYSm)
const MClassSysReg * lookupMClassSysRegBy12bitSYSmValue(unsigned SYSm)
unsigned char getAM3Offset(unsigned AM3Opc)
unsigned char getAM5FP16Offset(unsigned AM5Opc)
unsigned getSORegOffset(unsigned Op)
int getSOImmVal(unsigned Arg)
getSOImmVal - Given a 32-bit immediate, if it is something that can fit into an shifter_operand immed...
ShiftOpc getAM2ShiftOpc(unsigned AM2Opc)
uint64_t decodeVMOVModImm(unsigned ModImm, unsigned &EltBits)
decodeVMOVModImm - Decode a NEON/MVE modified immediate value into the element value and the element ...
unsigned getAM2IdxMode(unsigned AM2Opc)
unsigned getAM3IdxMode(unsigned AM3Opc)
unsigned getAM2Offset(unsigned AM2Opc)
const char * getAMSubModeStr(AMSubMode Mode)
float getFPImmFloat(unsigned Imm)
ShiftOpc getSORegShOp(unsigned Op)
AddrOpc getAM5Op(unsigned AM5Opc)
AddrOpc getAM5FP16Op(unsigned AM5Opc)
const char * getAddrOpcStr(AddrOpc Op)
StringRef getShiftOpcStr(ShiftOpc Op)
unsigned char getAM5Offset(unsigned AM5Opc)
AddrOpc getAM2Op(unsigned AM2Opc)
AddrOpc getAM3Op(unsigned AM3Opc)
AMSubMode getAM4SubMode(unsigned Mode)
static const char * InstSyncBOptToString(unsigned val)
static const char * MemBOptToString(unsigned val, bool HasV8)
uint64_t evaluateBranchTarget(const MCInstrDesc &InstDesc, uint64_t Addr, int64_t Imm)
static const char * IModToString(unsigned val)
static const char * IFlagsToString(unsigned val)
static const char * TraceSyncBOptToString(unsigned val)
This is an optimization pass for GlobalISel generic memory operations.
auto drop_begin(T &&RangeOrContainer, size_t N=1)
Return a range covering RangeOrContainer with the first N elements excluded.
static const char * ARMVPTPredToString(ARMVCC::VPTCodes CC)
constexpr T rotr(T V, int R)
int bit_width(T Value)
Returns the number of bits needed to represent Value if Value is nonzero.
int countr_zero(T Val)
Count number of 0's from the least significant bit to the most stopping at the first 1.
bool is_sorted(R &&Range, Compare C)
Wrapper function around std::is_sorted to check if elements in a range R are sorted with respect to a...
DWARFExpression::Operation Op
decltype(auto) cast(const From &Val)
cast - Return the argument parameter cast to the specified type.
static const char * ARMCondCodeToString(ARMCC::CondCodes CC)