Home | History | Annotate | Download | only in InstPrinter
      1 //===-- X86InstComments.cpp - Generate verbose-asm comments for instrs ----===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This defines functionality used to emit comments about X86 instructions to
     11 // an output stream for -fverbose-asm.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "X86InstComments.h"
     16 #include "MCTargetDesc/X86MCTargetDesc.h"
     17 #include "Utils/X86ShuffleDecode.h"
     18 #include "llvm/MC/MCInst.h"
     19 #include "llvm/CodeGen/MachineValueType.h"
     20 #include "llvm/Support/raw_ostream.h"
     21 
     22 using namespace llvm;
     23 
     24 #define CASE_SSE_INS_COMMON(Inst, src)            \
     25   case X86::Inst##src:
     26 
     27 #define CASE_AVX_INS_COMMON(Inst, Suffix, src)    \
     28   case X86::V##Inst##Suffix##src:
     29 
     30 #define CASE_MASK_INS_COMMON(Inst, Suffix, src)   \
     31   case X86::V##Inst##Suffix##src##k:
     32 
     33 #define CASE_MASKZ_INS_COMMON(Inst, Suffix, src)  \
     34   case X86::V##Inst##Suffix##src##kz:
     35 
     36 #define CASE_AVX512_INS_COMMON(Inst, Suffix, src) \
     37   CASE_AVX_INS_COMMON(Inst, Suffix, src)          \
     38   CASE_MASK_INS_COMMON(Inst, Suffix, src)         \
     39   CASE_MASKZ_INS_COMMON(Inst, Suffix, src)
     40 
     41 #define CASE_MOVDUP(Inst, src)                    \
     42   CASE_AVX512_INS_COMMON(Inst, Z, r##src)         \
     43   CASE_AVX512_INS_COMMON(Inst, Z256, r##src)      \
     44   CASE_AVX512_INS_COMMON(Inst, Z128, r##src)      \
     45   CASE_AVX_INS_COMMON(Inst, , r##src)             \
     46   CASE_AVX_INS_COMMON(Inst, Y, r##src)            \
     47   CASE_SSE_INS_COMMON(Inst, r##src)
     48 
     49 #define CASE_MASK_MOVDUP(Inst, src)               \
     50   CASE_MASK_INS_COMMON(Inst, Z, r##src)           \
     51   CASE_MASK_INS_COMMON(Inst, Z256, r##src)        \
     52   CASE_MASK_INS_COMMON(Inst, Z128, r##src)
     53 
     54 #define CASE_MASKZ_MOVDUP(Inst, src)              \
     55   CASE_MASKZ_INS_COMMON(Inst, Z, r##src)          \
     56   CASE_MASKZ_INS_COMMON(Inst, Z256, r##src)       \
     57   CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
     58 
     59 #define CASE_PMOVZX(Inst, src)                    \
     60   CASE_AVX512_INS_COMMON(Inst, Z, r##src)         \
     61   CASE_AVX512_INS_COMMON(Inst, Z256, r##src)      \
     62   CASE_AVX512_INS_COMMON(Inst, Z128, r##src)      \
     63   CASE_AVX_INS_COMMON(Inst, , r##src)             \
     64   CASE_AVX_INS_COMMON(Inst, Y, r##src)            \
     65   CASE_SSE_INS_COMMON(Inst, r##src)
     66 
     67 #define CASE_MASK_PMOVZX(Inst, src)               \
     68   CASE_MASK_INS_COMMON(Inst, Z, r##src)           \
     69   CASE_MASK_INS_COMMON(Inst, Z256, r##src)        \
     70   CASE_MASK_INS_COMMON(Inst, Z128, r##src)
     71 
     72 #define CASE_MASKZ_PMOVZX(Inst, src)              \
     73   CASE_MASKZ_INS_COMMON(Inst, Z, r##src)          \
     74   CASE_MASKZ_INS_COMMON(Inst, Z256, r##src)       \
     75   CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
     76 
     77 #define CASE_UNPCK(Inst, src)                     \
     78   CASE_AVX512_INS_COMMON(Inst, Z, r##src)         \
     79   CASE_AVX512_INS_COMMON(Inst, Z256, r##src)      \
     80   CASE_AVX512_INS_COMMON(Inst, Z128, r##src)      \
     81   CASE_AVX_INS_COMMON(Inst, , r##src)             \
     82   CASE_AVX_INS_COMMON(Inst, Y, r##src)            \
     83   CASE_SSE_INS_COMMON(Inst, r##src)
     84 
     85 #define CASE_MASK_UNPCK(Inst, src)                \
     86   CASE_MASK_INS_COMMON(Inst, Z, r##src)           \
     87   CASE_MASK_INS_COMMON(Inst, Z256, r##src)        \
     88   CASE_MASK_INS_COMMON(Inst, Z128, r##src)
     89 
     90 #define CASE_MASKZ_UNPCK(Inst, src)               \
     91   CASE_MASKZ_INS_COMMON(Inst, Z, r##src)          \
     92   CASE_MASKZ_INS_COMMON(Inst, Z256, r##src)       \
     93   CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
     94 
     95 #define CASE_SHUF(Inst, suf)                      \
     96   CASE_AVX512_INS_COMMON(Inst, Z, suf)            \
     97   CASE_AVX512_INS_COMMON(Inst, Z256, suf)         \
     98   CASE_AVX512_INS_COMMON(Inst, Z128, suf)         \
     99   CASE_AVX_INS_COMMON(Inst, , suf)                \
    100   CASE_AVX_INS_COMMON(Inst, Y, suf)               \
    101   CASE_SSE_INS_COMMON(Inst, suf)
    102 
    103 #define CASE_MASK_SHUF(Inst, src)                 \
    104   CASE_MASK_INS_COMMON(Inst, Z, r##src##i)        \
    105   CASE_MASK_INS_COMMON(Inst, Z256, r##src##i)     \
    106   CASE_MASK_INS_COMMON(Inst, Z128, r##src##i)
    107 
    108 #define CASE_MASKZ_SHUF(Inst, src)                \
    109   CASE_MASKZ_INS_COMMON(Inst, Z, r##src##i)       \
    110   CASE_MASKZ_INS_COMMON(Inst, Z256, r##src##i)    \
    111   CASE_MASKZ_INS_COMMON(Inst, Z128, r##src##i)
    112 
    113 #define CASE_VPERMILPI(Inst, src)                 \
    114   CASE_AVX512_INS_COMMON(Inst, Z, src##i)         \
    115   CASE_AVX512_INS_COMMON(Inst, Z256, src##i)      \
    116   CASE_AVX512_INS_COMMON(Inst, Z128, src##i)      \
    117   CASE_AVX_INS_COMMON(Inst, , src##i)             \
    118   CASE_AVX_INS_COMMON(Inst, Y, src##i)
    119 
    120 #define CASE_MASK_VPERMILPI(Inst, src)            \
    121   CASE_MASK_INS_COMMON(Inst, Z, src##i)           \
    122   CASE_MASK_INS_COMMON(Inst, Z256, src##i)        \
    123   CASE_MASK_INS_COMMON(Inst, Z128, src##i)
    124 
    125 #define CASE_MASKZ_VPERMILPI(Inst, src)           \
    126   CASE_MASKZ_INS_COMMON(Inst, Z, src##i)          \
    127   CASE_MASKZ_INS_COMMON(Inst, Z256, src##i)       \
    128   CASE_MASKZ_INS_COMMON(Inst, Z128, src##i)
    129 
    130 #define CASE_VPERM(Inst, src)                     \
    131   CASE_AVX512_INS_COMMON(Inst, Z, src##i)         \
    132   CASE_AVX512_INS_COMMON(Inst, Z256, src##i)      \
    133   CASE_AVX_INS_COMMON(Inst, Y, src##i)
    134 
    135 #define CASE_MASK_VPERM(Inst, src)                \
    136   CASE_MASK_INS_COMMON(Inst, Z, src##i)           \
    137   CASE_MASK_INS_COMMON(Inst, Z256, src##i)
    138 
    139 #define CASE_MASKZ_VPERM(Inst, src)               \
    140   CASE_MASKZ_INS_COMMON(Inst, Z, src##i)          \
    141   CASE_MASKZ_INS_COMMON(Inst, Z256, src##i)
    142 
    143 #define CASE_VSHUF(Inst, src)                          \
    144   CASE_AVX512_INS_COMMON(SHUFF##Inst, Z, r##src##i)    \
    145   CASE_AVX512_INS_COMMON(SHUFI##Inst, Z, r##src##i)    \
    146   CASE_AVX512_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
    147   CASE_AVX512_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
    148 
    149 #define CASE_MASK_VSHUF(Inst, src)                    \
    150   CASE_MASK_INS_COMMON(SHUFF##Inst, Z, r##src##i)     \
    151   CASE_MASK_INS_COMMON(SHUFI##Inst, Z, r##src##i)     \
    152   CASE_MASK_INS_COMMON(SHUFF##Inst, Z256, r##src##i)  \
    153   CASE_MASK_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
    154 
    155 #define CASE_MASKZ_VSHUF(Inst, src)                   \
    156   CASE_MASKZ_INS_COMMON(SHUFF##Inst, Z, r##src##i)    \
    157   CASE_MASKZ_INS_COMMON(SHUFI##Inst, Z, r##src##i)    \
    158   CASE_MASKZ_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
    159   CASE_MASKZ_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
    160 
    161 static unsigned getVectorRegSize(unsigned RegNo) {
    162   if (X86::ZMM0 <= RegNo && RegNo <= X86::ZMM31)
    163     return 512;
    164   if (X86::YMM0 <= RegNo && RegNo <= X86::YMM31)
    165     return 256;
    166   if (X86::XMM0 <= RegNo && RegNo <= X86::XMM31)
    167     return 128;
    168   if (X86::MM0 <= RegNo && RegNo <= X86::MM7)
    169     return 64;
    170 
    171   llvm_unreachable("Unknown vector reg!");
    172 }
    173 
    174 static MVT getRegOperandVectorVT(const MCInst *MI, const MVT &ScalarVT,
    175                                  unsigned OperandIndex) {
    176   unsigned OpReg = MI->getOperand(OperandIndex).getReg();
    177   return MVT::getVectorVT(ScalarVT,
    178                           getVectorRegSize(OpReg)/ScalarVT.getSizeInBits());
    179 }
    180 
    181 /// \brief Extracts the dst type for a given zero extension instruction.
    182 static MVT getZeroExtensionResultType(const MCInst *MI) {
    183   switch (MI->getOpcode()) {
    184   default:
    185     llvm_unreachable("Unknown zero extension instruction");
    186   // zero extension to i16
    187   CASE_PMOVZX(PMOVZXBW, m)
    188   CASE_PMOVZX(PMOVZXBW, r)
    189     return getRegOperandVectorVT(MI, MVT::i16, 0);
    190   // zero extension to i32
    191   CASE_PMOVZX(PMOVZXBD, m)
    192   CASE_PMOVZX(PMOVZXBD, r)
    193   CASE_PMOVZX(PMOVZXWD, m)
    194   CASE_PMOVZX(PMOVZXWD, r)
    195     return getRegOperandVectorVT(MI, MVT::i32, 0);
    196   // zero extension to i64
    197   CASE_PMOVZX(PMOVZXBQ, m)
    198   CASE_PMOVZX(PMOVZXBQ, r)
    199   CASE_PMOVZX(PMOVZXWQ, m)
    200   CASE_PMOVZX(PMOVZXWQ, r)
    201   CASE_PMOVZX(PMOVZXDQ, m)
    202   CASE_PMOVZX(PMOVZXDQ, r)
    203     return getRegOperandVectorVT(MI, MVT::i64, 0);
    204   }
    205 }
    206 
    207 /// Wraps the destination register name with AVX512 mask/maskz filtering.
    208 static std::string getMaskName(const MCInst *MI, const char *DestName,
    209                                const char *(*getRegName)(unsigned)) {
    210   std::string OpMaskName(DestName);
    211 
    212   bool MaskWithZero = false;
    213   const char *MaskRegName = nullptr;
    214 
    215   switch (MI->getOpcode()) {
    216   default:
    217     return OpMaskName;
    218   CASE_MASKZ_MOVDUP(MOVDDUP, m)
    219   CASE_MASKZ_MOVDUP(MOVDDUP, r)
    220   CASE_MASKZ_MOVDUP(MOVSHDUP, m)
    221   CASE_MASKZ_MOVDUP(MOVSHDUP, r)
    222   CASE_MASKZ_MOVDUP(MOVSLDUP, m)
    223   CASE_MASKZ_MOVDUP(MOVSLDUP, r)
    224   CASE_MASKZ_PMOVZX(PMOVZXBD, m)
    225   CASE_MASKZ_PMOVZX(PMOVZXBD, r)
    226   CASE_MASKZ_PMOVZX(PMOVZXBQ, m)
    227   CASE_MASKZ_PMOVZX(PMOVZXBQ, r)
    228   CASE_MASKZ_PMOVZX(PMOVZXBW, m)
    229   CASE_MASKZ_PMOVZX(PMOVZXBW, r)
    230   CASE_MASKZ_PMOVZX(PMOVZXDQ, m)
    231   CASE_MASKZ_PMOVZX(PMOVZXDQ, r)
    232   CASE_MASKZ_PMOVZX(PMOVZXWD, m)
    233   CASE_MASKZ_PMOVZX(PMOVZXWD, r)
    234   CASE_MASKZ_PMOVZX(PMOVZXWQ, m)
    235   CASE_MASKZ_PMOVZX(PMOVZXWQ, r)
    236   CASE_MASKZ_UNPCK(PUNPCKHBW, m)
    237   CASE_MASKZ_UNPCK(PUNPCKHBW, r)
    238   CASE_MASKZ_UNPCK(PUNPCKHWD, m)
    239   CASE_MASKZ_UNPCK(PUNPCKHWD, r)
    240   CASE_MASKZ_UNPCK(PUNPCKHDQ, m)
    241   CASE_MASKZ_UNPCK(PUNPCKHDQ, r)
    242   CASE_MASKZ_UNPCK(PUNPCKLBW, m)
    243   CASE_MASKZ_UNPCK(PUNPCKLBW, r)
    244   CASE_MASKZ_UNPCK(PUNPCKLWD, m)
    245   CASE_MASKZ_UNPCK(PUNPCKLWD, r)
    246   CASE_MASKZ_UNPCK(PUNPCKLDQ, m)
    247   CASE_MASKZ_UNPCK(PUNPCKLDQ, r)
    248   CASE_MASKZ_UNPCK(UNPCKHPD, m)
    249   CASE_MASKZ_UNPCK(UNPCKHPD, r)
    250   CASE_MASKZ_UNPCK(UNPCKHPS, m)
    251   CASE_MASKZ_UNPCK(UNPCKHPS, r)
    252   CASE_MASKZ_UNPCK(UNPCKLPD, m)
    253   CASE_MASKZ_UNPCK(UNPCKLPD, r)
    254   CASE_MASKZ_UNPCK(UNPCKLPS, m)
    255   CASE_MASKZ_UNPCK(UNPCKLPS, r)
    256   CASE_MASKZ_SHUF(PALIGNR, r)
    257   CASE_MASKZ_SHUF(PALIGNR, m)
    258   CASE_MASKZ_SHUF(SHUFPD, m)
    259   CASE_MASKZ_SHUF(SHUFPD, r)
    260   CASE_MASKZ_SHUF(SHUFPS, m)
    261   CASE_MASKZ_SHUF(SHUFPS, r)
    262   CASE_MASKZ_VPERMILPI(PERMILPD, m)
    263   CASE_MASKZ_VPERMILPI(PERMILPD, r)
    264   CASE_MASKZ_VPERMILPI(PERMILPS, m)
    265   CASE_MASKZ_VPERMILPI(PERMILPS, r)
    266   CASE_MASKZ_VPERMILPI(PSHUFD, m)
    267   CASE_MASKZ_VPERMILPI(PSHUFD, r)
    268   CASE_MASKZ_VPERMILPI(PSHUFHW, m)
    269   CASE_MASKZ_VPERMILPI(PSHUFHW, r)
    270   CASE_MASKZ_VPERMILPI(PSHUFLW, m)
    271   CASE_MASKZ_VPERMILPI(PSHUFLW, r)
    272   CASE_MASKZ_VPERM(PERMPD, m)
    273   CASE_MASKZ_VPERM(PERMPD, r)
    274   CASE_MASKZ_VPERM(PERMQ, m)
    275   CASE_MASKZ_VPERM(PERMQ, r)
    276   CASE_MASKZ_VSHUF(64X2, m)
    277   CASE_MASKZ_VSHUF(64X2, r)
    278   CASE_MASKZ_VSHUF(32X4, m)
    279   CASE_MASKZ_VSHUF(32X4, r)
    280     MaskWithZero = true;
    281     MaskRegName = getRegName(MI->getOperand(1).getReg());
    282     break;
    283   CASE_MASK_MOVDUP(MOVDDUP, m)
    284   CASE_MASK_MOVDUP(MOVDDUP, r)
    285   CASE_MASK_MOVDUP(MOVSHDUP, m)
    286   CASE_MASK_MOVDUP(MOVSHDUP, r)
    287   CASE_MASK_MOVDUP(MOVSLDUP, m)
    288   CASE_MASK_MOVDUP(MOVSLDUP, r)
    289   CASE_MASK_PMOVZX(PMOVZXBD, m)
    290   CASE_MASK_PMOVZX(PMOVZXBD, r)
    291   CASE_MASK_PMOVZX(PMOVZXBQ, m)
    292   CASE_MASK_PMOVZX(PMOVZXBQ, r)
    293   CASE_MASK_PMOVZX(PMOVZXBW, m)
    294   CASE_MASK_PMOVZX(PMOVZXBW, r)
    295   CASE_MASK_PMOVZX(PMOVZXDQ, m)
    296   CASE_MASK_PMOVZX(PMOVZXDQ, r)
    297   CASE_MASK_PMOVZX(PMOVZXWD, m)
    298   CASE_MASK_PMOVZX(PMOVZXWD, r)
    299   CASE_MASK_PMOVZX(PMOVZXWQ, m)
    300   CASE_MASK_PMOVZX(PMOVZXWQ, r)
    301   CASE_MASK_UNPCK(PUNPCKHBW, m)
    302   CASE_MASK_UNPCK(PUNPCKHBW, r)
    303   CASE_MASK_UNPCK(PUNPCKHWD, m)
    304   CASE_MASK_UNPCK(PUNPCKHWD, r)
    305   CASE_MASK_UNPCK(PUNPCKHDQ, m)
    306   CASE_MASK_UNPCK(PUNPCKHDQ, r)
    307   CASE_MASK_UNPCK(PUNPCKLBW, m)
    308   CASE_MASK_UNPCK(PUNPCKLBW, r)
    309   CASE_MASK_UNPCK(PUNPCKLWD, m)
    310   CASE_MASK_UNPCK(PUNPCKLWD, r)
    311   CASE_MASK_UNPCK(PUNPCKLDQ, m)
    312   CASE_MASK_UNPCK(PUNPCKLDQ, r)
    313   CASE_MASK_UNPCK(UNPCKHPD, m)
    314   CASE_MASK_UNPCK(UNPCKHPD, r)
    315   CASE_MASK_UNPCK(UNPCKHPS, m)
    316   CASE_MASK_UNPCK(UNPCKHPS, r)
    317   CASE_MASK_UNPCK(UNPCKLPD, m)
    318   CASE_MASK_UNPCK(UNPCKLPD, r)
    319   CASE_MASK_UNPCK(UNPCKLPS, m)
    320   CASE_MASK_UNPCK(UNPCKLPS, r)
    321   CASE_MASK_SHUF(PALIGNR, r)
    322   CASE_MASK_SHUF(PALIGNR, m)
    323   CASE_MASK_SHUF(SHUFPD, m)
    324   CASE_MASK_SHUF(SHUFPD, r)
    325   CASE_MASK_SHUF(SHUFPS, m)
    326   CASE_MASK_SHUF(SHUFPS, r)
    327   CASE_MASK_VPERMILPI(PERMILPD, m)
    328   CASE_MASK_VPERMILPI(PERMILPD, r)
    329   CASE_MASK_VPERMILPI(PERMILPS, m)
    330   CASE_MASK_VPERMILPI(PERMILPS, r)
    331   CASE_MASK_VPERMILPI(PSHUFD, m)
    332   CASE_MASK_VPERMILPI(PSHUFD, r)
    333   CASE_MASK_VPERMILPI(PSHUFHW, m)
    334   CASE_MASK_VPERMILPI(PSHUFHW, r)
    335   CASE_MASK_VPERMILPI(PSHUFLW, m)
    336   CASE_MASK_VPERMILPI(PSHUFLW, r)
    337   CASE_MASK_VPERM(PERMPD, m)
    338   CASE_MASK_VPERM(PERMPD, r)
    339   CASE_MASK_VPERM(PERMQ, m)
    340   CASE_MASK_VPERM(PERMQ, r)
    341   CASE_MASK_VSHUF(64X2, m)
    342   CASE_MASK_VSHUF(64X2, r)
    343   CASE_MASK_VSHUF(32X4, m)
    344   CASE_MASK_VSHUF(32X4, r)
    345     MaskRegName = getRegName(MI->getOperand(2).getReg());
    346     break;
    347   }
    348 
    349   // MASK: zmmX {%kY}
    350   OpMaskName += " {%";
    351   OpMaskName += MaskRegName;
    352   OpMaskName += "}";
    353 
    354   // MASKZ: zmmX {%kY} {z}
    355   if (MaskWithZero)
    356     OpMaskName += " {z}";
    357 
    358   return OpMaskName;
    359 }
    360 
    361 //===----------------------------------------------------------------------===//
    362 // Top Level Entrypoint
    363 //===----------------------------------------------------------------------===//
    364 
    365 /// EmitAnyX86InstComments - This function decodes x86 instructions and prints
    366 /// newline terminated strings to the specified string if desired.  This
    367 /// information is shown in disassembly dumps when verbose assembly is enabled.
    368 bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS,
    369                                   const char *(*getRegName)(unsigned)) {
    370   // If this is a shuffle operation, the switch should fill in this state.
    371   SmallVector<int, 8> ShuffleMask;
    372   const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr;
    373   unsigned NumOperands = MI->getNumOperands();
    374   bool RegForm = false;
    375 
    376   switch (MI->getOpcode()) {
    377   default:
    378     // Not an instruction for which we can decode comments.
    379     return false;
    380 
    381   case X86::BLENDPDrri:
    382   case X86::VBLENDPDrri:
    383   case X86::VBLENDPDYrri:
    384     Src2Name = getRegName(MI->getOperand(2).getReg());
    385     // FALL THROUGH.
    386   case X86::BLENDPDrmi:
    387   case X86::VBLENDPDrmi:
    388   case X86::VBLENDPDYrmi:
    389     if (MI->getOperand(NumOperands - 1).isImm())
    390       DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::f64, 0),
    391                       MI->getOperand(NumOperands - 1).getImm(),
    392                       ShuffleMask);
    393     Src1Name = getRegName(MI->getOperand(1).getReg());
    394     DestName = getRegName(MI->getOperand(0).getReg());
    395     break;
    396 
    397   case X86::BLENDPSrri:
    398   case X86::VBLENDPSrri:
    399   case X86::VBLENDPSYrri:
    400     Src2Name = getRegName(MI->getOperand(2).getReg());
    401     // FALL THROUGH.
    402   case X86::BLENDPSrmi:
    403   case X86::VBLENDPSrmi:
    404   case X86::VBLENDPSYrmi:
    405     if (MI->getOperand(NumOperands - 1).isImm())
    406       DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::f32, 0),
    407                       MI->getOperand(NumOperands - 1).getImm(),
    408                       ShuffleMask);
    409     Src1Name = getRegName(MI->getOperand(1).getReg());
    410     DestName = getRegName(MI->getOperand(0).getReg());
    411     break;
    412 
    413   case X86::PBLENDWrri:
    414   case X86::VPBLENDWrri:
    415   case X86::VPBLENDWYrri:
    416     Src2Name = getRegName(MI->getOperand(2).getReg());
    417     // FALL THROUGH.
    418   case X86::PBLENDWrmi:
    419   case X86::VPBLENDWrmi:
    420   case X86::VPBLENDWYrmi:
    421     if (MI->getOperand(NumOperands - 1).isImm())
    422       DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::i16, 0),
    423                       MI->getOperand(NumOperands - 1).getImm(),
    424                       ShuffleMask);
    425     Src1Name = getRegName(MI->getOperand(1).getReg());
    426     DestName = getRegName(MI->getOperand(0).getReg());
    427     break;
    428 
    429   case X86::VPBLENDDrri:
    430   case X86::VPBLENDDYrri:
    431     Src2Name = getRegName(MI->getOperand(2).getReg());
    432     // FALL THROUGH.
    433   case X86::VPBLENDDrmi:
    434   case X86::VPBLENDDYrmi:
    435     if (MI->getOperand(NumOperands - 1).isImm())
    436       DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::i32, 0),
    437                       MI->getOperand(NumOperands - 1).getImm(),
    438                       ShuffleMask);
    439     Src1Name = getRegName(MI->getOperand(1).getReg());
    440     DestName = getRegName(MI->getOperand(0).getReg());
    441     break;
    442 
    443   case X86::INSERTPSrr:
    444   case X86::VINSERTPSrr:
    445   case X86::VINSERTPSzrr:
    446     Src2Name = getRegName(MI->getOperand(2).getReg());
    447     // FALL THROUGH.
    448   case X86::INSERTPSrm:
    449   case X86::VINSERTPSrm:
    450   case X86::VINSERTPSzrm:
    451     DestName = getRegName(MI->getOperand(0).getReg());
    452     Src1Name = getRegName(MI->getOperand(1).getReg());
    453     if (MI->getOperand(NumOperands - 1).isImm())
    454       DecodeINSERTPSMask(MI->getOperand(NumOperands - 1).getImm(),
    455                          ShuffleMask);
    456     break;
    457 
    458   case X86::MOVLHPSrr:
    459   case X86::VMOVLHPSrr:
    460   case X86::VMOVLHPSZrr:
    461     Src2Name = getRegName(MI->getOperand(2).getReg());
    462     Src1Name = getRegName(MI->getOperand(1).getReg());
    463     DestName = getRegName(MI->getOperand(0).getReg());
    464     DecodeMOVLHPSMask(2, ShuffleMask);
    465     break;
    466 
    467   case X86::MOVHLPSrr:
    468   case X86::VMOVHLPSrr:
    469   case X86::VMOVHLPSZrr:
    470     Src2Name = getRegName(MI->getOperand(2).getReg());
    471     Src1Name = getRegName(MI->getOperand(1).getReg());
    472     DestName = getRegName(MI->getOperand(0).getReg());
    473     DecodeMOVHLPSMask(2, ShuffleMask);
    474     break;
    475 
    476   case X86::MOVHPDrm:
    477   case X86::VMOVHPDrm:
    478   case X86::VMOVHPDZ128rm:
    479     Src1Name = getRegName(MI->getOperand(1).getReg());
    480     DestName = getRegName(MI->getOperand(0).getReg());
    481     DecodeInsertElementMask(MVT::v2f64, 1, 1, ShuffleMask);
    482     break;
    483 
    484   case X86::MOVHPSrm:
    485   case X86::VMOVHPSrm:
    486   case X86::VMOVHPSZ128rm:
    487     Src1Name = getRegName(MI->getOperand(1).getReg());
    488     DestName = getRegName(MI->getOperand(0).getReg());
    489     DecodeInsertElementMask(MVT::v4f32, 2, 2, ShuffleMask);
    490     break;
    491 
    492   case X86::MOVLPDrm:
    493   case X86::VMOVLPDrm:
    494   case X86::VMOVLPDZ128rm:
    495     Src1Name = getRegName(MI->getOperand(1).getReg());
    496     DestName = getRegName(MI->getOperand(0).getReg());
    497     DecodeInsertElementMask(MVT::v2f64, 0, 1, ShuffleMask);
    498     break;
    499 
    500   case X86::MOVLPSrm:
    501   case X86::VMOVLPSrm:
    502   case X86::VMOVLPSZ128rm:
    503     Src1Name = getRegName(MI->getOperand(1).getReg());
    504     DestName = getRegName(MI->getOperand(0).getReg());
    505     DecodeInsertElementMask(MVT::v4f32, 0, 2, ShuffleMask);
    506     break;
    507 
    508   CASE_MOVDUP(MOVSLDUP, r)
    509     Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    510     // FALL THROUGH.
    511   CASE_MOVDUP(MOVSLDUP, m)
    512     DestName = getRegName(MI->getOperand(0).getReg());
    513     DecodeMOVSLDUPMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
    514     break;
    515 
    516   CASE_MOVDUP(MOVSHDUP, r)
    517     Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    518     // FALL THROUGH.
    519   CASE_MOVDUP(MOVSHDUP, m)
    520     DestName = getRegName(MI->getOperand(0).getReg());
    521     DecodeMOVSHDUPMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
    522     break;
    523 
    524   CASE_MOVDUP(MOVDDUP, r)
    525     Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    526     // FALL THROUGH.
    527   CASE_MOVDUP(MOVDDUP, m)
    528     DestName = getRegName(MI->getOperand(0).getReg());
    529     DecodeMOVDDUPMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
    530     break;
    531 
    532   case X86::PSLLDQri:
    533   case X86::VPSLLDQri:
    534   case X86::VPSLLDQYri:
    535   case X86::VPSLLDQZ128rr:
    536   case X86::VPSLLDQZ256rr:
    537   case X86::VPSLLDQZ512rr:
    538     Src1Name = getRegName(MI->getOperand(1).getReg());
    539   case X86::VPSLLDQZ128rm:
    540   case X86::VPSLLDQZ256rm:
    541   case X86::VPSLLDQZ512rm:
    542     DestName = getRegName(MI->getOperand(0).getReg());
    543     if (MI->getOperand(NumOperands - 1).isImm())
    544       DecodePSLLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0),
    545                        MI->getOperand(NumOperands - 1).getImm(),
    546                        ShuffleMask);
    547     break;
    548 
    549   case X86::PSRLDQri:
    550   case X86::VPSRLDQri:
    551   case X86::VPSRLDQYri:
    552   case X86::VPSRLDQZ128rr:
    553   case X86::VPSRLDQZ256rr:
    554   case X86::VPSRLDQZ512rr:
    555     Src1Name = getRegName(MI->getOperand(1).getReg());
    556   case X86::VPSRLDQZ128rm:
    557   case X86::VPSRLDQZ256rm:
    558   case X86::VPSRLDQZ512rm:
    559     DestName = getRegName(MI->getOperand(0).getReg());
    560     if (MI->getOperand(NumOperands - 1).isImm())
    561       DecodePSRLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0),
    562                        MI->getOperand(NumOperands - 1).getImm(),
    563                        ShuffleMask);
    564     break;
    565 
    566   CASE_SHUF(PALIGNR, rri)
    567     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    568     RegForm = true;
    569     // FALL THROUGH.
    570   CASE_SHUF(PALIGNR, rmi)
    571     Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
    572     DestName = getRegName(MI->getOperand(0).getReg());
    573     if (MI->getOperand(NumOperands - 1).isImm())
    574       DecodePALIGNRMask(getRegOperandVectorVT(MI, MVT::i8, 0),
    575                         MI->getOperand(NumOperands - 1).getImm(),
    576                         ShuffleMask);
    577     break;
    578 
    579   CASE_SHUF(PSHUFD, ri)
    580     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    581     // FALL THROUGH.
    582   CASE_SHUF(PSHUFD, mi)
    583     DestName = getRegName(MI->getOperand(0).getReg());
    584     if (MI->getOperand(NumOperands - 1).isImm())
    585       DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::i32, 0),
    586                       MI->getOperand(NumOperands - 1).getImm(),
    587                       ShuffleMask);
    588     break;
    589 
    590   CASE_SHUF(PSHUFHW, ri)
    591     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    592     // FALL THROUGH.
    593   CASE_SHUF(PSHUFHW, mi)
    594     DestName = getRegName(MI->getOperand(0).getReg());
    595     if (MI->getOperand(NumOperands - 1).isImm())
    596       DecodePSHUFHWMask(getRegOperandVectorVT(MI, MVT::i16, 0),
    597                         MI->getOperand(NumOperands - 1).getImm(),
    598                         ShuffleMask);
    599     break;
    600 
    601   CASE_SHUF(PSHUFLW, ri)
    602     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    603     // FALL THROUGH.
    604   CASE_SHUF(PSHUFLW, mi)
    605     DestName = getRegName(MI->getOperand(0).getReg());
    606     if (MI->getOperand(NumOperands - 1).isImm())
    607       DecodePSHUFLWMask(getRegOperandVectorVT(MI, MVT::i16, 0),
    608                         MI->getOperand(NumOperands - 1).getImm(),
    609                         ShuffleMask);
    610     break;
    611 
    612   case X86::MMX_PSHUFWri:
    613     Src1Name = getRegName(MI->getOperand(1).getReg());
    614     // FALL THROUGH.
    615   case X86::MMX_PSHUFWmi:
    616     DestName = getRegName(MI->getOperand(0).getReg());
    617     if (MI->getOperand(NumOperands - 1).isImm())
    618       DecodePSHUFMask(MVT::v4i16,
    619                       MI->getOperand(NumOperands - 1).getImm(),
    620                       ShuffleMask);
    621     break;
    622 
    623   case X86::PSWAPDrr:
    624     Src1Name = getRegName(MI->getOperand(1).getReg());
    625     // FALL THROUGH.
    626   case X86::PSWAPDrm:
    627     DestName = getRegName(MI->getOperand(0).getReg());
    628     DecodePSWAPMask(MVT::v2i32, ShuffleMask);
    629     break;
    630 
    631   CASE_UNPCK(PUNPCKHBW, r)
    632   case X86::MMX_PUNPCKHBWirr:
    633     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    634     RegForm = true;
    635     // FALL THROUGH.
    636   CASE_UNPCK(PUNPCKHBW, m)
    637   case X86::MMX_PUNPCKHBWirm:
    638     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    639     DestName = getRegName(MI->getOperand(0).getReg());
    640     DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask);
    641     break;
    642 
    643   CASE_UNPCK(PUNPCKHWD, r)
    644   case X86::MMX_PUNPCKHWDirr:
    645     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    646     RegForm = true;
    647     // FALL THROUGH.
    648   CASE_UNPCK(PUNPCKHWD, m)
    649   case X86::MMX_PUNPCKHWDirm:
    650     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    651     DestName = getRegName(MI->getOperand(0).getReg());
    652     DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask);
    653     break;
    654 
    655   CASE_UNPCK(PUNPCKHDQ, r)
    656   case X86::MMX_PUNPCKHDQirr:
    657     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    658     RegForm = true;
    659     // FALL THROUGH.
    660   CASE_UNPCK(PUNPCKHDQ, m)
    661   case X86::MMX_PUNPCKHDQirm:
    662     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    663     DestName = getRegName(MI->getOperand(0).getReg());
    664     DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask);
    665     break;
    666 
    667   CASE_UNPCK(PUNPCKHQDQ, r)
    668     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    669     RegForm = true;
    670     // FALL THROUGH.
    671   CASE_UNPCK(PUNPCKHQDQ, m)
    672     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    673     DestName = getRegName(MI->getOperand(0).getReg());
    674     DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask);
    675     break;
    676 
    677   CASE_UNPCK(PUNPCKLBW, r)
    678   case X86::MMX_PUNPCKLBWirr:
    679     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    680     RegForm = true;
    681     // FALL THROUGH.
    682   CASE_UNPCK(PUNPCKLBW, m)
    683   case X86::MMX_PUNPCKLBWirm:
    684     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    685     DestName = getRegName(MI->getOperand(0).getReg());
    686     DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask);
    687     break;
    688 
    689   CASE_UNPCK(PUNPCKLWD, r)
    690   case X86::MMX_PUNPCKLWDirr:
    691     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    692     RegForm = true;
    693     // FALL THROUGH.
    694   CASE_UNPCK(PUNPCKLWD, m)
    695   case X86::MMX_PUNPCKLWDirm:
    696     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    697     DestName = getRegName(MI->getOperand(0).getReg());
    698     DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask);
    699     break;
    700 
    701   CASE_UNPCK(PUNPCKLDQ, r)
    702   case X86::MMX_PUNPCKLDQirr:
    703     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    704     RegForm = true;
    705     // FALL THROUGH.
    706   CASE_UNPCK(PUNPCKLDQ, m)
    707   case X86::MMX_PUNPCKLDQirm:
    708     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    709     DestName = getRegName(MI->getOperand(0).getReg());
    710     DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask);
    711     break;
    712 
    713   CASE_UNPCK(PUNPCKLQDQ, r)
    714     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    715     RegForm = true;
    716     // FALL THROUGH.
    717   CASE_UNPCK(PUNPCKLQDQ, m)
    718     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    719     DestName = getRegName(MI->getOperand(0).getReg());
    720     DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask);
    721     break;
    722 
    723   CASE_SHUF(SHUFPD, rri)
    724     Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    725     RegForm = true;
    726     // FALL THROUGH.
    727   CASE_SHUF(SHUFPD, rmi)
    728     if (MI->getOperand(NumOperands - 1).isImm())
    729       DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f64, 0),
    730                       MI->getOperand(NumOperands - 1).getImm(),
    731                       ShuffleMask);
    732     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
    733     DestName = getRegName(MI->getOperand(0).getReg());
    734     break;
    735 
    736   CASE_SHUF(SHUFPS, rri)
    737     Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    738     RegForm = true;
    739     // FALL THROUGH.
    740   CASE_SHUF(SHUFPS, rmi)
    741     if (MI->getOperand(NumOperands - 1).isImm())
    742       DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f32, 0),
    743                       MI->getOperand(NumOperands - 1).getImm(),
    744                       ShuffleMask);
    745     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
    746     DestName = getRegName(MI->getOperand(0).getReg());
    747     break;
    748 
    749   CASE_VSHUF(64X2, r)
    750     Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    751     RegForm = true;
    752     // FALL THROUGH.
    753   CASE_VSHUF(64X2, m)
    754     decodeVSHUF64x2FamilyMask(getRegOperandVectorVT(MI, MVT::i64, 0),
    755                               MI->getOperand(NumOperands - 1).getImm(),
    756                               ShuffleMask);
    757     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
    758     DestName = getRegName(MI->getOperand(0).getReg());
    759     break;
    760 
    761   CASE_VSHUF(32X4, r)
    762     Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    763     RegForm = true;
    764     // FALL THROUGH.
    765   CASE_VSHUF(32X4, m)
    766     decodeVSHUF64x2FamilyMask(getRegOperandVectorVT(MI, MVT::i32, 0),
    767                               MI->getOperand(NumOperands - 1).getImm(),
    768                               ShuffleMask);
    769     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
    770     DestName = getRegName(MI->getOperand(0).getReg());
    771     break;
    772 
    773   CASE_UNPCK(UNPCKLPD, r)
    774     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    775     RegForm = true;
    776     // FALL THROUGH.
    777   CASE_UNPCK(UNPCKLPD, m)
    778     DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
    779     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    780     DestName = getRegName(MI->getOperand(0).getReg());
    781     break;
    782 
    783   CASE_UNPCK(UNPCKLPS, r)
    784     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    785     RegForm = true;
    786     // FALL THROUGH.
    787   CASE_UNPCK(UNPCKLPS, m)
    788     DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
    789     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    790     DestName = getRegName(MI->getOperand(0).getReg());
    791     break;
    792 
    793   CASE_UNPCK(UNPCKHPD, r)
    794     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    795     RegForm = true;
    796     // FALL THROUGH.
    797   CASE_UNPCK(UNPCKHPD, m)
    798     DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
    799     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    800     DestName = getRegName(MI->getOperand(0).getReg());
    801     break;
    802 
    803   CASE_UNPCK(UNPCKHPS, r)
    804     Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    805     RegForm = true;
    806     // FALL THROUGH.
    807   CASE_UNPCK(UNPCKHPS, m)
    808     DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
    809     Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
    810     DestName = getRegName(MI->getOperand(0).getReg());
    811     break;
    812 
    813   CASE_VPERMILPI(PERMILPS, r)
    814     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    815     // FALL THROUGH.
    816   CASE_VPERMILPI(PERMILPS, m)
    817     if (MI->getOperand(NumOperands - 1).isImm())
    818       DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::f32, 0),
    819                       MI->getOperand(NumOperands - 1).getImm(),
    820                       ShuffleMask);
    821     DestName = getRegName(MI->getOperand(0).getReg());
    822     break;
    823 
    824   CASE_VPERMILPI(PERMILPD, r)
    825     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    826     // FALL THROUGH.
    827   CASE_VPERMILPI(PERMILPD, m)
    828     if (MI->getOperand(NumOperands - 1).isImm())
    829       DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::f64, 0),
    830                       MI->getOperand(NumOperands - 1).getImm(),
    831                       ShuffleMask);
    832     DestName = getRegName(MI->getOperand(0).getReg());
    833     break;
    834 
    835   case X86::VPERM2F128rr:
    836   case X86::VPERM2I128rr:
    837     Src2Name = getRegName(MI->getOperand(2).getReg());
    838     // FALL THROUGH.
    839   case X86::VPERM2F128rm:
    840   case X86::VPERM2I128rm:
    841     // For instruction comments purpose, assume the 256-bit vector is v4i64.
    842     if (MI->getOperand(NumOperands - 1).isImm())
    843       DecodeVPERM2X128Mask(MVT::v4i64,
    844                            MI->getOperand(NumOperands - 1).getImm(),
    845                            ShuffleMask);
    846     Src1Name = getRegName(MI->getOperand(1).getReg());
    847     DestName = getRegName(MI->getOperand(0).getReg());
    848     break;
    849 
    850   CASE_VPERM(PERMPD, r)
    851     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    852     // FALL THROUGH.
    853   CASE_VPERM(PERMPD, m)
    854     if (MI->getOperand(NumOperands - 1).isImm())
    855       DecodeVPERMMask(getRegOperandVectorVT(MI, MVT::f64, 0),
    856                       MI->getOperand(NumOperands - 1).getImm(),
    857                       ShuffleMask);
    858     DestName = getRegName(MI->getOperand(0).getReg());
    859     break;
    860 
    861   CASE_VPERM(PERMQ, r)
    862     Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
    863     // FALL THROUGH.
    864   CASE_VPERM(PERMQ, m)
    865     if (MI->getOperand(NumOperands - 1).isImm())
    866       DecodeVPERMMask(getRegOperandVectorVT(MI, MVT::i64, 0),
    867                       MI->getOperand(NumOperands - 1).getImm(),
    868                       ShuffleMask);
    869     DestName = getRegName(MI->getOperand(0).getReg());
    870     break;
    871 
    872   case X86::MOVSDrr:
    873   case X86::VMOVSDrr:
    874   case X86::VMOVSDZrr:
    875     Src2Name = getRegName(MI->getOperand(2).getReg());
    876     Src1Name = getRegName(MI->getOperand(1).getReg());
    877     // FALL THROUGH.
    878   case X86::MOVSDrm:
    879   case X86::VMOVSDrm:
    880   case X86::VMOVSDZrm:
    881     DecodeScalarMoveMask(MVT::v2f64, nullptr == Src2Name, ShuffleMask);
    882     DestName = getRegName(MI->getOperand(0).getReg());
    883     break;
    884 
    885   case X86::MOVSSrr:
    886   case X86::VMOVSSrr:
    887   case X86::VMOVSSZrr:
    888     Src2Name = getRegName(MI->getOperand(2).getReg());
    889     Src1Name = getRegName(MI->getOperand(1).getReg());
    890     // FALL THROUGH.
    891   case X86::MOVSSrm:
    892   case X86::VMOVSSrm:
    893   case X86::VMOVSSZrm:
    894     DecodeScalarMoveMask(MVT::v4f32, nullptr == Src2Name, ShuffleMask);
    895     DestName = getRegName(MI->getOperand(0).getReg());
    896     break;
    897 
    898   case X86::MOVPQI2QIrr:
    899   case X86::MOVZPQILo2PQIrr:
    900   case X86::VMOVPQI2QIrr:
    901   case X86::VMOVZPQILo2PQIrr:
    902   case X86::VMOVZPQILo2PQIZrr:
    903     Src1Name = getRegName(MI->getOperand(1).getReg());
    904   // FALL THROUGH.
    905   case X86::MOVQI2PQIrm:
    906   case X86::MOVZQI2PQIrm:
    907   case X86::MOVZPQILo2PQIrm:
    908   case X86::VMOVQI2PQIrm:
    909   case X86::VMOVQI2PQIZrm:
    910   case X86::VMOVZQI2PQIrm:
    911   case X86::VMOVZPQILo2PQIrm:
    912   case X86::VMOVZPQILo2PQIZrm:
    913     DecodeZeroMoveLowMask(MVT::v2i64, ShuffleMask);
    914     DestName = getRegName(MI->getOperand(0).getReg());
    915     break;
    916 
    917   case X86::MOVDI2PDIrm:
    918   case X86::VMOVDI2PDIrm:
    919   case X86::VMOVDI2PDIZrm:
    920     DecodeZeroMoveLowMask(MVT::v4i32, ShuffleMask);
    921     DestName = getRegName(MI->getOperand(0).getReg());
    922     break;
    923 
    924   case X86::EXTRQI:
    925     if (MI->getOperand(2).isImm() &&
    926         MI->getOperand(3).isImm())
    927       DecodeEXTRQIMask(MI->getOperand(2).getImm(),
    928                        MI->getOperand(3).getImm(),
    929                        ShuffleMask);
    930 
    931     DestName = getRegName(MI->getOperand(0).getReg());
    932     Src1Name = getRegName(MI->getOperand(1).getReg());
    933     break;
    934 
    935   case X86::INSERTQI:
    936     if (MI->getOperand(3).isImm() &&
    937         MI->getOperand(4).isImm())
    938       DecodeINSERTQIMask(MI->getOperand(3).getImm(),
    939                          MI->getOperand(4).getImm(),
    940                          ShuffleMask);
    941 
    942     DestName = getRegName(MI->getOperand(0).getReg());
    943     Src1Name = getRegName(MI->getOperand(1).getReg());
    944     Src2Name = getRegName(MI->getOperand(2).getReg());
    945     break;
    946 
    947   case X86::VBROADCASTF128:
    948   case X86::VBROADCASTI128:
    949     DecodeSubVectorBroadcast(MVT::v4f64, MVT::v2f64, ShuffleMask);
    950     DestName = getRegName(MI->getOperand(0).getReg());
    951     break;
    952 
    953   CASE_PMOVZX(PMOVZXBW, r)
    954   CASE_PMOVZX(PMOVZXBD, r)
    955   CASE_PMOVZX(PMOVZXBQ, r)
    956     Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    957   // FALL THROUGH.
    958   CASE_PMOVZX(PMOVZXBW, m)
    959   CASE_PMOVZX(PMOVZXBD, m)
    960   CASE_PMOVZX(PMOVZXBQ, m)
    961     DecodeZeroExtendMask(MVT::i8, getZeroExtensionResultType(MI), ShuffleMask);
    962     DestName = getRegName(MI->getOperand(0).getReg());
    963     break;
    964 
    965   CASE_PMOVZX(PMOVZXWD, r)
    966   CASE_PMOVZX(PMOVZXWQ, r)
    967     Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    968   // FALL THROUGH.
    969   CASE_PMOVZX(PMOVZXWD, m)
    970   CASE_PMOVZX(PMOVZXWQ, m)
    971     DecodeZeroExtendMask(MVT::i16, getZeroExtensionResultType(MI), ShuffleMask);
    972     DestName = getRegName(MI->getOperand(0).getReg());
    973     break;
    974 
    975   CASE_PMOVZX(PMOVZXDQ, r)
    976     Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
    977   // FALL THROUGH.
    978   CASE_PMOVZX(PMOVZXDQ, m)
    979     DecodeZeroExtendMask(MVT::i32, getZeroExtensionResultType(MI), ShuffleMask);
    980     DestName = getRegName(MI->getOperand(0).getReg());
    981     break;
    982   }
    983 
    984   // The only comments we decode are shuffles, so give up if we were unable to
    985   // decode a shuffle mask.
    986   if (ShuffleMask.empty())
    987     return false;
    988 
    989   if (!DestName) DestName = Src1Name;
    990   OS << (DestName ? getMaskName(MI, DestName, getRegName) : "mem") << " = ";
    991 
    992   // If the two sources are the same, canonicalize the input elements to be
    993   // from the first src so that we get larger element spans.
    994   if (Src1Name == Src2Name) {
    995     for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
    996       if ((int)ShuffleMask[i] >= 0 && // Not sentinel.
    997           ShuffleMask[i] >= (int)e)   // From second mask.
    998         ShuffleMask[i] -= e;
    999     }
   1000   }
   1001 
   1002   // The shuffle mask specifies which elements of the src1/src2 fill in the
   1003   // destination, with a few sentinel values.  Loop through and print them
   1004   // out.
   1005   for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
   1006     if (i != 0)
   1007       OS << ',';
   1008     if (ShuffleMask[i] == SM_SentinelZero) {
   1009       OS << "zero";
   1010       continue;
   1011     }
   1012 
   1013     // Otherwise, it must come from src1 or src2.  Print the span of elements
   1014     // that comes from this src.
   1015     bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
   1016     const char *SrcName = isSrc1 ? Src1Name : Src2Name;
   1017     OS << (SrcName ? SrcName : "mem") << '[';
   1018     bool IsFirst = true;
   1019     while (i != e && (int)ShuffleMask[i] != SM_SentinelZero &&
   1020            (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) {
   1021       if (!IsFirst)
   1022         OS << ',';
   1023       else
   1024         IsFirst = false;
   1025       if (ShuffleMask[i] == SM_SentinelUndef)
   1026         OS << "u";
   1027       else
   1028         OS << ShuffleMask[i] % ShuffleMask.size();
   1029       ++i;
   1030     }
   1031     OS << ']';
   1032     --i; // For loop increments element #.
   1033   }
   1034   //MI->print(OS, 0);
   1035   OS << "\n";
   1036 
   1037   // We successfully added a comment to this instruction.
   1038   return true;
   1039 }
   1040