307 const char *Mul1Name =
nullptr, *Mul2Name =
nullptr, *AccName =
nullptr;
308 unsigned NumOperands =
MI->getNumOperands();
309 bool RegForm =
false;
327 switch (
MI->getOpcode()) {
333 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
342 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
348 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
358 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
365 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
375 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
382 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
393 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
400 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
408 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
414 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
422 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
429 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
434 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
440 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
445 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
451 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
456 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
462 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
467 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
474 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
479 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
486 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
491 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
498 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
503 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
510 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
515 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
522 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
527 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
534 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
539 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
547 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
552 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
560 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
565 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
572 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
576 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
582 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
586 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
592 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
596 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
602 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
606 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
612 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
616 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
622 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
626 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
632 const char *DestName =
getRegName(
MI->getOperand(0).getReg());
634 if (!Mul1Name) Mul1Name =
"mem";
635 if (!Mul2Name) Mul2Name =
"mem";
636 if (!AccName) AccName =
"mem";
645 OS <<
'(' << Mul1Name <<
" * " << Mul2Name <<
") " << AccStr <<
' '
1073 const char *DestName =
nullptr, *Src1Name =
nullptr, *Src2Name =
nullptr;
1074 unsigned NumOperands =
MI->getNumOperands();
1075 bool RegForm =
false;
1086 switch (
MI->getOpcode()) {
1091 case X86::BLENDPDrri:
1092 case X86::VBLENDPDrri:
1093 case X86::VBLENDPDYrri:
1096 case X86::BLENDPDrmi:
1097 case X86::VBLENDPDrmi:
1098 case X86::VBLENDPDYrmi:
1099 if (
MI->getOperand(NumOperands - 1).isImm())
1101 MI->getOperand(NumOperands - 1).getImm(),
1107 case X86::BLENDPSrri:
1108 case X86::VBLENDPSrri:
1109 case X86::VBLENDPSYrri:
1112 case X86::BLENDPSrmi:
1113 case X86::VBLENDPSrmi:
1114 case X86::VBLENDPSYrmi:
1115 if (
MI->getOperand(NumOperands - 1).isImm())
1117 MI->getOperand(NumOperands - 1).getImm(),
1123 case X86::PBLENDWrri:
1124 case X86::VPBLENDWrri:
1125 case X86::VPBLENDWYrri:
1128 case X86::PBLENDWrmi:
1129 case X86::VPBLENDWrmi:
1130 case X86::VPBLENDWYrmi:
1131 if (
MI->getOperand(NumOperands - 1).isImm())
1133 MI->getOperand(NumOperands - 1).getImm(),
1139 case X86::VPBLENDDrri:
1140 case X86::VPBLENDDYrri:
1143 case X86::VPBLENDDrmi:
1144 case X86::VPBLENDDYrmi:
1145 if (
MI->getOperand(NumOperands - 1).isImm())
1147 MI->getOperand(NumOperands - 1).getImm(),
1153 case X86::INSERTPSrri:
1154 case X86::VINSERTPSrri:
1155 case X86::VINSERTPSZrri:
1159 if (
MI->getOperand(NumOperands - 1).isImm())
1164 case X86::INSERTPSrmi:
1165 case X86::VINSERTPSrmi:
1166 case X86::VINSERTPSZrmi:
1169 if (
MI->getOperand(NumOperands - 1).isImm())
1174 case X86::MOVLHPSrr:
1175 case X86::VMOVLHPSrr:
1176 case X86::VMOVLHPSZrr:
1183 case X86::MOVHLPSrr:
1184 case X86::VMOVHLPSrr:
1185 case X86::VMOVHLPSZrr:
1193 case X86::VMOVHPDrm:
1194 case X86::VMOVHPDZ128rm:
1201 case X86::VMOVHPSrm:
1202 case X86::VMOVHPSZ128rm:
1209 case X86::VMOVLPDrm:
1210 case X86::VMOVLPDZ128rm:
1217 case X86::VMOVLPSrm:
1218 case X86::VMOVLPSZ128rm:
1225 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1234 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1243 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1252 case X86::VPSLLDQri:
1253 case X86::VPSLLDQYri:
1254 case X86::VPSLLDQZ128ri:
1255 case X86::VPSLLDQZ256ri:
1256 case X86::VPSLLDQZri:
1259 case X86::VPSLLDQZ128mi:
1260 case X86::VPSLLDQZ256mi:
1261 case X86::VPSLLDQZmi:
1263 if (
MI->getOperand(NumOperands - 1).isImm())
1265 MI->getOperand(NumOperands - 1).getImm(),
1270 case X86::VPSRLDQri:
1271 case X86::VPSRLDQYri:
1272 case X86::VPSRLDQZ128ri:
1273 case X86::VPSRLDQZ256ri:
1274 case X86::VPSRLDQZri:
1277 case X86::VPSRLDQZ128mi:
1278 case X86::VPSRLDQZ256mi:
1279 case X86::VPSRLDQZmi:
1281 if (
MI->getOperand(NumOperands - 1).isImm())
1283 MI->getOperand(NumOperands - 1).getImm(),
1288 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1293 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1295 if (
MI->getOperand(NumOperands - 1).isImm())
1297 MI->getOperand(NumOperands - 1).getImm(),
1304 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1311 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1313 if (
MI->getOperand(NumOperands - 1).isImm())
1315 MI->getOperand(NumOperands - 1).getImm(),
1322 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1329 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1331 if (
MI->getOperand(NumOperands - 1).isImm())
1333 MI->getOperand(NumOperands - 1).getImm(),
1338 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1343 if (
MI->getOperand(NumOperands - 1).isImm())
1345 MI->getOperand(NumOperands - 1).getImm(),
1350 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1355 if (
MI->getOperand(NumOperands - 1).isImm())
1357 MI->getOperand(NumOperands - 1).getImm(),
1362 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1367 if (
MI->getOperand(NumOperands - 1).isImm())
1369 MI->getOperand(NumOperands - 1).getImm(),
1373 case X86::MMX_PSHUFWri:
1377 case X86::MMX_PSHUFWmi:
1379 if (
MI->getOperand(NumOperands - 1).isImm())
1394 case X86::MMX_PUNPCKHBWrr:
1395 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1400 case X86::MMX_PUNPCKHBWrm:
1401 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1407 case X86::MMX_PUNPCKHWDrr:
1408 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1413 case X86::MMX_PUNPCKHWDrm:
1414 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1420 case X86::MMX_PUNPCKHDQrr:
1421 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1426 case X86::MMX_PUNPCKHDQrm:
1427 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1433 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1438 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1444 case X86::MMX_PUNPCKLBWrr:
1445 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1450 case X86::MMX_PUNPCKLBWrm:
1451 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1457 case X86::MMX_PUNPCKLWDrr:
1458 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1463 case X86::MMX_PUNPCKLWDrm:
1464 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1470 case X86::MMX_PUNPCKLDQrr:
1471 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1476 case X86::MMX_PUNPCKLDQrm:
1477 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1483 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1488 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1494 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1499 if (
MI->getOperand(NumOperands - 1).isImm())
1501 MI->getOperand(NumOperands - 1).getImm(), ShuffleMask);
1502 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1507 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1512 if (
MI->getOperand(NumOperands - 1).isImm())
1514 MI->getOperand(NumOperands - 1).getImm(),
1516 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1521 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1527 MI->getOperand(NumOperands - 1).getImm(),
1529 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1534 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1540 MI->getOperand(NumOperands - 1).getImm(),
1542 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1547 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1553 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1558 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1564 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1569 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1575 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1580 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1586 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1591 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1595 if (
MI->getOperand(NumOperands - 1).isImm())
1597 MI->getOperand(NumOperands - 1).getImm(),
1603 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1607 if (
MI->getOperand(NumOperands - 1).isImm())
1609 MI->getOperand(NumOperands - 1).getImm(),
1614 case X86::VPERM2F128rri:
1615 case X86::VPERM2I128rri:
1619 case X86::VPERM2F128rmi:
1620 case X86::VPERM2I128rmi:
1622 if (
MI->getOperand(NumOperands - 1).isImm())
1630 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1634 if (
MI->getOperand(NumOperands - 1).isImm())
1636 MI->getOperand(NumOperands - 1).getImm(),
1642 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1646 if (
MI->getOperand(NumOperands - 1).isImm())
1648 MI->getOperand(NumOperands - 1).getImm(),
1655 case X86::VMOVSDZrr:
1664 case X86::VMOVSSZrr:
1671 case X86::VMOVSHZrr:
1678 case X86::MOVPQI2QIrr:
1679 case X86::MOVZPQILo2PQIrr:
1680 case X86::VMOVPQI2QIrr:
1681 case X86::VMOVPQI2QIZrr:
1682 case X86::VMOVZPQILo2PQIrr:
1683 case X86::VMOVZPQILo2PQIZrr:
1690 if (
MI->getOperand(2).isImm() &&
1691 MI->getOperand(3).isImm())
1693 MI->getOperand(3).getImm(), ShuffleMask);
1700 if (
MI->getOperand(3).isImm() &&
1701 MI->getOperand(4).isImm())
1703 MI->getOperand(4).getImm(), ShuffleMask);
1710 case X86::VBROADCASTF128rm:
1711 case X86::VBROADCASTI128rm:
1743 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1751 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1760 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1769 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1776 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1783 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1790 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1797 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1804 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1813 if (ShuffleMask.empty())
1816 if (!DestName) DestName = Src1Name;
1827 if (Src1Name == Src2Name) {
1828 for (
unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1829 if ((
int)ShuffleMask[i] >= 0 &&
1830 ShuffleMask[i] >= (
int)e)
1831 ShuffleMask[i] -= e;
1838 for (
unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1848 bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
1849 const char *SrcName = isSrc1 ? Src1Name : Src2Name;
1850 OS << (SrcName ? SrcName :
"mem") <<
'[';
1851 bool IsFirst =
true;
1853 (ShuffleMask[i] < (
int)ShuffleMask.size()) == isSrc1) {
1861 OS << ShuffleMask[i] % ShuffleMask.size();