-//===-- X86InstComments.cpp - Generate verbose-asm comments for instrs ----===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This defines functionality used to emit comments about X86 instructions to
-// an output stream for -fverbose-asm.
-//
-//===----------------------------------------------------------------------===//
-
-#include "X86InstComments.h"
-#include "MCTargetDesc/X86MCTargetDesc.h"
-#include "Utils/X86ShuffleDecode.h"
-#include "llvm/MC/MCInst.h"
-#include "llvm/CodeGen/MachineValueType.h"
-#include "llvm/Support/raw_ostream.h"
-
-using namespace llvm;
-
-//===----------------------------------------------------------------------===//
-// Top Level Entrypoint
-//===----------------------------------------------------------------------===//
-
-/// EmitAnyX86InstComments - This function decodes x86 instructions and prints
-/// newline terminated strings to the specified string if desired. This
-/// information is shown in disassembly dumps when verbose assembly is enabled.
-bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS,
- const char *(*getRegName)(unsigned)) {
- // If this is a shuffle operation, the switch should fill in this state.
- SmallVector<int, 8> ShuffleMask;
- const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr;
-
- switch (MI->getOpcode()) {
- default:
- // Not an instruction for which we can decode comments.
- return false;
-
- case X86::BLENDPDrri:
- case X86::VBLENDPDrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::BLENDPDrmi:
- case X86::VBLENDPDrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v2f64,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VBLENDPDYrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VBLENDPDYrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v4f64,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
-
- case X86::BLENDPSrri:
- case X86::VBLENDPSrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::BLENDPSrmi:
- case X86::VBLENDPSrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v4f32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VBLENDPSYrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VBLENDPSYrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v8f32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
-
- case X86::PBLENDWrri:
- case X86::VPBLENDWrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PBLENDWrmi:
- case X86::VPBLENDWrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v8i16,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VPBLENDWYrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPBLENDWYrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v16i16,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
-
- case X86::VPBLENDDrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPBLENDDrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v4i32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
-
- case X86::VPBLENDDYrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPBLENDDYrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeBLENDMask(MVT::v8i32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
-
- case X86::INSERTPSrr:
- case X86::VINSERTPSrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::INSERTPSrm:
- case X86::VINSERTPSrm:
- DestName = getRegName(MI->getOperand(0).getReg());
- Src1Name = getRegName(MI->getOperand(1).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeINSERTPSMask(MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
- case X86::MOVLHPSrr:
- case X86::VMOVLHPSrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeMOVLHPSMask(2, ShuffleMask);
- break;
-
- case X86::MOVHLPSrr:
- case X86::VMOVHLPSrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeMOVHLPSMask(2, ShuffleMask);
- break;
-
- case X86::MOVSLDUPrr:
- case X86::VMOVSLDUPrr:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::MOVSLDUPrm:
- case X86::VMOVSLDUPrm:
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeMOVSLDUPMask(MVT::v4f32, ShuffleMask);
- break;
-
- case X86::VMOVSHDUPYrr:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VMOVSHDUPYrm:
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeMOVSHDUPMask(MVT::v8f32, ShuffleMask);
- break;
-
- case X86::VMOVSLDUPYrr:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VMOVSLDUPYrm:
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeMOVSLDUPMask(MVT::v8f32, ShuffleMask);
- break;
-
- case X86::MOVSHDUPrr:
- case X86::VMOVSHDUPrr:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::MOVSHDUPrm:
- case X86::VMOVSHDUPrm:
- DestName = getRegName(MI->getOperand(0).getReg());
+//===-- X86InstComments.cpp - Generate verbose-asm comments for instrs ----===//\r
+//\r
+// The LLVM Compiler Infrastructure\r
+//\r
+// This file is distributed under the University of Illinois Open Source\r
+// License. See LICENSE.TXT for details.\r
+//\r
+//===----------------------------------------------------------------------===//\r
+//\r
+// This defines functionality used to emit comments about X86 instructions to\r
+// an output stream for -fverbose-asm.\r
+//\r
+//===----------------------------------------------------------------------===//\r
+\r
+#include "X86InstComments.h"\r
+#include "MCTargetDesc/X86MCTargetDesc.h"\r
+#include "Utils/X86ShuffleDecode.h"\r
+#include "llvm/MC/MCInst.h"\r
+#include "llvm/CodeGen/MachineValueType.h"\r
+#include "llvm/Support/raw_ostream.h"\r
+\r
+using namespace llvm;\r
+\r
+//===----------------------------------------------------------------------===//\r
+// Top Level Entrypoint\r
+//===----------------------------------------------------------------------===//\r
+\r
+/// EmitAnyX86InstComments - This function decodes x86 instructions and prints\r
+/// newline terminated strings to the specified string if desired. This\r
+/// information is shown in disassembly dumps when verbose assembly is enabled.\r
+bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS,\r
+ const char *(*getRegName)(unsigned)) {\r
+ // If this is a shuffle operation, the switch should fill in this state.\r
+ SmallVector<int, 8> ShuffleMask;\r
+ const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr;\r
+\r
+ switch (MI->getOpcode()) {\r
+ default:\r
+ // Not an instruction for which we can decode comments.\r
+ return false;\r
+\r
+ case X86::BLENDPDrri:\r
+ case X86::VBLENDPDrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::BLENDPDrmi:\r
+ case X86::VBLENDPDrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v2f64,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VBLENDPDYrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VBLENDPDYrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v4f64,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+\r
+ case X86::BLENDPSrri:\r
+ case X86::VBLENDPSrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::BLENDPSrmi:\r
+ case X86::VBLENDPSrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v4f32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VBLENDPSYrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VBLENDPSYrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v8f32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+\r
+ case X86::PBLENDWrri:\r
+ case X86::VPBLENDWrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PBLENDWrmi:\r
+ case X86::VPBLENDWrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v8i16,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VPBLENDWYrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPBLENDWYrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v16i16,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+\r
+ case X86::VPBLENDDrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPBLENDDrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v4i32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+\r
+ case X86::VPBLENDDYrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPBLENDDYrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeBLENDMask(MVT::v8i32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+\r
+ case X86::INSERTPSrr:\r
+ case X86::VINSERTPSrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::INSERTPSrm:\r
+ case X86::VINSERTPSrm:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeINSERTPSMask(MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+ case X86::MOVLHPSrr:\r
+ case X86::VMOVLHPSrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeMOVLHPSMask(2, ShuffleMask);\r
+ break;\r
+\r
+ case X86::MOVHLPSrr:\r
+ case X86::VMOVHLPSrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeMOVHLPSMask(2, ShuffleMask);\r
+ break;\r
+\r
+ case X86::MOVSLDUPrr:\r
+ case X86::VMOVSLDUPrr:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::MOVSLDUPrm:\r
+ case X86::VMOVSLDUPrm:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeMOVSLDUPMask(MVT::v4f32, ShuffleMask);\r
+ break;\r
+\r
+ case X86::VMOVSHDUPYrr:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VMOVSHDUPYrm:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeMOVSHDUPMask(MVT::v8f32, ShuffleMask);\r
+ break;\r
+\r
+ case X86::VMOVSLDUPYrr:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VMOVSLDUPYrm:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeMOVSLDUPMask(MVT::v8f32, ShuffleMask);\r
+ break;\r
+\r
+ case X86::MOVSHDUPrr:\r
+ case X86::VMOVSHDUPrr:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::MOVSHDUPrm:\r
+ case X86::VMOVSHDUPrm:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
DecodeMOVSHDUPMask(MVT::v4f32, ShuffleMask);\r
break;\r
\r
case X86::PSLLDQri:\r
case X86::VPSLLDQri:\r
Src1Name = getRegName(MI->getOperand(1).getReg());\r
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSLLDQMask(MVT::v16i8,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
- case X86::VPSLLDQYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSLLDQMask(MVT::v32i8,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
- case X86::PSRLDQri:
- case X86::VPSRLDQri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSRLDQMask(MVT::v16i8,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
- case X86::VPSRLDQYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSRLDQMask(MVT::v32i8,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
- case X86::PALIGNR128rr:
- case X86::VPALIGNR128rr:
- Src1Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PALIGNR128rm:
- case X86::VPALIGNR128rm:
- Src2Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePALIGNRMask(MVT::v16i8,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
- case X86::VPALIGNR256rr:
- Src1Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPALIGNR256rm:
- Src2Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePALIGNRMask(MVT::v32i8,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
- case X86::PSHUFDri:
- case X86::VPSHUFDri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::PSHUFDmi:
- case X86::VPSHUFDmi:
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFMask(MVT::v4i32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
- case X86::VPSHUFDYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPSHUFDYmi:
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFMask(MVT::v8i32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
-
- case X86::PSHUFHWri:
- case X86::VPSHUFHWri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::PSHUFHWmi:
- case X86::VPSHUFHWmi:
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFHWMask(MVT::v8i16,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
- case X86::VPSHUFHWYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPSHUFHWYmi:
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFHWMask(MVT::v16i16,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
- case X86::PSHUFLWri:
- case X86::VPSHUFLWri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::PSHUFLWmi:
- case X86::VPSHUFLWmi:
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFLWMask(MVT::v8i16,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
- case X86::VPSHUFLWYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPSHUFLWYmi:
- DestName = getRegName(MI->getOperand(0).getReg());
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFLWMask(MVT::v16i16,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- break;
-
- case X86::PUNPCKHBWrr:
- case X86::VPUNPCKHBWrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKHBWrm:
- case X86::VPUNPCKHBWrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v16i8, ShuffleMask);
- break;
- case X86::VPUNPCKHBWYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKHBWYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v32i8, ShuffleMask);
- break;
- case X86::PUNPCKHWDrr:
- case X86::VPUNPCKHWDrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKHWDrm:
- case X86::VPUNPCKHWDrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v8i16, ShuffleMask);
- break;
- case X86::VPUNPCKHWDYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKHWDYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v16i16, ShuffleMask);
- break;
- case X86::PUNPCKHDQrr:
- case X86::VPUNPCKHDQrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKHDQrm:
- case X86::VPUNPCKHDQrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v4i32, ShuffleMask);
- break;
- case X86::VPUNPCKHDQYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKHDQYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v8i32, ShuffleMask);
- break;
- case X86::VPUNPCKHDQZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKHDQZrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v16i32, ShuffleMask);
- break;
- case X86::PUNPCKHQDQrr:
- case X86::VPUNPCKHQDQrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKHQDQrm:
- case X86::VPUNPCKHQDQrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v2i64, ShuffleMask);
- break;
- case X86::VPUNPCKHQDQYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKHQDQYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v4i64, ShuffleMask);
- break;
- case X86::VPUNPCKHQDQZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKHQDQZrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKHMask(MVT::v8i64, ShuffleMask);
- break;
-
- case X86::PUNPCKLBWrr:
- case X86::VPUNPCKLBWrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKLBWrm:
- case X86::VPUNPCKLBWrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v16i8, ShuffleMask);
- break;
- case X86::VPUNPCKLBWYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKLBWYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v32i8, ShuffleMask);
- break;
- case X86::PUNPCKLWDrr:
- case X86::VPUNPCKLWDrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKLWDrm:
- case X86::VPUNPCKLWDrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v8i16, ShuffleMask);
- break;
- case X86::VPUNPCKLWDYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKLWDYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v16i16, ShuffleMask);
- break;
- case X86::PUNPCKLDQrr:
- case X86::VPUNPCKLDQrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKLDQrm:
- case X86::VPUNPCKLDQrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v4i32, ShuffleMask);
- break;
- case X86::VPUNPCKLDQYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKLDQYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v8i32, ShuffleMask);
- break;
- case X86::VPUNPCKLDQZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKLDQZrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v16i32, ShuffleMask);
- break;
- case X86::PUNPCKLQDQrr:
- case X86::VPUNPCKLQDQrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::PUNPCKLQDQrm:
- case X86::VPUNPCKLQDQrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v2i64, ShuffleMask);
- break;
- case X86::VPUNPCKLQDQYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKLQDQYrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v4i64, ShuffleMask);
- break;
- case X86::VPUNPCKLQDQZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPUNPCKLQDQZrm:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- DecodeUNPCKLMask(MVT::v8i64, ShuffleMask);
- break;
-
- case X86::SHUFPDrri:
- case X86::VSHUFPDrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::SHUFPDrmi:
- case X86::VSHUFPDrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeSHUFPMask(MVT::v2f64,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VSHUFPDYrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VSHUFPDYrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeSHUFPMask(MVT::v4f64,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
-
- case X86::SHUFPSrri:
- case X86::VSHUFPSrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::SHUFPSrmi:
- case X86::VSHUFPSrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeSHUFPMask(MVT::v4f32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VSHUFPSYrri:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VSHUFPSYrmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeSHUFPMask(MVT::v8f32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
-
- case X86::UNPCKLPDrr:
- case X86::VUNPCKLPDrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::UNPCKLPDrm:
- case X86::VUNPCKLPDrm:
- DecodeUNPCKLMask(MVT::v2f64, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKLPDYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKLPDYrm:
- DecodeUNPCKLMask(MVT::v4f64, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKLPDZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKLPDZrm:
- DecodeUNPCKLMask(MVT::v8f64, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::UNPCKLPSrr:
- case X86::VUNPCKLPSrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::UNPCKLPSrm:
- case X86::VUNPCKLPSrm:
- DecodeUNPCKLMask(MVT::v4f32, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKLPSYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKLPSYrm:
- DecodeUNPCKLMask(MVT::v8f32, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKLPSZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKLPSZrm:
- DecodeUNPCKLMask(MVT::v16f32, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::UNPCKHPDrr:
- case X86::VUNPCKHPDrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::UNPCKHPDrm:
- case X86::VUNPCKHPDrm:
- DecodeUNPCKHMask(MVT::v2f64, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKHPDYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKHPDYrm:
- DecodeUNPCKHMask(MVT::v4f64, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKHPDZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKHPDZrm:
- DecodeUNPCKHMask(MVT::v8f64, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::UNPCKHPSrr:
- case X86::VUNPCKHPSrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::UNPCKHPSrm:
- case X86::VUNPCKHPSrm:
- DecodeUNPCKHMask(MVT::v4f32, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKHPSYrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKHPSYrm:
- DecodeUNPCKHMask(MVT::v8f32, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VUNPCKHPSZrr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VUNPCKHPSZrm:
- DecodeUNPCKHMask(MVT::v16f32, ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VPERMILPSri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPERMILPSmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFMask(MVT::v4f32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VPERMILPSYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPERMILPSYmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFMask(MVT::v8f32,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VPERMILPDri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPERMILPDmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFMask(MVT::v2f64,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VPERMILPDYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPERMILPDYmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodePSHUFMask(MVT::v4f64,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VPERM2F128rr:
- case X86::VPERM2I128rr:
- Src2Name = getRegName(MI->getOperand(2).getReg());
- // FALL THROUGH.
- case X86::VPERM2F128rm:
- case X86::VPERM2I128rm:
- // For instruction comments purpose, assume the 256-bit vector is v4i64.
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeVPERM2X128Mask(MVT::v4i64,
- MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- Src1Name = getRegName(MI->getOperand(1).getReg());
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- case X86::VPERMQYri:
- case X86::VPERMPDYri:
- Src1Name = getRegName(MI->getOperand(1).getReg());
- // FALL THROUGH.
- case X86::VPERMQYmi:
- case X86::VPERMPDYmi:
- if(MI->getOperand(MI->getNumOperands()-1).isImm())
- DecodeVPERMMask(MI->getOperand(MI->getNumOperands()-1).getImm(),
- ShuffleMask);
- DestName = getRegName(MI->getOperand(0).getReg());
- break;
- }
-
- // The only comments we decode are shuffles, so give up if we were unable to
- // decode a shuffle mask.
- if (ShuffleMask.empty())
- return false;
-
- if (!DestName) DestName = Src1Name;
- OS << (DestName ? DestName : "mem") << " = ";
-
- // If the two sources are the same, canonicalize the input elements to be
- // from the first src so that we get larger element spans.
- if (Src1Name == Src2Name) {
- for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
- if ((int)ShuffleMask[i] >= 0 && // Not sentinel.
- ShuffleMask[i] >= (int)e) // From second mask.
- ShuffleMask[i] -= e;
- }
- }
-
- // The shuffle mask specifies which elements of the src1/src2 fill in the
- // destination, with a few sentinel values. Loop through and print them
- // out.
- for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
- if (i != 0)
- OS << ',';
- if (ShuffleMask[i] == SM_SentinelZero) {
- OS << "zero";
- continue;
- }
-
- // Otherwise, it must come from src1 or src2. Print the span of elements
- // that comes from this src.
- bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
- const char *SrcName = isSrc1 ? Src1Name : Src2Name;
- OS << (SrcName ? SrcName : "mem") << '[';
- bool IsFirst = true;
- while (i != e && (int)ShuffleMask[i] != SM_SentinelZero &&
- (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) {
- if (!IsFirst)
- OS << ',';
- else
- IsFirst = false;
- if (ShuffleMask[i] == SM_SentinelUndef)
- OS << "u";
- else
- OS << ShuffleMask[i] % ShuffleMask.size();
- ++i;
- }
- OS << ']';
- --i; // For loop increments element #.
- }
- //MI->print(OS, 0);
- OS << "\n";
-
- // We successfully added a comment to this instruction.
- return true;
-}
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSLLDQMask(MVT::v16i8,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+ case X86::VPSLLDQYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSLLDQMask(MVT::v32i8,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+ case X86::PSRLDQri:\r
+ case X86::VPSRLDQri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSRLDQMask(MVT::v16i8,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+ case X86::VPSRLDQYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSRLDQMask(MVT::v32i8,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+ case X86::PALIGNR128rr:\r
+ case X86::VPALIGNR128rr:\r
+ Src1Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PALIGNR128rm:\r
+ case X86::VPALIGNR128rm:\r
+ Src2Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePALIGNRMask(MVT::v16i8,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+ case X86::VPALIGNR256rr:\r
+ Src1Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPALIGNR256rm:\r
+ Src2Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePALIGNRMask(MVT::v32i8,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+ case X86::PSHUFDri:\r
+ case X86::VPSHUFDri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PSHUFDmi:\r
+ case X86::VPSHUFDmi:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFMask(MVT::v4i32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+ case X86::VPSHUFDYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPSHUFDYmi:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFMask(MVT::v8i32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+\r
+ case X86::PSHUFHWri:\r
+ case X86::VPSHUFHWri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PSHUFHWmi:\r
+ case X86::VPSHUFHWmi:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFHWMask(MVT::v8i16,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+ case X86::VPSHUFHWYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPSHUFHWYmi:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFHWMask(MVT::v16i16,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+ case X86::PSHUFLWri:\r
+ case X86::VPSHUFLWri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PSHUFLWmi:\r
+ case X86::VPSHUFLWmi:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFLWMask(MVT::v8i16,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+ case X86::VPSHUFLWYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPSHUFLWYmi:\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFLWMask(MVT::v16i16,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ break;\r
+\r
+ case X86::PUNPCKHBWrr:\r
+ case X86::VPUNPCKHBWrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKHBWrm:\r
+ case X86::VPUNPCKHBWrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v16i8, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKHBWYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKHBWYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v32i8, ShuffleMask);\r
+ break;\r
+ case X86::PUNPCKHWDrr:\r
+ case X86::VPUNPCKHWDrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKHWDrm:\r
+ case X86::VPUNPCKHWDrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v8i16, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKHWDYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKHWDYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v16i16, ShuffleMask);\r
+ break;\r
+ case X86::PUNPCKHDQrr:\r
+ case X86::VPUNPCKHDQrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKHDQrm:\r
+ case X86::VPUNPCKHDQrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v4i32, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKHDQYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKHDQYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v8i32, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKHDQZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKHDQZrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v16i32, ShuffleMask);\r
+ break;\r
+ case X86::PUNPCKHQDQrr:\r
+ case X86::VPUNPCKHQDQrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKHQDQrm:\r
+ case X86::VPUNPCKHQDQrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v2i64, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKHQDQYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKHQDQYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v4i64, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKHQDQZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKHQDQZrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKHMask(MVT::v8i64, ShuffleMask);\r
+ break;\r
+\r
+ case X86::PUNPCKLBWrr:\r
+ case X86::VPUNPCKLBWrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKLBWrm:\r
+ case X86::VPUNPCKLBWrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v16i8, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKLBWYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKLBWYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v32i8, ShuffleMask);\r
+ break;\r
+ case X86::PUNPCKLWDrr:\r
+ case X86::VPUNPCKLWDrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKLWDrm:\r
+ case X86::VPUNPCKLWDrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v8i16, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKLWDYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKLWDYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v16i16, ShuffleMask);\r
+ break;\r
+ case X86::PUNPCKLDQrr:\r
+ case X86::VPUNPCKLDQrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKLDQrm:\r
+ case X86::VPUNPCKLDQrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v4i32, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKLDQYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKLDQYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v8i32, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKLDQZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKLDQZrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v16i32, ShuffleMask);\r
+ break;\r
+ case X86::PUNPCKLQDQrr:\r
+ case X86::VPUNPCKLQDQrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::PUNPCKLQDQrm:\r
+ case X86::VPUNPCKLQDQrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v2i64, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKLQDQYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKLQDQYrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v4i64, ShuffleMask);\r
+ break;\r
+ case X86::VPUNPCKLQDQZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPUNPCKLQDQZrm:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ DecodeUNPCKLMask(MVT::v8i64, ShuffleMask);\r
+ break;\r
+\r
+ case X86::SHUFPDrri:\r
+ case X86::VSHUFPDrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::SHUFPDrmi:\r
+ case X86::VSHUFPDrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeSHUFPMask(MVT::v2f64,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VSHUFPDYrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VSHUFPDYrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeSHUFPMask(MVT::v4f64,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+\r
+ case X86::SHUFPSrri:\r
+ case X86::VSHUFPSrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::SHUFPSrmi:\r
+ case X86::VSHUFPSrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeSHUFPMask(MVT::v4f32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VSHUFPSYrri:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VSHUFPSYrmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeSHUFPMask(MVT::v8f32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+\r
+ case X86::UNPCKLPDrr:\r
+ case X86::VUNPCKLPDrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::UNPCKLPDrm:\r
+ case X86::VUNPCKLPDrm:\r
+ DecodeUNPCKLMask(MVT::v2f64, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKLPDYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKLPDYrm:\r
+ DecodeUNPCKLMask(MVT::v4f64, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKLPDZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKLPDZrm:\r
+ DecodeUNPCKLMask(MVT::v8f64, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::UNPCKLPSrr:\r
+ case X86::VUNPCKLPSrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::UNPCKLPSrm:\r
+ case X86::VUNPCKLPSrm:\r
+ DecodeUNPCKLMask(MVT::v4f32, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKLPSYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKLPSYrm:\r
+ DecodeUNPCKLMask(MVT::v8f32, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKLPSZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKLPSZrm:\r
+ DecodeUNPCKLMask(MVT::v16f32, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::UNPCKHPDrr:\r
+ case X86::VUNPCKHPDrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::UNPCKHPDrm:\r
+ case X86::VUNPCKHPDrm:\r
+ DecodeUNPCKHMask(MVT::v2f64, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKHPDYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKHPDYrm:\r
+ DecodeUNPCKHMask(MVT::v4f64, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKHPDZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKHPDZrm:\r
+ DecodeUNPCKHMask(MVT::v8f64, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::UNPCKHPSrr:\r
+ case X86::VUNPCKHPSrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::UNPCKHPSrm:\r
+ case X86::VUNPCKHPSrm:\r
+ DecodeUNPCKHMask(MVT::v4f32, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKHPSYrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKHPSYrm:\r
+ DecodeUNPCKHMask(MVT::v8f32, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VUNPCKHPSZrr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VUNPCKHPSZrm:\r
+ DecodeUNPCKHMask(MVT::v16f32, ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VPERMILPSri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPERMILPSmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFMask(MVT::v4f32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VPERMILPSYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPERMILPSYmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFMask(MVT::v8f32,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VPERMILPDri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPERMILPDmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFMask(MVT::v2f64,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VPERMILPDYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPERMILPDYmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodePSHUFMask(MVT::v4f64,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VPERM2F128rr:\r
+ case X86::VPERM2I128rr:\r
+ Src2Name = getRegName(MI->getOperand(2).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPERM2F128rm:\r
+ case X86::VPERM2I128rm:\r
+ // For instruction comments purpose, assume the 256-bit vector is v4i64.\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeVPERM2X128Mask(MVT::v4i64,\r
+ MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ case X86::VPERMQYri:\r
+ case X86::VPERMPDYri:\r
+ Src1Name = getRegName(MI->getOperand(1).getReg());\r
+ // FALL THROUGH.\r
+ case X86::VPERMQYmi:\r
+ case X86::VPERMPDYmi:\r
+ if(MI->getOperand(MI->getNumOperands()-1).isImm())\r
+ DecodeVPERMMask(MI->getOperand(MI->getNumOperands()-1).getImm(),\r
+ ShuffleMask);\r
+ DestName = getRegName(MI->getOperand(0).getReg());\r
+ break;\r
+ }\r
+\r
+ // The only comments we decode are shuffles, so give up if we were unable to\r
+ // decode a shuffle mask.\r
+ if (ShuffleMask.empty())\r
+ return false;\r
+\r
+ if (!DestName) DestName = Src1Name;\r
+ OS << (DestName ? DestName : "mem") << " = ";\r
+\r
+ // If the two sources are the same, canonicalize the input elements to be\r
+ // from the first src so that we get larger element spans.\r
+ if (Src1Name == Src2Name) {\r
+ for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {\r
+ if ((int)ShuffleMask[i] >= 0 && // Not sentinel.\r
+ ShuffleMask[i] >= (int)e) // From second mask.\r
+ ShuffleMask[i] -= e;\r
+ }\r
+ }\r
+\r
+ // The shuffle mask specifies which elements of the src1/src2 fill in the\r
+ // destination, with a few sentinel values. Loop through and print them\r
+ // out.\r
+ for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {\r
+ if (i != 0)\r
+ OS << ',';\r
+ if (ShuffleMask[i] == SM_SentinelZero) {\r
+ OS << "zero";\r
+ continue;\r
+ }\r
+\r
+ // Otherwise, it must come from src1 or src2. Print the span of elements\r
+ // that comes from this src.\r
+ bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();\r
+ const char *SrcName = isSrc1 ? Src1Name : Src2Name;\r
+ OS << (SrcName ? SrcName : "mem") << '[';\r
+ bool IsFirst = true;\r
+ while (i != e && (int)ShuffleMask[i] != SM_SentinelZero &&\r
+ (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) {\r
+ if (!IsFirst)\r
+ OS << ',';\r
+ else\r
+ IsFirst = false;\r
+ if (ShuffleMask[i] == SM_SentinelUndef)\r
+ OS << "u";\r
+ else\r
+ OS << ShuffleMask[i] % ShuffleMask.size();\r
+ ++i;\r
+ }\r
+ OS << ']';\r
+ --i; // For loop increments element #.\r
+ }\r
+ //MI->print(OS, 0);\r
+ OS << "\n";\r
+\r
+ // We successfully added a comment to this instruction.\r
+ return true;\r
+}\r