llvm.org GIT mirror llvm / b59d804
[X86][AVX512] Adding new LLVM TableGen backend which generates the EVEX2VEX compressing tables. X86EvexToVex machine instruction pass compresses EVEX encoded instructions by replacing them with their identical VEX encoded instructions when possible. It uses manually supported 2 large tables that map the EVEX instructions to their VEX ideticals. This TableGen backend replaces the tables by automatically generating them. Differential Revision: https://reviews.llvm.org/D30451 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297127 91177308-0d34-0410-b5e6-96231b3b80d8 Ayman Musa 2 years ago
9 changed file(s) with 369 addition(s) and 1194 deletion(s). Raw diff Collapse all Expand all
12121212 endif()
12131213 string(FIND ${lit_suite} Inputs is_inputs)
12141214 string(FIND ${lit_suite} Output is_output)
1215 if (NOT (is_inputs EQUAL -1 AND is_output EQUAL -1))
1215 string(FIND ${lit_suite} .svn is_svn)
1216 if (NOT (is_inputs EQUAL -1 AND is_output EQUAL -1 AND is_svn EQUAL -1))
12161217 continue()
12171218 endif()
12181219
226226 **Purpose**: This tablegen backend emits an index of definitions in ctags(1)
227227 format. A helper script, utils/TableGen/tdtags, provides an easier-to-use
228228 interface; run 'tdtags -H' for documentation.
229
230 X86EVEX2VEX
231 -----------
232
233 **Purpose**: This X86 specific tablegen backend emits tables that map EVEX
234 encoded instructions to their VEX encoded identical instruction.
229235
230236 Clang BackEnds
231237 ==============
99 tablegen(LLVM X86GenFastISel.inc -gen-fast-isel)
1010 tablegen(LLVM X86GenCallingConv.inc -gen-callingconv)
1111 tablegen(LLVM X86GenSubtargetInfo.inc -gen-subtarget)
12 tablegen(LLVM X86GenEVEX2VEXTables.inc -gen-x86-EVEX2VEX-tables)
1213 if(LLVM_BUILD_GLOBAL_ISEL)
1314 tablegen(LLVM X86GenRegisterBank.inc -gen-register-bank)
1415 tablegen(LLVM X86GenGlobalISel.inc -gen-global-isel)
2222 #include "MCTargetDesc/X86BaseInfo.h"
2323 #include "X86.h"
2424 #include "X86InstrInfo.h"
25 #include "X86InstrTablesInfo.h"
2625 #include "X86Subtarget.h"
2726 #include "llvm/ADT/DenseMap.h"
2827 #include "llvm/ADT/StringRef.h"
3736
3837 using namespace llvm;
3938
39 // Including the generated EVEX2VEX tables.
40 struct X86EvexToVexCompressTableEntry {
41 uint16_t EvexOpcode;
42 uint16_t VexOpcode;
43 };
44 #include "X86GenEVEX2VEXTables.inc"
45
4046 #define EVEX2VEX_DESC "Compressing EVEX instrs to VEX encoding when possible"
4147 #define EVEX2VEX_NAME "x86-evex-to-vex-compress"
4248
+0
-1192
lib/Target/X86/X86InstrTablesInfo.h less more
None //===-- X86InstrTablesInfo.h - X86 Instruction Tables -----------*- C++ -*-===//
1 //
2 // The LLVM Compiler Infrastructure
3 //
4 // This file is distributed under the University of Illinois Open Source
5 // License. See LICENSE.TXT for details.
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file contains related X86 Instruction Information Tables.
10 //
11 //===----------------------------------------------------------------------===//
12
13 #ifndef LLVM_LIB_TARGET_X86_X86INSTRTABLESINFO_H
14 #define LLVM_LIB_TARGET_X86_X86INSTRTABLESINFO_H
15
16 using namespace llvm;
17
18 struct X86EvexToVexCompressTableEntry {
19 uint16_t EvexOpcode;
20 uint16_t VexOpcode;
21 };
22
23
24
25 // X86 EVEX encoded instructions that have a VEX 128 encoding
26 // (table format: ).
27 static const X86EvexToVexCompressTableEntry X86EvexToVex128CompressTable[] = {
28 // EVEX scalar with corresponding VEX.
29 { X86::Int_VCOMISDZrm , X86::Int_VCOMISDrm },
30 { X86::Int_VCOMISDZrr , X86::Int_VCOMISDrr },
31 { X86::Int_VCOMISSZrm , X86::Int_VCOMISSrm },
32 { X86::Int_VCOMISSZrr , X86::Int_VCOMISSrr },
33 { X86::Int_VUCOMISDZrm , X86::Int_VUCOMISDrm },
34 { X86::Int_VUCOMISDZrr , X86::Int_VUCOMISDrr },
35 { X86::Int_VUCOMISSZrm , X86::Int_VUCOMISSrm },
36 { X86::Int_VUCOMISSZrr , X86::Int_VUCOMISSrr },
37 { X86::VADDSDZrm , X86::VADDSDrm },
38 { X86::VADDSDZrm_Int , X86::VADDSDrm_Int },
39 { X86::VADDSDZrr , X86::VADDSDrr },
40 { X86::VADDSDZrr_Int , X86::VADDSDrr_Int },
41 { X86::VADDSSZrm , X86::VADDSSrm },
42 { X86::VADDSSZrm_Int , X86::VADDSSrm_Int },
43 { X86::VADDSSZrr , X86::VADDSSrr },
44 { X86::VADDSSZrr_Int , X86::VADDSSrr_Int },
45 { X86::VCOMISDZrm , X86::VCOMISDrm },
46 { X86::VCOMISDZrr , X86::VCOMISDrr },
47 { X86::VCOMISSZrm , X86::VCOMISSrm },
48 { X86::VCOMISSZrr , X86::VCOMISSrr },
49 { X86::VCVTSD2SI64Zrr , X86::VCVTSD2SI64rr },
50 { X86::VCVTSD2SIZrr , X86::VCVTSD2SIrr },
51 { X86::VCVTSD2SSZrm , X86::VCVTSD2SSrm },
52 { X86::VCVTSD2SSZrr , X86::VCVTSD2SSrr },
53 { X86::VCVTSI2SDZrm , X86::VCVTSI2SDrm },
54 { X86::VCVTSI2SDZrm_Int , X86::Int_VCVTSI2SDrm },
55 { X86::VCVTSI2SDZrr , X86::VCVTSI2SDrr },
56 { X86::VCVTSI2SDZrr_Int , X86::Int_VCVTSI2SDrr },
57 { X86::VCVTSI2SSZrm , X86::VCVTSI2SSrm },
58 { X86::VCVTSI2SSZrm_Int , X86::Int_VCVTSI2SSrm },
59 { X86::VCVTSI2SSZrr , X86::VCVTSI2SSrr },
60 { X86::VCVTSI2SSZrr_Int , X86::Int_VCVTSI2SSrr },
61 { X86::VCVTSI642SDZrm , X86::VCVTSI2SD64rm },
62 { X86::VCVTSI642SDZrm_Int , X86::Int_VCVTSI2SD64rm },
63 { X86::VCVTSI642SDZrr , X86::VCVTSI2SD64rr },
64 { X86::VCVTSI642SDZrr_Int , X86::Int_VCVTSI2SD64rr },
65 { X86::VCVTSI642SSZrm , X86::VCVTSI2SS64rm },
66 { X86::VCVTSI642SSZrm_Int , X86::Int_VCVTSI2SS64rm },
67 { X86::VCVTSI642SSZrr , X86::VCVTSI2SS64rr },
68 { X86::VCVTSI642SSZrr_Int , X86::Int_VCVTSI2SS64rr },
69 { X86::VCVTSS2SDZrm , X86::VCVTSS2SDrm },
70 { X86::VCVTSS2SDZrr , X86::VCVTSS2SDrr },
71 { X86::VCVTSS2SI64Zrr , X86::VCVTSS2SI64rr },
72 { X86::VCVTSS2SIZrr , X86::VCVTSS2SIrr },
73 { X86::VCVTTSD2SI64Zrm , X86::VCVTTSD2SI64rm },
74 { X86::VCVTTSD2SI64Zrm_Int , X86::Int_VCVTTSD2SI64rm },
75 { X86::VCVTTSD2SI64Zrr , X86::VCVTTSD2SI64rr },
76 { X86::VCVTTSD2SI64Zrr_Int , X86::Int_VCVTTSD2SI64rr },
77 { X86::VCVTTSD2SIZrm , X86::VCVTTSD2SIrm },
78 { X86::VCVTTSD2SIZrm_Int , X86::Int_VCVTTSD2SIrm },
79 { X86::VCVTTSD2SIZrr , X86::VCVTTSD2SIrr },
80 { X86::VCVTTSD2SIZrr_Int , X86::Int_VCVTTSD2SIrr },
81 { X86::VCVTTSS2SI64Zrm , X86::VCVTTSS2SI64rm },
82 { X86::VCVTTSS2SI64Zrm_Int , X86::Int_VCVTTSS2SI64rm },
83 { X86::VCVTTSS2SI64Zrr , X86::VCVTTSS2SI64rr },
84 { X86::VCVTTSS2SI64Zrr_Int , X86::Int_VCVTTSS2SI64rr },
85 { X86::VCVTTSS2SIZrm , X86::VCVTTSS2SIrm },
86 { X86::VCVTTSS2SIZrm_Int , X86::Int_VCVTTSS2SIrm },
87 { X86::VCVTTSS2SIZrr , X86::VCVTTSS2SIrr },
88 { X86::VCVTTSS2SIZrr_Int , X86::Int_VCVTTSS2SIrr },
89 { X86::VDIVSDZrm , X86::VDIVSDrm },
90 { X86::VDIVSDZrm_Int , X86::VDIVSDrm_Int },
91 { X86::VDIVSDZrr , X86::VDIVSDrr },
92 { X86::VDIVSDZrr_Int , X86::VDIVSDrr_Int },
93 { X86::VDIVSSZrm , X86::VDIVSSrm },
94 { X86::VDIVSSZrm_Int , X86::VDIVSSrm_Int },
95 { X86::VDIVSSZrr , X86::VDIVSSrr },
96 { X86::VDIVSSZrr_Int , X86::VDIVSSrr_Int },
97 { X86::VEXTRACTPSZmr , X86::VEXTRACTPSmr },
98 { X86::VEXTRACTPSZrr , X86::VEXTRACTPSrr },
99 { X86::VFMADD132SDZm , X86::VFMADD132SDm },
100 { X86::VFMADD132SDZm_Int , X86::VFMADD132SDm_Int },
101 { X86::VFMADD132SDZr , X86::VFMADD132SDr },
102 { X86::VFMADD132SDZr_Int , X86::VFMADD132SDr_Int },
103 { X86::VFMADD132SSZm , X86::VFMADD132SSm },
104 { X86::VFMADD132SSZm_Int , X86::VFMADD132SSm_Int },
105 { X86::VFMADD132SSZr , X86::VFMADD132SSr },
106 { X86::VFMADD132SSZr_Int , X86::VFMADD132SSr_Int },
107 { X86::VFMADD213SDZm , X86::VFMADD213SDm },
108 { X86::VFMADD213SDZm_Int , X86::VFMADD213SDm_Int },
109 { X86::VFMADD213SDZr , X86::VFMADD213SDr },
110 { X86::VFMADD213SDZr_Int , X86::VFMADD213SDr_Int },
111 { X86::VFMADD213SSZm , X86::VFMADD213SSm },
112 { X86::VFMADD213SSZm_Int , X86::VFMADD213SSm_Int },
113 { X86::VFMADD213SSZr , X86::VFMADD213SSr },
114 { X86::VFMADD213SSZr_Int , X86::VFMADD213SSr_Int },
115 { X86::VFMADD231SDZm , X86::VFMADD231SDm },
116 { X86::VFMADD231SDZm_Int , X86::VFMADD231SDm_Int },
117 { X86::VFMADD231SDZr , X86::VFMADD231SDr },
118 { X86::VFMADD231SDZr_Int , X86::VFMADD231SDr_Int },
119 { X86::VFMADD231SSZm , X86::VFMADD231SSm },
120 { X86::VFMADD231SSZm_Int , X86::VFMADD231SSm_Int },
121 { X86::VFMADD231SSZr , X86::VFMADD231SSr },
122 { X86::VFMADD231SSZr_Int , X86::VFMADD231SSr_Int },
123 { X86::VFMSUB132SDZm , X86::VFMSUB132SDm },
124 { X86::VFMSUB132SDZm_Int , X86::VFMSUB132SDm_Int },
125 { X86::VFMSUB132SDZr , X86::VFMSUB132SDr },
126 { X86::VFMSUB132SDZr_Int , X86::VFMSUB132SDr_Int },
127 { X86::VFMSUB132SSZm , X86::VFMSUB132SSm },
128 { X86::VFMSUB132SSZm_Int , X86::VFMSUB132SSm_Int },
129 { X86::VFMSUB132SSZr , X86::VFMSUB132SSr },
130 { X86::VFMSUB132SSZr_Int , X86::VFMSUB132SSr_Int },
131 { X86::VFMSUB213SDZm , X86::VFMSUB213SDm },
132 { X86::VFMSUB213SDZm_Int , X86::VFMSUB213SDm_Int },
133 { X86::VFMSUB213SDZr , X86::VFMSUB213SDr },
134 { X86::VFMSUB213SDZr_Int , X86::VFMSUB213SDr_Int },
135 { X86::VFMSUB213SSZm , X86::VFMSUB213SSm },
136 { X86::VFMSUB213SSZm_Int , X86::VFMSUB213SSm_Int },
137 { X86::VFMSUB213SSZr , X86::VFMSUB213SSr },
138 { X86::VFMSUB213SSZr_Int , X86::VFMSUB213SSr_Int },
139 { X86::VFMSUB231SDZm , X86::VFMSUB231SDm },
140 { X86::VFMSUB231SDZm_Int , X86::VFMSUB231SDm_Int },
141 { X86::VFMSUB231SDZr , X86::VFMSUB231SDr },
142 { X86::VFMSUB231SDZr_Int , X86::VFMSUB231SDr_Int },
143 { X86::VFMSUB231SSZm , X86::VFMSUB231SSm },
144 { X86::VFMSUB231SSZm_Int , X86::VFMSUB231SSm_Int },
145 { X86::VFMSUB231SSZr , X86::VFMSUB231SSr },
146 { X86::VFMSUB231SSZr_Int , X86::VFMSUB231SSr_Int },
147 { X86::VFNMADD132SDZm , X86::VFNMADD132SDm },
148 { X86::VFNMADD132SDZm_Int , X86::VFNMADD132SDm_Int },
149 { X86::VFNMADD132SDZr , X86::VFNMADD132SDr },
150 { X86::VFNMADD132SDZr_Int , X86::VFNMADD132SDr_Int },
151 { X86::VFNMADD132SSZm , X86::VFNMADD132SSm },
152 { X86::VFNMADD132SSZm_Int , X86::VFNMADD132SSm_Int },
153 { X86::VFNMADD132SSZr , X86::VFNMADD132SSr },
154 { X86::VFNMADD132SSZr_Int , X86::VFNMADD132SSr_Int },
155 { X86::VFNMADD213SDZm , X86::VFNMADD213SDm },
156 { X86::VFNMADD213SDZm_Int , X86::VFNMADD213SDm_Int },
157 { X86::VFNMADD213SDZr , X86::VFNMADD213SDr },
158 { X86::VFNMADD213SDZr_Int , X86::VFNMADD213SDr_Int },
159 { X86::VFNMADD213SSZm , X86::VFNMADD213SSm },
160 { X86::VFNMADD213SSZm_Int , X86::VFNMADD213SSm_Int },
161 { X86::VFNMADD213SSZr , X86::VFNMADD213SSr },
162 { X86::VFNMADD213SSZr_Int , X86::VFNMADD213SSr_Int },
163 { X86::VFNMADD231SDZm , X86::VFNMADD231SDm },
164 { X86::VFNMADD231SDZm_Int , X86::VFNMADD231SDm_Int },
165 { X86::VFNMADD231SDZr , X86::VFNMADD231SDr },
166 { X86::VFNMADD231SDZr_Int , X86::VFNMADD231SDr_Int },
167 { X86::VFNMADD231SSZm , X86::VFNMADD231SSm },
168 { X86::VFNMADD231SSZm_Int , X86::VFNMADD231SSm_Int },
169 { X86::VFNMADD231SSZr , X86::VFNMADD231SSr },
170 { X86::VFNMADD231SSZr_Int , X86::VFNMADD231SSr_Int },
171 { X86::VFNMSUB132SDZm , X86::VFNMSUB132SDm },
172 { X86::VFNMSUB132SDZm_Int , X86::VFNMSUB132SDm_Int },
173 { X86::VFNMSUB132SDZr , X86::VFNMSUB132SDr },
174 { X86::VFNMSUB132SDZr_Int , X86::VFNMSUB132SDr_Int },
175 { X86::VFNMSUB132SSZm , X86::VFNMSUB132SSm },
176 { X86::VFNMSUB132SSZm_Int , X86::VFNMSUB132SSm_Int },
177 { X86::VFNMSUB132SSZr , X86::VFNMSUB132SSr },
178 { X86::VFNMSUB132SSZr_Int , X86::VFNMSUB132SSr_Int },
179 { X86::VFNMSUB213SDZm , X86::VFNMSUB213SDm },
180 { X86::VFNMSUB213SDZm_Int , X86::VFNMSUB213SDm_Int },
181 { X86::VFNMSUB213SDZr , X86::VFNMSUB213SDr },
182 { X86::VFNMSUB213SDZr_Int , X86::VFNMSUB213SDr_Int },
183 { X86::VFNMSUB213SSZm , X86::VFNMSUB213SSm },
184 { X86::VFNMSUB213SSZm_Int , X86::VFNMSUB213SSm_Int },
185 { X86::VFNMSUB213SSZr , X86::VFNMSUB213SSr },
186 { X86::VFNMSUB213SSZr_Int , X86::VFNMSUB213SSr_Int },
187 { X86::VFNMSUB231SDZm , X86::VFNMSUB231SDm },
188 { X86::VFNMSUB231SDZm_Int , X86::VFNMSUB231SDm_Int },
189 { X86::VFNMSUB231SDZr , X86::VFNMSUB231SDr },
190 { X86::VFNMSUB231SDZr_Int , X86::VFNMSUB231SDr_Int },
191 { X86::VFNMSUB231SSZm , X86::VFNMSUB231SSm },
192 { X86::VFNMSUB231SSZm_Int , X86::VFNMSUB231SSm_Int },
193 { X86::VFNMSUB231SSZr , X86::VFNMSUB231SSr },
194 { X86::VFNMSUB231SSZr_Int , X86::VFNMSUB231SSr_Int },
195 { X86::VINSERTPSZrm , X86::VINSERTPSrm },
196 { X86::VINSERTPSZrr , X86::VINSERTPSrr },
197 { X86::VMAXCSDZrm , X86::VMAXCSDrm },
198 { X86::VMAXCSDZrr , X86::VMAXCSDrr },
199 { X86::VMAXCSSZrm , X86::VMAXCSSrm },
200 { X86::VMAXCSSZrr , X86::VMAXCSSrr },
201 { X86::VMAXSDZrm , X86::VMAXCSDrm },
202 { X86::VMAXSDZrm_Int , X86::VMAXSDrm_Int },
203 { X86::VMAXSDZrr , X86::VMAXCSDrr },
204 { X86::VMAXSDZrr_Int , X86::VMAXSDrr_Int },
205 { X86::VMAXSSZrm , X86::VMAXCSSrm },
206 { X86::VMAXSSZrm_Int , X86::VMAXSSrm_Int },
207 { X86::VMAXSSZrr , X86::VMAXCSSrr },
208 { X86::VMAXSSZrr_Int , X86::VMAXSSrr_Int },
209 { X86::VMINCSDZrm , X86::VMINCSDrm },
210 { X86::VMINCSDZrr , X86::VMINCSDrr },
211 { X86::VMINCSSZrm , X86::VMINCSSrm },
212 { X86::VMINCSSZrr , X86::VMINCSSrr },
213 { X86::VMINSDZrm , X86::VMINCSDrm },
214 { X86::VMINSDZrm_Int , X86::VMINSDrm_Int },
215 { X86::VMINSDZrr , X86::VMINCSDrr },
216 { X86::VMINSDZrr_Int , X86::VMINSDrr_Int },
217 { X86::VMINSSZrm , X86::VMINCSSrm },
218 { X86::VMINSSZrm_Int , X86::VMINSSrm_Int },
219 { X86::VMINSSZrr , X86::VMINCSSrr },
220 { X86::VMINSSZrr_Int , X86::VMINSSrr_Int },
221 { X86::VMOV64toSDZrr , X86::VMOV64toSDrr },
222 { X86::VMOVDI2SSZrm , X86::VMOVDI2SSrm },
223 { X86::VMOVDI2SSZrr , X86::VMOVDI2SSrr },
224 { X86::VMOVSDto64Zmr , X86::VMOVSDto64mr },
225 { X86::VMOVSDto64Zrr , X86::VMOVSDto64rr },
226 { X86::VMOVSDZmr , X86::VMOVSDmr },
227 { X86::VMOVSDZrm , X86::VMOVSDrm },
228 { X86::VMOVSDZrr , X86::VMOVSDrr },
229 { X86::VMOVSDZrr_REV , X86::VMOVSDrr_REV },
230 { X86::VMOVSS2DIZmr , X86::VMOVSS2DImr },
231 { X86::VMOVSS2DIZrr , X86::VMOVSS2DIrr },
232 { X86::VMOVSSZmr , X86::VMOVSSmr },
233 { X86::VMOVSSZrm , X86::VMOVSSrm },
234 { X86::VMOVSSZrr , X86::VMOVSSrr },
235 { X86::VMOVSSZrr_REV , X86::VMOVSSrr_REV },
236 { X86::VMULSDZrm , X86::VMULSDrm },
237 { X86::VMULSDZrm_Int , X86::VMULSDrm_Int },
238 { X86::VMULSDZrr , X86::VMULSDrr },
239 { X86::VMULSDZrr_Int , X86::VMULSDrr_Int },
240 { X86::VMULSSZrm , X86::VMULSSrm },
241 { X86::VMULSSZrm_Int , X86::VMULSSrm_Int },
242 { X86::VMULSSZrr , X86::VMULSSrr },
243 { X86::VMULSSZrr_Int , X86::VMULSSrr_Int },
244 { X86::VSQRTSDZm , X86::VSQRTSDm },
245 { X86::VSQRTSDZm_Int , X86::VSQRTSDm_Int },
246 { X86::VSQRTSDZr , X86::VSQRTSDr },
247 { X86::VSQRTSDZr_Int , X86::VSQRTSDr_Int },
248 { X86::VSQRTSSZm , X86::VSQRTSSm },
249 { X86::VSQRTSSZm_Int , X86::VSQRTSSm_Int },
250 { X86::VSQRTSSZr , X86::VSQRTSSr },
251 { X86::VSQRTSSZr_Int , X86::VSQRTSSr_Int },
252 { X86::VSUBSDZrm , X86::VSUBSDrm },
253 { X86::VSUBSDZrm_Int , X86::VSUBSDrm_Int },
254 { X86::VSUBSDZrr , X86::VSUBSDrr },
255 { X86::VSUBSDZrr_Int , X86::VSUBSDrr_Int },
256 { X86::VSUBSSZrm , X86::VSUBSSrm },
257 { X86::VSUBSSZrm_Int , X86::VSUBSSrm_Int },
258 { X86::VSUBSSZrr , X86::VSUBSSrr },
259 { X86::VSUBSSZrr_Int , X86::VSUBSSrr_Int },
260 { X86::VUCOMISDZrm , X86::VUCOMISDrm },
261 { X86::VUCOMISDZrr , X86::VUCOMISDrr },
262 { X86::VUCOMISSZrm , X86::VUCOMISSrm },
263 { X86::VUCOMISSZrr , X86::VUCOMISSrr },
264
265 { X86::VMOV64toPQIZrm , X86::VMOV64toPQIrm },
266 { X86::VMOV64toPQIZrr , X86::VMOV64toPQIrr },
267 { X86::VMOV64toSDZrr , X86::VMOV64toSDrr },
268 { X86::VMOVDI2PDIZrm , X86::VMOVDI2PDIrm },
269 { X86::VMOVDI2PDIZrr , X86::VMOVDI2PDIrr },
270 { X86::VMOVLHPSZrr , X86::VMOVLHPSrr },
271 { X86::VMOVHLPSZrr , X86::VMOVHLPSrr },
272 { X86::VMOVPDI2DIZmr , X86::VMOVPDI2DImr },
273 { X86::VMOVPDI2DIZrr , X86::VMOVPDI2DIrr },
274 { X86::VMOVPQI2QIZmr , X86::VMOVPQI2QImr },
275 { X86::VMOVPQI2QIZrr , X86::VMOVPQI2QIrr },
276 { X86::VMOVPQIto64Zmr , X86::VMOVPQIto64mr },
277 { X86::VMOVPQIto64Zrr , X86::VMOVPQIto64rr },
278 { X86::VMOVQI2PQIZrm , X86::VMOVQI2PQIrm },
279 { X86::VMOVZPQILo2PQIZrr , X86::VMOVZPQILo2PQIrr },
280
281 { X86::VPEXTRBZmr , X86::VPEXTRBmr },
282 { X86::VPEXTRBZrr , X86::VPEXTRBrr },
283 { X86::VPEXTRDZmr , X86::VPEXTRDmr },
284 { X86::VPEXTRDZrr , X86::VPEXTRDrr },
285 { X86::VPEXTRQZmr , X86::VPEXTRQmr },
286 { X86::VPEXTRQZrr , X86::VPEXTRQrr },
287 { X86::VPEXTRWZmr , X86::VPEXTRWmr },
288 { X86::VPEXTRWZrr , X86::VPEXTRWri },
289 { X86::VPEXTRWZrr_REV , X86::VPEXTRWrr_REV },
290
291 { X86::VPINSRBZrm , X86::VPINSRBrm },
292 { X86::VPINSRBZrr , X86::VPINSRBrr },
293 { X86::VPINSRDZrm , X86::VPINSRDrm },
294 { X86::VPINSRDZrr , X86::VPINSRDrr },
295 { X86::VPINSRQZrm , X86::VPINSRQrm },
296 { X86::VPINSRQZrr , X86::VPINSRQrr },
297 { X86::VPINSRWZrm , X86::VPINSRWrmi },
298 { X86::VPINSRWZrr , X86::VPINSRWrri },
299
300 // EVEX 128 with corresponding VEX.
301 { X86::VADDPDZ128rm , X86::VADDPDrm },
302 { X86::VADDPDZ128rr , X86::VADDPDrr },
303 { X86::VADDPSZ128rm , X86::VADDPSrm },
304 { X86::VADDPSZ128rr , X86::VADDPSrr },
305 { X86::VANDNPDZ128rm , X86::VANDNPDrm },
306 { X86::VANDNPDZ128rr , X86::VANDNPDrr },
307 { X86::VANDNPSZ128rm , X86::VANDNPSrm },
308 { X86::VANDNPSZ128rr , X86::VANDNPSrr },
309 { X86::VANDPDZ128rm , X86::VANDPDrm },
310 { X86::VANDPDZ128rr , X86::VANDPDrr },
311 { X86::VANDPSZ128rm , X86::VANDPSrm },
312 { X86::VANDPSZ128rr , X86::VANDPSrr },
313 { X86::VBROADCASTI32X2Z128m , X86::VPBROADCASTQrm },
314 { X86::VBROADCASTI32X2Z128r , X86::VPBROADCASTQrr },
315 { X86::VBROADCASTSSZ128m , X86::VBROADCASTSSrm },
316 { X86::VBROADCASTSSZ128r , X86::VBROADCASTSSrr },
317 { X86::VCVTDQ2PDZ128rm , X86::VCVTDQ2PDrm },
318 { X86::VCVTDQ2PDZ128rr , X86::VCVTDQ2PDrr },
319 { X86::VCVTDQ2PSZ128rm , X86::VCVTDQ2PSrm },
320 { X86::VCVTDQ2PSZ128rr , X86::VCVTDQ2PSrr },
321 { X86::VCVTPD2DQZ128rm , X86::VCVTPD2DQrm },
322 { X86::VCVTPD2DQZ128rr , X86::VCVTPD2DQrr },
323 { X86::VCVTPD2PSZ128rm , X86::VCVTPD2PSrm },
324 { X86::VCVTPD2PSZ128rr , X86::VCVTPD2PSrr },
325 { X86::VCVTPH2PSZ128rm , X86::VCVTPH2PSrm },
326 { X86::VCVTPH2PSZ128rr , X86::VCVTPH2PSrr },
327 { X86::VCVTPS2DQZ128rm , X86::VCVTPS2DQrm },
328 { X86::VCVTPS2DQZ128rr , X86::VCVTPS2DQrr },
329 { X86::VCVTPS2PDZ128rm , X86::VCVTPS2PDrm },
330 { X86::VCVTPS2PDZ128rr , X86::VCVTPS2PDrr },
331 { X86::VCVTPS2PHZ128mr , X86::VCVTPS2PHmr },
332 { X86::VCVTPS2PHZ128rr , X86::VCVTPS2PHrr },
333 { X86::VCVTTPD2DQZ128rm , X86::VCVTTPD2DQrm },
334 { X86::VCVTTPD2DQZ128rr , X86::VCVTTPD2DQrr },
335 { X86::VCVTTPS2DQZ128rm , X86::VCVTTPS2DQrm },
336 { X86::VCVTTPS2DQZ128rr , X86::VCVTTPS2DQrr },
337 { X86::VDIVPDZ128rm , X86::VDIVPDrm },
338 { X86::VDIVPDZ128rr , X86::VDIVPDrr },
339 { X86::VDIVPSZ128rm , X86::VDIVPSrm },
340 { X86::VDIVPSZ128rr , X86::VDIVPSrr },
341 { X86::VFMADD132PDZ128m , X86::VFMADD132PDm },
342 { X86::VFMADD132PDZ128r , X86::VFMADD132PDr },
343 { X86::VFMADD132PSZ128m , X86::VFMADD132PSm },
344 { X86::VFMADD132PSZ128r , X86::VFMADD132PSr },
345 { X86::VFMADD213PDZ128m , X86::VFMADD213PDm },
346 { X86::VFMADD213PDZ128r , X86::VFMADD213PDr },
347 { X86::VFMADD213PSZ128m , X86::VFMADD213PSm },
348 { X86::VFMADD213PSZ128r , X86::VFMADD213PSr },
349 { X86::VFMADD231PDZ128m , X86::VFMADD231PDm },
350 { X86::VFMADD231PDZ128r , X86::VFMADD231PDr },
351 { X86::VFMADD231PSZ128m , X86::VFMADD231PSm },
352 { X86::VFMADD231PSZ128r , X86::VFMADD231PSr },
353 { X86::VFMADDSUB132PDZ128m , X86::VFMADDSUB132PDm },
354 { X86::VFMADDSUB132PDZ128r , X86::VFMADDSUB132PDr },
355 { X86::VFMADDSUB132PSZ128m , X86::VFMADDSUB132PSm },
356 { X86::VFMADDSUB132PSZ128r , X86::VFMADDSUB132PSr },
357 { X86::VFMADDSUB213PDZ128m , X86::VFMADDSUB213PDm },
358 { X86::VFMADDSUB213PDZ128r , X86::VFMADDSUB213PDr },
359 { X86::VFMADDSUB213PSZ128m , X86::VFMADDSUB213PSm },
360 { X86::VFMADDSUB213PSZ128r , X86::VFMADDSUB213PSr },
361 { X86::VFMADDSUB231PDZ128m , X86::VFMADDSUB231PDm },
362 { X86::VFMADDSUB231PDZ128r , X86::VFMADDSUB231PDr },
363 { X86::VFMADDSUB231PSZ128m , X86::VFMADDSUB231PSm },
364 { X86::VFMADDSUB231PSZ128r , X86::VFMADDSUB231PSr },
365 { X86::VFMSUB132PDZ128m , X86::VFMSUB132PDm },
366 { X86::VFMSUB132PDZ128r , X86::VFMSUB132PDr },
367 { X86::VFMSUB132PSZ128m , X86::VFMSUB132PSm },
368 { X86::VFMSUB132PSZ128r , X86::VFMSUB132PSr },
369 { X86::VFMSUB213PDZ128m , X86::VFMSUB213PDm },
370 { X86::VFMSUB213PDZ128r , X86::VFMSUB213PDr },
371 { X86::VFMSUB213PSZ128m , X86::VFMSUB213PSm },
372 { X86::VFMSUB213PSZ128r , X86::VFMSUB213PSr },
373 { X86::VFMSUB231PDZ128m , X86::VFMSUB231PDm },
374 { X86::VFMSUB231PDZ128r , X86::VFMSUB231PDr },
375 { X86::VFMSUB231PSZ128m , X86::VFMSUB231PSm },
376 { X86::VFMSUB231PSZ128r , X86::VFMSUB231PSr },
377 { X86::VFMSUBADD132PDZ128m , X86::VFMSUBADD132PDm },
378 { X86::VFMSUBADD132PDZ128r , X86::VFMSUBADD132PDr },
379 { X86::VFMSUBADD132PSZ128m , X86::VFMSUBADD132PSm },
380 { X86::VFMSUBADD132PSZ128r , X86::VFMSUBADD132PSr },
381 { X86::VFMSUBADD213PDZ128m , X86::VFMSUBADD213PDm },
382 { X86::VFMSUBADD213PDZ128r , X86::VFMSUBADD213PDr },
383 { X86::VFMSUBADD213PSZ128m , X86::VFMSUBADD213PSm },
384 { X86::VFMSUBADD213PSZ128r , X86::VFMSUBADD213PSr },
385 { X86::VFMSUBADD231PDZ128m , X86::VFMSUBADD231PDm },
386 { X86::VFMSUBADD231PDZ128r , X86::VFMSUBADD231PDr },
387 { X86::VFMSUBADD231PSZ128m , X86::VFMSUBADD231PSm },
388 { X86::VFMSUBADD231PSZ128r , X86::VFMSUBADD231PSr },
389 { X86::VFNMADD132PDZ128m , X86::VFNMADD132PDm },
390 { X86::VFNMADD132PDZ128r , X86::VFNMADD132PDr },
391 { X86::VFNMADD132PSZ128m , X86::VFNMADD132PSm },
392 { X86::VFNMADD132PSZ128r , X86::VFNMADD132PSr },
393 { X86::VFNMADD213PDZ128m , X86::VFNMADD213PDm },
394 { X86::VFNMADD213PDZ128r , X86::VFNMADD213PDr },
395 { X86::VFNMADD213PSZ128m , X86::VFNMADD213PSm },
396 { X86::VFNMADD213PSZ128r , X86::VFNMADD213PSr },
397 { X86::VFNMADD231PDZ128m , X86::VFNMADD231PDm },
398 { X86::VFNMADD231PDZ128r , X86::VFNMADD231PDr },
399 { X86::VFNMADD231PSZ128m , X86::VFNMADD231PSm },
400 { X86::VFNMADD231PSZ128r , X86::VFNMADD231PSr },
401 { X86::VFNMSUB132PDZ128m , X86::VFNMSUB132PDm },
402 { X86::VFNMSUB132PDZ128r , X86::VFNMSUB132PDr },
403 { X86::VFNMSUB132PSZ128m , X86::VFNMSUB132PSm },
404 { X86::VFNMSUB132PSZ128r , X86::VFNMSUB132PSr },
405 { X86::VFNMSUB213PDZ128m , X86::VFNMSUB213PDm },
406 { X86::VFNMSUB213PDZ128r , X86::VFNMSUB213PDr },
407 { X86::VFNMSUB213PSZ128m , X86::VFNMSUB213PSm },
408 { X86::VFNMSUB213PSZ128r , X86::VFNMSUB213PSr },
409 { X86::VFNMSUB231PDZ128m , X86::VFNMSUB231PDm },
410 { X86::VFNMSUB231PDZ128r , X86::VFNMSUB231PDr },
411 { X86::VFNMSUB231PSZ128m , X86::VFNMSUB231PSm },
412 { X86::VFNMSUB231PSZ128r , X86::VFNMSUB231PSr },
413 { X86::VMAXCPDZ128rm , X86::VMAXCPDrm },
414 { X86::VMAXCPDZ128rr , X86::VMAXCPDrr },
415 { X86::VMAXCPSZ128rm , X86::VMAXCPSrm },
416 { X86::VMAXCPSZ128rr , X86::VMAXCPSrr },
417 { X86::VMAXPDZ128rm , X86::VMAXCPDrm },
418 { X86::VMAXPDZ128rr , X86::VMAXCPDrr },
419 { X86::VMAXPSZ128rm , X86::VMAXCPSrm },
420 { X86::VMAXPSZ128rr , X86::VMAXCPSrr },
421 { X86::VMINCPDZ128rm , X86::VMINCPDrm },
422 { X86::VMINCPDZ128rr , X86::VMINCPDrr },
423 { X86::VMINCPSZ128rm , X86::VMINCPSrm },
424 { X86::VMINCPSZ128rr , X86::VMINCPSrr },
425 { X86::VMINPDZ128rm , X86::VMINCPDrm },
426 { X86::VMINPDZ128rr , X86::VMINCPDrr },
427 { X86::VMINPSZ128rm , X86::VMINCPSrm },
428 { X86::VMINPSZ128rr , X86::VMINCPSrr },
429 { X86::VMOVAPDZ128mr , X86::VMOVAPDmr },
430 { X86::VMOVAPDZ128rm , X86::VMOVAPDrm },
431 { X86::VMOVAPDZ128rr , X86::VMOVAPDrr },
432 { X86::VMOVAPDZ128rr_REV , X86::VMOVAPDrr_REV },
433 { X86::VMOVAPSZ128mr , X86::VMOVAPSmr },
434 { X86::VMOVAPSZ128rm , X86::VMOVAPSrm },
435 { X86::VMOVAPSZ128rr , X86::VMOVAPSrr },
436 { X86::VMOVAPSZ128rr_REV , X86::VMOVAPSrr_REV },
437 { X86::VMOVDDUPZ128rm , X86::VMOVDDUPrm },
438 { X86::VMOVDDUPZ128rr , X86::VMOVDDUPrr },
439 { X86::VMOVDQA32Z128mr , X86::VMOVDQAmr },
440 { X86::VMOVDQA32Z128rm , X86::VMOVDQArm },
441 { X86::VMOVDQA32Z128rr , X86::VMOVDQArr },
442 { X86::VMOVDQA32Z128rr_REV , X86::VMOVDQArr_REV },
443 { X86::VMOVDQA64Z128mr , X86::VMOVDQAmr },
444 { X86::VMOVDQA64Z128rm , X86::VMOVDQArm },
445 { X86::VMOVDQA64Z128rr , X86::VMOVDQArr },
446 { X86::VMOVDQA64Z128rr_REV , X86::VMOVDQArr_REV },
447 { X86::VMOVDQU16Z128mr , X86::VMOVDQUmr },
448 { X86::VMOVDQU16Z128rm , X86::VMOVDQUrm },
449 { X86::VMOVDQU16Z128rr , X86::VMOVDQUrr },
450 { X86::VMOVDQU16Z128rr_REV , X86::VMOVDQUrr_REV },
451 { X86::VMOVDQU32Z128mr , X86::VMOVDQUmr },
452 { X86::VMOVDQU32Z128rm , X86::VMOVDQUrm },
453 { X86::VMOVDQU32Z128rr , X86::VMOVDQUrr },
454 { X86::VMOVDQU32Z128rr_REV , X86::VMOVDQUrr_REV },
455 { X86::VMOVDQU64Z128mr , X86::VMOVDQUmr },
456 { X86::VMOVDQU64Z128rm , X86::VMOVDQUrm },
457 { X86::VMOVDQU64Z128rr , X86::VMOVDQUrr },
458 { X86::VMOVDQU64Z128rr_REV , X86::VMOVDQUrr_REV },
459 { X86::VMOVDQU8Z128mr , X86::VMOVDQUmr },
460 { X86::VMOVDQU8Z128rm , X86::VMOVDQUrm },
461 { X86::VMOVDQU8Z128rr , X86::VMOVDQUrr },
462 { X86::VMOVDQU8Z128rr_REV , X86::VMOVDQUrr_REV },
463 { X86::VMOVHPDZ128mr , X86::VMOVHPDmr },
464 { X86::VMOVHPDZ128rm , X86::VMOVHPDrm },
465 { X86::VMOVHPSZ128mr , X86::VMOVHPSmr },
466 { X86::VMOVHPSZ128rm , X86::VMOVHPSrm },
467 { X86::VMOVLPDZ128mr , X86::VMOVLPDmr },
468 { X86::VMOVLPDZ128rm , X86::VMOVLPDrm },
469 { X86::VMOVLPSZ128mr , X86::VMOVLPSmr },
470 { X86::VMOVLPSZ128rm , X86::VMOVLPSrm },
471 { X86::VMOVNTDQAZ128rm , X86::VMOVNTDQArm },
472 { X86::VMOVNTDQZ128mr , X86::VMOVNTDQmr },
473 { X86::VMOVNTPDZ128mr , X86::VMOVNTPDmr },
474 { X86::VMOVNTPSZ128mr , X86::VMOVNTPSmr },
475 { X86::VMOVSHDUPZ128rm , X86::VMOVSHDUPrm },
476 { X86::VMOVSHDUPZ128rr , X86::VMOVSHDUPrr },
477 { X86::VMOVSLDUPZ128rm , X86::VMOVSLDUPrm },
478 { X86::VMOVSLDUPZ128rr , X86::VMOVSLDUPrr },
479 { X86::VMOVUPDZ128mr , X86::VMOVUPDmr },
480 { X86::VMOVUPDZ128rm , X86::VMOVUPDrm },
481 { X86::VMOVUPDZ128rr , X86::VMOVUPDrr },
482 { X86::VMOVUPDZ128rr_REV , X86::VMOVUPDrr_REV },
483 { X86::VMOVUPSZ128mr , X86::VMOVUPSmr },
484 { X86::VMOVUPSZ128rm , X86::VMOVUPSrm },
485 { X86::VMOVUPSZ128rr , X86::VMOVUPSrr },
486 { X86::VMOVUPSZ128rr_REV , X86::VMOVUPSrr_REV },
487 { X86::VMULPDZ128rm , X86::VMULPDrm },
488 { X86::VMULPDZ128rr , X86::VMULPDrr },
489 { X86::VMULPSZ128rm , X86::VMULPSrm },
490 { X86::VMULPSZ128rr , X86::VMULPSrr },
491 { X86::VORPDZ128rm , X86::VORPDrm },
492 { X86::VORPDZ128rr , X86::VORPDrr },
493 { X86::VORPSZ128rm , X86::VORPSrm },
494 { X86::VORPSZ128rr , X86::VORPSrr },
495 { X86::VPABSBZ128rm , X86::VPABSBrm },
496 { X86::VPABSBZ128rr , X86::VPABSBrr },
497 { X86::VPABSDZ128rm , X86::VPABSDrm },
498 { X86::VPABSDZ128rr , X86::VPABSDrr },
499 { X86::VPABSWZ128rm , X86::VPABSWrm },
500 { X86::VPABSWZ128rr , X86::VPABSWrr },
501 { X86::VPACKSSDWZ128rm , X86::VPACKSSDWrm },
502 { X86::VPACKSSDWZ128rr , X86::VPACKSSDWrr },
503 { X86::VPACKSSWBZ128rm , X86::VPACKSSWBrm },
504 { X86::VPACKSSWBZ128rr , X86::VPACKSSWBrr },
505 { X86::VPACKUSDWZ128rm , X86::VPACKUSDWrm },
506 { X86::VPACKUSDWZ128rr , X86::VPACKUSDWrr },
507 { X86::VPACKUSWBZ128rm , X86::VPACKUSWBrm },
508 { X86::VPACKUSWBZ128rr , X86::VPACKUSWBrr },
509 { X86::VPADDBZ128rm , X86::VPADDBrm },
510 { X86::VPADDBZ128rr , X86::VPADDBrr },
511 { X86::VPADDDZ128rm , X86::VPADDDrm },
512 { X86::VPADDDZ128rr , X86::VPADDDrr },
513 { X86::VPADDQZ128rm , X86::VPADDQrm },
514 { X86::VPADDQZ128rr , X86::VPADDQrr },
515 { X86::VPADDSBZ128rm , X86::VPADDSBrm },
516 { X86::VPADDSBZ128rr , X86::VPADDSBrr },
517 { X86::VPADDSWZ128rm , X86::VPADDSWrm },
518 { X86::VPADDSWZ128rr , X86::VPADDSWrr },
519 { X86::VPADDUSBZ128rm , X86::VPADDUSBrm },
520 { X86::VPADDUSBZ128rr , X86::VPADDUSBrr },
521 { X86::VPADDUSWZ128rm , X86::VPADDUSWrm },
522 { X86::VPADDUSWZ128rr , X86::VPADDUSWrr },
523 { X86::VPADDWZ128rm , X86::VPADDWrm },
524 { X86::VPADDWZ128rr , X86::VPADDWrr },
525 { X86::VPALIGNRZ128rmi , X86::VPALIGNRrmi },
526 { X86::VPALIGNRZ128rri , X86::VPALIGNRrri },
527 { X86::VPANDDZ128rm , X86::VPANDrm },
528 { X86::VPANDDZ128rr , X86::VPANDrr },
529 { X86::VPANDQZ128rm , X86::VPANDrm },
530 { X86::VPANDQZ128rr , X86::VPANDrr },
531 { X86::VPANDNDZ128rm , X86::VPANDNrm },
532 { X86::VPANDNDZ128rr , X86::VPANDNrr },
533 { X86::VPANDNQZ128rm , X86::VPANDNrm },
534 { X86::VPANDNQZ128rr , X86::VPANDNrr },
535 { X86::VPAVGBZ128rm , X86::VPAVGBrm },
536 { X86::VPAVGBZ128rr , X86::VPAVGBrr },
537 { X86::VPAVGWZ128rm , X86::VPAVGWrm },
538 { X86::VPAVGWZ128rr , X86::VPAVGWrr },
539 { X86::VPBROADCASTBZ128m , X86::VPBROADCASTBrm },
540 { X86::VPBROADCASTBZ128r , X86::VPBROADCASTBrr },
541 { X86::VPBROADCASTDZ128m , X86::VPBROADCASTDrm },
542 { X86::VPBROADCASTDZ128r , X86::VPBROADCASTDrr },
543 { X86::VPBROADCASTQZ128m , X86::VPBROADCASTQrm },
544 { X86::VPBROADCASTQZ128r , X86::VPBROADCASTQrr },
545 { X86::VPBROADCASTWZ128m , X86::VPBROADCASTWrm },
546 { X86::VPBROADCASTWZ128r , X86::VPBROADCASTWrr },
547 { X86::VPERMILPDZ128mi , X86::VPERMILPDmi },
548 { X86::VPERMILPDZ128ri , X86::VPERMILPDri },
549 { X86::VPERMILPDZ128rm , X86::VPERMILPDrm },
550 { X86::VPERMILPDZ128rr , X86::VPERMILPDrr },
551 { X86::VPERMILPSZ128mi , X86::VPERMILPSmi },
552 { X86::VPERMILPSZ128ri , X86::VPERMILPSri },
553 { X86::VPERMILPSZ128rm , X86::VPERMILPSrm },
554 { X86::VPERMILPSZ128rr , X86::VPERMILPSrr },
555 { X86::VPMADDUBSWZ128rm , X86::VPMADDUBSWrm },
556 { X86::VPMADDUBSWZ128rr , X86::VPMADDUBSWrr },
557 { X86::VPMADDWDZ128rm , X86::VPMADDWDrm },
558 { X86::VPMADDWDZ128rr , X86::VPMADDWDrr },
559 { X86::VPMAXSBZ128rm , X86::VPMAXSBrm },
560 { X86::VPMAXSBZ128rr , X86::VPMAXSBrr },
561 { X86::VPMAXSDZ128rm , X86::VPMAXSDrm },
562 { X86::VPMAXSDZ128rr , X86::VPMAXSDrr },
563 { X86::VPMAXSWZ128rm , X86::VPMAXSWrm },
564 { X86::VPMAXSWZ128rr , X86::VPMAXSWrr },
565 { X86::VPMAXUBZ128rm , X86::VPMAXUBrm },
566 { X86::VPMAXUBZ128rr , X86::VPMAXUBrr },
567 { X86::VPMAXUDZ128rm , X86::VPMAXUDrm },
568 { X86::VPMAXUDZ128rr , X86::VPMAXUDrr },
569 { X86::VPMAXUWZ128rm , X86::VPMAXUWrm },
570 { X86::VPMAXUWZ128rr , X86::VPMAXUWrr },
571 { X86::VPMINSBZ128rm , X86::VPMINSBrm },
572 { X86::VPMINSBZ128rr , X86::VPMINSBrr },
573 { X86::VPMINSDZ128rm , X86::VPMINSDrm },
574 { X86::VPMINSDZ128rr , X86::VPMINSDrr },
575 { X86::VPMINSWZ128rm , X86::VPMINSWrm },
576 { X86::VPMINSWZ128rr , X86::VPMINSWrr },
577 { X86::VPMINUBZ128rm , X86::VPMINUBrm },
578 { X86::VPMINUBZ128rr , X86::VPMINUBrr },
579 { X86::VPMINUDZ128rm , X86::VPMINUDrm },
580 { X86::VPMINUDZ128rr , X86::VPMINUDrr },
581 { X86::VPMINUWZ128rm , X86::VPMINUWrm },
582 { X86::VPMINUWZ128rr , X86::VPMINUWrr },
583 { X86::VPMOVSXBDZ128rm , X86::VPMOVSXBDrm },
584 { X86::VPMOVSXBDZ128rr , X86::VPMOVSXBDrr },
585 { X86::VPMOVSXBQZ128rm , X86::VPMOVSXBQrm },
586 { X86::VPMOVSXBQZ128rr , X86::VPMOVSXBQrr },
587 { X86::VPMOVSXBWZ128rm , X86::VPMOVSXBWrm },
588 { X86::VPMOVSXBWZ128rr , X86::VPMOVSXBWrr },
589 { X86::VPMOVSXDQZ128rm , X86::VPMOVSXDQrm },
590 { X86::VPMOVSXDQZ128rr , X86::VPMOVSXDQrr },
591 { X86::VPMOVSXWDZ128rm , X86::VPMOVSXWDrm },
592 { X86::VPMOVSXWDZ128rr , X86::VPMOVSXWDrr },
593 { X86::VPMOVSXWQZ128rm , X86::VPMOVSXWQrm },
594 { X86::VPMOVSXWQZ128rr , X86::VPMOVSXWQrr },
595 { X86::VPMOVZXBDZ128rm , X86::VPMOVZXBDrm },
596 { X86::VPMOVZXBDZ128rr , X86::VPMOVZXBDrr },
597 { X86::VPMOVZXBQZ128rm , X86::VPMOVZXBQrm },
598 { X86::VPMOVZXBQZ128rr , X86::VPMOVZXBQrr },
599 { X86::VPMOVZXBWZ128rm , X86::VPMOVZXBWrm },
600 { X86::VPMOVZXBWZ128rr , X86::VPMOVZXBWrr },
601 { X86::VPMOVZXDQZ128rm , X86::VPMOVZXDQrm },
602 { X86::VPMOVZXDQZ128rr , X86::VPMOVZXDQrr },
603 { X86::VPMOVZXWDZ128rm , X86::VPMOVZXWDrm },
604 { X86::VPMOVZXWDZ128rr , X86::VPMOVZXWDrr },
605 { X86::VPMOVZXWQZ128rm , X86::VPMOVZXWQrm },
606 { X86::VPMOVZXWQZ128rr , X86::VPMOVZXWQrr },
607 { X86::VPMULDQZ128rm , X86::VPMULDQrm },
608 { X86::VPMULDQZ128rr , X86::VPMULDQrr },
609 { X86::VPMULHRSWZ128rm , X86::VPMULHRSWrm },
610 { X86::VPMULHRSWZ128rr , X86::VPMULHRSWrr },
611 { X86::VPMULHUWZ128rm , X86::VPMULHUWrm },
612 { X86::VPMULHUWZ128rr , X86::VPMULHUWrr },
613 { X86::VPMULHWZ128rm , X86::VPMULHWrm },
614 { X86::VPMULHWZ128rr , X86::VPMULHWrr },
615 { X86::VPMULLDZ128rm , X86::VPMULLDrm },
616 { X86::VPMULLDZ128rr , X86::VPMULLDrr },
617 { X86::VPMULLWZ128rm , X86::VPMULLWrm },
618 { X86::VPMULLWZ128rr , X86::VPMULLWrr },
619 { X86::VPMULUDQZ128rm , X86::VPMULUDQrm },
620 { X86::VPMULUDQZ128rr , X86::VPMULUDQrr },
621 { X86::VPORDZ128rm , X86::VPORrm },
622 { X86::VPORDZ128rr , X86::VPORrr },
623 { X86::VPORQZ128rm , X86::VPORrm },
624 { X86::VPORQZ128rr , X86::VPORrr },
625 { X86::VPSADBWZ128rm , X86::VPSADBWrm },
626 { X86::VPSADBWZ128rr , X86::VPSADBWrr },
627 { X86::VPSHUFBZ128rm , X86::VPSHUFBrm },
628 { X86::VPSHUFBZ128rr , X86::VPSHUFBrr },
629 { X86::VPSHUFDZ128mi , X86::VPSHUFDmi },
630 { X86::VPSHUFDZ128ri , X86::VPSHUFDri },
631 { X86::VPSHUFHWZ128mi , X86::VPSHUFHWmi },
632 { X86::VPSHUFHWZ128ri , X86::VPSHUFHWri },
633 { X86::VPSHUFLWZ128mi , X86::VPSHUFLWmi },
634 { X86::VPSHUFLWZ128ri , X86::VPSHUFLWri },
635 { X86::VPSLLDQZ128rr , X86::VPSLLDQri },
636 { X86::VPSLLDZ128ri , X86::VPSLLDri },
637 { X86::VPSLLDZ128rm , X86::VPSLLDrm },
638 { X86::VPSLLDZ128rr , X86::VPSLLDrr },
639 { X86::VPSLLQZ128ri , X86::VPSLLQri },
640 { X86::VPSLLQZ128rm , X86::VPSLLQrm },
641 { X86::VPSLLQZ128rr , X86::VPSLLQrr },
642 { X86::VPSLLVDZ128rm , X86::VPSLLVDrm },
643 { X86::VPSLLVDZ128rr , X86::VPSLLVDrr },
644 { X86::VPSLLVQZ128rm , X86::VPSLLVQrm },
645 { X86::VPSLLVQZ128rr , X86::VPSLLVQrr },
646 { X86::VPSLLWZ128ri , X86::VPSLLWri },
647 { X86::VPSLLWZ128rm , X86::VPSLLWrm },
648 { X86::VPSLLWZ128rr , X86::VPSLLWrr },
649 { X86::VPSRADZ128ri , X86::VPSRADri },
650 { X86::VPSRADZ128rm , X86::VPSRADrm },
651 { X86::VPSRADZ128rr , X86::VPSRADrr },
652 { X86::VPSRAVDZ128rm , X86::VPSRAVDrm },
653 { X86::VPSRAVDZ128rr , X86::VPSRAVDrr },
654 { X86::VPSRAWZ128ri , X86::VPSRAWri },
655 { X86::VPSRAWZ128rm , X86::VPSRAWrm },
656 { X86::VPSRAWZ128rr , X86::VPSRAWrr },
657 { X86::VPSRLDQZ128rr , X86::VPSRLDQri },
658 { X86::VPSRLDZ128ri , X86::VPSRLDri },
659 { X86::VPSRLDZ128rm , X86::VPSRLDrm },
660 { X86::VPSRLDZ128rr , X86::VPSRLDrr },
661 { X86::VPSRLQZ128ri , X86::VPSRLQri },
662 { X86::VPSRLQZ128rm , X86::VPSRLQrm },
663 { X86::VPSRLQZ128rr , X86::VPSRLQrr },
664 { X86::VPSRLVDZ128rm , X86::VPSRLVDrm },
665 { X86::VPSRLVDZ128rr , X86::VPSRLVDrr },
666 { X86::VPSRLVQZ128rm , X86::VPSRLVQrm },
667 { X86::VPSRLVQZ128rr , X86::VPSRLVQrr },
668 { X86::VPSRLWZ128ri , X86::VPSRLWri },
669 { X86::VPSRLWZ128rm , X86::VPSRLWrm },
670 { X86::VPSRLWZ128rr , X86::VPSRLWrr },
671 { X86::VPSUBBZ128rm , X86::VPSUBBrm },
672 { X86::VPSUBBZ128rr , X86::VPSUBBrr },
673 { X86::VPSUBDZ128rm , X86::VPSUBDrm },
674 { X86::VPSUBDZ128rr , X86::VPSUBDrr },
675 { X86::VPSUBQZ128rm , X86::VPSUBQrm },
676 { X86::VPSUBQZ128rr , X86::VPSUBQrr },
677 { X86::VPSUBSBZ128rm , X86::VPSUBSBrm },
678 { X86::VPSUBSBZ128rr , X86::VPSUBSBrr },
679 { X86::VPSUBSWZ128rm , X86::VPSUBSWrm },
680 { X86::VPSUBSWZ128rr , X86::VPSUBSWrr },
681 { X86::VPSUBUSBZ128rm , X86::VPSUBUSBrm },
682 { X86::VPSUBUSBZ128rr , X86::VPSUBUSBrr },
683 { X86::VPSUBUSWZ128rm , X86::VPSUBUSWrm },
684 { X86::VPSUBUSWZ128rr , X86::VPSUBUSWrr },
685 { X86::VPSUBWZ128rm , X86::VPSUBWrm },
686 { X86::VPSUBWZ128rr , X86::VPSUBWrr },
687 { X86::VPUNPCKHBWZ128rm , X86::VPUNPCKHBWrm },
688 { X86::VPUNPCKHBWZ128rr , X86::VPUNPCKHBWrr },
689 { X86::VPUNPCKHDQZ128rm , X86::VPUNPCKHDQrm },
690 { X86::VPUNPCKHDQZ128rr , X86::VPUNPCKHDQrr },
691 { X86::VPUNPCKHQDQZ128rm , X86::VPUNPCKHQDQrm },
692 { X86::VPUNPCKHQDQZ128rr , X86::VPUNPCKHQDQrr },
693 { X86::VPUNPCKHWDZ128rm , X86::VPUNPCKHWDrm },
694 { X86::VPUNPCKHWDZ128rr , X86::VPUNPCKHWDrr },
695 { X86::VPUNPCKLBWZ128rm , X86::VPUNPCKLBWrm },
696 { X86::VPUNPCKLBWZ128rr , X86::VPUNPCKLBWrr },
697 { X86::VPUNPCKLDQZ128rm , X86::VPUNPCKLDQrm },
698 { X86::VPUNPCKLDQZ128rr , X86::VPUNPCKLDQrr },
699 { X86::VPUNPCKLQDQZ128rm , X86::VPUNPCKLQDQrm },
700 { X86::VPUNPCKLQDQZ128rr , X86::VPUNPCKLQDQrr },
701 { X86::VPUNPCKLWDZ128rm , X86::VPUNPCKLWDrm },
702 { X86::VPUNPCKLWDZ128rr , X86::VPUNPCKLWDrr },
703 { X86::VPXORDZ128rm , X86::VPXORrm },
704 { X86::VPXORDZ128rr , X86::VPXORrr },
705 { X86::VPXORQZ128rm , X86::VPXORrm },
706 { X86::VPXORQZ128rr , X86::VPXORrr },
707 { X86::VSHUFPDZ128rmi , X86::VSHUFPDrmi },
708 { X86::VSHUFPDZ128rri , X86::VSHUFPDrri },
709 { X86::VSHUFPSZ128rmi , X86::VSHUFPSrmi },
710 { X86::VSHUFPSZ128rri , X86::VSHUFPSrri },
711 { X86::VSQRTPDZ128m , X86::VSQRTPDm },
712 { X86::VSQRTPDZ128r , X86::VSQRTPDr },
713 { X86::VSQRTPSZ128m , X86::VSQRTPSm },
714 { X86::VSQRTPSZ128r , X86::VSQRTPSr },
715 { X86::VSUBPDZ128rm , X86::VSUBPDrm },
716 { X86::VSUBPDZ128rr , X86::VSUBPDrr },
717 { X86::VSUBPSZ128rm , X86::VSUBPSrm },
718 { X86::VSUBPSZ128rr , X86::VSUBPSrr },
719 { X86::VUNPCKHPDZ128rm , X86::VUNPCKHPDrm },
720 { X86::VUNPCKHPDZ128rr , X86::VUNPCKHPDrr },
721 { X86::VUNPCKHPSZ128rm , X86::VUNPCKHPSrm },
722 { X86::VUNPCKHPSZ128rr , X86::VUNPCKHPSrr },
723 { X86::VUNPCKLPDZ128rm , X86::VUNPCKLPDrm },
724 { X86::VUNPCKLPDZ128rr , X86::VUNPCKLPDrr },
725 { X86::VUNPCKLPSZ128rm , X86::VUNPCKLPSrm },
726 { X86::VUNPCKLPSZ128rr , X86::VUNPCKLPSrr },
727 { X86::VXORPDZ128rm , X86::VXORPDrm },
728 { X86::VXORPDZ128rr , X86::VXORPDrr },
729 { X86::VXORPSZ128rm , X86::VXORPSrm },
730 { X86::VXORPSZ128rr , X86::VXORPSrr },
731 };
732
733
734 // X86 EVEX encoded instructions that have a VEX 256 encoding
735 // (table format: ).
736 static const X86EvexToVexCompressTableEntry X86EvexToVex256CompressTable[] = {
737 { X86::VADDPDZ256rm , X86::VADDPDYrm },
738 { X86::VADDPDZ256rr , X86::VADDPDYrr },
739 { X86::VADDPSZ256rm , X86::VADDPSYrm },
740 { X86::VADDPSZ256rr , X86::VADDPSYrr },
741 { X86::VANDNPDZ256rm , X86::VANDNPDYrm },
742 { X86::VANDNPDZ256rr , X86::VANDNPDYrr },
743 { X86::VANDNPSZ256rm , X86::VANDNPSYrm },
744 { X86::VANDNPSZ256rr , X86::VANDNPSYrr },
745 { X86::VANDPDZ256rm , X86::VANDPDYrm },
746 { X86::VANDPDZ256rr , X86::VANDPDYrr },
747 { X86::VANDPSZ256rm , X86::VANDPSYrm },
748 { X86::VANDPSZ256rr , X86::VANDPSYrr },
749 { X86::VBROADCASTF32X2Z256m , X86::VBROADCASTSDYrm },
750 { X86::VBROADCASTF32X2Z256r , X86::VBROADCASTSDYrr },
751 { X86::VBROADCASTF32X4Z256rm , X86::VBROADCASTF128 },
752 { X86::VBROADCASTI32X2Z256m , X86::VPBROADCASTQYrm },
753 { X86::VBROADCASTI32X2Z256r , X86::VPBROADCASTQYrr },
754 { X86::VBROADCASTI32X4Z256rm , X86::VBROADCASTI128 },
755 { X86::VBROADCASTSDZ256m , X86::VBROADCASTSDYrm },
756 { X86::VBROADCASTSDZ256r , X86::VBROADCASTSDYrr },
757 { X86::VBROADCASTSSZ256m , X86::VBROADCASTSSYrm },
758 { X86::VBROADCASTSSZ256r , X86::VBROADCASTSSYrr },
759 { X86::VCVTDQ2PDZ256rm , X86::VCVTDQ2PDYrm },
760 { X86::VCVTDQ2PDZ256rr , X86::VCVTDQ2PDYrr },
761 { X86::VCVTDQ2PSZ256rm , X86::VCVTDQ2PSYrm },
762 { X86::VCVTDQ2PSZ256rr , X86::VCVTDQ2PSYrr },
763 { X86::VCVTPD2DQZ256rm , X86::VCVTPD2DQYrm },
764 { X86::VCVTPD2DQZ256rr , X86::VCVTPD2DQYrr },
765 { X86::VCVTPD2PSZ256rm , X86::VCVTPD2PSYrm },
766 { X86::VCVTPD2PSZ256rr , X86::VCVTPD2PSYrr },
767 { X86::VCVTPH2PSZ256rm , X86::VCVTPH2PSYrm },
768 { X86::VCVTPH2PSZ256rr , X86::VCVTPH2PSYrr },
769 { X86::VCVTPS2DQZ256rm , X86::VCVTPS2DQYrm },
770 { X86::VCVTPS2DQZ256rr , X86::VCVTPS2DQYrr },
771 { X86::VCVTPS2PDZ256rm , X86::VCVTPS2PDYrm },
772 { X86::VCVTPS2PDZ256rr , X86::VCVTPS2PDYrr },
773 { X86::VCVTPS2PHZ256mr , X86::VCVTPS2PHYmr },
774 { X86::VCVTPS2PHZ256rr , X86::VCVTPS2PHYrr },
775 { X86::VCVTTPD2DQZ256rm , X86::VCVTTPD2DQYrm },
776 { X86::VCVTTPD2DQZ256rr , X86::VCVTTPD2DQYrr },
777 { X86::VCVTTPS2DQZ256rm , X86::VCVTTPS2DQYrm },
778 { X86::VCVTTPS2DQZ256rr , X86::VCVTTPS2DQYrr },
779 { X86::VDIVPDZ256rm , X86::VDIVPDYrm },
780 { X86::VDIVPDZ256rr , X86::VDIVPDYrr },
781 { X86::VDIVPSZ256rm , X86::VDIVPSYrm },
782 { X86::VDIVPSZ256rr , X86::VDIVPSYrr },
783 { X86::VEXTRACTF32x4Z256mr , X86::VEXTRACTF128mr },
784 { X86::VEXTRACTF64x2Z256mr , X86::VEXTRACTF128mr },
785 { X86::VEXTRACTF32x4Z256rr , X86::VEXTRACTF128rr },
786 { X86::VEXTRACTF64x2Z256rr , X86::VEXTRACTF128rr },
787 { X86::VEXTRACTI32x4Z256mr , X86::VEXTRACTI128mr },
788 { X86::VEXTRACTI64x2Z256mr , X86::VEXTRACTI128mr },
789 { X86::VEXTRACTI32x4Z256rr , X86::VEXTRACTI128rr },
790 { X86::VEXTRACTI64x2Z256rr , X86::VEXTRACTI128rr },
791 { X86::VFMADD132PDZ256m , X86::VFMADD132PDYm },
792 { X86::VFMADD132PDZ256r , X86::VFMADD132PDYr },
793 { X86::VFMADD132PSZ256m , X86::VFMADD132PSYm },
794 { X86::VFMADD132PSZ256r , X86::VFMADD132PSYr },
795 { X86::VFMADD213PDZ256m , X86::VFMADD213PDYm },
796 { X86::VFMADD213PDZ256r , X86::VFMADD213PDYr },
797 { X86::VFMADD213PSZ256m , X86::VFMADD213PSYm },
798 { X86::VFMADD213PSZ256r , X86::VFMADD213PSYr },
799 { X86::VFMADD231PDZ256m , X86::VFMADD231PDYm },
800 { X86::VFMADD231PDZ256r , X86::VFMADD231PDYr },
801 { X86::VFMADD231PSZ256m , X86::VFMADD231PSYm },
802 { X86::VFMADD231PSZ256r , X86::VFMADD231PSYr },
803 { X86::VFMADDSUB132PDZ256m , X86::VFMADDSUB132PDYm },
804 { X86::VFMADDSUB132PDZ256r , X86::VFMADDSUB132PDYr },
805 { X86::VFMADDSUB132PSZ256m , X86::VFMADDSUB132PSYm },
806 { X86::VFMADDSUB132PSZ256r , X86::VFMADDSUB132PSYr },
807 { X86::VFMADDSUB213PDZ256m , X86::VFMADDSUB213PDYm },
808 { X86::VFMADDSUB213PDZ256r , X86::VFMADDSUB213PDYr },
809 { X86::VFMADDSUB213PSZ256m , X86::VFMADDSUB213PSYm },
810 { X86::VFMADDSUB213PSZ256r , X86::VFMADDSUB213PSYr },
811 { X86::VFMADDSUB231PDZ256m , X86::VFMADDSUB231PDYm },
812 { X86::VFMADDSUB231PDZ256r , X86::VFMADDSUB231PDYr },
813 { X86::VFMADDSUB231PSZ256m , X86::VFMADDSUB231PSYm },
814 { X86::VFMADDSUB231PSZ256r , X86::VFMADDSUB231PSYr },
815 { X86::VFMSUB132PDZ256m , X86::VFMSUB132PDYm },
816 { X86::VFMSUB132PDZ256r , X86::VFMSUB132PDYr },
817 { X86::VFMSUB132PSZ256m , X86::VFMSUB132PSYm },
818 { X86::VFMSUB132PSZ256r , X86::VFMSUB132PSYr },
819 { X86::VFMSUB213PDZ256m , X86::VFMSUB213PDYm },
820 { X86::VFMSUB213PDZ256r , X86::VFMSUB213PDYr },
821 { X86::VFMSUB213PSZ256m , X86::VFMSUB213PSYm },
822 { X86::VFMSUB213PSZ256r , X86::VFMSUB213PSYr },
823 { X86::VFMSUB231PDZ256m , X86::VFMSUB231PDYm },
824 { X86::VFMSUB231PDZ256r , X86::VFMSUB231PDYr },
825 { X86::VFMSUB231PSZ256m , X86::VFMSUB231PSYm },
826 { X86::VFMSUB231PSZ256r , X86::VFMSUB231PSYr },
827 { X86::VFMSUBADD132PDZ256m , X86::VFMSUBADD132PDYm },
828 { X86::VFMSUBADD132PDZ256r , X86::VFMSUBADD132PDYr },
829 { X86::VFMSUBADD132PSZ256m , X86::VFMSUBADD132PSYm },
830 { X86::VFMSUBADD132PSZ256r , X86::VFMSUBADD132PSYr },
831 { X86::VFMSUBADD213PDZ256m , X86::VFMSUBADD213PDYm },
832 { X86::VFMSUBADD213PDZ256r , X86::VFMSUBADD213PDYr },
833 { X86::VFMSUBADD213PSZ256m , X86::VFMSUBADD213PSYm },
834 { X86::VFMSUBADD213PSZ256r , X86::VFMSUBADD213PSYr },
835 { X86::VFMSUBADD231PDZ256m , X86::VFMSUBADD231PDYm },
836 { X86::VFMSUBADD231PDZ256r , X86::VFMSUBADD231PDYr },
837 { X86::VFMSUBADD231PSZ256m , X86::VFMSUBADD231PSYm },
838 { X86::VFMSUBADD231PSZ256r , X86::VFMSUBADD231PSYr },
839 { X86::VFNMADD132PDZ256m , X86::VFNMADD132PDYm },
840 { X86::VFNMADD132PDZ256r , X86::VFNMADD132PDYr },
841 { X86::VFNMADD132PSZ256m , X86::VFNMADD132PSYm },
842 { X86::VFNMADD132PSZ256r , X86::VFNMADD132PSYr },
843 { X86::VFNMADD213PDZ256m , X86::VFNMADD213PDYm },
844 { X86::VFNMADD213PDZ256r , X86::VFNMADD213PDYr },
845 { X86::VFNMADD213PSZ256m , X86::VFNMADD213PSYm },
846 { X86::VFNMADD213PSZ256r , X86::VFNMADD213PSYr },
847 { X86::VFNMADD231PDZ256m , X86::VFNMADD231PDYm },
848 { X86::VFNMADD231PDZ256r , X86::VFNMADD231PDYr },
849 { X86::VFNMADD231PSZ256m , X86::VFNMADD231PSYm },
850 { X86::VFNMADD231PSZ256r , X86::VFNMADD231PSYr },
851 { X86::VFNMSUB132PDZ256m , X86::VFNMSUB132PDYm },
852 { X86::VFNMSUB132PDZ256r , X86::VFNMSUB132PDYr },
853 { X86::VFNMSUB132PSZ256m , X86::VFNMSUB132PSYm },
854 { X86::VFNMSUB132PSZ256r , X86::VFNMSUB132PSYr },
855 { X86::VFNMSUB213PDZ256m , X86::VFNMSUB213PDYm },
856 { X86::VFNMSUB213PDZ256r , X86::VFNMSUB213PDYr },
857 { X86::VFNMSUB213PSZ256m , X86::VFNMSUB213PSYm },
858 { X86::VFNMSUB213PSZ256r , X86::VFNMSUB213PSYr },
859 { X86::VFNMSUB231PDZ256m , X86::VFNMSUB231PDYm },
860 { X86::VFNMSUB231PDZ256r , X86::VFNMSUB231PDYr },
861 { X86::VFNMSUB231PSZ256m , X86::VFNMSUB231PSYm },
862 { X86::VFNMSUB231PSZ256r , X86::VFNMSUB231PSYr },
863 { X86::VINSERTF32x4Z256rm , X86::VINSERTF128rm },
864 { X86::VINSERTF64x2Z256rm , X86::VINSERTF128rm },
865 { X86::VINSERTF32x4Z256rr , X86::VINSERTF128rr },
866 { X86::VINSERTF64x2Z256rr , X86::VINSERTF128rr },
867 { X86::VINSERTI32x4Z256rm , X86::VINSERTI128rm },
868 { X86::VINSERTI64x2Z256rm , X86::VINSERTI128rm },
869 { X86::VINSERTI32x4Z256rr , X86::VINSERTI128rr },
870 { X86::VINSERTI64x2Z256rr , X86::VINSERTI128rr },
871 { X86::VMAXCPDZ256rm , X86::VMAXCPDYrm },
872 { X86::VMAXCPDZ256rr , X86::VMAXCPDYrr },
873 { X86::VMAXCPSZ256rm , X86::VMAXCPSYrm },
874 { X86::VMAXCPSZ256rr , X86::VMAXCPSYrr },
875 { X86::VMAXPDZ256rm , X86::VMAXCPDYrm },
876 { X86::VMAXPDZ256rr , X86::VMAXCPDYrr },
877 { X86::VMAXPSZ256rm , X86::VMAXCPSYrm },
878 { X86::VMAXPSZ256rr , X86::VMAXCPSYrr },
879 { X86::VMINCPDZ256rm , X86::VMINCPDYrm },
880 { X86::VMINCPDZ256rr , X86::VMINCPDYrr },
881 { X86::VMINCPSZ256rm , X86::VMINCPSYrm },
882 { X86::VMINCPSZ256rr , X86::VMINCPSYrr },
883 { X86::VMINPDZ256rm , X86::VMINCPDYrm },
884 { X86::VMINPDZ256rr , X86::VMINCPDYrr },
885 { X86::VMINPSZ256rm , X86::VMINCPSYrm },
886 { X86::VMINPSZ256rr , X86::VMINCPSYrr },
887 { X86::VMOVAPDZ256mr , X86::VMOVAPDYmr },
888 { X86::VMOVAPDZ256rm , X86::VMOVAPDYrm },
889 { X86::VMOVAPDZ256rr , X86::VMOVAPDYrr },
890 { X86::VMOVAPDZ256rr_REV , X86::VMOVAPDYrr_REV },
891 { X86::VMOVAPSZ256mr , X86::VMOVAPSYmr },
892 { X86::VMOVAPSZ256rm , X86::VMOVAPSYrm },
893 { X86::VMOVAPSZ256rr , X86::VMOVAPSYrr },
894 { X86::VMOVAPSZ256rr_REV , X86::VMOVAPSYrr_REV },
895 { X86::VMOVDDUPZ256rm , X86::VMOVDDUPYrm },
896 { X86::VMOVDDUPZ256rr , X86::VMOVDDUPYrr },
897 { X86::VMOVDQA32Z256mr , X86::VMOVDQAYmr },
898 { X86::VMOVDQA32Z256rm , X86::VMOVDQAYrm },
899 { X86::VMOVDQA32Z256rr , X86::VMOVDQAYrr },
900 { X86::VMOVDQA32Z256rr_REV , X86::VMOVDQAYrr_REV },
901 { X86::VMOVDQA64Z256mr , X86::VMOVDQAYmr },
902 { X86::VMOVDQA64Z256rm , X86::VMOVDQAYrm },
903 { X86::VMOVDQA64Z256rr , X86::VMOVDQAYrr },
904 { X86::VMOVDQA64Z256rr_REV , X86::VMOVDQAYrr_REV },
905 { X86::VMOVDQU16Z256mr , X86::VMOVDQUYmr },
906 { X86::VMOVDQU16Z256rm , X86::VMOVDQUYrm },
907 { X86::VMOVDQU16Z256rr , X86::VMOVDQUYrr },
908 { X86::VMOVDQU16Z256rr_REV , X86::VMOVDQUYrr_REV },
909 { X86::VMOVDQU32Z256mr , X86::VMOVDQUYmr },
910 { X86::VMOVDQU32Z256rm , X86::VMOVDQUYrm },
911 { X86::VMOVDQU32Z256rr , X86::VMOVDQUYrr },
912 { X86::VMOVDQU32Z256rr_REV , X86::VMOVDQUYrr_REV },
913 { X86::VMOVDQU64Z256mr , X86::VMOVDQUYmr },
914 { X86::VMOVDQU64Z256rm , X86::VMOVDQUYrm },
915 { X86::VMOVDQU64Z256rr , X86::VMOVDQUYrr },
916 { X86::VMOVDQU64Z256rr_REV , X86::VMOVDQUYrr_REV },
917 { X86::VMOVDQU8Z256mr , X86::VMOVDQUYmr },
918 { X86::VMOVDQU8Z256rm , X86::VMOVDQUYrm },
919 { X86::VMOVDQU8Z256rr , X86::VMOVDQUYrr },
920 { X86::VMOVDQU8Z256rr_REV , X86::VMOVDQUYrr_REV },
921 { X86::VMOVNTDQAZ256rm , X86::VMOVNTDQAYrm },
922 { X86::VMOVNTDQZ256mr , X86::VMOVNTDQYmr },
923 { X86::VMOVNTPDZ256mr , X86::VMOVNTPDYmr },
924 { X86::VMOVNTPSZ256mr , X86::VMOVNTPSYmr },
925 { X86::VMOVSHDUPZ256rm , X86::VMOVSHDUPYrm },
926 { X86::VMOVSHDUPZ256rr , X86::VMOVSHDUPYrr },
927 { X86::VMOVSLDUPZ256rm , X86::VMOVSLDUPYrm },
928 { X86::VMOVSLDUPZ256rr , X86::VMOVSLDUPYrr },
929 { X86::VMOVUPDZ256mr , X86::VMOVUPDYmr },
930 { X86::VMOVUPDZ256rm , X86::VMOVUPDYrm },
931 { X86::VMOVUPDZ256rr , X86::VMOVUPDYrr },
932 { X86::VMOVUPDZ256rr_REV , X86::VMOVUPDYrr_REV },
933 { X86::VMOVUPSZ256mr , X86::VMOVUPSYmr },
934 { X86::VMOVUPSZ256rm , X86::VMOVUPSYrm },
935 { X86::VMOVUPSZ256rr , X86::VMOVUPSYrr },
936 { X86::VMOVUPSZ256rr_REV , X86::VMOVUPSYrr_REV },
937 { X86::VMULPDZ256rm , X86::VMULPDYrm },
938 { X86::VMULPDZ256rr , X86::VMULPDYrr },
939 { X86::VMULPSZ256rm , X86::VMULPSYrm },
940 { X86::VMULPSZ256rr , X86::VMULPSYrr },
941 { X86::VORPDZ256rm , X86::VORPDYrm },
942 { X86::VORPDZ256rr , X86::VORPDYrr },
943 { X86::VORPSZ256rm , X86::VORPSYrm },
944 { X86::VORPSZ256rr , X86::VORPSYrr },
945 { X86::VPABSBZ256rm , X86::VPABSBYrm },
946 { X86::VPABSBZ256rr , X86::VPABSBYrr },
947 { X86::VPABSDZ256rm , X86::VPABSDYrm },
948 { X86::VPABSDZ256rr , X86::VPABSDYrr },
949 { X86::VPABSWZ256rm , X86::VPABSWYrm },
950 { X86::VPABSWZ256rr , X86::VPABSWYrr },
951 { X86::VPACKSSDWZ256rm , X86::VPACKSSDWYrm },
952 { X86::VPACKSSDWZ256rr , X86::VPACKSSDWYrr },
953 { X86::VPACKSSWBZ256rm , X86::VPACKSSWBYrm },
954 { X86::VPACKSSWBZ256rr , X86::VPACKSSWBYrr },
955 { X86::VPACKUSDWZ256rm , X86::VPACKUSDWYrm },
956 { X86::VPACKUSDWZ256rr , X86::VPACKUSDWYrr },
957 { X86::VPACKUSWBZ256rm , X86::VPACKUSWBYrm },
958 { X86::VPACKUSWBZ256rr , X86::VPACKUSWBYrr },
959 { X86::VPADDBZ256rm , X86::VPADDBYrm },
960 { X86::VPADDBZ256rr , X86::VPADDBYrr },
961 { X86::VPADDDZ256rm , X86::VPADDDYrm },
962 { X86::VPADDDZ256rr , X86::VPADDDYrr },
963 { X86::VPADDQZ256rm , X86::VPADDQYrm },
964 { X86::VPADDQZ256rr , X86::VPADDQYrr },
965 { X86::VPADDSBZ256rm , X86::VPADDSBYrm },
966 { X86::VPADDSBZ256rr , X86::VPADDSBYrr },
967 { X86::VPADDSWZ256rm , X86::VPADDSWYrm },
968 { X86::VPADDSWZ256rr , X86::VPADDSWYrr },
969 { X86::VPADDUSBZ256rm , X86::VPADDUSBYrm },
970 { X86::VPADDUSBZ256rr , X86::VPADDUSBYrr },
971 { X86::VPADDUSWZ256rm , X86::VPADDUSWYrm },
972 { X86::VPADDUSWZ256rr , X86::VPADDUSWYrr },
973 { X86::VPADDWZ256rm , X86::VPADDWYrm },
974 { X86::VPADDWZ256rr , X86::VPADDWYrr },
975 { X86::VPALIGNRZ256rmi , X86::VPALIGNRYrmi },
976 { X86::VPALIGNRZ256rri , X86::VPALIGNRYrri },
977 { X86::VPANDDZ256rm , X86::VPANDYrm },
978 { X86::VPANDDZ256rr , X86::VPANDYrr },
979 { X86::VPANDQZ256rm , X86::VPANDYrm },
980 { X86::VPANDQZ256rr , X86::VPANDYrr },
981 { X86::VPANDNDZ256rm , X86::VPANDNYrm },
982 { X86::VPANDNDZ256rr , X86::VPANDNYrr },
983 { X86::VPANDNQZ256rm , X86::VPANDNYrm },
984 { X86::VPANDNQZ256rr , X86::VPANDNYrr },
985 { X86::VPAVGBZ256rm , X86::VPAVGBYrm },
986 { X86::VPAVGBZ256rr , X86::VPAVGBYrr },
987 { X86::VPAVGWZ256rm , X86::VPAVGWYrm },
988 { X86::VPAVGWZ256rr , X86::VPAVGWYrr },
989 { X86::VPBROADCASTBZ256m , X86::VPBROADCASTBYrm },
990 { X86::VPBROADCASTBZ256r , X86::VPBROADCASTBYrr },
991 { X86::VPBROADCASTDZ256m , X86::VPBROADCASTDYrm },
992 { X86::VPBROADCASTDZ256r , X86::VPBROADCASTDYrr },
993 { X86::VPBROADCASTQZ256m , X86::VPBROADCASTQYrm },
994 { X86::VPBROADCASTQZ256r , X86::VPBROADCASTQYrr },
995 { X86::VPBROADCASTWZ256m , X86::VPBROADCASTWYrm },
996 { X86::VPBROADCASTWZ256r , X86::VPBROADCASTWYrr },
997 { X86::VPERMDZ256rm , X86::VPERMDYrm },
998 { X86::VPERMDZ256rr , X86::VPERMDYrr },
999 { X86::VPERMILPDZ256mi , X86::VPERMILPDYmi },
1000 { X86::VPERMILPDZ256ri , X86::VPERMILPDYri },
1001 { X86::VPERMILPDZ256rm , X86::VPERMILPDYrm },
1002 { X86::VPERMILPDZ256rr , X86::VPERMILPDYrr },
1003 { X86::VPERMILPSZ256mi , X86::VPERMILPSYmi },
1004 { X86::VPERMILPSZ256ri , X86::VPERMILPSYri },
1005 { X86::VPERMILPSZ256rm , X86::VPERMILPSYrm },
1006 { X86::VPERMILPSZ256rr , X86::VPERMILPSYrr },
1007 { X86::VPERMPDZ256mi , X86::VPERMPDYmi },
1008 { X86::VPERMPDZ256ri , X86::VPERMPDYri },
1009 { X86::VPERMPSZ256rm , X86::VPERMPSYrm },
1010 { X86::VPERMPSZ256rr , X86::VPERMPSYrr },
1011 { X86::VPERMQZ256mi , X86::VPERMQYmi },
1012 { X86::VPERMQZ256ri , X86::VPERMQYri },
1013 { X86::VPMADDUBSWZ256rm , X86::VPMADDUBSWYrm },
1014 { X86::VPMADDUBSWZ256rr , X86::VPMADDUBSWYrr },
1015 { X86::VPMADDWDZ256rm , X86::VPMADDWDYrm },
1016 { X86::VPMADDWDZ256rr , X86::VPMADDWDYrr },
1017 { X86::VPMAXSBZ256rm , X86::VPMAXSBYrm },
1018 { X86::VPMAXSBZ256rr , X86::VPMAXSBYrr },
1019 { X86::VPMAXSDZ256rm , X86::VPMAXSDYrm },
1020 { X86::VPMAXSDZ256rr , X86::VPMAXSDYrr },
1021 { X86::VPMAXSWZ256rm , X86::VPMAXSWYrm },
1022 { X86::VPMAXSWZ256rr , X86::VPMAXSWYrr },
1023 { X86::VPMAXUBZ256rm , X86::VPMAXUBYrm },
1024 { X86::VPMAXUBZ256rr , X86::VPMAXUBYrr },
1025 { X86::VPMAXUDZ256rm , X86::VPMAXUDYrm },
1026 { X86::VPMAXUDZ256rr , X86::VPMAXUDYrr },
1027 { X86::VPMAXUWZ256rm , X86::VPMAXUWYrm },
1028 { X86::VPMAXUWZ256rr , X86::VPMAXUWYrr },
1029 { X86::VPMINSBZ256rm , X86::VPMINSBYrm },
1030 { X86::VPMINSBZ256rr , X86::VPMINSBYrr },
1031 { X86::VPMINSDZ256rm , X86::VPMINSDYrm },
1032 { X86::VPMINSDZ256rr , X86::VPMINSDYrr },
1033 { X86::VPMINSWZ256rm , X86::VPMINSWYrm },
1034 { X86::VPMINSWZ256rr , X86::VPMINSWYrr },
1035 { X86::VPMINUBZ256rm , X86::VPMINUBYrm },
1036 { X86::VPMINUBZ256rr , X86::VPMINUBYrr },
1037 { X86::VPMINUDZ256rm , X86::VPMINUDYrm },
1038 { X86::VPMINUDZ256rr , X86::VPMINUDYrr },
1039 { X86::VPMINUWZ256rm , X86::VPMINUWYrm },
1040 { X86::VPMINUWZ256rr , X86::VPMINUWYrr },
1041 { X86::VPMOVSXBDZ256rm , X86::VPMOVSXBDYrm },
1042 { X86::VPMOVSXBDZ256rr , X86::VPMOVSXBDYrr },
1043 { X86::VPMOVSXBQZ256rm , X86::VPMOVSXBQYrm },
1044 { X86::VPMOVSXBQZ256rr , X86::VPMOVSXBQYrr },
1045 { X86::VPMOVSXBWZ256rm , X86::VPMOVSXBWYrm },
1046 { X86::VPMOVSXBWZ256rr , X86::VPMOVSXBWYrr },
1047 { X86::VPMOVSXDQZ256rm , X86::VPMOVSXDQYrm },
1048 { X86::VPMOVSXDQZ256rr , X86::VPMOVSXDQYrr },
1049 { X86::VPMOVSXWDZ256rm , X86::VPMOVSXWDYrm },
1050 { X86::VPMOVSXWDZ256rr , X86::VPMOVSXWDYrr },
1051 { X86::VPMOVSXWQZ256rm , X86::VPMOVSXWQYrm },
1052 { X86::VPMOVSXWQZ256rr , X86::VPMOVSXWQYrr },
1053 { X86::VPMOVZXBDZ256rm , X86::VPMOVZXBDYrm },
1054 { X86::VPMOVZXBDZ256rr , X86::VPMOVZXBDYrr },
1055 { X86::VPMOVZXBQZ256rm , X86::VPMOVZXBQYrm },
1056 { X86::VPMOVZXBQZ256rr , X86::VPMOVZXBQYrr },
1057 { X86::VPMOVZXBWZ256rm , X86::VPMOVZXBWYrm },
1058 { X86::VPMOVZXBWZ256rr , X86::VPMOVZXBWYrr },
1059 { X86::VPMOVZXDQZ256rm , X86::VPMOVZXDQYrm },
1060 { X86::VPMOVZXDQZ256rr , X86::VPMOVZXDQYrr },
1061 { X86::VPMOVZXWDZ256rm , X86::VPMOVZXWDYrm },
1062 { X86::VPMOVZXWDZ256rr , X86::VPMOVZXWDYrr },
1063 { X86::VPMOVZXWQZ256rm , X86::VPMOVZXWQYrm },
1064 { X86::VPMOVZXWQZ256rr , X86::VPMOVZXWQYrr },
1065 { X86::VPMULDQZ256rm , X86::VPMULDQYrm },
1066 { X86::VPMULDQZ256rr , X86::VPMULDQYrr },
1067 { X86::VPMULHRSWZ256rm , X86::VPMULHRSWYrm },
1068 { X86::VPMULHRSWZ256rr , X86::VPMULHRSWYrr },
1069 { X86::VPMULHUWZ256rm , X86::VPMULHUWYrm },
1070 { X86::VPMULHUWZ256rr , X86::VPMULHUWYrr },
1071 { X86::VPMULHWZ256rm , X86::VPMULHWYrm },
1072 { X86::VPMULHWZ256rr , X86::VPMULHWYrr },
1073 { X86::VPMULLDZ256rm , X86::VPMULLDYrm },
1074 { X86::VPMULLDZ256rr , X86::VPMULLDYrr },
1075 { X86::VPMULLWZ256rm , X86::VPMULLWYrm },
1076 { X86::VPMULLWZ256rr , X86::VPMULLWYrr },
1077 { X86::VPMULUDQZ256rm , X86::VPMULUDQYrm },
1078 { X86::VPMULUDQZ256rr , X86::VPMULUDQYrr },
1079 { X86::VPORDZ256rm , X86::VPORYrm },
1080 { X86::VPORDZ256rr , X86::VPORYrr },
1081 { X86::VPORQZ256rm , X86::VPORYrm },
1082 { X86::VPORQZ256rr , X86::VPORYrr },
1083 { X86::VPSADBWZ256rm , X86::VPSADBWYrm },
1084 { X86::VPSADBWZ256rr , X86::VPSADBWYrr },
1085 { X86::VPSHUFBZ256rm , X86::VPSHUFBYrm },
1086 { X86::VPSHUFBZ256rr , X86::VPSHUFBYrr },
1087 { X86::VPSHUFDZ256mi , X86::VPSHUFDYmi },
1088 { X86::VPSHUFDZ256ri , X86::VPSHUFDYri },
1089 { X86::VPSHUFHWZ256mi , X86::VPSHUFHWYmi },
1090 { X86::VPSHUFHWZ256ri , X86::VPSHUFHWYri },
1091 { X86::VPSHUFLWZ256mi , X86::VPSHUFLWYmi },
1092 { X86::VPSHUFLWZ256ri , X86::VPSHUFLWYri },
1093 { X86::VPSLLDQZ256rr , X86::VPSLLDQYri },
1094 { X86::VPSLLDZ256ri , X86::VPSLLDYri },
1095 { X86::VPSLLDZ256rm , X86::VPSLLDYrm },
1096 { X86::VPSLLDZ256rr , X86::VPSLLDYrr },
1097 { X86::VPSLLQZ256ri , X86::VPSLLQYri },
1098 { X86::VPSLLQZ256rm , X86::VPSLLQYrm },
1099 { X86::VPSLLQZ256rr , X86::VPSLLQYrr },
1100 { X86::VPSLLVDZ256rm , X86::VPSLLVDYrm },
1101 { X86::VPSLLVDZ256rr , X86::VPSLLVDYrr },
1102 { X86::VPSLLVQZ256rm , X86::VPSLLVQYrm },
1103 { X86::VPSLLVQZ256rr , X86::VPSLLVQYrr },
1104 { X86::VPSLLWZ256ri , X86::VPSLLWYri },
1105 { X86::VPSLLWZ256rm , X86::VPSLLWYrm },
1106 { X86::VPSLLWZ256rr , X86::VPSLLWYrr },
1107 { X86::VPSRADZ256ri , X86::VPSRADYri },
1108 { X86::VPSRADZ256rm , X86::VPSRADYrm },
1109 { X86::VPSRADZ256rr , X86::VPSRADYrr },
1110 { X86::VPSRAVDZ256rm , X86::VPSRAVDYrm },
1111 { X86::VPSRAVDZ256rr , X86::VPSRAVDYrr },
1112 { X86::VPSRAWZ256ri , X86::VPSRAWYri },
1113 { X86::VPSRAWZ256rm , X86::VPSRAWYrm },
1114 { X86::VPSRAWZ256rr , X86::VPSRAWYrr },
1115 { X86::VPSRLDQZ256rr , X86::VPSRLDQYri },
1116 { X86::VPSRLDZ256ri , X86::VPSRLDYri },
1117 { X86::VPSRLDZ256rm , X86::VPSRLDYrm },
1118 { X86::VPSRLDZ256rr , X86::VPSRLDYrr },
1119 { X86::VPSRLQZ256ri , X86::VPSRLQYri },
1120 { X86::VPSRLQZ256rm , X86::VPSRLQYrm },
1121 { X86::VPSRLQZ256rr , X86::VPSRLQYrr },
1122 { X86::VPSRLVDZ256rm , X86::VPSRLVDYrm },
1123 { X86::VPSRLVDZ256rr , X86::VPSRLVDYrr },
1124 { X86::VPSRLVQZ256rm , X86::VPSRLVQYrm },
1125 { X86::VPSRLVQZ256rr , X86::VPSRLVQYrr },
1126 { X86::VPSRLWZ256ri , X86::VPSRLWYri },
1127 { X86::VPSRLWZ256rm , X86::VPSRLWYrm },
1128 { X86::VPSRLWZ256rr , X86::VPSRLWYrr },
1129 { X86::VPSUBBZ256rm , X86::VPSUBBYrm },
1130 { X86::VPSUBBZ256rr , X86::VPSUBBYrr },
1131 { X86::VPSUBDZ256rm , X86::VPSUBDYrm },
1132 { X86::VPSUBDZ256rr , X86::VPSUBDYrr },
1133 { X86::VPSUBQZ256rm , X86::VPSUBQYrm },
1134 { X86::VPSUBQZ256rr , X86::VPSUBQYrr },
1135 { X86::VPSUBSBZ256rm , X86::VPSUBSBYrm },
1136 { X86::VPSUBSBZ256rr , X86::VPSUBSBYrr },
1137 { X86::VPSUBSWZ256rm , X86::VPSUBSWYrm },
1138 { X86::VPSUBSWZ256rr , X86::VPSUBSWYrr },
1139 { X86::VPSUBUSBZ256rm , X86::VPSUBUSBYrm },
1140 { X86::VPSUBUSBZ256rr , X86::VPSUBUSBYrr },
1141 { X86::VPSUBUSWZ256rm , X86::VPSUBUSWYrm },
1142 { X86::VPSUBUSWZ256rr , X86::VPSUBUSWYrr },
1143 { X86::VPSUBWZ256rm , X86::VPSUBWYrm },
1144 { X86::VPSUBWZ256rr , X86::VPSUBWYrr },
1145 { X86::VPUNPCKHBWZ256rm , X86::VPUNPCKHBWYrm },
1146 { X86::VPUNPCKHBWZ256rr , X86::VPUNPCKHBWYrr },
1147 { X86::VPUNPCKHDQZ256rm , X86::VPUNPCKHDQYrm },
1148 { X86::VPUNPCKHDQZ256rr , X86::VPUNPCKHDQYrr },
1149 { X86::VPUNPCKHQDQZ256rm , X86::VPUNPCKHQDQYrm },
1150 { X86::VPUNPCKHQDQZ256rr , X86::VPUNPCKHQDQYrr },
1151 { X86::VPUNPCKHWDZ256rm , X86::VPUNPCKHWDYrm },
1152 { X86::VPUNPCKHWDZ256rr , X86::VPUNPCKHWDYrr },
1153 { X86::VPUNPCKLBWZ256rm , X86::VPUNPCKLBWYrm },
1154 { X86::VPUNPCKLBWZ256rr , X86::VPUNPCKLBWYrr },
1155 { X86::VPUNPCKLDQZ256rm , X86::VPUNPCKLDQYrm },
1156 { X86::VPUNPCKLDQZ256rr , X86::VPUNPCKLDQYrr },
1157 { X86::VPUNPCKLQDQZ256rm , X86::VPUNPCKLQDQYrm },
1158 { X86::VPUNPCKLQDQZ256rr , X86::VPUNPCKLQDQYrr },
1159 { X86::VPUNPCKLWDZ256rm , X86::VPUNPCKLWDYrm },
1160 { X86::VPUNPCKLWDZ256rr , X86::VPUNPCKLWDYrr },
1161 { X86::VPXORDZ256rm , X86::VPXORYrm },
1162 { X86::VPXORDZ256rr , X86::VPXORYrr },
1163 { X86::VPXORQZ256rm , X86::VPXORYrm },
1164 { X86::VPXORQZ256rr , X86::VPXORYrr },
1165 { X86::VSHUFPDZ256rmi , X86::VSHUFPDYrmi },
1166 { X86::VSHUFPDZ256rri , X86::VSHUFPDYrri },
1167 { X86::VSHUFPSZ256rmi , X86::VSHUFPSYrmi },
1168 { X86::VSHUFPSZ256rri , X86::VSHUFPSYrri },
1169 { X86::VSQRTPDZ256m , X86::VSQRTPDYm },
1170 { X86::VSQRTPDZ256r , X86::VSQRTPDYr },
1171 { X86::VSQRTPSZ256m , X86::VSQRTPSYm },
1172 { X86::VSQRTPSZ256r , X86::VSQRTPSYr },
1173 { X86::VSUBPDZ256rm , X86::VSUBPDYrm },
1174 { X86::VSUBPDZ256rr , X86::VSUBPDYrr },
1175 { X86::VSUBPSZ256rm , X86::VSUBPSYrm },
1176 { X86::VSUBPSZ256rr , X86::VSUBPSYrr },
1177 { X86::VUNPCKHPDZ256rm , X86::VUNPCKHPDYrm },
1178 { X86::VUNPCKHPDZ256rr , X86::VUNPCKHPDYrr },
1179 { X86::VUNPCKHPSZ256rm , X86::VUNPCKHPSYrm },
1180 { X86::VUNPCKHPSZ256rr , X86::VUNPCKHPSYrr },
1181 { X86::VUNPCKLPDZ256rm , X86::VUNPCKLPDYrm },
1182 { X86::VUNPCKLPDZ256rr , X86::VUNPCKLPDYrr },
1183 { X86::VUNPCKLPSZ256rm , X86::VUNPCKLPSYrm },
1184 { X86::VUNPCKLPSZ256rr , X86::VUNPCKLPSYrr },
1185 { X86::VXORPDZ256rm , X86::VXORPDYrm },
1186 { X86::VXORPDZ256rr , X86::VXORPDYrr },
1187 { X86::VXORPSZ256rm , X86::VXORPSYrm },
1188 { X86::VXORPSZ256rr , X86::VXORPSYrr },
1189 };
1190
1191 #endif
3434 TableGen.cpp
3535 Types.cpp
3636 X86DisassemblerTables.cpp
37 X86EVEX2VEXTablesEmitter.cpp
3738 X86ModRMFilters.cpp
3839 X86RecognizableInstr.cpp
3940 CTagsEmitter.cpp
4545 GenAttributes,
4646 GenSearchableTables,
4747 GenGlobalISel,
48 GenX86EVEX2VEXTables,
4849 GenRegisterBank,
4950 };
5051
9596 "Generate generic binary-searchable table"),
9697 clEnumValN(GenGlobalISel, "gen-global-isel",
9798 "Generate GlobalISel selector"),
99 clEnumValN(GenX86EVEX2VEXTables, "gen-x86-EVEX2VEX-tables",
100 "Generate X86 EVEX to VEX compress tables"),
98101 clEnumValN(GenRegisterBank, "gen-register-bank",
99102 "Generate registers bank descriptions")));
100103
188191 case GenRegisterBank:
189192 EmitRegisterBank(Records, OS);
190193 break;
194 case GenX86EVEX2VEXTables:
195 EmitX86EVEX2VEXTables(Records, OS);
196 break;
191197 }
192198
193199 return false;
8080 void EmitAttributes(RecordKeeper &RK, raw_ostream &OS);
8181 void EmitSearchableTables(RecordKeeper &RK, raw_ostream &OS);
8282 void EmitGlobalISel(RecordKeeper &RK, raw_ostream &OS);
83 void EmitX86EVEX2VEXTables(RecordKeeper &RK, raw_ostream &OS);
8384 void EmitRegisterBank(RecordKeeper &RK, raw_ostream &OS);
8485
8586 } // End llvm namespace
0 //===- utils/TableGen/X86EVEX2VEXTablesEmitter.cpp - X86 backend-*- C++ -*-===//
1 //
2 // The LLVM Compiler Infrastructure
3 //
4 // This file is distributed under the University of Illinois Open Source
5 // License. See LICENSE.TXT for details.
6 //
7 //===----------------------------------------------------------------------===//
8 ///
9 /// This tablegen backend is responsible for emitting the X86 backend EVEX2VEX
10 /// compression tables.
11 ///
12 //===----------------------------------------------------------------------===//
13
14 #include "CodeGenDAGPatterns.h"
15 #include "CodeGenTarget.h"
16 #include "llvm/TableGen/Error.h"
17 #include "llvm/TableGen/TableGenBackend.h"
18
19 using namespace llvm;
20
21 namespace {
22
23 class X86EVEX2VEXTablesEmitter {
24 RecordKeeper &Records;
25 CodeGenTarget Target;
26
27 // Hold all non-masked & non-broadcasted EVEX encoded instructions
28 std::vector EVEXInsts;
29 // Hold all VEX encoded instructions. Divided into groups with same opcodes
30 // to make the search more efficient
31 std::map> VEXInsts;
32
33 typedef std::pair Entry;
34
35 // Represent both compress tables
36 std::vector EVEX2VEX128;
37 std::vector EVEX2VEX256;
38
39 // Represents a manually added entry to the tables
40 class ManualEntry {
41 public:
42 std::string EVEXInstStr;
43 std::string VEXInstStr;
44 bool Is128Bit;
45
46 ManualEntry(std::string EVEXInstStr, std::string VEXInstStr, bool Is128Bit)
47 : EVEXInstStr(EVEXInstStr), VEXInstStr(VEXInstStr), Is128Bit(Is128Bit) {
48 }
49 };
50
51 public:
52 X86EVEX2VEXTablesEmitter(RecordKeeper &R) : Records(R), Target(R) {}
53
54 // run - Output X86 EVEX2VEX tables.
55 void run(raw_ostream &OS);
56
57 private:
58 // Prints the given table as a C++ array of type
59 // X86EvexToVexCompressTableEntry
60 void printTable(const std::vector &Table, raw_ostream &OS);
61
62 // List of EVEX instructions that match VEX instructions by the encoding
63 // but do not perform the same operation.
64 const std::vector ExceptionList = {
65 "VCVTQQ2PD",
66 "VCVTQQ2PS",
67 "VPMAXSQ",
68 "VPMAXUQ",
69 "VPMINSQ",
70 "VPMINUQ",
71 "VPMULLQ",
72 "VPSRAQ",
73 "VDBPSADBW",
74 "VRNDSCALE",
75 "VSCALEFPS"
76 };
77
78 bool inExceptionList(const CodeGenInstruction *Inst) {
79 // Instruction's name starts with one of the entries in the exception list
80 for (const std::string& InstStr : ExceptionList) {
81 if (Inst->TheDef->getName().startswith(InstStr))
82 return true;
83 }
84 return false;
85 }
86
87 // Some VEX instructions were duplicated to multiple EVEX versions due the
88 // introduction of mask variants, and thus some of the EVEX versions have
89 // different encoding than the VEX instruction. In order to maximize the
90 // compression we add these entries manually.
91 const std::vector ManuallyAddedEntries = {
92 // EVEX-Inst VEX-Inst Is128-bit
93 {"VMOVDQU8Z128mr", "VMOVDQUmr", true},
94 {"VMOVDQU8Z128rm", "VMOVDQUrm", true},
95 {"VMOVDQU8Z128rr", "VMOVDQUrr", true},
96 {"VMOVDQU8Z128rr_REV", "VMOVDQUrr_REV", true},
97 {"VMOVDQU16Z128mr", "VMOVDQUmr", true},
98 {"VMOVDQU16Z128rm", "VMOVDQUrm", true},
99 {"VMOVDQU16Z128rr", "VMOVDQUrr", true},
100 {"VMOVDQU16Z128rr_REV", "VMOVDQUrr_REV", true},
101 {"VMOVDQU8Z256mr", "VMOVDQUYmr", false},
102 {"VMOVDQU8Z256rm", "VMOVDQUYrm", false},
103 {"VMOVDQU8Z256rr", "VMOVDQUYrr", false},
104 {"VMOVDQU8Z256rr_REV", "VMOVDQUYrr_REV", false},
105 {"VMOVDQU16Z256mr", "VMOVDQUYmr", false},
106 {"VMOVDQU16Z256rm", "VMOVDQUYrm", false},
107 {"VMOVDQU16Z256rr", "VMOVDQUYrr", false},
108 {"VMOVDQU16Z256rr_REV", "VMOVDQUYrr_REV", false},
109
110 {"VPERMILPDZ128mi", "VPERMILPDmi", true},
111 {"VPERMILPDZ128ri", "VPERMILPDri", true},
112 {"VPERMILPDZ128rm", "VPERMILPDrm", true},
113 {"VPERMILPDZ128rr", "VPERMILPDrr", true},
114 {"VPERMILPDZ256mi", "VPERMILPDYmi", false},
115 {"VPERMILPDZ256ri", "VPERMILPDYri", false},
116 {"VPERMILPDZ256rm", "VPERMILPDYrm", false},
117 {"VPERMILPDZ256rr", "VPERMILPDYrr", false},
118
119 {"VPBROADCASTQZ128m", "VPBROADCASTQrm", true},
120 {"VPBROADCASTQZ128r", "VPBROADCASTQrr", true},
121 {"VPBROADCASTQZ256m", "VPBROADCASTQYrm", false},
122 {"VPBROADCASTQZ256r", "VPBROADCASTQYrr", false},
123
124 {"VBROADCASTSDZ256m", "VBROADCASTSDYrm", false},
125 {"VBROADCASTSDZ256r", "VBROADCASTSDYrr", false},
126
127 {"VEXTRACTF64x2Z256mr", "VEXTRACTF128mr", false},
128 {"VEXTRACTF64x2Z256rr", "VEXTRACTF128rr", false},
129 {"VEXTRACTI64x2Z256mr", "VEXTRACTI128mr", false},
130 {"VEXTRACTI64x2Z256rr", "VEXTRACTI128rr", false},
131
132 {"VINSERTF64x2Z256rm", "VINSERTF128rm", false},
133 {"VINSERTF64x2Z256rr", "VINSERTF128rr", false},
134 {"VINSERTI64x2Z256rm", "VINSERTI128rm", false},
135 {"VINSERTI64x2Z256rr", "VINSERTI128rr", false}
136 };
137 };
138
139 void X86EVEX2VEXTablesEmitter::printTable(const std::vector &Table,
140 raw_ostream &OS) {
141 std::string Size = (Table == EVEX2VEX128) ? "128" : "256";
142
143 OS << "// X86 EVEX encoded instructions that have a VEX " << Size
144 << " encoding\n"
145 << "// (table format: ).\n"
146 << "static const X86EvexToVexCompressTableEntry X86EvexToVex" << Size
147 << "CompressTable[] = {\n"
148 << " // EVEX scalar with corresponding VEX.\n";
149
150 // Print all entries added to the table
151 for (auto Pair : Table) {
152 OS << "{ X86::" << Pair.first->TheDef->getName()
153 << ", X86::" << Pair.second->TheDef->getName() << " },\n";
154 }
155
156 // Print the manually added entries
157 for (const ManualEntry &Entry : ManuallyAddedEntries) {
158 if ((Table == EVEX2VEX128 && Entry.Is128Bit) ||
159 (Table == EVEX2VEX256 && !Entry.Is128Bit)) {
160 OS << "{ X86::" << Entry.EVEXInstStr << ", X86::" << Entry.VEXInstStr
161 << " },\n";
162 }
163 }
164
165 OS << "};\n\n";
166 }
167
168 // Return true if the 2 BitsInits are equal
169 static inline bool equalBitsInits(const BitsInit *B1, const BitsInit *B2) {
170 if (B1->getNumBits() != B2->getNumBits())
171 PrintFatalError("Comparing two BitsInits with different sizes!");
172
173 for (unsigned i = 0, e = B1->getNumBits(); i != e; ++i) {
174 if (BitInit *Bit1 = dyn_cast(B1->getBit(i))) {
175 if (BitInit *Bit2 = dyn_cast(B2->getBit(i))) {
176 if (Bit1->getValue() != Bit2->getValue())
177 return false;
178 } else
179 PrintFatalError("Invalid BitsInit bit");
180 } else
181 PrintFatalError("Invalid BitsInit bit");
182 }
183 return true;
184 }
185
186 // Calculates the integer value residing BitsInit object
187 static inline uint64_t getValueFromBitsInit(const BitsInit *B) {
188 uint64_t Value = 0;
189 for (unsigned i = 0, e = B->getNumBits(); i != e; ++i) {
190 if (BitInit *Bit = dyn_cast(B->getBit(i)))
191 Value |= uint64_t(Bit->getValue()) << i;
192 else
193 PrintFatalError("Invalid VectSize bit");
194 }
195 return Value;
196 }
197
198 // Function object - Operator() returns true if the given VEX instruction
199 // matches the EVEX instruction of this object.
200 class IsMatch {
201 const CodeGenInstruction *Inst;
202
203 public:
204 IsMatch(const CodeGenInstruction *Inst) : Inst(Inst) {}
205
206 bool operator()(const CodeGenInstruction *Inst2) {
207 Record *Rec1 = Inst->TheDef;
208 Record *Rec2 = Inst2->TheDef;
209 uint64_t Rec1WVEX =
210 getValueFromBitsInit(Rec1->getValueAsBitsInit("VEX_WPrefix"));
211 uint64_t Rec2WVEX =
212 getValueFromBitsInit(Rec2->getValueAsBitsInit("VEX_WPrefix"));
213
214 if (Rec2->getValueAsDef("OpEnc")->getName().str() != "EncVEX" ||
215 // VEX/EVEX fields
216 Rec2->getValueAsDef("OpPrefix") != Rec1->getValueAsDef("OpPrefix") ||
217 Rec2->getValueAsDef("OpMap") != Rec1->getValueAsDef("OpMap") ||
218 Rec2->getValueAsBit("hasVEX_4V") != Rec1->getValueAsBit("hasVEX_4V") ||
219 !equalBitsInits(Rec2->getValueAsBitsInit("EVEX_LL"),
220 Rec1->getValueAsBitsInit("EVEX_LL")) ||
221 (Rec1WVEX != 2 && Rec2WVEX != 2 && Rec1WVEX != Rec2WVEX) ||
222 // Instruction's format
223 Rec2->getValueAsDef("Form") != Rec1->getValueAsDef("Form") ||
224 Rec2->getValueAsBit("isAsmParserOnly") !=
225 Rec1->getValueAsBit("isAsmParserOnly"))
226 return false;
227
228 // This is needed for instructions with intrinsic version (_Int).
229 // Where the only difference is the size of the operands.
230 // For example: VUCOMISDZrm and Int_VUCOMISDrm
231 // Also for instructions that their EVEX version was upgraded to work with
232 // k-registers. For example VPCMPEQBrm (xmm output register) and
233 // VPCMPEQBZ128rm (k register output register).
234 for (unsigned i = 0; i < Inst->Operands.size(); i++) {
235 Record *OpRec1 = Inst->Operands[i].Rec;
236 Record *OpRec2 = Inst2->Operands[i].Rec;
237
238 if (OpRec1 == OpRec2)
239 continue;
240
241 if (isRegisterOperand(OpRec1) && isRegisterOperand(OpRec2)) {
242 if (getRegOperandSize(OpRec1) != getRegOperandSize(OpRec2))
243 return false;
244 } else if (isMemoryOperand(OpRec1) && isMemoryOperand(OpRec2)) {
245 return false;
246 } else if (isImmediateOperand(OpRec1) && isImmediateOperand(OpRec2)) {
247 if (OpRec1->getValueAsDef("Type") != OpRec2->getValueAsDef("Type"))
248 return false;
249 } else
250 return false;
251 }
252
253 return true;
254 }
255
256 private:
257 static inline bool isRegisterOperand(const Record *Rec) {
258 return Rec->isSubClassOf("RegisterClass") ||
259 Rec->isSubClassOf("RegisterOperand");
260 }
261
262 static inline bool isMemoryOperand(const Record *Rec) {
263 return Rec->isSubClassOf("Operand") &&
264 Rec->getValueAsString("OperandType") == "OPERAND_MEMORY";
265 }
266
267 static inline bool isImmediateOperand(const Record *Rec) {
268 return Rec->isSubClassOf("Operand") &&
269 Rec->getValueAsString("OperandType") == "OPERAND_IMMEDIATE";
270 }
271
272 static inline unsigned int getRegOperandSize(const Record *RegRec) {
273 if (RegRec->isSubClassOf("RegisterClass"))
274 return RegRec->getValueAsInt("Alignment");
275 if (RegRec->isSubClassOf("RegisterOperand"))
276 return RegRec->getValueAsDef("RegClass")->getValueAsInt("Alignment");
277
278 llvm_unreachable("Register operand's size not known!");
279 }
280 };
281
282 void X86EVEX2VEXTablesEmitter::run(raw_ostream &OS) {
283 emitSourceFileHeader("X86 EVEX2VEX tables", OS);
284
285 ArrayRef NumberedInstructions =
286 Target.getInstructionsByEnumValue();
287
288 for (const CodeGenInstruction *Inst : NumberedInstructions) {
289 // Filter non-X86 instructions.
290 if (!Inst->TheDef->isSubClassOf("X86Inst"))
291 continue;
292
293 // Add VEX encoded instructions to one of VEXInsts vectors according to
294 // it's opcode.
295 if (Inst->TheDef->getValueAsDef("OpEnc")->getName() == "EncVEX") {
296 uint64_t Opcode = getValueFromBitsInit(Inst->TheDef->
297 getValueAsBitsInit("Opcode"));
298 VEXInsts[Opcode].push_back(Inst);
299 }
300 // Add relevant EVEX encoded instructions to EVEXInsts
301 else if (Inst->TheDef->getValueAsDef("OpEnc")->getName() == "EncEVEX" &&
302 !Inst->TheDef->getValueAsBit("hasEVEX_K") &&
303 !Inst->TheDef->getValueAsBit("hasEVEX_B") &&
304 getValueFromBitsInit(Inst->TheDef->
305 getValueAsBitsInit("EVEX_LL")) != 2 &&
306 !inExceptionList(Inst))
307 EVEXInsts.push_back(Inst);
308 }
309
310 for (const CodeGenInstruction *EVEXInst : EVEXInsts) {
311 uint64_t Opcode = getValueFromBitsInit(EVEXInst->TheDef->
312 getValueAsBitsInit("Opcode"));
313 // For each EVEX instruction look for a VEX match in the appropriate vector
314 // (instructions with the same opcode) using function object IsMatch.
315 auto Match = llvm::find_if(VEXInsts[Opcode], IsMatch(EVEXInst));
316 if (Match != VEXInsts[Opcode].end()) {
317 const CodeGenInstruction *VEXInst = *Match;
318
319 // In case a match is found add new entry to the appropriate table
320 switch (getValueFromBitsInit(
321 EVEXInst->TheDef->getValueAsBitsInit("EVEX_LL"))) {
322 case 0:
323 EVEX2VEX128.push_back(std::make_pair(EVEXInst, VEXInst)); // {0,0}
324 break;
325 case 1:
326 EVEX2VEX256.push_back(std::make_pair(EVEXInst, VEXInst)); // {0,1}
327 break;
328 default:
329 llvm_unreachable("Instruction's size not fit for the mapping!");
330 }
331 }
332 }
333
334 // Print both tables
335 printTable(EVEX2VEX128, OS);
336 printTable(EVEX2VEX256, OS);
337 }
338 }
339
340 namespace llvm {
341 void EmitX86EVEX2VEXTables(RecordKeeper &RK, raw_ostream &OS) {
342 X86EVEX2VEXTablesEmitter(RK).run(OS);
343 }
344 }