blob: 8b65b971abeacda816248dde210e8b65e31dca24 [file] [log] [blame]
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001//===-- 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"
Craig Topper9804c672018-03-10 03:12:00 +000016#include "MCTargetDesc/X86BaseInfo.h"
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +000017#include "MCTargetDesc/X86MCTargetDesc.h"
18#include "Utils/X86ShuffleDecode.h"
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +000019#include "llvm/CodeGen/MachineValueType.h"
Chandler Carruth6bda14b2017-06-06 11:49:48 +000020#include "llvm/MC/MCInst.h"
Craig Topper9804c672018-03-10 03:12:00 +000021#include "llvm/MC/MCInstrInfo.h"
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +000022#include "llvm/Support/raw_ostream.h"
23
24using namespace llvm;
25
Simon Pilgrim41c05c02016-05-11 11:55:12 +000026#define CASE_SSE_INS_COMMON(Inst, src) \
Simon Pilgrimbfa5f232016-02-06 17:02:15 +000027 case X86::Inst##src:
28
Simon Pilgrim41c05c02016-05-11 11:55:12 +000029#define CASE_AVX_INS_COMMON(Inst, Suffix, src) \
Simon Pilgrimbfa5f232016-02-06 17:02:15 +000030 case X86::V##Inst##Suffix##src:
31
Simon Pilgrim41c05c02016-05-11 11:55:12 +000032#define CASE_MASK_INS_COMMON(Inst, Suffix, src) \
33 case X86::V##Inst##Suffix##src##k:
34
35#define CASE_MASKZ_INS_COMMON(Inst, Suffix, src) \
36 case X86::V##Inst##Suffix##src##kz:
37
38#define CASE_AVX512_INS_COMMON(Inst, Suffix, src) \
39 CASE_AVX_INS_COMMON(Inst, Suffix, src) \
40 CASE_MASK_INS_COMMON(Inst, Suffix, src) \
41 CASE_MASKZ_INS_COMMON(Inst, Suffix, src)
42
43#define CASE_MOVDUP(Inst, src) \
44 CASE_AVX512_INS_COMMON(Inst, Z, r##src) \
45 CASE_AVX512_INS_COMMON(Inst, Z256, r##src) \
46 CASE_AVX512_INS_COMMON(Inst, Z128, r##src) \
47 CASE_AVX_INS_COMMON(Inst, , r##src) \
48 CASE_AVX_INS_COMMON(Inst, Y, r##src) \
Simon Pilgrimbfa5f232016-02-06 17:02:15 +000049 CASE_SSE_INS_COMMON(Inst, r##src)
50
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +000051#define CASE_MASK_MOVDUP(Inst, src) \
52 CASE_MASK_INS_COMMON(Inst, Z, r##src) \
53 CASE_MASK_INS_COMMON(Inst, Z256, r##src) \
54 CASE_MASK_INS_COMMON(Inst, Z128, r##src)
55
56#define CASE_MASKZ_MOVDUP(Inst, src) \
57 CASE_MASKZ_INS_COMMON(Inst, Z, r##src) \
58 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src) \
59 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
60
Simon Pilgrim41c05c02016-05-11 11:55:12 +000061#define CASE_PMOVZX(Inst, src) \
62 CASE_AVX512_INS_COMMON(Inst, Z, r##src) \
63 CASE_AVX512_INS_COMMON(Inst, Z256, r##src) \
64 CASE_AVX512_INS_COMMON(Inst, Z128, r##src) \
65 CASE_AVX_INS_COMMON(Inst, , r##src) \
66 CASE_AVX_INS_COMMON(Inst, Y, r##src) \
Simon Pilgrim0acc32a2016-02-06 19:51:21 +000067 CASE_SSE_INS_COMMON(Inst, r##src)
68
Simon Pilgrim68f438a2016-07-03 13:33:28 +000069#define CASE_MASK_PMOVZX(Inst, src) \
70 CASE_MASK_INS_COMMON(Inst, Z, r##src) \
71 CASE_MASK_INS_COMMON(Inst, Z256, r##src) \
72 CASE_MASK_INS_COMMON(Inst, Z128, r##src)
73
74#define CASE_MASKZ_PMOVZX(Inst, src) \
75 CASE_MASKZ_INS_COMMON(Inst, Z, r##src) \
76 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src) \
77 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
78
Simon Pilgrim41c05c02016-05-11 11:55:12 +000079#define CASE_UNPCK(Inst, src) \
80 CASE_AVX512_INS_COMMON(Inst, Z, r##src) \
81 CASE_AVX512_INS_COMMON(Inst, Z256, r##src) \
82 CASE_AVX512_INS_COMMON(Inst, Z128, r##src) \
83 CASE_AVX_INS_COMMON(Inst, , r##src) \
84 CASE_AVX_INS_COMMON(Inst, Y, r##src) \
Simon Pilgrimbfa5f232016-02-06 17:02:15 +000085 CASE_SSE_INS_COMMON(Inst, r##src)
86
Simon Pilgrim598bdb62016-07-03 14:26:21 +000087#define CASE_MASK_UNPCK(Inst, src) \
88 CASE_MASK_INS_COMMON(Inst, Z, r##src) \
89 CASE_MASK_INS_COMMON(Inst, Z256, r##src) \
90 CASE_MASK_INS_COMMON(Inst, Z128, r##src)
91
92#define CASE_MASKZ_UNPCK(Inst, src) \
93 CASE_MASKZ_INS_COMMON(Inst, Z, r##src) \
94 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src) \
95 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
96
97#define CASE_SHUF(Inst, suf) \
Craig Topper01f53b12016-06-03 05:31:00 +000098 CASE_AVX512_INS_COMMON(Inst, Z, suf) \
99 CASE_AVX512_INS_COMMON(Inst, Z256, suf) \
100 CASE_AVX512_INS_COMMON(Inst, Z128, suf) \
101 CASE_AVX_INS_COMMON(Inst, , suf) \
102 CASE_AVX_INS_COMMON(Inst, Y, suf) \
103 CASE_SSE_INS_COMMON(Inst, suf)
Simon Pilgrimbfa5f232016-02-06 17:02:15 +0000104
Simon Pilgrim1f590762016-07-03 13:55:41 +0000105#define CASE_MASK_SHUF(Inst, src) \
106 CASE_MASK_INS_COMMON(Inst, Z, r##src##i) \
107 CASE_MASK_INS_COMMON(Inst, Z256, r##src##i) \
108 CASE_MASK_INS_COMMON(Inst, Z128, r##src##i)
109
110#define CASE_MASKZ_SHUF(Inst, src) \
111 CASE_MASKZ_INS_COMMON(Inst, Z, r##src##i) \
112 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src##i) \
113 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src##i)
114
Simon Pilgrim5080e7f2016-07-03 18:02:43 +0000115#define CASE_VPERMILPI(Inst, src) \
Simon Pilgrim41c05c02016-05-11 11:55:12 +0000116 CASE_AVX512_INS_COMMON(Inst, Z, src##i) \
117 CASE_AVX512_INS_COMMON(Inst, Z256, src##i) \
118 CASE_AVX512_INS_COMMON(Inst, Z128, src##i) \
119 CASE_AVX_INS_COMMON(Inst, , src##i) \
Simon Pilgrimbfa5f232016-02-06 17:02:15 +0000120 CASE_AVX_INS_COMMON(Inst, Y, src##i)
121
Simon Pilgrim5080e7f2016-07-03 18:02:43 +0000122#define CASE_MASK_VPERMILPI(Inst, src) \
Simon Pilgrim1f590762016-07-03 13:55:41 +0000123 CASE_MASK_INS_COMMON(Inst, Z, src##i) \
124 CASE_MASK_INS_COMMON(Inst, Z256, src##i) \
125 CASE_MASK_INS_COMMON(Inst, Z128, src##i)
126
Simon Pilgrim5080e7f2016-07-03 18:02:43 +0000127#define CASE_MASKZ_VPERMILPI(Inst, src) \
Simon Pilgrim1f590762016-07-03 13:55:41 +0000128 CASE_MASKZ_INS_COMMON(Inst, Z, src##i) \
129 CASE_MASKZ_INS_COMMON(Inst, Z256, src##i) \
130 CASE_MASKZ_INS_COMMON(Inst, Z128, src##i)
131
Simon Pilgrima0d73832016-07-03 18:27:37 +0000132#define CASE_VPERM(Inst, src) \
133 CASE_AVX512_INS_COMMON(Inst, Z, src##i) \
134 CASE_AVX512_INS_COMMON(Inst, Z256, src##i) \
135 CASE_AVX_INS_COMMON(Inst, Y, src##i)
136
Simon Pilgrim68ea8062016-07-03 18:40:24 +0000137#define CASE_MASK_VPERM(Inst, src) \
138 CASE_MASK_INS_COMMON(Inst, Z, src##i) \
139 CASE_MASK_INS_COMMON(Inst, Z256, src##i)
140
141#define CASE_MASKZ_VPERM(Inst, src) \
142 CASE_MASKZ_INS_COMMON(Inst, Z, src##i) \
143 CASE_MASKZ_INS_COMMON(Inst, Z256, src##i)
144
Simon Pilgrimbfa5f232016-02-06 17:02:15 +0000145#define CASE_VSHUF(Inst, src) \
Simon Pilgrim41c05c02016-05-11 11:55:12 +0000146 CASE_AVX512_INS_COMMON(SHUFF##Inst, Z, r##src##i) \
147 CASE_AVX512_INS_COMMON(SHUFI##Inst, Z, r##src##i) \
148 CASE_AVX512_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
149 CASE_AVX512_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
Simon Pilgrimbfa5f232016-02-06 17:02:15 +0000150
Simon Pilgrim1f590762016-07-03 13:55:41 +0000151#define CASE_MASK_VSHUF(Inst, src) \
152 CASE_MASK_INS_COMMON(SHUFF##Inst, Z, r##src##i) \
153 CASE_MASK_INS_COMMON(SHUFI##Inst, Z, r##src##i) \
154 CASE_MASK_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
155 CASE_MASK_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
156
157#define CASE_MASKZ_VSHUF(Inst, src) \
158 CASE_MASKZ_INS_COMMON(SHUFF##Inst, Z, r##src##i) \
159 CASE_MASKZ_INS_COMMON(SHUFI##Inst, Z, r##src##i) \
160 CASE_MASKZ_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
161 CASE_MASKZ_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
162
Igor Breger24cab0f2015-11-16 07:22:00 +0000163static unsigned getVectorRegSize(unsigned RegNo) {
Igor Breger24cab0f2015-11-16 07:22:00 +0000164 if (X86::ZMM0 <= RegNo && RegNo <= X86::ZMM31)
165 return 512;
166 if (X86::YMM0 <= RegNo && RegNo <= X86::YMM31)
167 return 256;
168 if (X86::XMM0 <= RegNo && RegNo <= X86::XMM31)
169 return 128;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000170 if (X86::MM0 <= RegNo && RegNo <= X86::MM7)
171 return 64;
Igor Breger24cab0f2015-11-16 07:22:00 +0000172
173 llvm_unreachable("Unknown vector reg!");
Igor Breger24cab0f2015-11-16 07:22:00 +0000174}
175
176static MVT getRegOperandVectorVT(const MCInst *MI, const MVT &ScalarVT,
177 unsigned OperandIndex) {
178 unsigned OpReg = MI->getOperand(OperandIndex).getReg();
179 return MVT::getVectorVT(ScalarVT,
180 getVectorRegSize(OpReg)/ScalarVT.getSizeInBits());
181}
182
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000183/// \brief Extracts the dst type for a given zero extension instruction.
184static MVT getZeroExtensionResultType(const MCInst *MI) {
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000185 switch (MI->getOpcode()) {
186 default:
187 llvm_unreachable("Unknown zero extension instruction");
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000188 // zero extension to i16
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000189 CASE_PMOVZX(PMOVZXBW, m)
190 CASE_PMOVZX(PMOVZXBW, r)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000191 return getRegOperandVectorVT(MI, MVT::i16, 0);
192 // zero extension to i32
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000193 CASE_PMOVZX(PMOVZXBD, m)
194 CASE_PMOVZX(PMOVZXBD, r)
195 CASE_PMOVZX(PMOVZXWD, m)
196 CASE_PMOVZX(PMOVZXWD, r)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000197 return getRegOperandVectorVT(MI, MVT::i32, 0);
198 // zero extension to i64
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000199 CASE_PMOVZX(PMOVZXBQ, m)
200 CASE_PMOVZX(PMOVZXBQ, r)
201 CASE_PMOVZX(PMOVZXWQ, m)
202 CASE_PMOVZX(PMOVZXWQ, r)
203 CASE_PMOVZX(PMOVZXDQ, m)
204 CASE_PMOVZX(PMOVZXDQ, r)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000205 return getRegOperandVectorVT(MI, MVT::i64, 0);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000206 }
207}
208
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000209/// Wraps the destination register name with AVX512 mask/maskz filtering.
Craig Topper85b1da12017-10-11 00:46:09 +0000210static void printMasking(raw_ostream &OS, const MCInst *MI,
Craig Topper9804c672018-03-10 03:12:00 +0000211 const MCInstrInfo &MCII,
Craig Topper85b1da12017-10-11 00:46:09 +0000212 const char *(*getRegName)(unsigned)) {
Craig Topper9804c672018-03-10 03:12:00 +0000213 const MCInstrDesc &Desc = MCII.get(MI->getOpcode());
214 uint64_t TSFlags = Desc.TSFlags;
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000215
Craig Topper9804c672018-03-10 03:12:00 +0000216 if (!(TSFlags & X86II::EVEX_K))
Craig Topper85b1da12017-10-11 00:46:09 +0000217 return;
Craig Topper9804c672018-03-10 03:12:00 +0000218
219 bool MaskWithZero = (TSFlags & X86II::EVEX_Z);
220 unsigned MaskOp = Desc.getNumDefs();
221
222 if (Desc.getOperandConstraint(MaskOp, MCOI::TIED_TO) != -1)
223 ++MaskOp;
224
225 const char *MaskRegName = getRegName(MI->getOperand(MaskOp).getReg());
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000226
227 // MASK: zmmX {%kY}
Craig Topper85b1da12017-10-11 00:46:09 +0000228 OS << " {%" << MaskRegName << "}";
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000229
230 // MASKZ: zmmX {%kY} {z}
231 if (MaskWithZero)
Craig Topper85b1da12017-10-11 00:46:09 +0000232 OS << " {z}";
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000233}
234
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000235//===----------------------------------------------------------------------===//
236// Top Level Entrypoint
237//===----------------------------------------------------------------------===//
238
239/// EmitAnyX86InstComments - This function decodes x86 instructions and prints
240/// newline terminated strings to the specified string if desired. This
241/// information is shown in disassembly dumps when verbose assembly is enabled.
242bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS,
Craig Topper9804c672018-03-10 03:12:00 +0000243 const MCInstrInfo &MCII,
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000244 const char *(*getRegName)(unsigned)) {
245 // If this is a shuffle operation, the switch should fill in this state.
246 SmallVector<int, 8> ShuffleMask;
247 const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr;
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000248 unsigned NumOperands = MI->getNumOperands();
Craig Topper89c17612016-06-10 04:48:05 +0000249 bool RegForm = false;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000250
251 switch (MI->getOpcode()) {
252 default:
253 // Not an instruction for which we can decode comments.
254 return false;
255
256 case X86::BLENDPDrri:
257 case X86::VBLENDPDrri:
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000258 case X86::VBLENDPDYrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000259 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000260 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000261 case X86::BLENDPDrmi:
262 case X86::VBLENDPDrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000263 case X86::VBLENDPDYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000264 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000265 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::f64, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000266 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000267 ShuffleMask);
268 Src1Name = getRegName(MI->getOperand(1).getReg());
269 DestName = getRegName(MI->getOperand(0).getReg());
270 break;
271
272 case X86::BLENDPSrri:
273 case X86::VBLENDPSrri:
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000274 case X86::VBLENDPSYrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000275 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000276 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000277 case X86::BLENDPSrmi:
278 case X86::VBLENDPSrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000279 case X86::VBLENDPSYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000280 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000281 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::f32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000282 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000283 ShuffleMask);
284 Src1Name = getRegName(MI->getOperand(1).getReg());
285 DestName = getRegName(MI->getOperand(0).getReg());
286 break;
287
288 case X86::PBLENDWrri:
289 case X86::VPBLENDWrri:
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000290 case X86::VPBLENDWYrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000291 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000292 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000293 case X86::PBLENDWrmi:
294 case X86::VPBLENDWrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000295 case X86::VPBLENDWYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000296 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000297 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::i16, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000298 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000299 ShuffleMask);
300 Src1Name = getRegName(MI->getOperand(1).getReg());
301 DestName = getRegName(MI->getOperand(0).getReg());
302 break;
303
304 case X86::VPBLENDDrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000305 case X86::VPBLENDDYrri:
306 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000307 LLVM_FALLTHROUGH;
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000308 case X86::VPBLENDDrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000309 case X86::VPBLENDDYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000310 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000311 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::i32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000312 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000313 ShuffleMask);
314 Src1Name = getRegName(MI->getOperand(1).getReg());
315 DestName = getRegName(MI->getOperand(0).getReg());
316 break;
317
318 case X86::INSERTPSrr:
319 case X86::VINSERTPSrr:
Craig Topper6189d3e2016-07-19 01:26:19 +0000320 case X86::VINSERTPSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000321 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000322 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000323 case X86::INSERTPSrm:
324 case X86::VINSERTPSrm:
Craig Topper6189d3e2016-07-19 01:26:19 +0000325 case X86::VINSERTPSZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000326 DestName = getRegName(MI->getOperand(0).getReg());
327 Src1Name = getRegName(MI->getOperand(1).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000328 if (MI->getOperand(NumOperands - 1).isImm())
329 DecodeINSERTPSMask(MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000330 ShuffleMask);
331 break;
332
333 case X86::MOVLHPSrr:
334 case X86::VMOVLHPSrr:
Simon Pilgrimd5a15442015-11-21 13:04:42 +0000335 case X86::VMOVLHPSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000336 Src2Name = getRegName(MI->getOperand(2).getReg());
337 Src1Name = getRegName(MI->getOperand(1).getReg());
338 DestName = getRegName(MI->getOperand(0).getReg());
339 DecodeMOVLHPSMask(2, ShuffleMask);
340 break;
341
342 case X86::MOVHLPSrr:
343 case X86::VMOVHLPSrr:
Simon Pilgrimd5a15442015-11-21 13:04:42 +0000344 case X86::VMOVHLPSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000345 Src2Name = getRegName(MI->getOperand(2).getReg());
346 Src1Name = getRegName(MI->getOperand(1).getReg());
347 DestName = getRegName(MI->getOperand(0).getReg());
348 DecodeMOVHLPSMask(2, ShuffleMask);
349 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000350
Simon Pilgrima3d67442016-02-07 15:39:22 +0000351 case X86::MOVHPDrm:
352 case X86::VMOVHPDrm:
353 case X86::VMOVHPDZ128rm:
354 Src1Name = getRegName(MI->getOperand(1).getReg());
355 DestName = getRegName(MI->getOperand(0).getReg());
356 DecodeInsertElementMask(MVT::v2f64, 1, 1, ShuffleMask);
357 break;
358
359 case X86::MOVHPSrm:
360 case X86::VMOVHPSrm:
361 case X86::VMOVHPSZ128rm:
362 Src1Name = getRegName(MI->getOperand(1).getReg());
363 DestName = getRegName(MI->getOperand(0).getReg());
364 DecodeInsertElementMask(MVT::v4f32, 2, 2, ShuffleMask);
365 break;
366
367 case X86::MOVLPDrm:
368 case X86::VMOVLPDrm:
369 case X86::VMOVLPDZ128rm:
370 Src1Name = getRegName(MI->getOperand(1).getReg());
371 DestName = getRegName(MI->getOperand(0).getReg());
372 DecodeInsertElementMask(MVT::v2f64, 0, 1, ShuffleMask);
373 break;
374
375 case X86::MOVLPSrm:
376 case X86::VMOVLPSrm:
377 case X86::VMOVLPSZ128rm:
378 Src1Name = getRegName(MI->getOperand(1).getReg());
379 DestName = getRegName(MI->getOperand(0).getReg());
380 DecodeInsertElementMask(MVT::v4f32, 0, 2, ShuffleMask);
381 break;
382
Igor Breger24cab0f2015-11-16 07:22:00 +0000383 CASE_MOVDUP(MOVSLDUP, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000384 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000385 LLVM_FALLTHROUGH;
386
Igor Breger1f782962015-11-19 08:26:56 +0000387 CASE_MOVDUP(MOVSLDUP, m)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000388 DestName = getRegName(MI->getOperand(0).getReg());
Igor Breger1f782962015-11-19 08:26:56 +0000389 DecodeMOVSLDUPMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000390 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000391
Igor Breger24cab0f2015-11-16 07:22:00 +0000392 CASE_MOVDUP(MOVSHDUP, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000393 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000394 LLVM_FALLTHROUGH;
395
Igor Breger1f782962015-11-19 08:26:56 +0000396 CASE_MOVDUP(MOVSHDUP, m)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000397 DestName = getRegName(MI->getOperand(0).getReg());
Igor Breger1f782962015-11-19 08:26:56 +0000398 DecodeMOVSHDUPMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000399 break;
400
Igor Breger1f782962015-11-19 08:26:56 +0000401 CASE_MOVDUP(MOVDDUP, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000402 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000403 LLVM_FALLTHROUGH;
404
Igor Breger1f782962015-11-19 08:26:56 +0000405 CASE_MOVDUP(MOVDDUP, m)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000406 DestName = getRegName(MI->getOperand(0).getReg());
Igor Breger1f782962015-11-19 08:26:56 +0000407 DecodeMOVDDUPMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000408 break;
409
410 case X86::PSLLDQri:
411 case X86::VPSLLDQri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000412 case X86::VPSLLDQYri:
Simon Pilgrim643734c2016-06-09 22:03:15 +0000413 case X86::VPSLLDQZ128rr:
414 case X86::VPSLLDQZ256rr:
Craig Topperaa904d52017-12-10 17:42:39 +0000415 case X86::VPSLLDQZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000416 Src1Name = getRegName(MI->getOperand(1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +0000417 LLVM_FALLTHROUGH;
Simon Pilgrim643734c2016-06-09 22:03:15 +0000418 case X86::VPSLLDQZ128rm:
419 case X86::VPSLLDQZ256rm:
Craig Topperaa904d52017-12-10 17:42:39 +0000420 case X86::VPSLLDQZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000421 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000422 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimb9ada272015-11-16 22:54:41 +0000423 DecodePSLLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000424 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000425 ShuffleMask);
426 break;
427
428 case X86::PSRLDQri:
429 case X86::VPSRLDQri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000430 case X86::VPSRLDQYri:
Simon Pilgrim643734c2016-06-09 22:03:15 +0000431 case X86::VPSRLDQZ128rr:
432 case X86::VPSRLDQZ256rr:
Craig Topperaa904d52017-12-10 17:42:39 +0000433 case X86::VPSRLDQZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000434 Src1Name = getRegName(MI->getOperand(1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +0000435 LLVM_FALLTHROUGH;
Simon Pilgrim643734c2016-06-09 22:03:15 +0000436 case X86::VPSRLDQZ128rm:
437 case X86::VPSRLDQZ256rm:
Craig Topperaa904d52017-12-10 17:42:39 +0000438 case X86::VPSRLDQZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000439 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000440 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimb9ada272015-11-16 22:54:41 +0000441 DecodePSRLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000442 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000443 ShuffleMask);
444 break;
445
Craig Topper7a299302016-06-09 07:06:38 +0000446 CASE_SHUF(PALIGNR, rri)
Craig Topper89c17612016-06-10 04:48:05 +0000447 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
448 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000449 LLVM_FALLTHROUGH;
450
Craig Topper7a299302016-06-09 07:06:38 +0000451 CASE_SHUF(PALIGNR, rmi)
Craig Topper89c17612016-06-10 04:48:05 +0000452 Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000453 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000454 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimb9ada272015-11-16 22:54:41 +0000455 DecodePALIGNRMask(getRegOperandVectorVT(MI, MVT::i8, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000456 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000457 ShuffleMask);
458 break;
459
Craig Topperb084c902016-10-22 06:51:56 +0000460 CASE_AVX512_INS_COMMON(ALIGNQ, Z, rri)
461 CASE_AVX512_INS_COMMON(ALIGNQ, Z256, rri)
462 CASE_AVX512_INS_COMMON(ALIGNQ, Z128, rri)
463 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
464 RegForm = true;
465 LLVM_FALLTHROUGH;
466
467 CASE_AVX512_INS_COMMON(ALIGNQ, Z, rmi)
468 CASE_AVX512_INS_COMMON(ALIGNQ, Z256, rmi)
469 CASE_AVX512_INS_COMMON(ALIGNQ, Z128, rmi)
470 Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
471 DestName = getRegName(MI->getOperand(0).getReg());
472 if (MI->getOperand(NumOperands - 1).isImm())
473 DecodeVALIGNMask(getRegOperandVectorVT(MI, MVT::i64, 0),
474 MI->getOperand(NumOperands - 1).getImm(),
475 ShuffleMask);
476 break;
477
478 CASE_AVX512_INS_COMMON(ALIGND, Z, rri)
479 CASE_AVX512_INS_COMMON(ALIGND, Z256, rri)
480 CASE_AVX512_INS_COMMON(ALIGND, Z128, rri)
481 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
482 RegForm = true;
483 LLVM_FALLTHROUGH;
484
485 CASE_AVX512_INS_COMMON(ALIGND, Z, rmi)
486 CASE_AVX512_INS_COMMON(ALIGND, Z256, rmi)
487 CASE_AVX512_INS_COMMON(ALIGND, Z128, rmi)
488 Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
489 DestName = getRegName(MI->getOperand(0).getReg());
490 if (MI->getOperand(NumOperands - 1).isImm())
491 DecodeVALIGNMask(getRegOperandVectorVT(MI, MVT::i32, 0),
492 MI->getOperand(NumOperands - 1).getImm(),
493 ShuffleMask);
494 break;
495
Craig Topper01f53b12016-06-03 05:31:00 +0000496 CASE_SHUF(PSHUFD, ri)
Craig Topper6f7288d2016-06-09 07:49:08 +0000497 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000498 LLVM_FALLTHROUGH;
499
Craig Topper01f53b12016-06-03 05:31:00 +0000500 CASE_SHUF(PSHUFD, mi)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000501 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000502 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000503 DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::i32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000504 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000505 ShuffleMask);
506 break;
507
Craig Topper01f53b12016-06-03 05:31:00 +0000508 CASE_SHUF(PSHUFHW, ri)
Craig Topper6f7288d2016-06-09 07:49:08 +0000509 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000510 LLVM_FALLTHROUGH;
511
Craig Topper01f53b12016-06-03 05:31:00 +0000512 CASE_SHUF(PSHUFHW, mi)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000513 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000514 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000515 DecodePSHUFHWMask(getRegOperandVectorVT(MI, MVT::i16, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000516 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000517 ShuffleMask);
518 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000519
Craig Topper01f53b12016-06-03 05:31:00 +0000520 CASE_SHUF(PSHUFLW, ri)
Craig Topper6f7288d2016-06-09 07:49:08 +0000521 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000522 LLVM_FALLTHROUGH;
523
Craig Topper01f53b12016-06-03 05:31:00 +0000524 CASE_SHUF(PSHUFLW, mi)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000525 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000526 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000527 DecodePSHUFLWMask(getRegOperandVectorVT(MI, MVT::i16, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000528 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000529 ShuffleMask);
530 break;
531
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000532 case X86::MMX_PSHUFWri:
533 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000534 LLVM_FALLTHROUGH;
535
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000536 case X86::MMX_PSHUFWmi:
537 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000538 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000539 DecodePSHUFMask(MVT::v4i16,
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000540 MI->getOperand(NumOperands - 1).getImm(),
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000541 ShuffleMask);
542 break;
543
544 case X86::PSWAPDrr:
545 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000546 LLVM_FALLTHROUGH;
547
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000548 case X86::PSWAPDrm:
549 DestName = getRegName(MI->getOperand(0).getReg());
550 DecodePSWAPMask(MVT::v2i32, ShuffleMask);
551 break;
552
Simon Pilgrim8483df62015-11-17 22:35:45 +0000553 CASE_UNPCK(PUNPCKHBW, r)
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000554 case X86::MMX_PUNPCKHBWirr:
Craig Topper89c17612016-06-10 04:48:05 +0000555 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
556 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000557 LLVM_FALLTHROUGH;
558
Simon Pilgrim8483df62015-11-17 22:35:45 +0000559 CASE_UNPCK(PUNPCKHBW, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000560 case X86::MMX_PUNPCKHBWirm:
Craig Topper89c17612016-06-10 04:48:05 +0000561 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000562 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000563 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000564 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000565
Simon Pilgrim8483df62015-11-17 22:35:45 +0000566 CASE_UNPCK(PUNPCKHWD, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000567 case X86::MMX_PUNPCKHWDirr:
Craig Topper89c17612016-06-10 04:48:05 +0000568 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
569 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000570 LLVM_FALLTHROUGH;
571
Simon Pilgrim8483df62015-11-17 22:35:45 +0000572 CASE_UNPCK(PUNPCKHWD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000573 case X86::MMX_PUNPCKHWDirm:
Craig Topper89c17612016-06-10 04:48:05 +0000574 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000575 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000576 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000577 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000578
Simon Pilgrim8483df62015-11-17 22:35:45 +0000579 CASE_UNPCK(PUNPCKHDQ, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000580 case X86::MMX_PUNPCKHDQirr:
Craig Topper89c17612016-06-10 04:48:05 +0000581 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
582 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000583 LLVM_FALLTHROUGH;
584
Simon Pilgrim8483df62015-11-17 22:35:45 +0000585 CASE_UNPCK(PUNPCKHDQ, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000586 case X86::MMX_PUNPCKHDQirm:
Craig Topper89c17612016-06-10 04:48:05 +0000587 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000588 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000589 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000590 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000591
Simon Pilgrim8483df62015-11-17 22:35:45 +0000592 CASE_UNPCK(PUNPCKHQDQ, r)
Craig Topper89c17612016-06-10 04:48:05 +0000593 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
594 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000595 LLVM_FALLTHROUGH;
596
Simon Pilgrim8483df62015-11-17 22:35:45 +0000597 CASE_UNPCK(PUNPCKHQDQ, m)
Craig Topper89c17612016-06-10 04:48:05 +0000598 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000599 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000600 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000601 break;
602
Simon Pilgrim8483df62015-11-17 22:35:45 +0000603 CASE_UNPCK(PUNPCKLBW, r)
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000604 case X86::MMX_PUNPCKLBWirr:
Craig Topper89c17612016-06-10 04:48:05 +0000605 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
606 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000607 LLVM_FALLTHROUGH;
608
Simon Pilgrim8483df62015-11-17 22:35:45 +0000609 CASE_UNPCK(PUNPCKLBW, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000610 case X86::MMX_PUNPCKLBWirm:
Craig Topper89c17612016-06-10 04:48:05 +0000611 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000612 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000613 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000614 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000615
Simon Pilgrim8483df62015-11-17 22:35:45 +0000616 CASE_UNPCK(PUNPCKLWD, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000617 case X86::MMX_PUNPCKLWDirr:
Craig Topper89c17612016-06-10 04:48:05 +0000618 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
619 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000620 LLVM_FALLTHROUGH;
621
Simon Pilgrim8483df62015-11-17 22:35:45 +0000622 CASE_UNPCK(PUNPCKLWD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000623 case X86::MMX_PUNPCKLWDirm:
Craig Topper89c17612016-06-10 04:48:05 +0000624 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000625 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000626 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000627 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000628
Simon Pilgrim8483df62015-11-17 22:35:45 +0000629 CASE_UNPCK(PUNPCKLDQ, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000630 case X86::MMX_PUNPCKLDQirr:
Craig Topper89c17612016-06-10 04:48:05 +0000631 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
632 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000633 LLVM_FALLTHROUGH;
634
Simon Pilgrim8483df62015-11-17 22:35:45 +0000635 CASE_UNPCK(PUNPCKLDQ, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000636 case X86::MMX_PUNPCKLDQirm:
Craig Topper89c17612016-06-10 04:48:05 +0000637 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000638 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000639 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000640 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000641
Simon Pilgrim8483df62015-11-17 22:35:45 +0000642 CASE_UNPCK(PUNPCKLQDQ, r)
Craig Topper89c17612016-06-10 04:48:05 +0000643 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
644 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000645 LLVM_FALLTHROUGH;
646
Simon Pilgrim8483df62015-11-17 22:35:45 +0000647 CASE_UNPCK(PUNPCKLQDQ, m)
Craig Topper89c17612016-06-10 04:48:05 +0000648 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000649 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000650 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000651 break;
652
Craig Topper01f53b12016-06-03 05:31:00 +0000653 CASE_SHUF(SHUFPD, rri)
Craig Topper89c17612016-06-10 04:48:05 +0000654 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
655 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000656 LLVM_FALLTHROUGH;
657
Craig Topper01f53b12016-06-03 05:31:00 +0000658 CASE_SHUF(SHUFPD, rmi)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000659 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000660 DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f64, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000661 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000662 ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000663 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000664 DestName = getRegName(MI->getOperand(0).getReg());
665 break;
666
Craig Topper01f53b12016-06-03 05:31:00 +0000667 CASE_SHUF(SHUFPS, rri)
Craig Topper89c17612016-06-10 04:48:05 +0000668 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
669 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000670 LLVM_FALLTHROUGH;
671
Craig Topper01f53b12016-06-03 05:31:00 +0000672 CASE_SHUF(SHUFPS, rmi)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000673 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000674 DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000675 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000676 ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000677 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000678 DestName = getRegName(MI->getOperand(0).getReg());
679 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000680
Igor Breger24cab0f2015-11-16 07:22:00 +0000681 CASE_VSHUF(64X2, r)
Simon Pilgrimd3869412016-06-11 11:18:38 +0000682 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
683 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000684 LLVM_FALLTHROUGH;
685
Igor Breger24cab0f2015-11-16 07:22:00 +0000686 CASE_VSHUF(64X2, m)
Simon Pilgrimd3869412016-06-11 11:18:38 +0000687 decodeVSHUF64x2FamilyMask(getRegOperandVectorVT(MI, MVT::i64, 0),
688 MI->getOperand(NumOperands - 1).getImm(),
Igor Bregerd7bae452015-10-15 13:29:07 +0000689 ShuffleMask);
Simon Pilgrimd3869412016-06-11 11:18:38 +0000690 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
Igor Bregerd7bae452015-10-15 13:29:07 +0000691 DestName = getRegName(MI->getOperand(0).getReg());
Igor Bregerd7bae452015-10-15 13:29:07 +0000692 break;
Simon Pilgrimd3869412016-06-11 11:18:38 +0000693
694 CASE_VSHUF(32X4, r)
695 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
696 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000697 LLVM_FALLTHROUGH;
698
Simon Pilgrimd3869412016-06-11 11:18:38 +0000699 CASE_VSHUF(32X4, m)
700 decodeVSHUF64x2FamilyMask(getRegOperandVectorVT(MI, MVT::i32, 0),
701 MI->getOperand(NumOperands - 1).getImm(),
702 ShuffleMask);
703 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
704 DestName = getRegName(MI->getOperand(0).getReg());
705 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000706
Simon Pilgrim8483df62015-11-17 22:35:45 +0000707 CASE_UNPCK(UNPCKLPD, r)
Craig Topper89c17612016-06-10 04:48:05 +0000708 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
709 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000710 LLVM_FALLTHROUGH;
711
Simon Pilgrim8483df62015-11-17 22:35:45 +0000712 CASE_UNPCK(UNPCKLPD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000713 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000714 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000715 DestName = getRegName(MI->getOperand(0).getReg());
716 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000717
Simon Pilgrim8483df62015-11-17 22:35:45 +0000718 CASE_UNPCK(UNPCKLPS, r)
Craig Topper89c17612016-06-10 04:48:05 +0000719 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
720 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000721 LLVM_FALLTHROUGH;
722
Simon Pilgrim8483df62015-11-17 22:35:45 +0000723 CASE_UNPCK(UNPCKLPS, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000724 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000725 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000726 DestName = getRegName(MI->getOperand(0).getReg());
727 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000728
Simon Pilgrim8483df62015-11-17 22:35:45 +0000729 CASE_UNPCK(UNPCKHPD, r)
Craig Topper89c17612016-06-10 04:48:05 +0000730 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
731 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000732 LLVM_FALLTHROUGH;
733
Simon Pilgrim8483df62015-11-17 22:35:45 +0000734 CASE_UNPCK(UNPCKHPD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000735 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000736 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000737 DestName = getRegName(MI->getOperand(0).getReg());
738 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000739
Simon Pilgrim8483df62015-11-17 22:35:45 +0000740 CASE_UNPCK(UNPCKHPS, r)
Craig Topper89c17612016-06-10 04:48:05 +0000741 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
742 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000743 LLVM_FALLTHROUGH;
744
Simon Pilgrim8483df62015-11-17 22:35:45 +0000745 CASE_UNPCK(UNPCKHPS, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000746 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000747 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000748 DestName = getRegName(MI->getOperand(0).getReg());
749 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000750
Simon Pilgrim5080e7f2016-07-03 18:02:43 +0000751 CASE_VPERMILPI(PERMILPS, r)
Simon Pilgrim6ce35dd2016-05-11 18:53:44 +0000752 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000753 LLVM_FALLTHROUGH;
754
Simon Pilgrim5080e7f2016-07-03 18:02:43 +0000755 CASE_VPERMILPI(PERMILPS, m)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000756 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000757 DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::f32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000758 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000759 ShuffleMask);
760 DestName = getRegName(MI->getOperand(0).getReg());
761 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000762
Simon Pilgrim5080e7f2016-07-03 18:02:43 +0000763 CASE_VPERMILPI(PERMILPD, r)
Simon Pilgrim6ce35dd2016-05-11 18:53:44 +0000764 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000765 LLVM_FALLTHROUGH;
766
Simon Pilgrim5080e7f2016-07-03 18:02:43 +0000767 CASE_VPERMILPI(PERMILPD, m)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000768 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000769 DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::f64, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000770 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000771 ShuffleMask);
772 DestName = getRegName(MI->getOperand(0).getReg());
773 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000774
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000775 case X86::VPERM2F128rr:
776 case X86::VPERM2I128rr:
777 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000778 LLVM_FALLTHROUGH;
779
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000780 case X86::VPERM2F128rm:
781 case X86::VPERM2I128rm:
782 // For instruction comments purpose, assume the 256-bit vector is v4i64.
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000783 if (MI->getOperand(NumOperands - 1).isImm())
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000784 DecodeVPERM2X128Mask(MVT::v4i64,
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000785 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000786 ShuffleMask);
787 Src1Name = getRegName(MI->getOperand(1).getReg());
788 DestName = getRegName(MI->getOperand(0).getReg());
789 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000790
Simon Pilgrima0d73832016-07-03 18:27:37 +0000791 CASE_VPERM(PERMPD, r)
Craig Topper200d2372016-06-10 05:12:40 +0000792 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000793 LLVM_FALLTHROUGH;
794
Simon Pilgrima0d73832016-07-03 18:27:37 +0000795 CASE_VPERM(PERMPD, m)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000796 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrima0d73832016-07-03 18:27:37 +0000797 DecodeVPERMMask(getRegOperandVectorVT(MI, MVT::f64, 0),
798 MI->getOperand(NumOperands - 1).getImm(),
799 ShuffleMask);
800 DestName = getRegName(MI->getOperand(0).getReg());
801 break;
802
803 CASE_VPERM(PERMQ, r)
804 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000805 LLVM_FALLTHROUGH;
806
Simon Pilgrima0d73832016-07-03 18:27:37 +0000807 CASE_VPERM(PERMQ, m)
808 if (MI->getOperand(NumOperands - 1).isImm())
809 DecodeVPERMMask(getRegOperandVectorVT(MI, MVT::i64, 0),
810 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000811 ShuffleMask);
812 DestName = getRegName(MI->getOperand(0).getReg());
813 break;
814
815 case X86::MOVSDrr:
816 case X86::VMOVSDrr:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +0000817 case X86::VMOVSDZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000818 Src2Name = getRegName(MI->getOperand(2).getReg());
819 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000820 LLVM_FALLTHROUGH;
821
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000822 case X86::MOVSDrm:
823 case X86::VMOVSDrm:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +0000824 case X86::VMOVSDZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000825 DecodeScalarMoveMask(MVT::v2f64, nullptr == Src2Name, ShuffleMask);
826 DestName = getRegName(MI->getOperand(0).getReg());
827 break;
Simon Pilgrimd5a15442015-11-21 13:04:42 +0000828
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000829 case X86::MOVSSrr:
830 case X86::VMOVSSrr:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +0000831 case X86::VMOVSSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000832 Src2Name = getRegName(MI->getOperand(2).getReg());
833 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000834 LLVM_FALLTHROUGH;
835
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000836 case X86::MOVSSrm:
837 case X86::VMOVSSrm:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +0000838 case X86::VMOVSSZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000839 DecodeScalarMoveMask(MVT::v4f32, nullptr == Src2Name, ShuffleMask);
840 DestName = getRegName(MI->getOperand(0).getReg());
841 break;
842
843 case X86::MOVPQI2QIrr:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +0000844 case X86::MOVZPQILo2PQIrr:
845 case X86::VMOVPQI2QIrr:
Craig Topperb76ed822018-03-10 06:05:13 +0000846 case X86::VMOVPQI2QIZrr:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +0000847 case X86::VMOVZPQILo2PQIrr:
848 case X86::VMOVZPQILo2PQIZrr:
849 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000850 LLVM_FALLTHROUGH;
851
Simon Pilgrim3e0c0222015-12-13 12:49:48 +0000852 case X86::MOVQI2PQIrm:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +0000853 case X86::VMOVQI2PQIrm:
Simon Pilgrim96fe4ef2016-02-02 13:32:56 +0000854 case X86::VMOVQI2PQIZrm:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +0000855 DecodeZeroMoveLowMask(MVT::v2i64, ShuffleMask);
856 DestName = getRegName(MI->getOperand(0).getReg());
857 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000858
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000859 case X86::MOVDI2PDIrm:
860 case X86::VMOVDI2PDIrm:
Simon Pilgrim5be17b62016-02-01 23:04:05 +0000861 case X86::VMOVDI2PDIZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000862 DecodeZeroMoveLowMask(MVT::v4i32, ShuffleMask);
863 DestName = getRegName(MI->getOperand(0).getReg());
864 break;
865
Simon Pilgrimd85cae32015-07-06 20:46:41 +0000866 case X86::EXTRQI:
867 if (MI->getOperand(2).isImm() &&
868 MI->getOperand(3).isImm())
Simon Pilgrim9f0a0bd2017-07-04 16:53:12 +0000869 DecodeEXTRQIMask(MVT::v16i8, MI->getOperand(2).getImm(),
Simon Pilgrimd85cae32015-07-06 20:46:41 +0000870 MI->getOperand(3).getImm(),
871 ShuffleMask);
872
873 DestName = getRegName(MI->getOperand(0).getReg());
874 Src1Name = getRegName(MI->getOperand(1).getReg());
875 break;
876
877 case X86::INSERTQI:
878 if (MI->getOperand(3).isImm() &&
879 MI->getOperand(4).isImm())
Simon Pilgrim9f0a0bd2017-07-04 16:53:12 +0000880 DecodeINSERTQIMask(MVT::v16i8, MI->getOperand(3).getImm(),
Simon Pilgrimd85cae32015-07-06 20:46:41 +0000881 MI->getOperand(4).getImm(),
882 ShuffleMask);
883
884 DestName = getRegName(MI->getOperand(0).getReg());
885 Src1Name = getRegName(MI->getOperand(1).getReg());
886 Src2Name = getRegName(MI->getOperand(2).getReg());
887 break;
888
Simon Pilgrima76a8e52016-07-14 12:07:43 +0000889 case X86::VBROADCASTF128:
890 case X86::VBROADCASTI128:
Craig Topperdde865a2016-10-15 16:26:07 +0000891 CASE_AVX512_INS_COMMON(BROADCASTF64X2, Z128, rm)
892 CASE_AVX512_INS_COMMON(BROADCASTI64X2, Z128, rm)
Simon Pilgrima76a8e52016-07-14 12:07:43 +0000893 DecodeSubVectorBroadcast(MVT::v4f64, MVT::v2f64, ShuffleMask);
894 DestName = getRegName(MI->getOperand(0).getReg());
895 break;
Craig Topperdde865a2016-10-15 16:26:07 +0000896 CASE_AVX512_INS_COMMON(BROADCASTF64X2, , rm)
897 CASE_AVX512_INS_COMMON(BROADCASTI64X2, , rm)
898 DecodeSubVectorBroadcast(MVT::v8f64, MVT::v2f64, ShuffleMask);
899 DestName = getRegName(MI->getOperand(0).getReg());
900 break;
901 CASE_AVX512_INS_COMMON(BROADCASTF64X4, , rm)
902 CASE_AVX512_INS_COMMON(BROADCASTI64X4, , rm)
903 DecodeSubVectorBroadcast(MVT::v8f64, MVT::v4f64, ShuffleMask);
904 DestName = getRegName(MI->getOperand(0).getReg());
905 break;
906 CASE_AVX512_INS_COMMON(BROADCASTF32X4, Z256, rm)
907 CASE_AVX512_INS_COMMON(BROADCASTI32X4, Z256, rm)
908 DecodeSubVectorBroadcast(MVT::v8f32, MVT::v4f32, ShuffleMask);
909 DestName = getRegName(MI->getOperand(0).getReg());
910 break;
911 CASE_AVX512_INS_COMMON(BROADCASTF32X4, , rm)
912 CASE_AVX512_INS_COMMON(BROADCASTI32X4, , rm)
913 DecodeSubVectorBroadcast(MVT::v16f32, MVT::v4f32, ShuffleMask);
914 DestName = getRegName(MI->getOperand(0).getReg());
915 break;
916 CASE_AVX512_INS_COMMON(BROADCASTF32X8, , rm)
917 CASE_AVX512_INS_COMMON(BROADCASTI32X8, , rm)
918 DecodeSubVectorBroadcast(MVT::v16f32, MVT::v8f32, ShuffleMask);
919 DestName = getRegName(MI->getOperand(0).getReg());
920 break;
Craig Topper6ce20bd2017-10-11 00:11:53 +0000921 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z128, r)
922 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
923 LLVM_FALLTHROUGH;
924 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z128, m)
925 DecodeSubVectorBroadcast(MVT::v4f32, MVT::v2f32, ShuffleMask);
926 DestName = getRegName(MI->getOperand(0).getReg());
927 break;
Craig Topperdde865a2016-10-15 16:26:07 +0000928 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z256, r)
929 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z256, r)
930 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +0000931 LLVM_FALLTHROUGH;
Craig Topperdde865a2016-10-15 16:26:07 +0000932 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z256, m)
933 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z256, m)
934 DecodeSubVectorBroadcast(MVT::v8f32, MVT::v2f32, ShuffleMask);
935 DestName = getRegName(MI->getOperand(0).getReg());
936 break;
937 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z, r)
938 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z, r)
939 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +0000940 LLVM_FALLTHROUGH;
Craig Topperdde865a2016-10-15 16:26:07 +0000941 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z, m)
942 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z, m)
943 DecodeSubVectorBroadcast(MVT::v16f32, MVT::v2f32, ShuffleMask);
944 DestName = getRegName(MI->getOperand(0).getReg());
945 break;
Simon Pilgrima76a8e52016-07-14 12:07:43 +0000946
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000947 CASE_PMOVZX(PMOVZXBW, r)
948 CASE_PMOVZX(PMOVZXBD, r)
949 CASE_PMOVZX(PMOVZXBQ, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000950 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000951 LLVM_FALLTHROUGH;
952
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000953 CASE_PMOVZX(PMOVZXBW, m)
954 CASE_PMOVZX(PMOVZXBD, m)
955 CASE_PMOVZX(PMOVZXBQ, m)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000956 DecodeZeroExtendMask(MVT::i8, getZeroExtensionResultType(MI), ShuffleMask);
957 DestName = getRegName(MI->getOperand(0).getReg());
958 break;
959
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000960 CASE_PMOVZX(PMOVZXWD, r)
961 CASE_PMOVZX(PMOVZXWQ, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000962 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000963 LLVM_FALLTHROUGH;
964
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000965 CASE_PMOVZX(PMOVZXWD, m)
966 CASE_PMOVZX(PMOVZXWQ, m)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000967 DecodeZeroExtendMask(MVT::i16, getZeroExtensionResultType(MI), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000968 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000969 break;
970
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000971 CASE_PMOVZX(PMOVZXDQ, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000972 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000973 LLVM_FALLTHROUGH;
974
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000975 CASE_PMOVZX(PMOVZXDQ, m)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000976 DecodeZeroExtendMask(MVT::i32, getZeroExtensionResultType(MI), ShuffleMask);
977 DestName = getRegName(MI->getOperand(0).getReg());
978 break;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000979 }
980
981 // The only comments we decode are shuffles, so give up if we were unable to
982 // decode a shuffle mask.
983 if (ShuffleMask.empty())
984 return false;
985
986 if (!DestName) DestName = Src1Name;
Craig Topper85b1da12017-10-11 00:46:09 +0000987 if (DestName) {
988 OS << DestName;
Craig Topper9804c672018-03-10 03:12:00 +0000989 printMasking(OS, MI, MCII, getRegName);
Craig Topper85b1da12017-10-11 00:46:09 +0000990 } else
991 OS << "mem";
992
993 OS << " = ";
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000994
995 // If the two sources are the same, canonicalize the input elements to be
996 // from the first src so that we get larger element spans.
997 if (Src1Name == Src2Name) {
998 for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
999 if ((int)ShuffleMask[i] >= 0 && // Not sentinel.
NAKAMURA Takumi5582a6a2015-05-25 01:43:34 +00001000 ShuffleMask[i] >= (int)e) // From second mask.
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001001 ShuffleMask[i] -= e;
1002 }
1003 }
1004
1005 // The shuffle mask specifies which elements of the src1/src2 fill in the
1006 // destination, with a few sentinel values. Loop through and print them
1007 // out.
1008 for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1009 if (i != 0)
1010 OS << ',';
1011 if (ShuffleMask[i] == SM_SentinelZero) {
1012 OS << "zero";
1013 continue;
1014 }
1015
1016 // Otherwise, it must come from src1 or src2. Print the span of elements
1017 // that comes from this src.
1018 bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
1019 const char *SrcName = isSrc1 ? Src1Name : Src2Name;
1020 OS << (SrcName ? SrcName : "mem") << '[';
1021 bool IsFirst = true;
1022 while (i != e && (int)ShuffleMask[i] != SM_SentinelZero &&
1023 (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) {
1024 if (!IsFirst)
1025 OS << ',';
1026 else
1027 IsFirst = false;
1028 if (ShuffleMask[i] == SM_SentinelUndef)
1029 OS << "u";
1030 else
1031 OS << ShuffleMask[i] % ShuffleMask.size();
1032 ++i;
1033 }
1034 OS << ']';
NAKAMURA Takumi5582a6a2015-05-25 01:43:34 +00001035 --i; // For loop increments element #.
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001036 }
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001037
1038 // We successfully added a comment to this instruction.
1039 return true;
1040}