25#define CASE_SSE_INS_COMMON(Inst, src) \
28#define CASE_AVX_INS_COMMON(Inst, Suffix, src) \
29 case X86::V##Inst##Suffix##src:
31#define CASE_MASK_INS_COMMON(Inst, Suffix, src) \
32 case X86::V##Inst##Suffix##src##k:
34#define CASE_MASKZ_INS_COMMON(Inst, Suffix, src) \
35 case X86::V##Inst##Suffix##src##kz:
37#define CASE_AVX512_INS_COMMON(Inst, Suffix, src) \
38 CASE_AVX_INS_COMMON(Inst, Suffix, src) \
39 CASE_MASK_INS_COMMON(Inst, Suffix, src) \
40 CASE_MASKZ_INS_COMMON(Inst, Suffix, src)
42#define CASE_MOVDUP(Inst, src) \
43 CASE_AVX512_INS_COMMON(Inst, Z, r##src) \
44 CASE_AVX512_INS_COMMON(Inst, Z256, r##src) \
45 CASE_AVX512_INS_COMMON(Inst, Z128, r##src) \
46 CASE_AVX_INS_COMMON(Inst, , r##src) \
47 CASE_AVX_INS_COMMON(Inst, Y, r##src) \
48 CASE_SSE_INS_COMMON(Inst, r##src)
50#define CASE_MASK_MOVDUP(Inst, src) \
51 CASE_MASK_INS_COMMON(Inst, Z, r##src) \
52 CASE_MASK_INS_COMMON(Inst, Z256, r##src) \
53 CASE_MASK_INS_COMMON(Inst, Z128, r##src)
55#define CASE_MASKZ_MOVDUP(Inst, src) \
56 CASE_MASKZ_INS_COMMON(Inst, Z, r##src) \
57 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src) \
58 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
60#define CASE_PMOVZX(Inst, src) \
61 CASE_AVX512_INS_COMMON(Inst, Z, r##src) \
62 CASE_AVX512_INS_COMMON(Inst, Z256, r##src) \
63 CASE_AVX512_INS_COMMON(Inst, Z128, r##src) \
64 CASE_AVX_INS_COMMON(Inst, , r##src) \
65 CASE_AVX_INS_COMMON(Inst, Y, r##src) \
66 CASE_SSE_INS_COMMON(Inst, r##src)
68#define CASE_MASK_PMOVZX(Inst, src) \
69 CASE_MASK_INS_COMMON(Inst, Z, r##src) \
70 CASE_MASK_INS_COMMON(Inst, Z256, r##src) \
71 CASE_MASK_INS_COMMON(Inst, Z128, r##src)
73#define CASE_MASKZ_PMOVZX(Inst, src) \
74 CASE_MASKZ_INS_COMMON(Inst, Z, r##src) \
75 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src) \
76 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
78#define CASE_UNPCK(Inst, src) \
79 CASE_AVX512_INS_COMMON(Inst, Z, r##src) \
80 CASE_AVX512_INS_COMMON(Inst, Z256, r##src) \
81 CASE_AVX512_INS_COMMON(Inst, Z128, r##src) \
82 CASE_AVX_INS_COMMON(Inst, , r##src) \
83 CASE_AVX_INS_COMMON(Inst, Y, r##src) \
84 CASE_SSE_INS_COMMON(Inst, r##src)
86#define CASE_MASK_UNPCK(Inst, src) \
87 CASE_MASK_INS_COMMON(Inst, Z, r##src) \
88 CASE_MASK_INS_COMMON(Inst, Z256, r##src) \
89 CASE_MASK_INS_COMMON(Inst, Z128, r##src)
91#define CASE_MASKZ_UNPCK(Inst, src) \
92 CASE_MASKZ_INS_COMMON(Inst, Z, r##src) \
93 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src) \
94 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src)
96#define CASE_SHUF(Inst, suf) \
97 CASE_AVX512_INS_COMMON(Inst, Z, suf) \
98 CASE_AVX512_INS_COMMON(Inst, Z256, suf) \
99 CASE_AVX512_INS_COMMON(Inst, Z128, suf) \
100 CASE_AVX_INS_COMMON(Inst, , suf) \
101 CASE_AVX_INS_COMMON(Inst, Y, suf) \
102 CASE_SSE_INS_COMMON(Inst, suf)
104#define CASE_MASK_SHUF(Inst, src) \
105 CASE_MASK_INS_COMMON(Inst, Z, r##src##i) \
106 CASE_MASK_INS_COMMON(Inst, Z256, r##src##i) \
107 CASE_MASK_INS_COMMON(Inst, Z128, r##src##i)
109#define CASE_MASKZ_SHUF(Inst, src) \
110 CASE_MASKZ_INS_COMMON(Inst, Z, r##src##i) \
111 CASE_MASKZ_INS_COMMON(Inst, Z256, r##src##i) \
112 CASE_MASKZ_INS_COMMON(Inst, Z128, r##src##i)
114#define CASE_VPERMILPI(Inst, src) \
115 CASE_AVX512_INS_COMMON(Inst, Z, src##i) \
116 CASE_AVX512_INS_COMMON(Inst, Z256, src##i) \
117 CASE_AVX512_INS_COMMON(Inst, Z128, src##i) \
118 CASE_AVX_INS_COMMON(Inst, , src##i) \
119 CASE_AVX_INS_COMMON(Inst, Y, src##i)
121#define CASE_MASK_VPERMILPI(Inst, src) \
122 CASE_MASK_INS_COMMON(Inst, Z, src##i) \
123 CASE_MASK_INS_COMMON(Inst, Z256, src##i) \
124 CASE_MASK_INS_COMMON(Inst, Z128, src##i)
126#define CASE_MASKZ_VPERMILPI(Inst, src) \
127 CASE_MASKZ_INS_COMMON(Inst, Z, src##i) \
128 CASE_MASKZ_INS_COMMON(Inst, Z256, src##i) \
129 CASE_MASKZ_INS_COMMON(Inst, Z128, src##i)
131#define CASE_VPERM(Inst, src) \
132 CASE_AVX512_INS_COMMON(Inst, Z, src##i) \
133 CASE_AVX512_INS_COMMON(Inst, Z256, src##i) \
134 CASE_AVX_INS_COMMON(Inst, Y, src##i)
136#define CASE_MASK_VPERM(Inst, src) \
137 CASE_MASK_INS_COMMON(Inst, Z, src##i) \
138 CASE_MASK_INS_COMMON(Inst, Z256, src##i)
140#define CASE_MASKZ_VPERM(Inst, src) \
141 CASE_MASKZ_INS_COMMON(Inst, Z, src##i) \
142 CASE_MASKZ_INS_COMMON(Inst, Z256, src##i)
144#define CASE_VSHUF(Inst, src) \
145 CASE_AVX512_INS_COMMON(SHUFF##Inst, Z, r##src##i) \
146 CASE_AVX512_INS_COMMON(SHUFI##Inst, Z, r##src##i) \
147 CASE_AVX512_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
148 CASE_AVX512_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
150#define CASE_MASK_VSHUF(Inst, src) \
151 CASE_MASK_INS_COMMON(SHUFF##Inst, Z, r##src##i) \
152 CASE_MASK_INS_COMMON(SHUFI##Inst, Z, r##src##i) \
153 CASE_MASK_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
154 CASE_MASK_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
156#define CASE_MASKZ_VSHUF(Inst, src) \
157 CASE_MASKZ_INS_COMMON(SHUFF##Inst, Z, r##src##i) \
158 CASE_MASKZ_INS_COMMON(SHUFI##Inst, Z, r##src##i) \
159 CASE_MASKZ_INS_COMMON(SHUFF##Inst, Z256, r##src##i) \
160 CASE_MASKZ_INS_COMMON(SHUFI##Inst, Z256, r##src##i)
162#define CASE_AVX512_FMA(Inst, suf) \
163 CASE_AVX512_INS_COMMON(Inst, Z, suf) \
164 CASE_AVX512_INS_COMMON(Inst, Z256, suf) \
165 CASE_AVX512_INS_COMMON(Inst, Z128, suf)
167#define CASE_FMA(Inst, suf) \
168 CASE_AVX512_FMA(Inst, suf) \
169 CASE_AVX_INS_COMMON(Inst, , suf) \
170 CASE_AVX_INS_COMMON(Inst, Y, suf)
172#define CASE_FMA_PACKED_REG(Inst) \
173 CASE_FMA(Inst##PD, r) \
174 CASE_FMA(Inst##PS, r)
176#define CASE_FMA_PACKED_MEM(Inst) \
177 CASE_FMA(Inst##PD, m) \
178 CASE_FMA(Inst##PS, m) \
179 CASE_AVX512_FMA(Inst##PD, mb) \
180 CASE_AVX512_FMA(Inst##PS, mb)
182#define CASE_FMA_SCALAR_REG(Inst) \
183 CASE_AVX_INS_COMMON(Inst##SD, , r) \
184 CASE_AVX_INS_COMMON(Inst##SS, , r) \
185 CASE_AVX_INS_COMMON(Inst##SD, , r_Int) \
186 CASE_AVX_INS_COMMON(Inst##SS, , r_Int) \
187 CASE_AVX_INS_COMMON(Inst##SD, Z, r) \
188 CASE_AVX_INS_COMMON(Inst##SS, Z, r) \
189 CASE_AVX512_INS_COMMON(Inst##SD, Z, r_Int) \
190 CASE_AVX512_INS_COMMON(Inst##SS, Z, r_Int)
192#define CASE_FMA_SCALAR_MEM(Inst) \
193 CASE_AVX_INS_COMMON(Inst##SD, , m) \
194 CASE_AVX_INS_COMMON(Inst##SS, , m) \
195 CASE_AVX_INS_COMMON(Inst##SD, , m_Int) \
196 CASE_AVX_INS_COMMON(Inst##SS, , m_Int) \
197 CASE_AVX_INS_COMMON(Inst##SD, Z, m) \
198 CASE_AVX_INS_COMMON(Inst##SS, Z, m) \
199 CASE_AVX512_INS_COMMON(Inst##SD, Z, m_Int) \
200 CASE_AVX512_INS_COMMON(Inst##SS, Z, m_Int)
202#define CASE_FMA4(Inst, suf) \
203 CASE_AVX_INS_COMMON(Inst, 4, suf) \
204 CASE_AVX_INS_COMMON(Inst, 4Y, suf)
206#define CASE_FMA4_PACKED_RR(Inst) \
207 CASE_FMA4(Inst##PD, rr) \
208 CASE_FMA4(Inst##PS, rr)
210#define CASE_FMA4_PACKED_RM(Inst) \
211 CASE_FMA4(Inst##PD, rm) \
212 CASE_FMA4(Inst##PS, rm)
214#define CASE_FMA4_PACKED_MR(Inst) \
215 CASE_FMA4(Inst##PD, mr) \
216 CASE_FMA4(Inst##PS, mr)
218#define CASE_FMA4_SCALAR_RR(Inst) \
219 CASE_AVX_INS_COMMON(Inst##SD4, , rr) \
220 CASE_AVX_INS_COMMON(Inst##SS4, , rr) \
221 CASE_AVX_INS_COMMON(Inst##SD4, , rr_Int) \
222 CASE_AVX_INS_COMMON(Inst##SS4, , rr_Int)
224#define CASE_FMA4_SCALAR_RM(Inst) \
225 CASE_AVX_INS_COMMON(Inst##SD4, , rm) \
226 CASE_AVX_INS_COMMON(Inst##SS4, , rm) \
227 CASE_AVX_INS_COMMON(Inst##SD4, , rm_Int) \
228 CASE_AVX_INS_COMMON(Inst##SS4, , rm_Int)
230#define CASE_FMA4_SCALAR_MR(Inst) \
231 CASE_AVX_INS_COMMON(Inst##SD4, , mr) \
232 CASE_AVX_INS_COMMON(Inst##SS4, , mr) \
233 CASE_AVX_INS_COMMON(Inst##SD4, , mr_Int) \
234 CASE_AVX_INS_COMMON(Inst##SS4, , mr_Int)
237 if (X86::ZMM0 <= RegNo && RegNo <= X86::ZMM31)
239 if (X86::YMM0 <= RegNo && RegNo <= X86::YMM31)
241 if (X86::XMM0 <= RegNo && RegNo <= X86::XMM31)
243 if (X86::MM0 <= RegNo && RegNo <= X86::MM7)
250 unsigned OperandIndex) {
251 unsigned OpReg =
MI->getOperand(OperandIndex).getReg();
274 const char *MaskRegName =
getRegName(
MI->getOperand(MaskOp).getReg());
277 OS <<
" {%" << MaskRegName <<
"}";
286 const char *Mul1Name =
nullptr, *Mul2Name =
nullptr, *AccName =
nullptr;
287 unsigned NumOperands =
MI->getNumOperands();
288 bool RegForm =
false;
306 switch (
MI->getOpcode()) {
312 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
321 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
327 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
337 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
344 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
354 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
361 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
372 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
379 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
387 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
393 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
401 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
408 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
413 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
419 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
424 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
430 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
435 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
441 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
446 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
453 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
458 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
465 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
470 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
477 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
482 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
489 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
494 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
501 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
506 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
513 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
518 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
526 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
531 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
539 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
544 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
551 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
555 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
561 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
565 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
571 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
575 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
581 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
585 AccName =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
591 AccName =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
595 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
601 Mul2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
605 Mul1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
611 const char *DestName =
getRegName(
MI->getOperand(0).getReg());
613 if (!Mul1Name) Mul1Name =
"mem";
614 if (!Mul2Name) Mul2Name =
"mem";
615 if (!AccName) AccName =
"mem";
624 OS <<
'(' << Mul1Name <<
" * " << Mul2Name <<
") " << AccStr <<
' '
642 const char *DestName =
nullptr, *Src1Name =
nullptr, *Src2Name =
nullptr;
643 unsigned NumOperands =
MI->getNumOperands();
644 bool RegForm =
false;
649 switch (
MI->getOpcode()) {
654 case X86::BLENDPDrri:
655 case X86::VBLENDPDrri:
656 case X86::VBLENDPDYrri:
659 case X86::BLENDPDrmi:
660 case X86::VBLENDPDrmi:
661 case X86::VBLENDPDYrmi:
662 if (
MI->getOperand(NumOperands - 1).isImm())
664 MI->getOperand(NumOperands - 1).getImm(),
670 case X86::BLENDPSrri:
671 case X86::VBLENDPSrri:
672 case X86::VBLENDPSYrri:
675 case X86::BLENDPSrmi:
676 case X86::VBLENDPSrmi:
677 case X86::VBLENDPSYrmi:
678 if (
MI->getOperand(NumOperands - 1).isImm())
680 MI->getOperand(NumOperands - 1).getImm(),
686 case X86::PBLENDWrri:
687 case X86::VPBLENDWrri:
688 case X86::VPBLENDWYrri:
691 case X86::PBLENDWrmi:
692 case X86::VPBLENDWrmi:
693 case X86::VPBLENDWYrmi:
694 if (
MI->getOperand(NumOperands - 1).isImm())
696 MI->getOperand(NumOperands - 1).getImm(),
702 case X86::VPBLENDDrri:
703 case X86::VPBLENDDYrri:
706 case X86::VPBLENDDrmi:
707 case X86::VPBLENDDYrmi:
708 if (
MI->getOperand(NumOperands - 1).isImm())
710 MI->getOperand(NumOperands - 1).getImm(),
716 case X86::INSERTPSrr:
717 case X86::VINSERTPSrr:
718 case X86::VINSERTPSZrr:
721 case X86::INSERTPSrm:
722 case X86::VINSERTPSrm:
723 case X86::VINSERTPSZrm:
726 if (
MI->getOperand(NumOperands - 1).isImm())
732 case X86::VMOVLHPSrr:
733 case X86::VMOVLHPSZrr:
741 case X86::VMOVHLPSrr:
742 case X86::VMOVHLPSZrr:
751 case X86::VMOVHPDZ128rm:
759 case X86::VMOVHPSZ128rm:
767 case X86::VMOVLPDZ128rm:
775 case X86::VMOVLPSZ128rm:
782 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
791 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
800 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
810 case X86::VPSLLDQYri:
811 case X86::VPSLLDQZ128ri:
812 case X86::VPSLLDQZ256ri:
813 case X86::VPSLLDQZri:
816 case X86::VPSLLDQZ128mi:
817 case X86::VPSLLDQZ256mi:
818 case X86::VPSLLDQZmi:
820 if (
MI->getOperand(NumOperands - 1).isImm())
822 MI->getOperand(NumOperands - 1).getImm(),
828 case X86::VPSRLDQYri:
829 case X86::VPSRLDQZ128ri:
830 case X86::VPSRLDQZ256ri:
831 case X86::VPSRLDQZri:
834 case X86::VPSRLDQZ128mi:
835 case X86::VPSRLDQZ256mi:
836 case X86::VPSRLDQZmi:
838 if (
MI->getOperand(NumOperands - 1).isImm())
840 MI->getOperand(NumOperands - 1).getImm(),
845 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
850 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
852 if (
MI->getOperand(NumOperands - 1).isImm())
854 MI->getOperand(NumOperands - 1).getImm(),
861 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
868 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
870 if (
MI->getOperand(NumOperands - 1).isImm())
872 MI->getOperand(NumOperands - 1).getImm(),
879 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
886 Src2Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
888 if (
MI->getOperand(NumOperands - 1).isImm())
890 MI->getOperand(NumOperands - 1).getImm(),
895 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
900 if (
MI->getOperand(NumOperands - 1).isImm())
902 MI->getOperand(NumOperands - 1).getImm(),
907 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
912 if (
MI->getOperand(NumOperands - 1).isImm())
914 MI->getOperand(NumOperands - 1).getImm(),
919 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
924 if (
MI->getOperand(NumOperands - 1).isImm())
926 MI->getOperand(NumOperands - 1).getImm(),
930 case X86::MMX_PSHUFWri:
934 case X86::MMX_PSHUFWmi:
936 if (
MI->getOperand(NumOperands - 1).isImm())
951 case X86::MMX_PUNPCKHBWrr:
952 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
957 case X86::MMX_PUNPCKHBWrm:
958 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
964 case X86::MMX_PUNPCKHWDrr:
965 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
970 case X86::MMX_PUNPCKHWDrm:
971 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
977 case X86::MMX_PUNPCKHDQrr:
978 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
983 case X86::MMX_PUNPCKHDQrm:
984 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
990 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
995 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1001 case X86::MMX_PUNPCKLBWrr:
1002 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1007 case X86::MMX_PUNPCKLBWrm:
1008 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1014 case X86::MMX_PUNPCKLWDrr:
1015 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1020 case X86::MMX_PUNPCKLWDrm:
1021 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1027 case X86::MMX_PUNPCKLDQrr:
1028 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1033 case X86::MMX_PUNPCKLDQrm:
1034 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1040 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1045 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1051 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1056 if (
MI->getOperand(NumOperands - 1).isImm())
1058 MI->getOperand(NumOperands - 1).getImm(), ShuffleMask);
1059 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1064 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1069 if (
MI->getOperand(NumOperands - 1).isImm())
1071 MI->getOperand(NumOperands - 1).getImm(),
1073 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1078 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1084 MI->getOperand(NumOperands - 1).getImm(),
1086 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1091 Src2Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1097 MI->getOperand(NumOperands - 1).getImm(),
1099 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?3:7)).getReg());
1104 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1110 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1115 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1121 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1126 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1132 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1137 Src2Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1143 Src1Name =
getRegName(
MI->getOperand(NumOperands-(RegForm?2:6)).getReg());
1148 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1152 if (
MI->getOperand(NumOperands - 1).isImm())
1154 MI->getOperand(NumOperands - 1).getImm(),
1160 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1164 if (
MI->getOperand(NumOperands - 1).isImm())
1166 MI->getOperand(NumOperands - 1).getImm(),
1171 case X86::VPERM2F128rr:
1172 case X86::VPERM2I128rr:
1176 case X86::VPERM2F128rm:
1177 case X86::VPERM2I128rm:
1179 if (
MI->getOperand(NumOperands - 1).isImm())
1187 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1191 if (
MI->getOperand(NumOperands - 1).isImm())
1193 MI->getOperand(NumOperands - 1).getImm(),
1199 Src1Name =
getRegName(
MI->getOperand(NumOperands - 2).getReg());
1203 if (
MI->getOperand(NumOperands - 1).isImm())
1205 MI->getOperand(NumOperands - 1).getImm(),
1212 case X86::VMOVSDZrr:
1217 case X86::MOVSDrm_alt:
1219 case X86::VMOVSDrm_alt:
1221 case X86::VMOVSDZrm:
1222 case X86::VMOVSDZrm_alt:
1229 case X86::VMOVSSZrr:
1235 case X86::MOVSSrm_alt:
1237 case X86::VMOVSSrm_alt:
1238 case X86::VMOVSSZrm:
1239 case X86::VMOVSSZrm_alt:
1244 case X86::MOVPQI2QIrr:
1245 case X86::MOVZPQILo2PQIrr:
1246 case X86::VMOVPQI2QIrr:
1247 case X86::VMOVPQI2QIZrr:
1248 case X86::VMOVZPQILo2PQIrr:
1249 case X86::VMOVZPQILo2PQIZrr:
1253 case X86::MOVQI2PQIrm:
1254 case X86::VMOVQI2PQIrm:
1255 case X86::VMOVQI2PQIZrm:
1260 case X86::MOVDI2PDIrm:
1261 case X86::VMOVDI2PDIrm:
1262 case X86::VMOVDI2PDIZrm:
1268 if (
MI->getOperand(2).isImm() &&
1269 MI->getOperand(3).isImm())
1271 MI->getOperand(3).getImm(), ShuffleMask);
1278 if (
MI->getOperand(3).isImm() &&
1279 MI->getOperand(4).isImm())
1281 MI->getOperand(4).getImm(), ShuffleMask);
1288 case X86::VBROADCASTF128:
1289 case X86::VBROADCASTI128:
1321 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1329 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1338 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1347 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1356 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1365 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1374 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1383 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1392 Src1Name =
getRegName(
MI->getOperand(NumOperands - 1).getReg());
1403 if (ShuffleMask.
empty())
1406 if (!DestName) DestName = Src1Name;
1417 if (Src1Name == Src2Name) {
1418 for (
unsigned i = 0, e = ShuffleMask.
size(); i != e; ++i) {
1419 if ((
int)ShuffleMask[i] >= 0 &&
1420 ShuffleMask[i] >= (
int)e)
1421 ShuffleMask[i] -= e;
1428 for (
unsigned i = 0, e = ShuffleMask.
size(); i != e; ++i) {
1438 bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.
size();
1439 const char *SrcName = isSrc1 ? Src1Name : Src2Name;
1440 OS << (SrcName ? SrcName :
"mem") <<
'[';
1441 bool IsFirst =
true;
1443 (ShuffleMask[i] < (int)ShuffleMask.
size()) == isSrc1) {
1451 OS << ShuffleMask[i] % ShuffleMask.
size();
Instances of this class represent a single low-level machine instruction.
Describe properties that are true of each instruction in the target description file.
unsigned getNumDefs() const
Return the number of MachineOperands that are register definitions.
int getOperandConstraint(unsigned OpNum, MCOI::OperandConstraint Constraint) const
Returns the value of the specified operand constraint if it is present.
Interface to description of machine instruction set.
const MCInstrDesc & get(unsigned Opcode) const
Return the machine instruction descriptor that corresponds to the specified instruction opcode.
Wrapper class representing physical registers. Should be passed by value.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
static const char * getRegisterName(MCRegister Reg)
This class implements an extremely fast bulk output stream that can only output to a stream.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
void DecodeZeroExtendMask(unsigned SrcScalarBits, unsigned DstScalarBits, unsigned NumDstElts, bool IsAnyExtend, SmallVectorImpl< int > &ShuffleMask)
Decode a zero extension instruction as a shuffle mask.
bool EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, const MCInstrInfo &MCII)
EmitAnyX86InstComments - This function decodes x86 instructions and prints newline terminated strings...
void DecodeMOVHLPSMask(unsigned NElts, SmallVectorImpl< int > &ShuffleMask)
Decode a MOVHLPS instruction as a v2f64/v4f32 shuffle mask.
void DecodeZeroMoveLowMask(unsigned NumElts, SmallVectorImpl< int > &ShuffleMask)
Decode a move lower and zero upper instruction as a shuffle mask.
void DecodeInsertElementMask(unsigned NumElts, unsigned Idx, unsigned Len, SmallVectorImpl< int > &ShuffleMask)
void DecodePSHUFLWMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decodes the shuffle masks for pshuflw.
void DecodeBLENDMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decode a BLEND immediate mask into a shuffle mask.
void decodeVSHUF64x2FamilyMask(unsigned NumElts, unsigned ScalarSize, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decode a shuffle packed values at 128-bit granularity (SHUFF32x4/SHUFF64x2/SHUFI32x4/SHUFI64x2) immed...
void DecodeVPERMMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decodes the shuffle masks for VPERMQ/VPERMPD.
void DecodeEXTRQIMask(unsigned NumElts, unsigned EltSize, int Len, int Idx, SmallVectorImpl< int > &ShuffleMask)
Decode a SSE4A EXTRQ instruction as a shuffle mask.
void DecodePSRLDQMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
void DecodeVPERM2X128Mask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
void DecodeMOVLHPSMask(unsigned NElts, SmallVectorImpl< int > &ShuffleMask)
Decode a MOVLHPS instruction as a v2f64/v4f32 shuffle mask.
void DecodePSWAPMask(unsigned NumElts, SmallVectorImpl< int > &ShuffleMask)
Decodes a PSWAPD 3DNow! instruction.
void DecodeINSERTQIMask(unsigned NumElts, unsigned EltSize, int Len, int Idx, SmallVectorImpl< int > &ShuffleMask)
Decode a SSE4A INSERTQ instruction as a shuffle mask.
void DecodeVALIGNMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
void DecodeScalarMoveMask(unsigned NumElts, bool IsLoad, SmallVectorImpl< int > &ShuffleMask)
Decode a scalar float move instruction as a shuffle mask.
void DecodePALIGNRMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
void DecodeMOVSLDUPMask(unsigned NumElts, SmallVectorImpl< int > &ShuffleMask)
void DecodeSubVectorBroadcast(unsigned DstNumElts, unsigned SrcNumElts, SmallVectorImpl< int > &ShuffleMask)
Decodes a broadcast of a subvector to a larger vector type.
void DecodeINSERTPSMask(unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decode a 128-bit INSERTPS instruction as a v4f32 shuffle mask.
void DecodeUNPCKLMask(unsigned NumElts, unsigned ScalarBits, SmallVectorImpl< int > &ShuffleMask)
Decodes the shuffle masks for unpcklps/unpcklpd and punpckl*.
void DecodePSLLDQMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
void DecodeUNPCKHMask(unsigned NumElts, unsigned ScalarBits, SmallVectorImpl< int > &ShuffleMask)
Decodes the shuffle masks for unpckhps/unpckhpd and punpckh*.
void DecodePSHUFMask(unsigned NumElts, unsigned ScalarBits, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decodes the shuffle masks for pshufd/pshufw/vpermilpd/vpermilps.
void DecodeMOVDDUPMask(unsigned NumElts, SmallVectorImpl< int > &ShuffleMask)
void DecodeSHUFPMask(unsigned NumElts, unsigned ScalarBits, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decodes the shuffle masks for shufp*.
void DecodePSHUFHWMask(unsigned NumElts, unsigned Imm, SmallVectorImpl< int > &ShuffleMask)
Decodes the shuffle masks for pshufhw.
void DecodeMOVSHDUPMask(unsigned NumElts, SmallVectorImpl< int > &ShuffleMask)