1ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===-- X86InstComments.cpp - Generate verbose-asm comments for instrs ----===//
2ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//
3ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//                     The LLVM Compiler Infrastructure
4ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//
5ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// This file is distributed under the University of Illinois Open Source
6ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// License. See LICENSE.TXT for details.
7ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//
8ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===//
9ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//
10ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// This defines functionality used to emit comments about X86 instructions to
11ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// an output stream for -fverbose-asm.
12ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//
13ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===//
14ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
15ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "X86InstComments.h"
16ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "MCTargetDesc/X86MCTargetDesc.h"
17ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "Utils/X86ShuffleDecode.h"
18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/MC/MCInst.h"
19ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/CodeGen/MachineValueType.h"
20ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/Support/raw_ostream.h"
21ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
22ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesusing namespace llvm;
23ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
24ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// \brief Extracts the src/dst types for a given zero extension instruction.
25ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// \note While the number of elements in DstVT type correct, the
26ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// number in the SrcVT type is expanded to fill the src xmm register and the
27ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// upper elements may not be included in the dst xmm/ymm register.
28ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesstatic void getZeroExtensionTypes(const MCInst *MI, MVT &SrcVT, MVT &DstVT) {
29ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  switch (MI->getOpcode()) {
30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  default:
31ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    llvm_unreachable("Unknown zero extension instruction");
32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // i8 zero extension
33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBWrm:
34ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBWrr:
35ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWrm:
36ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWrr:
37ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v16i8;
38ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v8i16;
39ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
40ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWYrm:
41ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWYrr:
42ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v16i8;
43ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v16i16;
44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
45ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBDrm:
46ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBDrr:
47ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDrm:
48ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDrr:
49ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v16i8;
50ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v4i32;
51ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
52ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDYrm:
53ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDYrr:
54ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v16i8;
55ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v8i32;
56ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
57ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBQrm:
58ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBQrr:
59ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQrm:
60ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQrr:
61ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v16i8;
62ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v2i64;
63ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
64ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQYrm:
65ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQYrr:
66ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v16i8;
67ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v4i64;
68ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
69ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // i16 zero extension
70ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWDrm:
71ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWDrr:
72ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDrm:
73ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDrr:
74ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v8i16;
75ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v4i32;
76ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
77ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDYrm:
78ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDYrr:
79ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v8i16;
80ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v8i32;
81ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
82ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWQrm:
83ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWQrr:
84ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQrm:
85ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQrr:
86ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v8i16;
87ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v2i64;
88ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
89ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQYrm:
90ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQYrr:
91ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v8i16;
92ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v4i64;
93ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
94ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // i32 zero extension
95ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXDQrm:
96ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXDQrr:
97ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQrm:
98ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQrr:
99ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v4i32;
100ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v2i64;
101ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
102ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQYrm:
103ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQYrr:
104ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    SrcVT = MVT::v4i32;
105ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DstVT = MVT::v4i64;
106ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
107ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  }
108ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines}
109ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
110ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===//
111ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// Top Level Entrypoint
112ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===//
113ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
114ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// EmitAnyX86InstComments - This function decodes x86 instructions and prints
115ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// newline terminated strings to the specified string if desired.  This
116ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// information is shown in disassembly dumps when verbose assembly is enabled.
117ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesbool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS,
118ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                                  const char *(*getRegName)(unsigned)) {
119ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // If this is a shuffle operation, the switch should fill in this state.
120ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  SmallVector<int, 8> ShuffleMask;
121ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr;
122ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
123ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  switch (MI->getOpcode()) {
124ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  default:
125ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // Not an instruction for which we can decode comments.
126ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    return false;
127ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
128ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::BLENDPDrri:
129ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPDrri:
130ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
131ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
132ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::BLENDPDrmi:
133ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPDrmi:
134ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
135ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v2f64,
136ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
137ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
138ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
139ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
140ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
141ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPDYrri:
142ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
143ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
144ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPDYrmi:
145ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
146ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v4f64,
147ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
148ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
149ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
150ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
151ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
152ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
153ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::BLENDPSrri:
154ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPSrri:
155ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
156ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
157ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::BLENDPSrmi:
158ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPSrmi:
159ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
160ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v4f32,
161ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
162ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
163ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
164ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
165ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
166ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPSYrri:
167ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
168ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
169ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VBLENDPSYrmi:
170ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
171ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v8f32,
172ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
173ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
174ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
175ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
176ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
177ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
178ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PBLENDWrri:
179ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDWrri:
180ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
181ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
182ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PBLENDWrmi:
183ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDWrmi:
184ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
185ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v8i16,
186ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
187ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
188ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
189ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
190ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
191ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDWYrri:
192ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
193ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
194ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDWYrmi:
195ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
196ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v16i16,
197ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
198ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
199ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
200ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
201ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
202ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
203ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDDrri:
204ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
205ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
206ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDDrmi:
207ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
208ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v4i32,
209ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
210ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
211ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
212ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
213ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
214ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
215ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDDYrri:
216ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
217ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
218ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPBLENDDYrmi:
219ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
220ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeBLENDMask(MVT::v8i32,
221ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
222ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
223ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
224ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
225ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
226ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
227ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::INSERTPSrr:
228ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VINSERTPSrr:
229ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
230ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
231ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::INSERTPSrm:
232ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VINSERTPSrm:
233ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
234ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
235ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
236ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeINSERTPSMask(MI->getOperand(MI->getNumOperands()-1).getImm(),
237ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                         ShuffleMask);
238ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
239ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
240ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVLHPSrr:
241ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVLHPSrr:
242ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
243ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
244ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
245ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVLHPSMask(2, ShuffleMask);
246ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
247ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
248ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVHLPSrr:
249ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVHLPSrr:
250ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
251ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
252ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
253ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVHLPSMask(2, ShuffleMask);
254ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
255ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
256ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSLDUPrr:
257ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSLDUPrr:
258ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
259ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
260ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSLDUPrm:
261ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSLDUPrm:
262ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
263ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVSLDUPMask(MVT::v4f32, ShuffleMask);
264ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
265ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
266ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSHDUPYrr:
267ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
268ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
269ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSHDUPYrm:
270ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
271ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVSHDUPMask(MVT::v8f32, ShuffleMask);
272ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
273ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
274ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSLDUPYrr:
275ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
276ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
277ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSLDUPYrm:
278ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
279ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVSLDUPMask(MVT::v8f32, ShuffleMask);
280ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
281ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
282ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSHDUPrr:
283ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSHDUPrr:
284ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
285ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
286ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSHDUPrm:
287ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSHDUPrm:
288ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
289ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVSHDUPMask(MVT::v4f32, ShuffleMask);
290ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
291ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
292ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVDDUPYrr:
293ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
294ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
295ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVDDUPYrm:
296ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
297ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVDDUPMask(MVT::v4f64, ShuffleMask);
298ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
299ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
300ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVDDUPrr:
301ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVDDUPrr:
302ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
303ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
304ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVDDUPrm:
305ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVDDUPrm:
306ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
307ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeMOVDDUPMask(MVT::v2f64, ShuffleMask);
308ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
309ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
310ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSLLDQri:
311ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSLLDQri:
312ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
313ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
314ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
315ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSLLDQMask(MVT::v16i8,
316ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       MI->getOperand(MI->getNumOperands()-1).getImm(),
317ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       ShuffleMask);
318ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
319ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
320ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSLLDQYri:
321ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
322ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
323ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
324ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSLLDQMask(MVT::v32i8,
325ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       MI->getOperand(MI->getNumOperands()-1).getImm(),
326ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       ShuffleMask);
327ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
328ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
329ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSRLDQri:
330ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSRLDQri:
331ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
332ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
333ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
334ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSRLDQMask(MVT::v16i8,
335ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       MI->getOperand(MI->getNumOperands()-1).getImm(),
336ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       ShuffleMask);
337ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
338ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
339ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSRLDQYri:
340ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
341ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
342ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
343ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSRLDQMask(MVT::v32i8,
344ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       MI->getOperand(MI->getNumOperands()-1).getImm(),
345ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       ShuffleMask);
346ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
347ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
348ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PALIGNR128rr:
349ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPALIGNR128rr:
350ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(2).getReg());
351ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
352ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PALIGNR128rm:
353ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPALIGNR128rm:
354ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(1).getReg());
355ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
356ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
357ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePALIGNRMask(MVT::v16i8,
358ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        MI->getOperand(MI->getNumOperands()-1).getImm(),
359ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        ShuffleMask);
360ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
361ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPALIGNR256rr:
362ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(2).getReg());
363ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
364ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPALIGNR256rm:
365ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(1).getReg());
366ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
367ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
368ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePALIGNRMask(MVT::v32i8,
369ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        MI->getOperand(MI->getNumOperands()-1).getImm(),
370ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        ShuffleMask);
371ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
372ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
373ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSHUFDri:
374ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFDri:
375ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
376ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
377ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSHUFDmi:
378ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFDmi:
379ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
380ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
381ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFMask(MVT::v4i32,
382ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
383ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
384ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
385ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFDYri:
386ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
387ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
388ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFDYmi:
389ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
390ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
391ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFMask(MVT::v8i32,
392ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
393ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
394ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
395ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
396ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
397ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSHUFHWri:
398ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFHWri:
399ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
400ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
401ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSHUFHWmi:
402ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFHWmi:
403ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
404ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
405ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFHWMask(MVT::v8i16,
406ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        MI->getOperand(MI->getNumOperands()-1).getImm(),
407ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        ShuffleMask);
408ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
409ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFHWYri:
410ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
411ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
412ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFHWYmi:
413ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
414ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
415ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFHWMask(MVT::v16i16,
416ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        MI->getOperand(MI->getNumOperands()-1).getImm(),
417ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        ShuffleMask);
418ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
419ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSHUFLWri:
420ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFLWri:
421ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
422ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
423ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PSHUFLWmi:
424ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFLWmi:
425ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
426ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
427ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFLWMask(MVT::v8i16,
428ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        MI->getOperand(MI->getNumOperands()-1).getImm(),
429ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        ShuffleMask);
430ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
431ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFLWYri:
432ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
433ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
434ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPSHUFLWYmi:
435ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
436ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
437ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFLWMask(MVT::v16i16,
438ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        MI->getOperand(MI->getNumOperands()-1).getImm(),
439ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                        ShuffleMask);
440ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
441ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
442ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHBWrr:
443ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHBWrr:
444ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
445ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
446ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHBWrm:
447ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHBWrm:
448ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
449ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
450ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v16i8, ShuffleMask);
451ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
452ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHBWYrr:
453ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
454ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
455ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHBWYrm:
456ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
457ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
458ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v32i8, ShuffleMask);
459ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
460ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHWDrr:
461ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHWDrr:
462ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
463ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
464ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHWDrm:
465ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHWDrm:
466ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
467ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
468ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v8i16, ShuffleMask);
469ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
470ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHWDYrr:
471ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
472ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
473ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHWDYrm:
474ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
475ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
476ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v16i16, ShuffleMask);
477ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
478ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHDQrr:
479ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHDQrr:
480ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
481ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
482ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHDQrm:
483ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHDQrm:
484ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
485ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
486ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v4i32, ShuffleMask);
487ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
488ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHDQYrr:
489ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
490ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
491ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHDQYrm:
492ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
493ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
494ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v8i32, ShuffleMask);
495ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
496ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHDQZrr:
497ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
498ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
499ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHDQZrm:
500ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
501ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
502ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v16i32, ShuffleMask);
503ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
504ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHQDQrr:
505ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHQDQrr:
506ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
507ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
508ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKHQDQrm:
509ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHQDQrm:
510ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
511ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
512ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v2i64, ShuffleMask);
513ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
514ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHQDQYrr:
515ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
516ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
517ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHQDQYrm:
518ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
519ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
520ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v4i64, ShuffleMask);
521ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
522ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHQDQZrr:
523ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
524ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
525ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKHQDQZrm:
526ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
527ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
528ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v8i64, ShuffleMask);
529ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
530ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
531ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLBWrr:
532ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLBWrr:
533ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
534ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
535ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLBWrm:
536ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLBWrm:
537ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
538ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
539ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v16i8, ShuffleMask);
540ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
541ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLBWYrr:
542ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
543ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
544ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLBWYrm:
545ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
546ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
547ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v32i8, ShuffleMask);
548ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
549ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLWDrr:
550ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLWDrr:
551ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
552ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
553ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLWDrm:
554ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLWDrm:
555ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
556ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
557ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v8i16, ShuffleMask);
558ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
559ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLWDYrr:
560ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
561ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
562ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLWDYrm:
563ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
564ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
565ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v16i16, ShuffleMask);
566ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
567ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLDQrr:
568ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLDQrr:
569ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
570ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
571ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLDQrm:
572ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLDQrm:
573ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
574ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
575ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v4i32, ShuffleMask);
576ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
577ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLDQYrr:
578ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
579ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
580ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLDQYrm:
581ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
582ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
583ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v8i32, ShuffleMask);
584ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
585ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLDQZrr:
586ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
587ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
588ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLDQZrm:
589ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
590ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
591ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v16i32, ShuffleMask);
592ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
593ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLQDQrr:
594ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLQDQrr:
595ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
596ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
597ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PUNPCKLQDQrm:
598ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLQDQrm:
599ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
600ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
601ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v2i64, ShuffleMask);
602ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
603ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLQDQYrr:
604ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
605ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
606ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLQDQYrm:
607ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
608ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
609ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v4i64, ShuffleMask);
610ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
611ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLQDQZrr:
612ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
613ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
614ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPUNPCKLQDQZrm:
615ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
616ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
617ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v8i64, ShuffleMask);
618ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
619ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
620ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::SHUFPDrri:
621ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPDrri:
622ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
623ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
624ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::SHUFPDrmi:
625ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPDrmi:
626ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
627ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeSHUFPMask(MVT::v2f64,
628ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
629ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
630ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
631ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
632ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
633ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPDYrri:
634ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
635ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
636ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPDYrmi:
637ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
638ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeSHUFPMask(MVT::v4f64,
639ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
640ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
641ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
642ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
643ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
644ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
645ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::SHUFPSrri:
646ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPSrri:
647ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
648ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
649ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::SHUFPSrmi:
650ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPSrmi:
651ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
652ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeSHUFPMask(MVT::v4f32,
653ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
654ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
655ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
656ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
657ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
658ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPSYrri:
659ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
660ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
661ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VSHUFPSYrmi:
662ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
663ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeSHUFPMask(MVT::v8f32,
664ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
665ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
666ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
667ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
668ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
669ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
670ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKLPDrr:
671ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPDrr:
672ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
673ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
674ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKLPDrm:
675ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPDrm:
676ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v2f64, ShuffleMask);
677ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
678ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
679ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
680ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPDYrr:
681ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
682ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
683ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPDYrm:
684ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v4f64, ShuffleMask);
685ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
686ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
687ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
688ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPDZrr:
689ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
690ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
691ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPDZrm:
692ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v8f64, ShuffleMask);
693ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
694ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
695ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
696ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKLPSrr:
697ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPSrr:
698ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
699ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
700ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKLPSrm:
701ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPSrm:
702ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v4f32, ShuffleMask);
703ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
704ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
705ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
706ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPSYrr:
707ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
708ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
709ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPSYrm:
710ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v8f32, ShuffleMask);
711ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
712ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
713ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
714ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPSZrr:
715ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
716ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
717ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKLPSZrm:
718ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKLMask(MVT::v16f32, ShuffleMask);
719ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
720ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
721ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
722ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKHPDrr:
723ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPDrr:
724ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
725ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
726ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKHPDrm:
727ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPDrm:
728ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v2f64, ShuffleMask);
729ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
730ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
731ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
732ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPDYrr:
733ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
734ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
735ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPDYrm:
736ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v4f64, ShuffleMask);
737ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
738ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
739ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
740ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPDZrr:
741ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
742ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
743ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPDZrm:
744ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v8f64, ShuffleMask);
745ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
746ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
747ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
748ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKHPSrr:
749ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPSrr:
750ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
751ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
752ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::UNPCKHPSrm:
753ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPSrm:
754ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v4f32, ShuffleMask);
755ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
756ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
757ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
758ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPSYrr:
759ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
760ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
761ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPSYrm:
762ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v8f32, ShuffleMask);
763ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
764ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
765ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
766ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPSZrr:
767ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
768ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
769ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VUNPCKHPSZrm:
770ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeUNPCKHMask(MVT::v16f32, ShuffleMask);
771ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
772ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
773ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
774ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPSri:
775ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
776ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
777ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPSmi:
778ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
779ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFMask(MVT::v4f32,
780ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
781ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
782ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
783ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
784ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPSYri:
785ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
786ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
787ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPSYmi:
788ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
789ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFMask(MVT::v8f32,
790ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
791ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
792ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
793ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
794ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPDri:
795ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
796ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
797ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPDmi:
798ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
799ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFMask(MVT::v2f64,
800ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
801ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
802ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
803ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
804ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPDYri:
805ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
806ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
807ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMILPDYmi:
808ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
809ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodePSHUFMask(MVT::v4f64,
810ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      MI->getOperand(MI->getNumOperands()-1).getImm(),
811ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
812ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
813ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
814ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERM2F128rr:
815ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERM2I128rr:
816ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
817ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
818ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERM2F128rm:
819ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERM2I128rm:
820ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // For instruction comments purpose, assume the 256-bit vector is v4i64.
821ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
822ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeVPERM2X128Mask(MVT::v4i64,
823ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                           MI->getOperand(MI->getNumOperands()-1).getImm(),
824ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                           ShuffleMask);
825ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
826ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
827ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
828ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMQYri:
829ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMPDYri:
830ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
831ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
832ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMQYmi:
833ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPERMPDYmi:
834ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if(MI->getOperand(MI->getNumOperands()-1).isImm())
835ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      DecodeVPERMMask(MI->getOperand(MI->getNumOperands()-1).getImm(),
836ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                      ShuffleMask);
837ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
838ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
839ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
840ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSDrr:
841ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSDrr:
842ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
843ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
844ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
845ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSDrm:
846ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSDrm:
847ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeScalarMoveMask(MVT::v2f64, nullptr == Src2Name, ShuffleMask);
848ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
849ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
850ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSSrr:
851ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSSrr:
852ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src2Name = getRegName(MI->getOperand(2).getReg());
853ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
854ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // FALL THROUGH.
855ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVSSrm:
856ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVSSrm:
857ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeScalarMoveMask(MVT::v4f32, nullptr == Src2Name, ShuffleMask);
858ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
859ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
860ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
861ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVPQI2QIrr:
862ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVZPQILo2PQIrr:
863ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVPQI2QIrr:
864ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVZPQILo2PQIrr:
865ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
866ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // FALL THROUGH.
867ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVQI2PQIrm:
868ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVZQI2PQIrm:
869ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVZPQILo2PQIrm:
870ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVQI2PQIrm:
871ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVZQI2PQIrm:
872ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVZPQILo2PQIrm:
873ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeZeroMoveLowMask(MVT::v2i64, ShuffleMask);
874ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
875ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
876ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::MOVDI2PDIrm:
877ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VMOVDI2PDIrm:
878ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeZeroMoveLowMask(MVT::v4i32, ShuffleMask);
879ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
880ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    break;
881ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
882ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBWrr:
883ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBDrr:
884ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBQrr:
885ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWDrr:
886ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWQrr:
887ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXDQrr:
888ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWrr:
889ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDrr:
890ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQrr:
891ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDrr:
892ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQrr:
893ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQrr:
894ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWYrr:
895ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDYrr:
896ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQYrr:
897ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDYrr:
898ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQYrr:
899ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQYrr:
900ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    Src1Name = getRegName(MI->getOperand(1).getReg());
901ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // FALL THROUGH.
902ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBWrm:
903ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBDrm:
904ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXBQrm:
905ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWDrm:
906ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXWQrm:
907ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::PMOVZXDQrm:
908ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWrm:
909ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDrm:
910ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQrm:
911ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDrm:
912ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQrm:
913ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQrm:
914ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBWYrm:
915ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBDYrm:
916ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXBQYrm:
917ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWDYrm:
918ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXWQYrm:
919ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  case X86::VPMOVZXDQYrm: {
920ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    MVT SrcVT, DstVT;
921ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    getZeroExtensionTypes(MI, SrcVT, DstVT);
922ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DecodeZeroExtendMask(SrcVT, DstVT, ShuffleMask);
923ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    DestName = getRegName(MI->getOperand(0).getReg());
924ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  } break;
925ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  }
926ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
927ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // The only comments we decode are shuffles, so give up if we were unable to
928ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // decode a shuffle mask.
929ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  if (ShuffleMask.empty())
930ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    return false;
931ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
932ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  if (!DestName) DestName = Src1Name;
933ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  OS << (DestName ? DestName : "mem") << " = ";
934ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
935ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // If the two sources are the same, canonicalize the input elements to be
936ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // from the first src so that we get larger element spans.
937ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  if (Src1Name == Src2Name) {
938ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
939ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      if ((int)ShuffleMask[i] >= 0 && // Not sentinel.
940ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines          ShuffleMask[i] >= (int)e)        // From second mask.
941ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        ShuffleMask[i] -= e;
942ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
943ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  }
944ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
945ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // The shuffle mask specifies which elements of the src1/src2 fill in the
946ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // destination, with a few sentinel values.  Loop through and print them
947ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // out.
948ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
949ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if (i != 0)
950ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      OS << ',';
951ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    if (ShuffleMask[i] == SM_SentinelZero) {
952ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      OS << "zero";
953ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      continue;
954ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
955ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
956ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // Otherwise, it must come from src1 or src2.  Print the span of elements
957ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    // that comes from this src.
958ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
959ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    const char *SrcName = isSrc1 ? Src1Name : Src2Name;
960ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    OS << (SrcName ? SrcName : "mem") << '[';
961ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    bool IsFirst = true;
962ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    while (i != e && (int)ShuffleMask[i] != SM_SentinelZero &&
963ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines           (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) {
964ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      if (!IsFirst)
965ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        OS << ',';
966ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      else
967ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        IsFirst = false;
968ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      if (ShuffleMask[i] == SM_SentinelUndef)
969ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        OS << "u";
970ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      else
971ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        OS << ShuffleMask[i] % ShuffleMask.size();
972ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      ++i;
973ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
974ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    OS << ']';
975ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    --i;  // For loop increments element #.
976ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  }
977ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  //MI->print(OS, 0);
978ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  OS << "\n";
979ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
980ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  // We successfully added a comment to this instruction.
981ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  return true;
982ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines}
983