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 <<
' '
1080 const char *DestName =
nullptr, *Src1Name =
nullptr, *Src2Name =
nullptr;
1081 unsigned NumOperands =
MI->getNumOperands();
1082 bool RegForm =
false;
1093 switch (
MI->getOpcode()) {
1098 case X86::BLENDPDrri:
1099 case X86::VBLENDPDrri:
1100 case X86::VBLENDPDYrri:
1103 case X86::BLENDPDrmi:
1104 case X86::VBLENDPDrmi:
1105 case X86::VBLENDPDYrmi:
1106 if (
MI->getOperand(NumOperands - 1).isImm())
1108 MI->getOperand(NumOperands - 1).getImm(),
1114 case X86::BLENDPSrri:
1115 case X86::VBLENDPSrri:
1116 case X86::VBLENDPSYrri:
1119 case X86::BLENDPSrmi:
1120 case X86::VBLENDPSrmi:
1121 case X86::VBLENDPSYrmi:
1122 if (
MI->getOperand(NumOperands - 1).isImm())
1124 MI->getOperand(NumOperands - 1).getImm(),
1130 case X86::PBLENDWrri:
1131 case X86::VPBLENDWrri:
1132 case X86::VPBLENDWYrri:
1135 case X86::PBLENDWrmi:
1136 case X86::VPBLENDWrmi:
1137 case X86::VPBLENDWYrmi:
1138 if (
MI->getOperand(NumOperands - 1).isImm())
1140 MI->getOperand(NumOperands - 1).getImm(),
1146 case X86::VPBLENDDrri:
1147 case X86::VPBLENDDYrri:
1150 case X86::VPBLENDDrmi:
1151 case X86::VPBLENDDYrmi:
1152 if (
MI->getOperand(NumOperands - 1).isImm())
1154 MI->getOperand(NumOperands - 1).getImm(),
1160 case X86::INSERTPSrri:
1161 case X86::VINSERTPSrri:
1162 case X86::VINSERTPSZrri:
1166 if (
MI->getOperand(NumOperands - 1).isImm())
1171 case X86::INSERTPSrmi:
1172 case X86::VINSERTPSrmi:
1173 case X86::VINSERTPSZrmi:
1176 if (
MI->getOperand(NumOperands - 1).isImm())
1181 case X86::MOVLHPSrr:
1182 case X86::VMOVLHPSrr:
1183 case X86::VMOVLHPSZrr:
1190 case X86::MOVHLPSrr:
1191 case X86::VMOVHLPSrr:
1192 case X86::VMOVHLPSZrr:
1200 case X86::VMOVHPDrm:
1201 case X86::VMOVHPDZ128rm:
1208 case X86::VMOVHPSrm:
1209 case X86::VMOVHPSZ128rm:
1216 case X86::VMOVLPDrm:
1217 case X86::VMOVLPDZ128rm:
1224 case X86::VMOVLPSrm:
1225 case X86::VMOVLPSZ128rm:
1232 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1241 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1250 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1259 case X86::VPSLLDQri:
1260 case X86::VPSLLDQYri:
1261 case X86::VPSLLDQZ128ri:
1262 case X86::VPSLLDQZ256ri:
1263 case X86::VPSLLDQZri:
1266 case X86::VPSLLDQZ128mi:
1267 case X86::VPSLLDQZ256mi:
1268 case X86::VPSLLDQZmi:
1270 if (
MI->getOperand(NumOperands - 1).isImm())
1272 MI->getOperand(NumOperands - 1).getImm(),
1277 case X86::VPSRLDQri:
1278 case X86::VPSRLDQYri:
1279 case X86::VPSRLDQZ128ri:
1280 case X86::VPSRLDQZ256ri:
1281 case X86::VPSRLDQZri:
1284 case X86::VPSRLDQZ128mi:
1285 case X86::VPSRLDQZ256mi:
1286 case X86::VPSRLDQZmi:
1288 if (
MI->getOperand(NumOperands - 1).isImm())
1290 MI->getOperand(NumOperands - 1).getImm(),
1295 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1300 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1302 if (
MI->getOperand(NumOperands - 1).isImm())
1304 MI->getOperand(NumOperands - 1).getImm(),
1311 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1318 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1320 if (
MI->getOperand(NumOperands - 1).isImm())
1322 MI->getOperand(NumOperands - 1).getImm(),
1329 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1336 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1338 if (
MI->getOperand(NumOperands - 1).isImm())
1340 MI->getOperand(NumOperands - 1).getImm(),
1345 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1350 if (
MI->getOperand(NumOperands - 1).isImm())
1352 MI->getOperand(NumOperands - 1).getImm(),
1357 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1362 if (
MI->getOperand(NumOperands - 1).isImm())
1364 MI->getOperand(NumOperands - 1).getImm(),
1369 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1374 if (
MI->getOperand(NumOperands - 1).isImm())
1376 MI->getOperand(NumOperands - 1).getImm(),
1380 case X86::MMX_PSHUFWri:
1384 case X86::MMX_PSHUFWmi:
1386 if (
MI->getOperand(NumOperands - 1).isImm())
1401 case X86::MMX_PUNPCKHBWrr:
1402 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1407 case X86::MMX_PUNPCKHBWrm:
1408 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1414 case X86::MMX_PUNPCKHWDrr:
1415 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1420 case X86::MMX_PUNPCKHWDrm:
1421 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1427 case X86::MMX_PUNPCKHDQrr:
1428 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1433 case X86::MMX_PUNPCKHDQrm:
1434 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1440 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1445 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1451 case X86::MMX_PUNPCKLBWrr:
1452 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1457 case X86::MMX_PUNPCKLBWrm:
1458 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1464 case X86::MMX_PUNPCKLWDrr:
1465 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1470 case X86::MMX_PUNPCKLWDrm:
1471 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1477 case X86::MMX_PUNPCKLDQrr:
1478 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1483 case X86::MMX_PUNPCKLDQrm:
1484 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1490 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1495 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1501 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1506 if (
MI->getOperand(NumOperands - 1).isImm())
1508 MI->getOperand(NumOperands - 1).getImm(), ShuffleMask);
1509 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1514 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1519 if (
MI->getOperand(NumOperands - 1).isImm())
1521 MI->getOperand(NumOperands - 1).getImm(),
1523 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1528 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1534 MI->getOperand(NumOperands - 1).getImm(),
1536 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1541 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1547 MI->getOperand(NumOperands - 1).getImm(),
1549 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1554 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1560 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1565 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1571 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1576 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1582 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1587 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1593 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1598 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1602 if (
MI->getOperand(NumOperands - 1).isImm())
1604 MI->getOperand(NumOperands - 1).getImm(),
1610 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1614 if (
MI->getOperand(NumOperands - 1).isImm())
1616 MI->getOperand(NumOperands - 1).getImm(),
1621 case X86::VPERM2F128rri:
1622 case X86::VPERM2I128rri:
1626 case X86::VPERM2F128rmi:
1627 case X86::VPERM2I128rmi:
1629 if (
MI->getOperand(NumOperands - 1).isImm())
1637 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1641 if (
MI->getOperand(NumOperands - 1).isImm())
1643 MI->getOperand(NumOperands - 1).getImm(),
1649 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1653 if (
MI->getOperand(NumOperands - 1).isImm())
1655 MI->getOperand(NumOperands - 1).getImm(),
1662 case X86::VMOVSDZrr:
1671 case X86::VMOVSSZrr:
1678 case X86::VMOVSHZrr:
1685 case X86::MOVPQI2QIrr:
1686 case X86::MOVZPQILo2PQIrr:
1687 case X86::VMOVPQI2QIrr:
1688 case X86::VMOVPQI2QIZrr:
1689 case X86::VMOVZPQILo2PQIrr:
1690 case X86::VMOVZPQILo2PQIZrr:
1697 if (
MI->getOperand(2).isImm() &&
1698 MI->getOperand(3).isImm())
1700 MI->getOperand(3).getImm(), ShuffleMask);
1707 if (
MI->getOperand(3).isImm() &&
1708 MI->getOperand(4).isImm())
1710 MI->getOperand(4).getImm(), ShuffleMask);
1717 case X86::VBROADCASTF128rm:
1718 case X86::VBROADCASTI128rm:
1750 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1758 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1767 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());
1811 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1820 if (ShuffleMask.empty())
1823 if (!DestName) DestName = Src1Name;
1834 if (Src1Name == Src2Name) {
1835 for (
unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1836 if ((
int)ShuffleMask[i] >= 0 &&
1837 ShuffleMask[i] >= (
int)e)
1838 ShuffleMask[i] -= e;
1845 for (
unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1855 bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
1856 const char *SrcName = isSrc1 ? Src1Name : Src2Name;
1857 OS << (SrcName ? SrcName :
"mem") <<
'[';
1858 bool IsFirst =
true;
1860 (ShuffleMask[i] < (
int)ShuffleMask.size()) == isSrc1) {
1868 OS << ShuffleMask[i] % ShuffleMask.size();