308 const char *Mul1Name =
nullptr, *Mul2Name =
nullptr, *AccName =
nullptr;
309 unsigned NumOperands =
MI->getNumOperands();
310 bool RegForm =
false;
328 switch (
MI->getOpcode()) {
334 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
343 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
349 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
359 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
366 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
376 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
383 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
394 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
401 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
409 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
415 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
423 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
430 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
435 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
441 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
446 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
452 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
457 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
463 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
468 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
475 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
480 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
487 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
492 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
499 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
504 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
511 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
516 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
523 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
528 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
535 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
540 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
548 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
553 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
561 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
566 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
573 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
577 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
583 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
587 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
593 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
597 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
603 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
607 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
613 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
617 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
623 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
627 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
633 const char *DestName =
getRegName(
MI->getOperand(0).getReg());
635 if (!Mul1Name) Mul1Name =
"mem";
636 if (!Mul2Name) Mul2Name =
"mem";
637 if (!AccName) AccName =
"mem";
646 OS <<
'(' << Mul1Name <<
" * " << Mul2Name <<
") " << AccStr <<
' '
1075 const char *DestName =
nullptr, *Src1Name =
nullptr, *Src2Name =
nullptr;
1076 unsigned NumOperands =
MI->getNumOperands();
1077 bool RegForm =
false;
1088 switch (
MI->getOpcode()) {
1093 case X86::BLENDPDrri:
1094 case X86::VBLENDPDrri:
1095 case X86::VBLENDPDYrri:
1098 case X86::BLENDPDrmi:
1099 case X86::VBLENDPDrmi:
1100 case X86::VBLENDPDYrmi:
1101 if (
MI->getOperand(NumOperands - 1).isImm())
1103 MI->getOperand(NumOperands - 1).getImm(),
1109 case X86::BLENDPSrri:
1110 case X86::VBLENDPSrri:
1111 case X86::VBLENDPSYrri:
1114 case X86::BLENDPSrmi:
1115 case X86::VBLENDPSrmi:
1116 case X86::VBLENDPSYrmi:
1117 if (
MI->getOperand(NumOperands - 1).isImm())
1119 MI->getOperand(NumOperands - 1).getImm(),
1125 case X86::PBLENDWrri:
1126 case X86::VPBLENDWrri:
1127 case X86::VPBLENDWYrri:
1130 case X86::PBLENDWrmi:
1131 case X86::VPBLENDWrmi:
1132 case X86::VPBLENDWYrmi:
1133 if (
MI->getOperand(NumOperands - 1).isImm())
1135 MI->getOperand(NumOperands - 1).getImm(),
1141 case X86::VPBLENDDrri:
1142 case X86::VPBLENDDYrri:
1145 case X86::VPBLENDDrmi:
1146 case X86::VPBLENDDYrmi:
1147 if (
MI->getOperand(NumOperands - 1).isImm())
1149 MI->getOperand(NumOperands - 1).getImm(),
1155 case X86::INSERTPSrri:
1156 case X86::VINSERTPSrri:
1157 case X86::VINSERTPSZrri:
1161 if (
MI->getOperand(NumOperands - 1).isImm())
1166 case X86::INSERTPSrmi:
1167 case X86::VINSERTPSrmi:
1168 case X86::VINSERTPSZrmi:
1171 if (
MI->getOperand(NumOperands - 1).isImm())
1176 case X86::MOVLHPSrr:
1177 case X86::VMOVLHPSrr:
1178 case X86::VMOVLHPSZrr:
1185 case X86::MOVHLPSrr:
1186 case X86::VMOVHLPSrr:
1187 case X86::VMOVHLPSZrr:
1195 case X86::VMOVHPDrm:
1196 case X86::VMOVHPDZ128rm:
1203 case X86::VMOVHPSrm:
1204 case X86::VMOVHPSZ128rm:
1211 case X86::VMOVLPDrm:
1212 case X86::VMOVLPDZ128rm:
1219 case X86::VMOVLPSrm:
1220 case X86::VMOVLPSZ128rm:
1227 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1236 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1245 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1254 case X86::VPSLLDQri:
1255 case X86::VPSLLDQYri:
1256 case X86::VPSLLDQZ128ri:
1257 case X86::VPSLLDQZ256ri:
1258 case X86::VPSLLDQZri:
1261 case X86::VPSLLDQZ128mi:
1262 case X86::VPSLLDQZ256mi:
1263 case X86::VPSLLDQZmi:
1265 if (
MI->getOperand(NumOperands - 1).isImm())
1267 MI->getOperand(NumOperands - 1).getImm(),
1272 case X86::VPSRLDQri:
1273 case X86::VPSRLDQYri:
1274 case X86::VPSRLDQZ128ri:
1275 case X86::VPSRLDQZ256ri:
1276 case X86::VPSRLDQZri:
1279 case X86::VPSRLDQZ128mi:
1280 case X86::VPSRLDQZ256mi:
1281 case X86::VPSRLDQZmi:
1283 if (
MI->getOperand(NumOperands - 1).isImm())
1285 MI->getOperand(NumOperands - 1).getImm(),
1290 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1295 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1297 if (
MI->getOperand(NumOperands - 1).isImm())
1299 MI->getOperand(NumOperands - 1).getImm(),
1306 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1313 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1315 if (
MI->getOperand(NumOperands - 1).isImm())
1317 MI->getOperand(NumOperands - 1).getImm(),
1324 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1331 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1333 if (
MI->getOperand(NumOperands - 1).isImm())
1335 MI->getOperand(NumOperands - 1).getImm(),
1340 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1345 if (
MI->getOperand(NumOperands - 1).isImm())
1347 MI->getOperand(NumOperands - 1).getImm(),
1352 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1357 if (
MI->getOperand(NumOperands - 1).isImm())
1359 MI->getOperand(NumOperands - 1).getImm(),
1364 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1369 if (
MI->getOperand(NumOperands - 1).isImm())
1371 MI->getOperand(NumOperands - 1).getImm(),
1375 case X86::MMX_PSHUFWri:
1379 case X86::MMX_PSHUFWmi:
1381 if (
MI->getOperand(NumOperands - 1).isImm())
1396 case X86::MMX_PUNPCKHBWrr:
1397 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1402 case X86::MMX_PUNPCKHBWrm:
1403 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1409 case X86::MMX_PUNPCKHWDrr:
1410 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1415 case X86::MMX_PUNPCKHWDrm:
1416 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1422 case X86::MMX_PUNPCKHDQrr:
1423 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1428 case X86::MMX_PUNPCKHDQrm:
1429 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1435 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1440 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1446 case X86::MMX_PUNPCKLBWrr:
1447 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1452 case X86::MMX_PUNPCKLBWrm:
1453 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1459 case X86::MMX_PUNPCKLWDrr:
1460 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1465 case X86::MMX_PUNPCKLWDrm:
1466 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1472 case X86::MMX_PUNPCKLDQrr:
1473 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1478 case X86::MMX_PUNPCKLDQrm:
1479 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1485 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1490 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1496 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1501 if (
MI->getOperand(NumOperands - 1).isImm())
1503 MI->getOperand(NumOperands - 1).getImm(), ShuffleMask);
1504 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1509 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1514 if (
MI->getOperand(NumOperands - 1).isImm())
1516 MI->getOperand(NumOperands - 1).getImm(),
1518 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1523 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1529 MI->getOperand(NumOperands - 1).getImm(),
1531 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1536 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1542 MI->getOperand(NumOperands - 1).getImm(),
1544 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1549 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1555 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1560 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1566 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1571 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1577 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1582 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1588 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1593 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1597 if (
MI->getOperand(NumOperands - 1).isImm())
1599 MI->getOperand(NumOperands - 1).getImm(),
1605 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1609 if (
MI->getOperand(NumOperands - 1).isImm())
1611 MI->getOperand(NumOperands - 1).getImm(),
1616 case X86::VPERM2F128rri:
1617 case X86::VPERM2I128rri:
1621 case X86::VPERM2F128rmi:
1622 case X86::VPERM2I128rmi:
1624 if (
MI->getOperand(NumOperands - 1).isImm())
1632 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1636 if (
MI->getOperand(NumOperands - 1).isImm())
1638 MI->getOperand(NumOperands - 1).getImm(),
1644 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1648 if (
MI->getOperand(NumOperands - 1).isImm())
1650 MI->getOperand(NumOperands - 1).getImm(),
1657 case X86::VMOVSDZrr:
1666 case X86::VMOVSSZrr:
1673 case X86::VMOVSHZrr:
1680 case X86::MOVPQI2QIrr:
1681 case X86::MOVZPQILo2PQIrr:
1682 case X86::VMOVPQI2QIrr:
1683 case X86::VMOVPQI2QIZrr:
1684 case X86::VMOVZPQILo2PQIrr:
1685 case X86::VMOVZPQILo2PQIZrr:
1692 if (
MI->getOperand(2).isImm() &&
1693 MI->getOperand(3).isImm())
1695 MI->getOperand(3).getImm(), ShuffleMask);
1702 if (
MI->getOperand(3).isImm() &&
1703 MI->getOperand(4).isImm())
1705 MI->getOperand(4).getImm(), ShuffleMask);
1712 case X86::VBROADCASTF128rm:
1713 case X86::VBROADCASTI128rm:
1745 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1753 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1762 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1771 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1778 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1785 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1792 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1799 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1806 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1815 if (ShuffleMask.empty())
1818 if (!DestName) DestName = Src1Name;
1829 if (Src1Name == Src2Name) {
1830 for (
unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1831 if ((
int)ShuffleMask[i] >= 0 &&
1832 ShuffleMask[i] >= (
int)e)
1833 ShuffleMask[i] -= e;
1840 for (
unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1850 bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
1851 const char *SrcName = isSrc1 ? Src1Name : Src2Name;
1852 OS << (SrcName ? SrcName :
"mem") <<
'[';
1853 bool IsFirst =
true;
1855 (ShuffleMask[i] < (
int)ShuffleMask.size()) == isSrc1) {
1863 OS << ShuffleMask[i] % ShuffleMask.size();