1 //===-- X86InstComments.cpp - Generate verbose-asm comments for instrs ----===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This defines functionality used to emit comments about X86 instructions to
11 // an output stream for -fverbose-asm.
13 //===----------------------------------------------------------------------===//
15 #include "X86InstComments.h"
16 #include "MCTargetDesc/X86MCTargetDesc.h"
17 #include "Utils/X86ShuffleDecode.h"
18 #include "llvm/MC/MCInst.h"
19 #include "llvm/CodeGen/MachineValueType.h"
20 #include "llvm/Support/raw_ostream.h"
24 //===----------------------------------------------------------------------===//
25 // Top Level Entrypoint
26 //===----------------------------------------------------------------------===//
28 /// EmitAnyX86InstComments - This function decodes x86 instructions and prints
29 /// newline terminated strings to the specified string if desired. This
30 /// information is shown in disassembly dumps when verbose assembly is enabled.
31 bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS,
32 const char *(*getRegName)(unsigned)) {
33 // If this is a shuffle operation, the switch should fill in this state.
34 SmallVector<int, 8> ShuffleMask;
35 const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr;
37 switch (MI->getOpcode()) {
39 // Not an instruction for which we can decode comments.
43 case X86::VBLENDPDrri:
44 Src2Name = getRegName(MI->getOperand(2).getReg());
47 case X86::VBLENDPDrmi:
48 if(MI->getOperand(MI->getNumOperands()-1).isImm())
49 DecodeBLENDMask(MVT::v2f64,
50 MI->getOperand(MI->getNumOperands()-1).getImm(),
52 Src1Name = getRegName(MI->getOperand(1).getReg());
53 DestName = getRegName(MI->getOperand(0).getReg());
55 case X86::VBLENDPDYrri:
56 Src2Name = getRegName(MI->getOperand(2).getReg());
58 case X86::VBLENDPDYrmi:
59 if(MI->getOperand(MI->getNumOperands()-1).isImm())
60 DecodeBLENDMask(MVT::v4f64,
61 MI->getOperand(MI->getNumOperands()-1).getImm(),
63 Src1Name = getRegName(MI->getOperand(1).getReg());
64 DestName = getRegName(MI->getOperand(0).getReg());
68 case X86::VBLENDPSrri:
69 Src2Name = getRegName(MI->getOperand(2).getReg());
72 case X86::VBLENDPSrmi:
73 if(MI->getOperand(MI->getNumOperands()-1).isImm())
74 DecodeBLENDMask(MVT::v4f32,
75 MI->getOperand(MI->getNumOperands()-1).getImm(),
77 Src1Name = getRegName(MI->getOperand(1).getReg());
78 DestName = getRegName(MI->getOperand(0).getReg());
80 case X86::VBLENDPSYrri:
81 Src2Name = getRegName(MI->getOperand(2).getReg());
83 case X86::VBLENDPSYrmi:
84 if(MI->getOperand(MI->getNumOperands()-1).isImm())
85 DecodeBLENDMask(MVT::v8f32,
86 MI->getOperand(MI->getNumOperands()-1).getImm(),
88 Src1Name = getRegName(MI->getOperand(1).getReg());
89 DestName = getRegName(MI->getOperand(0).getReg());
93 case X86::VPBLENDWrri:
94 Src2Name = getRegName(MI->getOperand(2).getReg());
97 case X86::VPBLENDWrmi:
98 if(MI->getOperand(MI->getNumOperands()-1).isImm())
99 DecodeBLENDMask(MVT::v8i16,
100 MI->getOperand(MI->getNumOperands()-1).getImm(),
102 Src1Name = getRegName(MI->getOperand(1).getReg());
103 DestName = getRegName(MI->getOperand(0).getReg());
106 case X86::INSERTPSrr:
107 case X86::VINSERTPSrr:
108 DestName = getRegName(MI->getOperand(0).getReg());
109 Src1Name = getRegName(MI->getOperand(1).getReg());
110 Src2Name = getRegName(MI->getOperand(2).getReg());
111 if(MI->getOperand(3).isImm())
112 DecodeINSERTPSMask(MI->getOperand(3).getImm(), ShuffleMask);
116 case X86::VMOVLHPSrr:
117 Src2Name = getRegName(MI->getOperand(2).getReg());
118 Src1Name = getRegName(MI->getOperand(1).getReg());
119 DestName = getRegName(MI->getOperand(0).getReg());
120 DecodeMOVLHPSMask(2, ShuffleMask);
124 case X86::VMOVHLPSrr:
125 Src2Name = getRegName(MI->getOperand(2).getReg());
126 Src1Name = getRegName(MI->getOperand(1).getReg());
127 DestName = getRegName(MI->getOperand(0).getReg());
128 DecodeMOVHLPSMask(2, ShuffleMask);
131 case X86::MOVSLDUPrr:
132 case X86::VMOVSLDUPrr:
133 Src1Name = getRegName(MI->getOperand(1).getReg());
135 case X86::MOVSLDUPrm:
136 case X86::VMOVSLDUPrm:
137 DestName = getRegName(MI->getOperand(0).getReg());
138 DecodeMOVSLDUPMask(MVT::v4f32, ShuffleMask);
141 case X86::VMOVSHDUPYrr:
142 Src1Name = getRegName(MI->getOperand(1).getReg());
144 case X86::VMOVSHDUPYrm:
145 DestName = getRegName(MI->getOperand(0).getReg());
146 DecodeMOVSHDUPMask(MVT::v8f32, ShuffleMask);
149 case X86::VMOVSLDUPYrr:
150 Src1Name = getRegName(MI->getOperand(1).getReg());
152 case X86::VMOVSLDUPYrm:
153 DestName = getRegName(MI->getOperand(0).getReg());
154 DecodeMOVSLDUPMask(MVT::v8f32, ShuffleMask);
157 case X86::MOVSHDUPrr:
158 case X86::VMOVSHDUPrr:
159 Src1Name = getRegName(MI->getOperand(1).getReg());
161 case X86::MOVSHDUPrm:
162 case X86::VMOVSHDUPrm:
163 DestName = getRegName(MI->getOperand(0).getReg());
164 DecodeMOVSHDUPMask(MVT::v4f32, ShuffleMask);
167 case X86::PALIGNR128rr:
168 case X86::VPALIGNR128rr:
169 Src1Name = getRegName(MI->getOperand(2).getReg());
171 case X86::PALIGNR128rm:
172 case X86::VPALIGNR128rm:
173 Src2Name = getRegName(MI->getOperand(1).getReg());
174 DestName = getRegName(MI->getOperand(0).getReg());
175 if(MI->getOperand(MI->getNumOperands()-1).isImm())
176 DecodePALIGNRMask(MVT::v16i8,
177 MI->getOperand(MI->getNumOperands()-1).getImm(),
180 case X86::VPALIGNR256rr:
181 Src1Name = getRegName(MI->getOperand(2).getReg());
183 case X86::VPALIGNR256rm:
184 Src2Name = getRegName(MI->getOperand(1).getReg());
185 DestName = getRegName(MI->getOperand(0).getReg());
186 if(MI->getOperand(MI->getNumOperands()-1).isImm())
187 DecodePALIGNRMask(MVT::v32i8,
188 MI->getOperand(MI->getNumOperands()-1).getImm(),
194 Src1Name = getRegName(MI->getOperand(1).getReg());
198 DestName = getRegName(MI->getOperand(0).getReg());
199 if(MI->getOperand(MI->getNumOperands()-1).isImm())
200 DecodePSHUFMask(MVT::v4i32,
201 MI->getOperand(MI->getNumOperands()-1).getImm(),
204 case X86::VPSHUFDYri:
205 Src1Name = getRegName(MI->getOperand(1).getReg());
207 case X86::VPSHUFDYmi:
208 DestName = getRegName(MI->getOperand(0).getReg());
209 if(MI->getOperand(MI->getNumOperands()-1).isImm())
210 DecodePSHUFMask(MVT::v8i32,
211 MI->getOperand(MI->getNumOperands()-1).getImm(),
217 case X86::VPSHUFHWri:
218 Src1Name = getRegName(MI->getOperand(1).getReg());
221 case X86::VPSHUFHWmi:
222 DestName = getRegName(MI->getOperand(0).getReg());
223 if(MI->getOperand(MI->getNumOperands()-1).isImm())
224 DecodePSHUFHWMask(MVT::v8i16,
225 MI->getOperand(MI->getNumOperands()-1).getImm(),
228 case X86::VPSHUFHWYri:
229 Src1Name = getRegName(MI->getOperand(1).getReg());
231 case X86::VPSHUFHWYmi:
232 DestName = getRegName(MI->getOperand(0).getReg());
233 if(MI->getOperand(MI->getNumOperands()-1).isImm())
234 DecodePSHUFHWMask(MVT::v16i16,
235 MI->getOperand(MI->getNumOperands()-1).getImm(),
239 case X86::VPSHUFLWri:
240 Src1Name = getRegName(MI->getOperand(1).getReg());
243 case X86::VPSHUFLWmi:
244 DestName = getRegName(MI->getOperand(0).getReg());
245 if(MI->getOperand(MI->getNumOperands()-1).isImm())
246 DecodePSHUFLWMask(MVT::v8i16,
247 MI->getOperand(MI->getNumOperands()-1).getImm(),
250 case X86::VPSHUFLWYri:
251 Src1Name = getRegName(MI->getOperand(1).getReg());
253 case X86::VPSHUFLWYmi:
254 DestName = getRegName(MI->getOperand(0).getReg());
255 if(MI->getOperand(MI->getNumOperands()-1).isImm())
256 DecodePSHUFLWMask(MVT::v16i16,
257 MI->getOperand(MI->getNumOperands()-1).getImm(),
261 case X86::PUNPCKHBWrr:
262 case X86::VPUNPCKHBWrr:
263 Src2Name = getRegName(MI->getOperand(2).getReg());
265 case X86::PUNPCKHBWrm:
266 case X86::VPUNPCKHBWrm:
267 Src1Name = getRegName(MI->getOperand(1).getReg());
268 DestName = getRegName(MI->getOperand(0).getReg());
269 DecodeUNPCKHMask(MVT::v16i8, ShuffleMask);
271 case X86::VPUNPCKHBWYrr:
272 Src2Name = getRegName(MI->getOperand(2).getReg());
274 case X86::VPUNPCKHBWYrm:
275 Src1Name = getRegName(MI->getOperand(1).getReg());
276 DestName = getRegName(MI->getOperand(0).getReg());
277 DecodeUNPCKHMask(MVT::v32i8, ShuffleMask);
279 case X86::PUNPCKHWDrr:
280 case X86::VPUNPCKHWDrr:
281 Src2Name = getRegName(MI->getOperand(2).getReg());
283 case X86::PUNPCKHWDrm:
284 case X86::VPUNPCKHWDrm:
285 Src1Name = getRegName(MI->getOperand(1).getReg());
286 DestName = getRegName(MI->getOperand(0).getReg());
287 DecodeUNPCKHMask(MVT::v8i16, ShuffleMask);
289 case X86::VPUNPCKHWDYrr:
290 Src2Name = getRegName(MI->getOperand(2).getReg());
292 case X86::VPUNPCKHWDYrm:
293 Src1Name = getRegName(MI->getOperand(1).getReg());
294 DestName = getRegName(MI->getOperand(0).getReg());
295 DecodeUNPCKHMask(MVT::v16i16, ShuffleMask);
297 case X86::PUNPCKHDQrr:
298 case X86::VPUNPCKHDQrr:
299 Src2Name = getRegName(MI->getOperand(2).getReg());
301 case X86::PUNPCKHDQrm:
302 case X86::VPUNPCKHDQrm:
303 Src1Name = getRegName(MI->getOperand(1).getReg());
304 DestName = getRegName(MI->getOperand(0).getReg());
305 DecodeUNPCKHMask(MVT::v4i32, ShuffleMask);
307 case X86::VPUNPCKHDQYrr:
308 Src2Name = getRegName(MI->getOperand(2).getReg());
310 case X86::VPUNPCKHDQYrm:
311 Src1Name = getRegName(MI->getOperand(1).getReg());
312 DestName = getRegName(MI->getOperand(0).getReg());
313 DecodeUNPCKHMask(MVT::v8i32, ShuffleMask);
315 case X86::PUNPCKHQDQrr:
316 case X86::VPUNPCKHQDQrr:
317 Src2Name = getRegName(MI->getOperand(2).getReg());
319 case X86::PUNPCKHQDQrm:
320 case X86::VPUNPCKHQDQrm:
321 Src1Name = getRegName(MI->getOperand(1).getReg());
322 DestName = getRegName(MI->getOperand(0).getReg());
323 DecodeUNPCKHMask(MVT::v2i64, ShuffleMask);
325 case X86::VPUNPCKHQDQYrr:
326 Src2Name = getRegName(MI->getOperand(2).getReg());
328 case X86::VPUNPCKHQDQYrm:
329 Src1Name = getRegName(MI->getOperand(1).getReg());
330 DestName = getRegName(MI->getOperand(0).getReg());
331 DecodeUNPCKHMask(MVT::v4i64, ShuffleMask);
334 case X86::PUNPCKLBWrr:
335 case X86::VPUNPCKLBWrr:
336 Src2Name = getRegName(MI->getOperand(2).getReg());
338 case X86::PUNPCKLBWrm:
339 case X86::VPUNPCKLBWrm:
340 Src1Name = getRegName(MI->getOperand(1).getReg());
341 DestName = getRegName(MI->getOperand(0).getReg());
342 DecodeUNPCKLMask(MVT::v16i8, ShuffleMask);
344 case X86::VPUNPCKLBWYrr:
345 Src2Name = getRegName(MI->getOperand(2).getReg());
347 case X86::VPUNPCKLBWYrm:
348 Src1Name = getRegName(MI->getOperand(1).getReg());
349 DestName = getRegName(MI->getOperand(0).getReg());
350 DecodeUNPCKLMask(MVT::v32i8, ShuffleMask);
352 case X86::PUNPCKLWDrr:
353 case X86::VPUNPCKLWDrr:
354 Src2Name = getRegName(MI->getOperand(2).getReg());
356 case X86::PUNPCKLWDrm:
357 case X86::VPUNPCKLWDrm:
358 Src1Name = getRegName(MI->getOperand(1).getReg());
359 DestName = getRegName(MI->getOperand(0).getReg());
360 DecodeUNPCKLMask(MVT::v8i16, ShuffleMask);
362 case X86::VPUNPCKLWDYrr:
363 Src2Name = getRegName(MI->getOperand(2).getReg());
365 case X86::VPUNPCKLWDYrm:
366 Src1Name = getRegName(MI->getOperand(1).getReg());
367 DestName = getRegName(MI->getOperand(0).getReg());
368 DecodeUNPCKLMask(MVT::v16i16, ShuffleMask);
370 case X86::PUNPCKLDQrr:
371 case X86::VPUNPCKLDQrr:
372 Src2Name = getRegName(MI->getOperand(2).getReg());
374 case X86::PUNPCKLDQrm:
375 case X86::VPUNPCKLDQrm:
376 Src1Name = getRegName(MI->getOperand(1).getReg());
377 DestName = getRegName(MI->getOperand(0).getReg());
378 DecodeUNPCKLMask(MVT::v4i32, ShuffleMask);
380 case X86::VPUNPCKLDQYrr:
381 Src2Name = getRegName(MI->getOperand(2).getReg());
383 case X86::VPUNPCKLDQYrm:
384 Src1Name = getRegName(MI->getOperand(1).getReg());
385 DestName = getRegName(MI->getOperand(0).getReg());
386 DecodeUNPCKLMask(MVT::v8i32, ShuffleMask);
388 case X86::PUNPCKLQDQrr:
389 case X86::VPUNPCKLQDQrr:
390 Src2Name = getRegName(MI->getOperand(2).getReg());
392 case X86::PUNPCKLQDQrm:
393 case X86::VPUNPCKLQDQrm:
394 Src1Name = getRegName(MI->getOperand(1).getReg());
395 DestName = getRegName(MI->getOperand(0).getReg());
396 DecodeUNPCKLMask(MVT::v2i64, ShuffleMask);
398 case X86::VPUNPCKLQDQYrr:
399 Src2Name = getRegName(MI->getOperand(2).getReg());
401 case X86::VPUNPCKLQDQYrm:
402 Src1Name = getRegName(MI->getOperand(1).getReg());
403 DestName = getRegName(MI->getOperand(0).getReg());
404 DecodeUNPCKLMask(MVT::v4i64, ShuffleMask);
408 case X86::VSHUFPDrri:
409 Src2Name = getRegName(MI->getOperand(2).getReg());
412 case X86::VSHUFPDrmi:
413 if(MI->getOperand(MI->getNumOperands()-1).isImm())
414 DecodeSHUFPMask(MVT::v2f64,
415 MI->getOperand(MI->getNumOperands()-1).getImm(),
417 Src1Name = getRegName(MI->getOperand(1).getReg());
418 DestName = getRegName(MI->getOperand(0).getReg());
420 case X86::VSHUFPDYrri:
421 Src2Name = getRegName(MI->getOperand(2).getReg());
423 case X86::VSHUFPDYrmi:
424 if(MI->getOperand(MI->getNumOperands()-1).isImm())
425 DecodeSHUFPMask(MVT::v4f64,
426 MI->getOperand(MI->getNumOperands()-1).getImm(),
428 Src1Name = getRegName(MI->getOperand(1).getReg());
429 DestName = getRegName(MI->getOperand(0).getReg());
433 case X86::VSHUFPSrri:
434 Src2Name = getRegName(MI->getOperand(2).getReg());
437 case X86::VSHUFPSrmi:
438 if(MI->getOperand(MI->getNumOperands()-1).isImm())
439 DecodeSHUFPMask(MVT::v4f32,
440 MI->getOperand(MI->getNumOperands()-1).getImm(),
442 Src1Name = getRegName(MI->getOperand(1).getReg());
443 DestName = getRegName(MI->getOperand(0).getReg());
445 case X86::VSHUFPSYrri:
446 Src2Name = getRegName(MI->getOperand(2).getReg());
448 case X86::VSHUFPSYrmi:
449 if(MI->getOperand(MI->getNumOperands()-1).isImm())
450 DecodeSHUFPMask(MVT::v8f32,
451 MI->getOperand(MI->getNumOperands()-1).getImm(),
453 Src1Name = getRegName(MI->getOperand(1).getReg());
454 DestName = getRegName(MI->getOperand(0).getReg());
457 case X86::UNPCKLPDrr:
458 case X86::VUNPCKLPDrr:
459 Src2Name = getRegName(MI->getOperand(2).getReg());
461 case X86::UNPCKLPDrm:
462 case X86::VUNPCKLPDrm:
463 DecodeUNPCKLMask(MVT::v2f64, ShuffleMask);
464 Src1Name = getRegName(MI->getOperand(1).getReg());
465 DestName = getRegName(MI->getOperand(0).getReg());
467 case X86::VUNPCKLPDYrr:
468 Src2Name = getRegName(MI->getOperand(2).getReg());
470 case X86::VUNPCKLPDYrm:
471 DecodeUNPCKLMask(MVT::v4f64, ShuffleMask);
472 Src1Name = getRegName(MI->getOperand(1).getReg());
473 DestName = getRegName(MI->getOperand(0).getReg());
475 case X86::UNPCKLPSrr:
476 case X86::VUNPCKLPSrr:
477 Src2Name = getRegName(MI->getOperand(2).getReg());
479 case X86::UNPCKLPSrm:
480 case X86::VUNPCKLPSrm:
481 DecodeUNPCKLMask(MVT::v4f32, ShuffleMask);
482 Src1Name = getRegName(MI->getOperand(1).getReg());
483 DestName = getRegName(MI->getOperand(0).getReg());
485 case X86::VUNPCKLPSYrr:
486 Src2Name = getRegName(MI->getOperand(2).getReg());
488 case X86::VUNPCKLPSYrm:
489 DecodeUNPCKLMask(MVT::v8f32, ShuffleMask);
490 Src1Name = getRegName(MI->getOperand(1).getReg());
491 DestName = getRegName(MI->getOperand(0).getReg());
493 case X86::UNPCKHPDrr:
494 case X86::VUNPCKHPDrr:
495 Src2Name = getRegName(MI->getOperand(2).getReg());
497 case X86::UNPCKHPDrm:
498 case X86::VUNPCKHPDrm:
499 DecodeUNPCKHMask(MVT::v2f64, ShuffleMask);
500 Src1Name = getRegName(MI->getOperand(1).getReg());
501 DestName = getRegName(MI->getOperand(0).getReg());
503 case X86::VUNPCKHPDYrr:
504 Src2Name = getRegName(MI->getOperand(2).getReg());
506 case X86::VUNPCKHPDYrm:
507 DecodeUNPCKHMask(MVT::v4f64, ShuffleMask);
508 Src1Name = getRegName(MI->getOperand(1).getReg());
509 DestName = getRegName(MI->getOperand(0).getReg());
511 case X86::UNPCKHPSrr:
512 case X86::VUNPCKHPSrr:
513 Src2Name = getRegName(MI->getOperand(2).getReg());
515 case X86::UNPCKHPSrm:
516 case X86::VUNPCKHPSrm:
517 DecodeUNPCKHMask(MVT::v4f32, ShuffleMask);
518 Src1Name = getRegName(MI->getOperand(1).getReg());
519 DestName = getRegName(MI->getOperand(0).getReg());
521 case X86::VUNPCKHPSYrr:
522 Src2Name = getRegName(MI->getOperand(2).getReg());
524 case X86::VUNPCKHPSYrm:
525 DecodeUNPCKHMask(MVT::v8f32, ShuffleMask);
526 Src1Name = getRegName(MI->getOperand(1).getReg());
527 DestName = getRegName(MI->getOperand(0).getReg());
529 case X86::VPERMILPSri:
530 Src1Name = getRegName(MI->getOperand(1).getReg());
532 case X86::VPERMILPSmi:
533 if(MI->getOperand(MI->getNumOperands()-1).isImm())
534 DecodePSHUFMask(MVT::v4f32,
535 MI->getOperand(MI->getNumOperands()-1).getImm(),
537 DestName = getRegName(MI->getOperand(0).getReg());
539 case X86::VPERMILPSYri:
540 Src1Name = getRegName(MI->getOperand(1).getReg());
542 case X86::VPERMILPSYmi:
543 if(MI->getOperand(MI->getNumOperands()-1).isImm())
544 DecodePSHUFMask(MVT::v8f32,
545 MI->getOperand(MI->getNumOperands()-1).getImm(),
547 DestName = getRegName(MI->getOperand(0).getReg());
549 case X86::VPERMILPDri:
550 Src1Name = getRegName(MI->getOperand(1).getReg());
552 case X86::VPERMILPDmi:
553 if(MI->getOperand(MI->getNumOperands()-1).isImm())
554 DecodePSHUFMask(MVT::v2f64,
555 MI->getOperand(MI->getNumOperands()-1).getImm(),
557 DestName = getRegName(MI->getOperand(0).getReg());
559 case X86::VPERMILPDYri:
560 Src1Name = getRegName(MI->getOperand(1).getReg());
562 case X86::VPERMILPDYmi:
563 if(MI->getOperand(MI->getNumOperands()-1).isImm())
564 DecodePSHUFMask(MVT::v4f64,
565 MI->getOperand(MI->getNumOperands()-1).getImm(),
567 DestName = getRegName(MI->getOperand(0).getReg());
569 case X86::VPERM2F128rr:
570 case X86::VPERM2I128rr:
571 Src2Name = getRegName(MI->getOperand(2).getReg());
573 case X86::VPERM2F128rm:
574 case X86::VPERM2I128rm:
575 // For instruction comments purpose, assume the 256-bit vector is v4i64.
576 if(MI->getOperand(MI->getNumOperands()-1).isImm())
577 DecodeVPERM2X128Mask(MVT::v4i64,
578 MI->getOperand(MI->getNumOperands()-1).getImm(),
580 Src1Name = getRegName(MI->getOperand(1).getReg());
581 DestName = getRegName(MI->getOperand(0).getReg());
584 case X86::VPERMPDYri:
585 Src1Name = getRegName(MI->getOperand(1).getReg());
588 case X86::VPERMPDYmi:
589 if(MI->getOperand(MI->getNumOperands()-1).isImm())
590 DecodeVPERMMask(MI->getOperand(MI->getNumOperands()-1).getImm(),
592 DestName = getRegName(MI->getOperand(0).getReg());
596 // The only comments we decode are shuffles, so give up if we were unable to
597 // decode a shuffle mask.
598 if (ShuffleMask.empty())
601 if (!DestName) DestName = Src1Name;
602 OS << (DestName ? DestName : "mem") << " = ";
604 // If the two sources are the same, canonicalize the input elements to be
605 // from the first src so that we get larger element spans.
606 if (Src1Name == Src2Name) {
607 for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
608 if ((int)ShuffleMask[i] >= 0 && // Not sentinel.
609 ShuffleMask[i] >= (int)e) // From second mask.
614 // The shuffle mask specifies which elements of the src1/src2 fill in the
615 // destination, with a few sentinel values. Loop through and print them
617 for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) {
620 if (ShuffleMask[i] == SM_SentinelZero) {
625 // Otherwise, it must come from src1 or src2. Print the span of elements
626 // that comes from this src.
627 bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size();
628 const char *SrcName = isSrc1 ? Src1Name : Src2Name;
629 OS << (SrcName ? SrcName : "mem") << '[';
632 (int)ShuffleMask[i] >= 0 &&
633 (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) {
638 OS << ShuffleMask[i] % ShuffleMask.size();
642 --i; // For loop increments element #.
647 // We successfully added a comment to this instruction.