blob: 9d338b26e0c6d6e7f00db7e27dfb2cbfefb1862d [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
Craig Topperd88204f2018-03-10 21:30:46 +0000163#define CASE_AVX512_FMA(Inst, suf) \
164 CASE_AVX512_INS_COMMON(Inst, Z, suf) \
165 CASE_AVX512_INS_COMMON(Inst, Z256, suf) \
166 CASE_AVX512_INS_COMMON(Inst, Z128, suf)
167
168#define CASE_FMA(Inst, suf) \
169 CASE_AVX512_FMA(Inst, suf) \
170 CASE_AVX_INS_COMMON(Inst, , suf) \
171 CASE_AVX_INS_COMMON(Inst, Y, suf)
172
173#define CASE_FMA_PACKED_REG(Inst) \
174 CASE_FMA(Inst##PD, r) \
175 CASE_FMA(Inst##PS, r)
176
177#define CASE_FMA_PACKED_MEM(Inst) \
178 CASE_FMA(Inst##PD, m) \
179 CASE_FMA(Inst##PS, m) \
180 CASE_AVX512_FMA(Inst##PD, mb) \
181 CASE_AVX512_FMA(Inst##PS, mb)
182
183#define CASE_FMA_SCALAR_REG(Inst) \
184 CASE_AVX_INS_COMMON(Inst##SD, , r) \
185 CASE_AVX_INS_COMMON(Inst##SS, , r) \
186 CASE_AVX_INS_COMMON(Inst##SD, , r_Int) \
187 CASE_AVX_INS_COMMON(Inst##SS, , r_Int) \
188 CASE_AVX_INS_COMMON(Inst##SD, Z, r) \
189 CASE_AVX_INS_COMMON(Inst##SS, Z, r) \
190 CASE_AVX512_INS_COMMON(Inst##SD, Z, r_Int) \
191 CASE_AVX512_INS_COMMON(Inst##SS, Z, r_Int)
192
193#define CASE_FMA_SCALAR_MEM(Inst) \
194 CASE_AVX_INS_COMMON(Inst##SD, , m) \
195 CASE_AVX_INS_COMMON(Inst##SS, , m) \
196 CASE_AVX_INS_COMMON(Inst##SD, , m_Int) \
197 CASE_AVX_INS_COMMON(Inst##SS, , m_Int) \
198 CASE_AVX_INS_COMMON(Inst##SD, Z, m) \
199 CASE_AVX_INS_COMMON(Inst##SS, Z, m) \
200 CASE_AVX512_INS_COMMON(Inst##SD, Z, m_Int) \
201 CASE_AVX512_INS_COMMON(Inst##SS, Z, m_Int)
202
Igor Breger24cab0f2015-11-16 07:22:00 +0000203static unsigned getVectorRegSize(unsigned RegNo) {
Igor Breger24cab0f2015-11-16 07:22:00 +0000204 if (X86::ZMM0 <= RegNo && RegNo <= X86::ZMM31)
205 return 512;
206 if (X86::YMM0 <= RegNo && RegNo <= X86::YMM31)
207 return 256;
208 if (X86::XMM0 <= RegNo && RegNo <= X86::XMM31)
209 return 128;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000210 if (X86::MM0 <= RegNo && RegNo <= X86::MM7)
211 return 64;
Igor Breger24cab0f2015-11-16 07:22:00 +0000212
213 llvm_unreachable("Unknown vector reg!");
Igor Breger24cab0f2015-11-16 07:22:00 +0000214}
215
216static MVT getRegOperandVectorVT(const MCInst *MI, const MVT &ScalarVT,
217 unsigned OperandIndex) {
218 unsigned OpReg = MI->getOperand(OperandIndex).getReg();
219 return MVT::getVectorVT(ScalarVT,
220 getVectorRegSize(OpReg)/ScalarVT.getSizeInBits());
221}
222
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000223/// \brief Extracts the dst type for a given zero extension instruction.
224static MVT getZeroExtensionResultType(const MCInst *MI) {
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000225 switch (MI->getOpcode()) {
226 default:
227 llvm_unreachable("Unknown zero extension instruction");
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000228 // zero extension to i16
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000229 CASE_PMOVZX(PMOVZXBW, m)
230 CASE_PMOVZX(PMOVZXBW, r)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000231 return getRegOperandVectorVT(MI, MVT::i16, 0);
232 // zero extension to i32
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000233 CASE_PMOVZX(PMOVZXBD, m)
234 CASE_PMOVZX(PMOVZXBD, r)
235 CASE_PMOVZX(PMOVZXWD, m)
236 CASE_PMOVZX(PMOVZXWD, r)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000237 return getRegOperandVectorVT(MI, MVT::i32, 0);
238 // zero extension to i64
Simon Pilgrim0acc32a2016-02-06 19:51:21 +0000239 CASE_PMOVZX(PMOVZXBQ, m)
240 CASE_PMOVZX(PMOVZXBQ, r)
241 CASE_PMOVZX(PMOVZXWQ, m)
242 CASE_PMOVZX(PMOVZXWQ, r)
243 CASE_PMOVZX(PMOVZXDQ, m)
244 CASE_PMOVZX(PMOVZXDQ, r)
Simon Pilgrime1b6db92016-02-06 16:33:42 +0000245 return getRegOperandVectorVT(MI, MVT::i64, 0);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000246 }
247}
248
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000249/// Wraps the destination register name with AVX512 mask/maskz filtering.
Craig Topper85b1da12017-10-11 00:46:09 +0000250static void printMasking(raw_ostream &OS, const MCInst *MI,
Craig Topper9804c672018-03-10 03:12:00 +0000251 const MCInstrInfo &MCII,
Craig Topper85b1da12017-10-11 00:46:09 +0000252 const char *(*getRegName)(unsigned)) {
Craig Topper9804c672018-03-10 03:12:00 +0000253 const MCInstrDesc &Desc = MCII.get(MI->getOpcode());
254 uint64_t TSFlags = Desc.TSFlags;
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000255
Craig Topper9804c672018-03-10 03:12:00 +0000256 if (!(TSFlags & X86II::EVEX_K))
Craig Topper85b1da12017-10-11 00:46:09 +0000257 return;
Craig Topper9804c672018-03-10 03:12:00 +0000258
259 bool MaskWithZero = (TSFlags & X86II::EVEX_Z);
260 unsigned MaskOp = Desc.getNumDefs();
261
262 if (Desc.getOperandConstraint(MaskOp, MCOI::TIED_TO) != -1)
263 ++MaskOp;
264
265 const char *MaskRegName = getRegName(MI->getOperand(MaskOp).getReg());
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000266
267 // MASK: zmmX {%kY}
Craig Topper85b1da12017-10-11 00:46:09 +0000268 OS << " {%" << MaskRegName << "}";
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000269
270 // MASKZ: zmmX {%kY} {z}
271 if (MaskWithZero)
Craig Topper85b1da12017-10-11 00:46:09 +0000272 OS << " {z}";
Simon Pilgrim7c2fbdc2016-07-03 13:08:29 +0000273}
274
Craig Topperd88204f2018-03-10 21:30:46 +0000275static bool printFMA3Comments(const MCInst *MI, raw_ostream &OS,
276 const char *(*getRegName)(unsigned)) {
277 const char *Mul1Name = nullptr, *Mul2Name = nullptr, *AccName = nullptr;
278 unsigned NumOperands = MI->getNumOperands();
279 bool RegForm = false;
280 bool Negate = false;
281 StringRef AccStr = "+";
282
283 // The operands for FMA instructions without rounding fall into two forms.
284 // dest, src1, src2, src3
285 // dest, src1, mask, src2, src3
286 // Where src3 is either a register or 5 memory address operands. So to find
287 // dest and src1 we can index from the front. To find src2 and src3 we can
288 // index from the end by taking into account memory vs register form when
289 // finding src2.
290
291 switch (MI->getOpcode()) {
292 default:
293 return false;
294 CASE_FMA_PACKED_REG(FMADD132)
295 CASE_FMA_SCALAR_REG(FMADD132)
296 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
297 RegForm = true;
298 LLVM_FALLTHROUGH;
299 CASE_FMA_PACKED_MEM(FMADD132)
300 CASE_FMA_SCALAR_MEM(FMADD132)
301 AccName = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
302 Mul1Name = getRegName(MI->getOperand(1).getReg());
303 break;
304
305 CASE_FMA_PACKED_REG(FMADD213)
306 CASE_FMA_SCALAR_REG(FMADD213)
307 AccName = getRegName(MI->getOperand(NumOperands - 1).getReg());
308 RegForm = true;
309 LLVM_FALLTHROUGH;
310 CASE_FMA_PACKED_MEM(FMADD213)
311 CASE_FMA_SCALAR_MEM(FMADD213)
312 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
313 Mul2Name = getRegName(MI->getOperand(1).getReg());
314 break;
315
316 CASE_FMA_PACKED_REG(FMADD231)
317 CASE_FMA_SCALAR_REG(FMADD231)
318 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
319 RegForm = true;
320 LLVM_FALLTHROUGH;
321 CASE_FMA_PACKED_MEM(FMADD231)
322 CASE_FMA_SCALAR_MEM(FMADD231)
323 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
324 AccName = getRegName(MI->getOperand(1).getReg());
325 break;
326
327 CASE_FMA_PACKED_REG(FMSUB132)
328 CASE_FMA_SCALAR_REG(FMSUB132)
329 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
330 RegForm = true;
331 LLVM_FALLTHROUGH;
332 CASE_FMA_PACKED_MEM(FMSUB132)
333 CASE_FMA_SCALAR_MEM(FMSUB132)
334 AccName = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
335 Mul1Name = getRegName(MI->getOperand(1).getReg());
336 AccStr = "-";
337 break;
338
339 CASE_FMA_PACKED_REG(FMSUB213)
340 CASE_FMA_SCALAR_REG(FMSUB213)
341 AccName = getRegName(MI->getOperand(NumOperands - 1).getReg());
342 RegForm = true;
343 LLVM_FALLTHROUGH;
344 CASE_FMA_PACKED_MEM(FMSUB213)
345 CASE_FMA_SCALAR_MEM(FMSUB213)
346 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
347 Mul2Name = getRegName(MI->getOperand(1).getReg());
348 AccStr = "-";
349 break;
350
351 CASE_FMA_PACKED_REG(FMSUB231)
352 CASE_FMA_SCALAR_REG(FMSUB231)
353 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
354 RegForm = true;
355 LLVM_FALLTHROUGH;
356 CASE_FMA_PACKED_MEM(FMSUB231)
357 CASE_FMA_SCALAR_MEM(FMSUB231)
358 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
359 AccName = getRegName(MI->getOperand(1).getReg());
360 AccStr = "-";
361 break;
362
363 CASE_FMA_PACKED_REG(FNMADD132)
364 CASE_FMA_SCALAR_REG(FNMADD132)
365 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
366 RegForm = true;
367 LLVM_FALLTHROUGH;
368 CASE_FMA_PACKED_MEM(FNMADD132)
369 CASE_FMA_SCALAR_MEM(FNMADD132)
370 AccName = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
371 Mul1Name = getRegName(MI->getOperand(1).getReg());
372 Negate = true;
373 break;
374
375 CASE_FMA_PACKED_REG(FNMADD213)
376 CASE_FMA_SCALAR_REG(FNMADD213)
377 AccName = getRegName(MI->getOperand(NumOperands - 1).getReg());
378 RegForm = true;
379 LLVM_FALLTHROUGH;
380 CASE_FMA_PACKED_MEM(FNMADD213)
381 CASE_FMA_SCALAR_MEM(FNMADD213)
382 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
383 Mul2Name = getRegName(MI->getOperand(1).getReg());
384 Negate = true;
385 break;
386
387 CASE_FMA_PACKED_REG(FNMADD231)
388 CASE_FMA_SCALAR_REG(FNMADD231)
389 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
390 RegForm = true;
391 LLVM_FALLTHROUGH;
392 CASE_FMA_PACKED_MEM(FNMADD231)
393 CASE_FMA_SCALAR_MEM(FNMADD231)
394 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
395 AccName = getRegName(MI->getOperand(1).getReg());
396 Negate = true;
397 break;
398
399 CASE_FMA_PACKED_REG(FNMSUB132)
400 CASE_FMA_SCALAR_REG(FNMSUB132)
401 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
402 RegForm = true;
403 LLVM_FALLTHROUGH;
404 CASE_FMA_PACKED_MEM(FNMSUB132)
405 CASE_FMA_SCALAR_MEM(FNMSUB132)
406 AccName = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
407 Mul1Name = getRegName(MI->getOperand(1).getReg());
408 AccStr = "-";
409 Negate = true;
410 break;
411
412 CASE_FMA_PACKED_REG(FNMSUB213)
413 CASE_FMA_SCALAR_REG(FNMSUB213)
414 AccName = getRegName(MI->getOperand(NumOperands - 1).getReg());
415 RegForm = true;
416 LLVM_FALLTHROUGH;
417 CASE_FMA_PACKED_MEM(FNMSUB213)
418 CASE_FMA_SCALAR_MEM(FNMSUB213)
419 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
420 Mul2Name = getRegName(MI->getOperand(1).getReg());
421 AccStr = "-";
422 Negate = true;
423 break;
424
425 CASE_FMA_PACKED_REG(FNMSUB231)
426 CASE_FMA_SCALAR_REG(FNMSUB231)
427 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
428 RegForm = true;
429 LLVM_FALLTHROUGH;
430 CASE_FMA_PACKED_MEM(FNMSUB231)
431 CASE_FMA_SCALAR_MEM(FNMSUB231)
432 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
433 AccName = getRegName(MI->getOperand(1).getReg());
434 AccStr = "-";
435 Negate = true;
436 break;
437
438 CASE_FMA_PACKED_REG(FMADDSUB132)
439 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
440 RegForm = true;
441 LLVM_FALLTHROUGH;
442 CASE_FMA_PACKED_MEM(FMADDSUB132)
443 AccName = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
444 Mul1Name = getRegName(MI->getOperand(1).getReg());
445 AccStr = "+/-";
446 break;
447
448 CASE_FMA_PACKED_REG(FMADDSUB213)
449 AccName = getRegName(MI->getOperand(NumOperands - 1).getReg());
450 RegForm = true;
451 LLVM_FALLTHROUGH;
452 CASE_FMA_PACKED_MEM(FMADDSUB213)
453 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
454 Mul2Name = getRegName(MI->getOperand(1).getReg());
455 AccStr = "+/-";
456 break;
457
458 CASE_FMA_PACKED_REG(FMADDSUB231)
459 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
460 RegForm = true;
461 LLVM_FALLTHROUGH;
462 CASE_FMA_PACKED_MEM(FMADDSUB231)
463 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
464 AccName = getRegName(MI->getOperand(1).getReg());
465 AccStr = "+/-";
466 break;
467
468 CASE_FMA_PACKED_REG(FMSUBADD132)
469 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
470 RegForm = true;
471 LLVM_FALLTHROUGH;
472 CASE_FMA_PACKED_MEM(FMSUBADD132)
473 AccName = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
474 Mul1Name = getRegName(MI->getOperand(1).getReg());
475 AccStr = "-/+";
476 break;
477
478 CASE_FMA_PACKED_REG(FMSUBADD213)
479 AccName = getRegName(MI->getOperand(NumOperands - 1).getReg());
480 RegForm = true;
481 LLVM_FALLTHROUGH;
482 CASE_FMA_PACKED_MEM(FMSUBADD213)
483 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
484 Mul2Name = getRegName(MI->getOperand(1).getReg());
485 AccStr = "-/+";
486 break;
487
488 CASE_FMA_PACKED_REG(FMSUBADD231)
489 Mul2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
490 RegForm = true;
491 LLVM_FALLTHROUGH;
492 CASE_FMA_PACKED_MEM(FMSUBADD231)
493 Mul1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
494 AccName = getRegName(MI->getOperand(1).getReg());
495 AccStr = "-/+";
496 break;
497 }
498
499 const char *DestName = getRegName(MI->getOperand(0).getReg());
500
501 if (!Mul1Name) Mul1Name = "mem";
502 if (!Mul2Name) Mul2Name = "mem";
503 if (!AccName) AccName = "mem";
504
505 OS << DestName << " = ";
506 // TODO: Print masking information?
507
508 if (Negate)
509 OS << '-';
510
511 OS << '(' << Mul1Name << " * " << Mul2Name << ") " << AccStr << ' '
512 << AccName;
513
514 return true;
515}
516
517
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000518//===----------------------------------------------------------------------===//
519// Top Level Entrypoint
520//===----------------------------------------------------------------------===//
521
522/// EmitAnyX86InstComments - This function decodes x86 instructions and prints
523/// newline terminated strings to the specified string if desired. This
524/// information is shown in disassembly dumps when verbose assembly is enabled.
525bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS,
Craig Topper9804c672018-03-10 03:12:00 +0000526 const MCInstrInfo &MCII,
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000527 const char *(*getRegName)(unsigned)) {
528 // If this is a shuffle operation, the switch should fill in this state.
529 SmallVector<int, 8> ShuffleMask;
530 const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr;
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000531 unsigned NumOperands = MI->getNumOperands();
Craig Topper89c17612016-06-10 04:48:05 +0000532 bool RegForm = false;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000533
Craig Topperd88204f2018-03-10 21:30:46 +0000534 if (printFMA3Comments(MI, OS, getRegName))
535 return true;
536
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000537 switch (MI->getOpcode()) {
538 default:
539 // Not an instruction for which we can decode comments.
540 return false;
541
542 case X86::BLENDPDrri:
543 case X86::VBLENDPDrri:
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000544 case X86::VBLENDPDYrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000545 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000546 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000547 case X86::BLENDPDrmi:
548 case X86::VBLENDPDrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000549 case X86::VBLENDPDYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000550 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000551 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::f64, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000552 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000553 ShuffleMask);
554 Src1Name = getRegName(MI->getOperand(1).getReg());
555 DestName = getRegName(MI->getOperand(0).getReg());
556 break;
557
558 case X86::BLENDPSrri:
559 case X86::VBLENDPSrri:
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000560 case X86::VBLENDPSYrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000561 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000562 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000563 case X86::BLENDPSrmi:
564 case X86::VBLENDPSrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000565 case X86::VBLENDPSYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000566 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000567 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::f32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000568 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000569 ShuffleMask);
570 Src1Name = getRegName(MI->getOperand(1).getReg());
571 DestName = getRegName(MI->getOperand(0).getReg());
572 break;
573
574 case X86::PBLENDWrri:
575 case X86::VPBLENDWrri:
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000576 case X86::VPBLENDWYrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000577 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000578 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000579 case X86::PBLENDWrmi:
580 case X86::VPBLENDWrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000581 case X86::VPBLENDWYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000582 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000583 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::i16, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000584 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000585 ShuffleMask);
586 Src1Name = getRegName(MI->getOperand(1).getReg());
587 DestName = getRegName(MI->getOperand(0).getReg());
588 break;
589
590 case X86::VPBLENDDrri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000591 case X86::VPBLENDDYrri:
592 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000593 LLVM_FALLTHROUGH;
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000594 case X86::VPBLENDDrmi:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000595 case X86::VPBLENDDYrmi:
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000596 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim13d3a202015-11-16 23:03:18 +0000597 DecodeBLENDMask(getRegOperandVectorVT(MI, MVT::i32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000598 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000599 ShuffleMask);
600 Src1Name = getRegName(MI->getOperand(1).getReg());
601 DestName = getRegName(MI->getOperand(0).getReg());
602 break;
603
604 case X86::INSERTPSrr:
605 case X86::VINSERTPSrr:
Craig Topper6189d3e2016-07-19 01:26:19 +0000606 case X86::VINSERTPSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000607 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000608 LLVM_FALLTHROUGH;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000609 case X86::INSERTPSrm:
610 case X86::VINSERTPSrm:
Craig Topper6189d3e2016-07-19 01:26:19 +0000611 case X86::VINSERTPSZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000612 DestName = getRegName(MI->getOperand(0).getReg());
613 Src1Name = getRegName(MI->getOperand(1).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000614 if (MI->getOperand(NumOperands - 1).isImm())
615 DecodeINSERTPSMask(MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000616 ShuffleMask);
617 break;
618
619 case X86::MOVLHPSrr:
620 case X86::VMOVLHPSrr:
Simon Pilgrimd5a15442015-11-21 13:04:42 +0000621 case X86::VMOVLHPSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000622 Src2Name = getRegName(MI->getOperand(2).getReg());
623 Src1Name = getRegName(MI->getOperand(1).getReg());
624 DestName = getRegName(MI->getOperand(0).getReg());
625 DecodeMOVLHPSMask(2, ShuffleMask);
626 break;
627
628 case X86::MOVHLPSrr:
629 case X86::VMOVHLPSrr:
Simon Pilgrimd5a15442015-11-21 13:04:42 +0000630 case X86::VMOVHLPSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000631 Src2Name = getRegName(MI->getOperand(2).getReg());
632 Src1Name = getRegName(MI->getOperand(1).getReg());
633 DestName = getRegName(MI->getOperand(0).getReg());
634 DecodeMOVHLPSMask(2, ShuffleMask);
635 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000636
Simon Pilgrima3d67442016-02-07 15:39:22 +0000637 case X86::MOVHPDrm:
638 case X86::VMOVHPDrm:
639 case X86::VMOVHPDZ128rm:
640 Src1Name = getRegName(MI->getOperand(1).getReg());
641 DestName = getRegName(MI->getOperand(0).getReg());
642 DecodeInsertElementMask(MVT::v2f64, 1, 1, ShuffleMask);
643 break;
644
645 case X86::MOVHPSrm:
646 case X86::VMOVHPSrm:
647 case X86::VMOVHPSZ128rm:
648 Src1Name = getRegName(MI->getOperand(1).getReg());
649 DestName = getRegName(MI->getOperand(0).getReg());
650 DecodeInsertElementMask(MVT::v4f32, 2, 2, ShuffleMask);
651 break;
652
653 case X86::MOVLPDrm:
654 case X86::VMOVLPDrm:
655 case X86::VMOVLPDZ128rm:
656 Src1Name = getRegName(MI->getOperand(1).getReg());
657 DestName = getRegName(MI->getOperand(0).getReg());
658 DecodeInsertElementMask(MVT::v2f64, 0, 1, ShuffleMask);
659 break;
660
661 case X86::MOVLPSrm:
662 case X86::VMOVLPSrm:
663 case X86::VMOVLPSZ128rm:
664 Src1Name = getRegName(MI->getOperand(1).getReg());
665 DestName = getRegName(MI->getOperand(0).getReg());
666 DecodeInsertElementMask(MVT::v4f32, 0, 2, ShuffleMask);
667 break;
668
Igor Breger24cab0f2015-11-16 07:22:00 +0000669 CASE_MOVDUP(MOVSLDUP, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000670 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000671 LLVM_FALLTHROUGH;
672
Igor Breger1f782962015-11-19 08:26:56 +0000673 CASE_MOVDUP(MOVSLDUP, m)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000674 DestName = getRegName(MI->getOperand(0).getReg());
Igor Breger1f782962015-11-19 08:26:56 +0000675 DecodeMOVSLDUPMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000676 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000677
Igor Breger24cab0f2015-11-16 07:22:00 +0000678 CASE_MOVDUP(MOVSHDUP, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000679 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000680 LLVM_FALLTHROUGH;
681
Igor Breger1f782962015-11-19 08:26:56 +0000682 CASE_MOVDUP(MOVSHDUP, m)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000683 DestName = getRegName(MI->getOperand(0).getReg());
Igor Breger1f782962015-11-19 08:26:56 +0000684 DecodeMOVSHDUPMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000685 break;
686
Igor Breger1f782962015-11-19 08:26:56 +0000687 CASE_MOVDUP(MOVDDUP, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000688 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000689 LLVM_FALLTHROUGH;
690
Igor Breger1f782962015-11-19 08:26:56 +0000691 CASE_MOVDUP(MOVDDUP, m)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000692 DestName = getRegName(MI->getOperand(0).getReg());
Igor Breger1f782962015-11-19 08:26:56 +0000693 DecodeMOVDDUPMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000694 break;
695
696 case X86::PSLLDQri:
697 case X86::VPSLLDQri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000698 case X86::VPSLLDQYri:
Simon Pilgrim643734c2016-06-09 22:03:15 +0000699 case X86::VPSLLDQZ128rr:
700 case X86::VPSLLDQZ256rr:
Craig Topperaa904d52017-12-10 17:42:39 +0000701 case X86::VPSLLDQZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000702 Src1Name = getRegName(MI->getOperand(1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +0000703 LLVM_FALLTHROUGH;
Simon Pilgrim643734c2016-06-09 22:03:15 +0000704 case X86::VPSLLDQZ128rm:
705 case X86::VPSLLDQZ256rm:
Craig Topperaa904d52017-12-10 17:42:39 +0000706 case X86::VPSLLDQZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000707 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000708 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimb9ada272015-11-16 22:54:41 +0000709 DecodePSLLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000710 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000711 ShuffleMask);
712 break;
713
714 case X86::PSRLDQri:
715 case X86::VPSRLDQri:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000716 case X86::VPSRLDQYri:
Simon Pilgrim643734c2016-06-09 22:03:15 +0000717 case X86::VPSRLDQZ128rr:
718 case X86::VPSRLDQZ256rr:
Craig Topperaa904d52017-12-10 17:42:39 +0000719 case X86::VPSRLDQZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000720 Src1Name = getRegName(MI->getOperand(1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +0000721 LLVM_FALLTHROUGH;
Simon Pilgrim643734c2016-06-09 22:03:15 +0000722 case X86::VPSRLDQZ128rm:
723 case X86::VPSRLDQZ256rm:
Craig Topperaa904d52017-12-10 17:42:39 +0000724 case X86::VPSRLDQZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000725 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000726 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimb9ada272015-11-16 22:54:41 +0000727 DecodePSRLDQMask(getRegOperandVectorVT(MI, MVT::i8, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000728 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000729 ShuffleMask);
730 break;
731
Craig Topper7a299302016-06-09 07:06:38 +0000732 CASE_SHUF(PALIGNR, rri)
Craig Topper89c17612016-06-10 04:48:05 +0000733 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
734 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000735 LLVM_FALLTHROUGH;
736
Craig Topper7a299302016-06-09 07:06:38 +0000737 CASE_SHUF(PALIGNR, rmi)
Craig Topper89c17612016-06-10 04:48:05 +0000738 Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000739 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000740 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimb9ada272015-11-16 22:54:41 +0000741 DecodePALIGNRMask(getRegOperandVectorVT(MI, MVT::i8, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000742 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000743 ShuffleMask);
744 break;
745
Craig Topperb084c902016-10-22 06:51:56 +0000746 CASE_AVX512_INS_COMMON(ALIGNQ, Z, rri)
747 CASE_AVX512_INS_COMMON(ALIGNQ, Z256, rri)
748 CASE_AVX512_INS_COMMON(ALIGNQ, Z128, rri)
749 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
750 RegForm = true;
751 LLVM_FALLTHROUGH;
752
753 CASE_AVX512_INS_COMMON(ALIGNQ, Z, rmi)
754 CASE_AVX512_INS_COMMON(ALIGNQ, Z256, rmi)
755 CASE_AVX512_INS_COMMON(ALIGNQ, Z128, rmi)
756 Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
757 DestName = getRegName(MI->getOperand(0).getReg());
758 if (MI->getOperand(NumOperands - 1).isImm())
759 DecodeVALIGNMask(getRegOperandVectorVT(MI, MVT::i64, 0),
760 MI->getOperand(NumOperands - 1).getImm(),
761 ShuffleMask);
762 break;
763
764 CASE_AVX512_INS_COMMON(ALIGND, Z, rri)
765 CASE_AVX512_INS_COMMON(ALIGND, Z256, rri)
766 CASE_AVX512_INS_COMMON(ALIGND, Z128, rri)
767 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
768 RegForm = true;
769 LLVM_FALLTHROUGH;
770
771 CASE_AVX512_INS_COMMON(ALIGND, Z, rmi)
772 CASE_AVX512_INS_COMMON(ALIGND, Z256, rmi)
773 CASE_AVX512_INS_COMMON(ALIGND, Z128, rmi)
774 Src2Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
775 DestName = getRegName(MI->getOperand(0).getReg());
776 if (MI->getOperand(NumOperands - 1).isImm())
777 DecodeVALIGNMask(getRegOperandVectorVT(MI, MVT::i32, 0),
778 MI->getOperand(NumOperands - 1).getImm(),
779 ShuffleMask);
780 break;
781
Craig Topper01f53b12016-06-03 05:31:00 +0000782 CASE_SHUF(PSHUFD, ri)
Craig Topper6f7288d2016-06-09 07:49:08 +0000783 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000784 LLVM_FALLTHROUGH;
785
Craig Topper01f53b12016-06-03 05:31:00 +0000786 CASE_SHUF(PSHUFD, mi)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000787 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000788 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000789 DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::i32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000790 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000791 ShuffleMask);
792 break;
793
Craig Topper01f53b12016-06-03 05:31:00 +0000794 CASE_SHUF(PSHUFHW, ri)
Craig Topper6f7288d2016-06-09 07:49:08 +0000795 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000796 LLVM_FALLTHROUGH;
797
Craig Topper01f53b12016-06-03 05:31:00 +0000798 CASE_SHUF(PSHUFHW, mi)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000799 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000800 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000801 DecodePSHUFHWMask(getRegOperandVectorVT(MI, MVT::i16, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000802 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000803 ShuffleMask);
804 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000805
Craig Topper01f53b12016-06-03 05:31:00 +0000806 CASE_SHUF(PSHUFLW, ri)
Craig Topper6f7288d2016-06-09 07:49:08 +0000807 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000808 LLVM_FALLTHROUGH;
809
Craig Topper01f53b12016-06-03 05:31:00 +0000810 CASE_SHUF(PSHUFLW, mi)
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000811 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000812 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000813 DecodePSHUFLWMask(getRegOperandVectorVT(MI, MVT::i16, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000814 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000815 ShuffleMask);
816 break;
817
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000818 case X86::MMX_PSHUFWri:
819 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000820 LLVM_FALLTHROUGH;
821
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000822 case X86::MMX_PSHUFWmi:
823 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000824 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000825 DecodePSHUFMask(MVT::v4i16,
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000826 MI->getOperand(NumOperands - 1).getImm(),
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000827 ShuffleMask);
828 break;
829
830 case X86::PSWAPDrr:
831 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000832 LLVM_FALLTHROUGH;
833
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000834 case X86::PSWAPDrm:
835 DestName = getRegName(MI->getOperand(0).getReg());
836 DecodePSWAPMask(MVT::v2i32, ShuffleMask);
837 break;
838
Simon Pilgrim8483df62015-11-17 22:35:45 +0000839 CASE_UNPCK(PUNPCKHBW, r)
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000840 case X86::MMX_PUNPCKHBWirr:
Craig Topper89c17612016-06-10 04:48:05 +0000841 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
842 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000843 LLVM_FALLTHROUGH;
844
Simon Pilgrim8483df62015-11-17 22:35:45 +0000845 CASE_UNPCK(PUNPCKHBW, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000846 case X86::MMX_PUNPCKHBWirm:
Craig Topper89c17612016-06-10 04:48:05 +0000847 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000848 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000849 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000850 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000851
Simon Pilgrim8483df62015-11-17 22:35:45 +0000852 CASE_UNPCK(PUNPCKHWD, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000853 case X86::MMX_PUNPCKHWDirr:
Craig Topper89c17612016-06-10 04:48:05 +0000854 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
855 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000856 LLVM_FALLTHROUGH;
857
Simon Pilgrim8483df62015-11-17 22:35:45 +0000858 CASE_UNPCK(PUNPCKHWD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000859 case X86::MMX_PUNPCKHWDirm:
Craig Topper89c17612016-06-10 04:48:05 +0000860 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000861 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000862 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000863 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000864
Simon Pilgrim8483df62015-11-17 22:35:45 +0000865 CASE_UNPCK(PUNPCKHDQ, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000866 case X86::MMX_PUNPCKHDQirr:
Craig Topper89c17612016-06-10 04:48:05 +0000867 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
868 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000869 LLVM_FALLTHROUGH;
870
Simon Pilgrim8483df62015-11-17 22:35:45 +0000871 CASE_UNPCK(PUNPCKHDQ, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000872 case X86::MMX_PUNPCKHDQirm:
Craig Topper89c17612016-06-10 04:48:05 +0000873 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000874 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000875 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000876 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000877
Simon Pilgrim8483df62015-11-17 22:35:45 +0000878 CASE_UNPCK(PUNPCKHQDQ, r)
Craig Topper89c17612016-06-10 04:48:05 +0000879 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
880 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000881 LLVM_FALLTHROUGH;
882
Simon Pilgrim8483df62015-11-17 22:35:45 +0000883 CASE_UNPCK(PUNPCKHQDQ, m)
Craig Topper89c17612016-06-10 04:48:05 +0000884 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000885 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000886 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000887 break;
888
Simon Pilgrim8483df62015-11-17 22:35:45 +0000889 CASE_UNPCK(PUNPCKLBW, r)
Simon Pilgrimf8f86ab2015-09-13 11:28:45 +0000890 case X86::MMX_PUNPCKLBWirr:
Craig Topper89c17612016-06-10 04:48:05 +0000891 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
892 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000893 LLVM_FALLTHROUGH;
894
Simon Pilgrim8483df62015-11-17 22:35:45 +0000895 CASE_UNPCK(PUNPCKLBW, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000896 case X86::MMX_PUNPCKLBWirm:
Craig Topper89c17612016-06-10 04:48:05 +0000897 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000898 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000899 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i8, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000900 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000901
Simon Pilgrim8483df62015-11-17 22:35:45 +0000902 CASE_UNPCK(PUNPCKLWD, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000903 case X86::MMX_PUNPCKLWDirr:
Craig Topper89c17612016-06-10 04:48:05 +0000904 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
905 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000906 LLVM_FALLTHROUGH;
907
Simon Pilgrim8483df62015-11-17 22:35:45 +0000908 CASE_UNPCK(PUNPCKLWD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000909 case X86::MMX_PUNPCKLWDirm:
Craig Topper89c17612016-06-10 04:48:05 +0000910 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000911 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000912 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i16, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000913 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000914
Simon Pilgrim8483df62015-11-17 22:35:45 +0000915 CASE_UNPCK(PUNPCKLDQ, r)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000916 case X86::MMX_PUNPCKLDQirr:
Craig Topper89c17612016-06-10 04:48:05 +0000917 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
918 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000919 LLVM_FALLTHROUGH;
920
Simon Pilgrim8483df62015-11-17 22:35:45 +0000921 CASE_UNPCK(PUNPCKLDQ, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000922 case X86::MMX_PUNPCKLDQirm:
Craig Topper89c17612016-06-10 04:48:05 +0000923 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000924 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000925 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i32, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000926 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000927
Simon Pilgrim8483df62015-11-17 22:35:45 +0000928 CASE_UNPCK(PUNPCKLQDQ, r)
Craig Topper89c17612016-06-10 04:48:05 +0000929 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
930 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000931 LLVM_FALLTHROUGH;
932
Simon Pilgrim8483df62015-11-17 22:35:45 +0000933 CASE_UNPCK(PUNPCKLQDQ, m)
Craig Topper89c17612016-06-10 04:48:05 +0000934 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000935 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000936 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::i64, 0), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000937 break;
938
Craig Topper01f53b12016-06-03 05:31:00 +0000939 CASE_SHUF(SHUFPD, rri)
Craig Topper89c17612016-06-10 04:48:05 +0000940 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
941 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000942 LLVM_FALLTHROUGH;
943
Craig Topper01f53b12016-06-03 05:31:00 +0000944 CASE_SHUF(SHUFPD, rmi)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000945 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000946 DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f64, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000947 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000948 ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000949 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000950 DestName = getRegName(MI->getOperand(0).getReg());
951 break;
952
Craig Topper01f53b12016-06-03 05:31:00 +0000953 CASE_SHUF(SHUFPS, rri)
Craig Topper89c17612016-06-10 04:48:05 +0000954 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
955 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000956 LLVM_FALLTHROUGH;
957
Craig Topper01f53b12016-06-03 05:31:00 +0000958 CASE_SHUF(SHUFPS, rmi)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000959 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +0000960 DecodeSHUFPMask(getRegOperandVectorVT(MI, MVT::f32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +0000961 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000962 ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +0000963 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +0000964 DestName = getRegName(MI->getOperand(0).getReg());
965 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000966
Igor Breger24cab0f2015-11-16 07:22:00 +0000967 CASE_VSHUF(64X2, r)
Simon Pilgrimd3869412016-06-11 11:18:38 +0000968 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
969 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000970 LLVM_FALLTHROUGH;
971
Igor Breger24cab0f2015-11-16 07:22:00 +0000972 CASE_VSHUF(64X2, m)
Simon Pilgrimd3869412016-06-11 11:18:38 +0000973 decodeVSHUF64x2FamilyMask(getRegOperandVectorVT(MI, MVT::i64, 0),
974 MI->getOperand(NumOperands - 1).getImm(),
Igor Bregerd7bae452015-10-15 13:29:07 +0000975 ShuffleMask);
Simon Pilgrimd3869412016-06-11 11:18:38 +0000976 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
Igor Bregerd7bae452015-10-15 13:29:07 +0000977 DestName = getRegName(MI->getOperand(0).getReg());
Igor Bregerd7bae452015-10-15 13:29:07 +0000978 break;
Simon Pilgrimd3869412016-06-11 11:18:38 +0000979
980 CASE_VSHUF(32X4, r)
981 Src2Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
982 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000983 LLVM_FALLTHROUGH;
984
Simon Pilgrimd3869412016-06-11 11:18:38 +0000985 CASE_VSHUF(32X4, m)
986 decodeVSHUF64x2FamilyMask(getRegOperandVectorVT(MI, MVT::i32, 0),
987 MI->getOperand(NumOperands - 1).getImm(),
988 ShuffleMask);
989 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
990 DestName = getRegName(MI->getOperand(0).getReg());
991 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000992
Simon Pilgrim8483df62015-11-17 22:35:45 +0000993 CASE_UNPCK(UNPCKLPD, r)
Craig Topper89c17612016-06-10 04:48:05 +0000994 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
995 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +0000996 LLVM_FALLTHROUGH;
997
Simon Pilgrim8483df62015-11-17 22:35:45 +0000998 CASE_UNPCK(UNPCKLPD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +0000999 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +00001000 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001001 DestName = getRegName(MI->getOperand(0).getReg());
1002 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001003
Simon Pilgrim8483df62015-11-17 22:35:45 +00001004 CASE_UNPCK(UNPCKLPS, r)
Craig Topper89c17612016-06-10 04:48:05 +00001005 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
1006 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001007 LLVM_FALLTHROUGH;
1008
Simon Pilgrim8483df62015-11-17 22:35:45 +00001009 CASE_UNPCK(UNPCKLPS, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001010 DecodeUNPCKLMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +00001011 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001012 DestName = getRegName(MI->getOperand(0).getReg());
1013 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001014
Simon Pilgrim8483df62015-11-17 22:35:45 +00001015 CASE_UNPCK(UNPCKHPD, r)
Craig Topper89c17612016-06-10 04:48:05 +00001016 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
1017 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001018 LLVM_FALLTHROUGH;
1019
Simon Pilgrim8483df62015-11-17 22:35:45 +00001020 CASE_UNPCK(UNPCKHPD, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001021 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f64, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +00001022 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001023 DestName = getRegName(MI->getOperand(0).getReg());
1024 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001025
Simon Pilgrim8483df62015-11-17 22:35:45 +00001026 CASE_UNPCK(UNPCKHPS, r)
Craig Topper89c17612016-06-10 04:48:05 +00001027 Src2Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
1028 RegForm = true;
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001029 LLVM_FALLTHROUGH;
1030
Simon Pilgrim8483df62015-11-17 22:35:45 +00001031 CASE_UNPCK(UNPCKHPS, m)
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001032 DecodeUNPCKHMask(getRegOperandVectorVT(MI, MVT::f32, 0), ShuffleMask);
Craig Topper89c17612016-06-10 04:48:05 +00001033 Src1Name = getRegName(MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001034 DestName = getRegName(MI->getOperand(0).getReg());
1035 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001036
Simon Pilgrim5080e7f2016-07-03 18:02:43 +00001037 CASE_VPERMILPI(PERMILPS, r)
Simon Pilgrim6ce35dd2016-05-11 18:53:44 +00001038 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001039 LLVM_FALLTHROUGH;
1040
Simon Pilgrim5080e7f2016-07-03 18:02:43 +00001041 CASE_VPERMILPI(PERMILPS, m)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001042 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +00001043 DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::f32, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001044 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001045 ShuffleMask);
1046 DestName = getRegName(MI->getOperand(0).getReg());
1047 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001048
Simon Pilgrim5080e7f2016-07-03 18:02:43 +00001049 CASE_VPERMILPI(PERMILPD, r)
Simon Pilgrim6ce35dd2016-05-11 18:53:44 +00001050 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001051 LLVM_FALLTHROUGH;
1052
Simon Pilgrim5080e7f2016-07-03 18:02:43 +00001053 CASE_VPERMILPI(PERMILPD, m)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001054 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrim5883a732015-11-16 22:39:27 +00001055 DecodePSHUFMask(getRegOperandVectorVT(MI, MVT::f64, 0),
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001056 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001057 ShuffleMask);
1058 DestName = getRegName(MI->getOperand(0).getReg());
1059 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001060
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001061 case X86::VPERM2F128rr:
1062 case X86::VPERM2I128rr:
1063 Src2Name = getRegName(MI->getOperand(2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001064 LLVM_FALLTHROUGH;
1065
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001066 case X86::VPERM2F128rm:
1067 case X86::VPERM2I128rm:
1068 // For instruction comments purpose, assume the 256-bit vector is v4i64.
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001069 if (MI->getOperand(NumOperands - 1).isImm())
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001070 DecodeVPERM2X128Mask(MVT::v4i64,
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001071 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001072 ShuffleMask);
1073 Src1Name = getRegName(MI->getOperand(1).getReg());
1074 DestName = getRegName(MI->getOperand(0).getReg());
1075 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001076
Simon Pilgrima0d73832016-07-03 18:27:37 +00001077 CASE_VPERM(PERMPD, r)
Craig Topper200d2372016-06-10 05:12:40 +00001078 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001079 LLVM_FALLTHROUGH;
1080
Simon Pilgrima0d73832016-07-03 18:27:37 +00001081 CASE_VPERM(PERMPD, m)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001082 if (MI->getOperand(NumOperands - 1).isImm())
Simon Pilgrima0d73832016-07-03 18:27:37 +00001083 DecodeVPERMMask(getRegOperandVectorVT(MI, MVT::f64, 0),
1084 MI->getOperand(NumOperands - 1).getImm(),
1085 ShuffleMask);
1086 DestName = getRegName(MI->getOperand(0).getReg());
1087 break;
1088
1089 CASE_VPERM(PERMQ, r)
1090 Src1Name = getRegName(MI->getOperand(NumOperands - 2).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001091 LLVM_FALLTHROUGH;
1092
Simon Pilgrima0d73832016-07-03 18:27:37 +00001093 CASE_VPERM(PERMQ, m)
1094 if (MI->getOperand(NumOperands - 1).isImm())
1095 DecodeVPERMMask(getRegOperandVectorVT(MI, MVT::i64, 0),
1096 MI->getOperand(NumOperands - 1).getImm(),
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001097 ShuffleMask);
1098 DestName = getRegName(MI->getOperand(0).getReg());
1099 break;
1100
1101 case X86::MOVSDrr:
1102 case X86::VMOVSDrr:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +00001103 case X86::VMOVSDZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001104 Src2Name = getRegName(MI->getOperand(2).getReg());
1105 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001106 LLVM_FALLTHROUGH;
1107
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001108 case X86::MOVSDrm:
1109 case X86::VMOVSDrm:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +00001110 case X86::VMOVSDZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001111 DecodeScalarMoveMask(MVT::v2f64, nullptr == Src2Name, ShuffleMask);
1112 DestName = getRegName(MI->getOperand(0).getReg());
1113 break;
Simon Pilgrimd5a15442015-11-21 13:04:42 +00001114
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001115 case X86::MOVSSrr:
1116 case X86::VMOVSSrr:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +00001117 case X86::VMOVSSZrr:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001118 Src2Name = getRegName(MI->getOperand(2).getReg());
1119 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001120 LLVM_FALLTHROUGH;
1121
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001122 case X86::MOVSSrm:
1123 case X86::VMOVSSrm:
Simon Pilgrimf5c23ad2016-02-01 22:26:28 +00001124 case X86::VMOVSSZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001125 DecodeScalarMoveMask(MVT::v4f32, nullptr == Src2Name, ShuffleMask);
1126 DestName = getRegName(MI->getOperand(0).getReg());
1127 break;
1128
1129 case X86::MOVPQI2QIrr:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +00001130 case X86::MOVZPQILo2PQIrr:
1131 case X86::VMOVPQI2QIrr:
Craig Topperb76ed822018-03-10 06:05:13 +00001132 case X86::VMOVPQI2QIZrr:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +00001133 case X86::VMOVZPQILo2PQIrr:
1134 case X86::VMOVZPQILo2PQIZrr:
1135 Src1Name = getRegName(MI->getOperand(1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001136 LLVM_FALLTHROUGH;
1137
Simon Pilgrim3e0c0222015-12-13 12:49:48 +00001138 case X86::MOVQI2PQIrm:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +00001139 case X86::VMOVQI2PQIrm:
Simon Pilgrim96fe4ef2016-02-02 13:32:56 +00001140 case X86::VMOVQI2PQIZrm:
Simon Pilgrim3e0c0222015-12-13 12:49:48 +00001141 DecodeZeroMoveLowMask(MVT::v2i64, ShuffleMask);
1142 DestName = getRegName(MI->getOperand(0).getReg());
1143 break;
Simon Pilgrim66e43ee2015-11-16 22:21:10 +00001144
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001145 case X86::MOVDI2PDIrm:
1146 case X86::VMOVDI2PDIrm:
Simon Pilgrim5be17b62016-02-01 23:04:05 +00001147 case X86::VMOVDI2PDIZrm:
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001148 DecodeZeroMoveLowMask(MVT::v4i32, ShuffleMask);
1149 DestName = getRegName(MI->getOperand(0).getReg());
1150 break;
1151
Simon Pilgrimd85cae32015-07-06 20:46:41 +00001152 case X86::EXTRQI:
1153 if (MI->getOperand(2).isImm() &&
1154 MI->getOperand(3).isImm())
Simon Pilgrim9f0a0bd2017-07-04 16:53:12 +00001155 DecodeEXTRQIMask(MVT::v16i8, MI->getOperand(2).getImm(),
Simon Pilgrimd85cae32015-07-06 20:46:41 +00001156 MI->getOperand(3).getImm(),
1157 ShuffleMask);
1158
1159 DestName = getRegName(MI->getOperand(0).getReg());
1160 Src1Name = getRegName(MI->getOperand(1).getReg());
1161 break;
1162
1163 case X86::INSERTQI:
1164 if (MI->getOperand(3).isImm() &&
1165 MI->getOperand(4).isImm())
Simon Pilgrim9f0a0bd2017-07-04 16:53:12 +00001166 DecodeINSERTQIMask(MVT::v16i8, MI->getOperand(3).getImm(),
Simon Pilgrimd85cae32015-07-06 20:46:41 +00001167 MI->getOperand(4).getImm(),
1168 ShuffleMask);
1169
1170 DestName = getRegName(MI->getOperand(0).getReg());
1171 Src1Name = getRegName(MI->getOperand(1).getReg());
1172 Src2Name = getRegName(MI->getOperand(2).getReg());
1173 break;
1174
Simon Pilgrima76a8e52016-07-14 12:07:43 +00001175 case X86::VBROADCASTF128:
1176 case X86::VBROADCASTI128:
Craig Topperdde865a2016-10-15 16:26:07 +00001177 CASE_AVX512_INS_COMMON(BROADCASTF64X2, Z128, rm)
1178 CASE_AVX512_INS_COMMON(BROADCASTI64X2, Z128, rm)
Simon Pilgrima76a8e52016-07-14 12:07:43 +00001179 DecodeSubVectorBroadcast(MVT::v4f64, MVT::v2f64, ShuffleMask);
1180 DestName = getRegName(MI->getOperand(0).getReg());
1181 break;
Craig Topperdde865a2016-10-15 16:26:07 +00001182 CASE_AVX512_INS_COMMON(BROADCASTF64X2, , rm)
1183 CASE_AVX512_INS_COMMON(BROADCASTI64X2, , rm)
1184 DecodeSubVectorBroadcast(MVT::v8f64, MVT::v2f64, ShuffleMask);
1185 DestName = getRegName(MI->getOperand(0).getReg());
1186 break;
1187 CASE_AVX512_INS_COMMON(BROADCASTF64X4, , rm)
1188 CASE_AVX512_INS_COMMON(BROADCASTI64X4, , rm)
1189 DecodeSubVectorBroadcast(MVT::v8f64, MVT::v4f64, ShuffleMask);
1190 DestName = getRegName(MI->getOperand(0).getReg());
1191 break;
1192 CASE_AVX512_INS_COMMON(BROADCASTF32X4, Z256, rm)
1193 CASE_AVX512_INS_COMMON(BROADCASTI32X4, Z256, rm)
1194 DecodeSubVectorBroadcast(MVT::v8f32, MVT::v4f32, ShuffleMask);
1195 DestName = getRegName(MI->getOperand(0).getReg());
1196 break;
1197 CASE_AVX512_INS_COMMON(BROADCASTF32X4, , rm)
1198 CASE_AVX512_INS_COMMON(BROADCASTI32X4, , rm)
1199 DecodeSubVectorBroadcast(MVT::v16f32, MVT::v4f32, ShuffleMask);
1200 DestName = getRegName(MI->getOperand(0).getReg());
1201 break;
1202 CASE_AVX512_INS_COMMON(BROADCASTF32X8, , rm)
1203 CASE_AVX512_INS_COMMON(BROADCASTI32X8, , rm)
1204 DecodeSubVectorBroadcast(MVT::v16f32, MVT::v8f32, ShuffleMask);
1205 DestName = getRegName(MI->getOperand(0).getReg());
1206 break;
Craig Topper6ce20bd2017-10-11 00:11:53 +00001207 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z128, r)
1208 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
1209 LLVM_FALLTHROUGH;
1210 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z128, m)
1211 DecodeSubVectorBroadcast(MVT::v4f32, MVT::v2f32, ShuffleMask);
1212 DestName = getRegName(MI->getOperand(0).getReg());
1213 break;
Craig Topperdde865a2016-10-15 16:26:07 +00001214 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z256, r)
1215 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z256, r)
1216 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +00001217 LLVM_FALLTHROUGH;
Craig Topperdde865a2016-10-15 16:26:07 +00001218 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z256, m)
1219 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z256, m)
1220 DecodeSubVectorBroadcast(MVT::v8f32, MVT::v2f32, ShuffleMask);
1221 DestName = getRegName(MI->getOperand(0).getReg());
1222 break;
1223 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z, r)
1224 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z, r)
1225 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Galina Kistanovab2c01162017-05-31 19:41:33 +00001226 LLVM_FALLTHROUGH;
Craig Topperdde865a2016-10-15 16:26:07 +00001227 CASE_AVX512_INS_COMMON(BROADCASTF32X2, Z, m)
1228 CASE_AVX512_INS_COMMON(BROADCASTI32X2, Z, m)
1229 DecodeSubVectorBroadcast(MVT::v16f32, MVT::v2f32, ShuffleMask);
1230 DestName = getRegName(MI->getOperand(0).getReg());
1231 break;
Simon Pilgrima76a8e52016-07-14 12:07:43 +00001232
Simon Pilgrim0acc32a2016-02-06 19:51:21 +00001233 CASE_PMOVZX(PMOVZXBW, r)
1234 CASE_PMOVZX(PMOVZXBD, r)
1235 CASE_PMOVZX(PMOVZXBQ, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001236 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001237 LLVM_FALLTHROUGH;
1238
Simon Pilgrim0acc32a2016-02-06 19:51:21 +00001239 CASE_PMOVZX(PMOVZXBW, m)
1240 CASE_PMOVZX(PMOVZXBD, m)
1241 CASE_PMOVZX(PMOVZXBQ, m)
Simon Pilgrime1b6db92016-02-06 16:33:42 +00001242 DecodeZeroExtendMask(MVT::i8, getZeroExtensionResultType(MI), ShuffleMask);
1243 DestName = getRegName(MI->getOperand(0).getReg());
1244 break;
1245
Simon Pilgrim0acc32a2016-02-06 19:51:21 +00001246 CASE_PMOVZX(PMOVZXWD, r)
1247 CASE_PMOVZX(PMOVZXWQ, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001248 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001249 LLVM_FALLTHROUGH;
1250
Simon Pilgrim0acc32a2016-02-06 19:51:21 +00001251 CASE_PMOVZX(PMOVZXWD, m)
1252 CASE_PMOVZX(PMOVZXWQ, m)
Simon Pilgrime1b6db92016-02-06 16:33:42 +00001253 DecodeZeroExtendMask(MVT::i16, getZeroExtensionResultType(MI), ShuffleMask);
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001254 DestName = getRegName(MI->getOperand(0).getReg());
Simon Pilgrime1b6db92016-02-06 16:33:42 +00001255 break;
1256
Simon Pilgrim0acc32a2016-02-06 19:51:21 +00001257 CASE_PMOVZX(PMOVZXDQ, r)
Simon Pilgrim3016d9e2016-05-11 17:36:32 +00001258 Src1Name = getRegName(MI->getOperand(NumOperands - 1).getReg());
Justin Bognercd1d5aa2016-08-17 20:30:52 +00001259 LLVM_FALLTHROUGH;
1260
Simon Pilgrim0acc32a2016-02-06 19:51:21 +00001261 CASE_PMOVZX(PMOVZXDQ, m)
Simon Pilgrime1b6db92016-02-06 16:33:42 +00001262 DecodeZeroExtendMask(MVT::i32, getZeroExtensionResultType(MI), ShuffleMask);
1263 DestName = getRegName(MI->getOperand(0).getReg());
1264 break;
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001265 }
1266
1267 // The only comments we decode are shuffles, so give up if we were unable to
1268 // decode a shuffle mask.
1269 if (ShuffleMask.empty())
1270 return false;
1271
1272 if (!DestName) DestName = Src1Name;
Craig Topper85b1da12017-10-11 00:46:09 +00001273 if (DestName) {
1274 OS << DestName;
Craig Topper9804c672018-03-10 03:12:00 +00001275 printMasking(OS, MI, MCII, getRegName);
Craig Topper85b1da12017-10-11 00:46:09 +00001276 } else
1277 OS << "mem";
1278
1279 OS << " = ";
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001280
1281 // If the two sources are the same, canonicalize the input elements to be
1282 // from the first src so that we get larger element spans.
1283 if (Src1Name == Src2Name) {
1284 for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1285 if ((int)ShuffleMask[i] >= 0 && // Not sentinel.
NAKAMURA Takumi5582a6a2015-05-25 01:43:34 +00001286 ShuffleMask[i] >= (int)e) // From second mask.
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001287 ShuffleMask[i] -= e;
1288 }
1289 }
1290
1291 // The shuffle mask specifies which elements of the src1/src2 fill in the
1292 // destination, with a few sentinel values. Loop through and print them
1293 // out.
1294 for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
1295 if (i != 0)
1296 OS << ',';
1297 if (ShuffleMask[i] == SM_SentinelZero) {
1298 OS << "zero";
1299 continue;
1300 }
1301
1302 // Otherwise, it must come from src1 or src2. Print the span of elements
1303 // that comes from this src.
1304 bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
1305 const char *SrcName = isSrc1 ? Src1Name : Src2Name;
1306 OS << (SrcName ? SrcName : "mem") << '[';
1307 bool IsFirst = true;
1308 while (i != e && (int)ShuffleMask[i] != SM_SentinelZero &&
1309 (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) {
1310 if (!IsFirst)
1311 OS << ',';
1312 else
1313 IsFirst = false;
1314 if (ShuffleMask[i] == SM_SentinelUndef)
1315 OS << "u";
1316 else
1317 OS << ShuffleMask[i] % ShuffleMask.size();
1318 ++i;
1319 }
1320 OS << ']';
NAKAMURA Takumi5582a6a2015-05-25 01:43:34 +00001321 --i; // For loop increments element #.
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001322 }
NAKAMURA Takumifb3bd712015-05-25 01:43:23 +00001323
1324 // We successfully added a comment to this instruction.
1325 return true;
1326}