Commit | Line | Data |
---|---|---|
b2441318 | 1 | // SPDX-License-Identifier: GPL-2.0 |
98e4619f AH |
2 | /* |
3 | * This file contains instructions for testing by the test titled: | |
4 | * | |
5 | * "Test x86 instruction decoder - new instructions" | |
6 | * | |
7 | * Note that the 'Expecting' comment lines are consumed by the | |
8 | * gen-insn-x86-dat.awk script and have the format: | |
9 | * | |
10 | * Expecting: <op> <branch> <rel> | |
11 | * | |
12 | * If this file is changed, remember to run the gen-insn-x86-dat.sh | |
13 | * script and commit the result. | |
14 | * | |
15 | * Refer to insn-x86.c for more details. | |
16 | */ | |
17 | ||
18 | int main(void) | |
19 | { | |
20 | /* Following line is a marker for the awk script - do not change */ | |
21 | asm volatile("rdtsc"); /* Start here */ | |
22 | ||
6f6ef07f AH |
23 | /* Test fix for vcvtph2ps in x86-opcode-map.txt */ |
24 | ||
25 | asm volatile("vcvtph2ps %xmm3,%ymm5"); | |
26 | ||
98e4619f AH |
27 | #ifdef __x86_64__ |
28 | ||
6c4d0b41 AH |
29 | /* AVX-512: Instructions with the same op codes as Mask Instructions */ |
30 | ||
31 | asm volatile("cmovno %rax,%rbx"); | |
32 | asm volatile("cmovno 0x12345678(%rax),%rcx"); | |
33 | asm volatile("cmovno 0x12345678(%rax),%cx"); | |
34 | ||
35 | asm volatile("cmove %rax,%rbx"); | |
36 | asm volatile("cmove 0x12345678(%rax),%rcx"); | |
37 | asm volatile("cmove 0x12345678(%rax),%cx"); | |
38 | ||
39 | asm volatile("seto 0x12345678(%rax)"); | |
40 | asm volatile("setno 0x12345678(%rax)"); | |
41 | asm volatile("setb 0x12345678(%rax)"); | |
42 | asm volatile("setc 0x12345678(%rax)"); | |
43 | asm volatile("setnae 0x12345678(%rax)"); | |
44 | asm volatile("setae 0x12345678(%rax)"); | |
45 | asm volatile("setnb 0x12345678(%rax)"); | |
46 | asm volatile("setnc 0x12345678(%rax)"); | |
47 | asm volatile("sets 0x12345678(%rax)"); | |
48 | asm volatile("setns 0x12345678(%rax)"); | |
49 | ||
50 | /* AVX-512: Mask Instructions */ | |
51 | ||
52 | asm volatile("kandw %k7,%k6,%k5"); | |
53 | asm volatile("kandq %k7,%k6,%k5"); | |
54 | asm volatile("kandb %k7,%k6,%k5"); | |
55 | asm volatile("kandd %k7,%k6,%k5"); | |
56 | ||
57 | asm volatile("kandnw %k7,%k6,%k5"); | |
58 | asm volatile("kandnq %k7,%k6,%k5"); | |
59 | asm volatile("kandnb %k7,%k6,%k5"); | |
60 | asm volatile("kandnd %k7,%k6,%k5"); | |
61 | ||
62 | asm volatile("knotw %k7,%k6"); | |
63 | asm volatile("knotq %k7,%k6"); | |
64 | asm volatile("knotb %k7,%k6"); | |
65 | asm volatile("knotd %k7,%k6"); | |
66 | ||
67 | asm volatile("korw %k7,%k6,%k5"); | |
68 | asm volatile("korq %k7,%k6,%k5"); | |
69 | asm volatile("korb %k7,%k6,%k5"); | |
70 | asm volatile("kord %k7,%k6,%k5"); | |
71 | ||
72 | asm volatile("kxnorw %k7,%k6,%k5"); | |
73 | asm volatile("kxnorq %k7,%k6,%k5"); | |
74 | asm volatile("kxnorb %k7,%k6,%k5"); | |
75 | asm volatile("kxnord %k7,%k6,%k5"); | |
76 | ||
77 | asm volatile("kxorw %k7,%k6,%k5"); | |
78 | asm volatile("kxorq %k7,%k6,%k5"); | |
79 | asm volatile("kxorb %k7,%k6,%k5"); | |
80 | asm volatile("kxord %k7,%k6,%k5"); | |
81 | ||
82 | asm volatile("kaddw %k7,%k6,%k5"); | |
83 | asm volatile("kaddq %k7,%k6,%k5"); | |
84 | asm volatile("kaddb %k7,%k6,%k5"); | |
85 | asm volatile("kaddd %k7,%k6,%k5"); | |
86 | ||
87 | asm volatile("kunpckbw %k7,%k6,%k5"); | |
88 | asm volatile("kunpckwd %k7,%k6,%k5"); | |
89 | asm volatile("kunpckdq %k7,%k6,%k5"); | |
90 | ||
91 | asm volatile("kmovw %k6,%k5"); | |
92 | asm volatile("kmovw (%rcx),%k5"); | |
93 | asm volatile("kmovw 0x123(%rax,%r14,8),%k5"); | |
94 | asm volatile("kmovw %k5,(%rcx)"); | |
95 | asm volatile("kmovw %k5,0x123(%rax,%r14,8)"); | |
96 | asm volatile("kmovw %eax,%k5"); | |
97 | asm volatile("kmovw %ebp,%k5"); | |
98 | asm volatile("kmovw %r13d,%k5"); | |
99 | asm volatile("kmovw %k5,%eax"); | |
100 | asm volatile("kmovw %k5,%ebp"); | |
101 | asm volatile("kmovw %k5,%r13d"); | |
102 | ||
103 | asm volatile("kmovq %k6,%k5"); | |
104 | asm volatile("kmovq (%rcx),%k5"); | |
105 | asm volatile("kmovq 0x123(%rax,%r14,8),%k5"); | |
106 | asm volatile("kmovq %k5,(%rcx)"); | |
107 | asm volatile("kmovq %k5,0x123(%rax,%r14,8)"); | |
108 | asm volatile("kmovq %rax,%k5"); | |
109 | asm volatile("kmovq %rbp,%k5"); | |
110 | asm volatile("kmovq %r13,%k5"); | |
111 | asm volatile("kmovq %k5,%rax"); | |
112 | asm volatile("kmovq %k5,%rbp"); | |
113 | asm volatile("kmovq %k5,%r13"); | |
114 | ||
115 | asm volatile("kmovb %k6,%k5"); | |
116 | asm volatile("kmovb (%rcx),%k5"); | |
117 | asm volatile("kmovb 0x123(%rax,%r14,8),%k5"); | |
118 | asm volatile("kmovb %k5,(%rcx)"); | |
119 | asm volatile("kmovb %k5,0x123(%rax,%r14,8)"); | |
120 | asm volatile("kmovb %eax,%k5"); | |
121 | asm volatile("kmovb %ebp,%k5"); | |
122 | asm volatile("kmovb %r13d,%k5"); | |
123 | asm volatile("kmovb %k5,%eax"); | |
124 | asm volatile("kmovb %k5,%ebp"); | |
125 | asm volatile("kmovb %k5,%r13d"); | |
126 | ||
127 | asm volatile("kmovd %k6,%k5"); | |
128 | asm volatile("kmovd (%rcx),%k5"); | |
129 | asm volatile("kmovd 0x123(%rax,%r14,8),%k5"); | |
130 | asm volatile("kmovd %k5,(%rcx)"); | |
131 | asm volatile("kmovd %k5,0x123(%rax,%r14,8)"); | |
132 | asm volatile("kmovd %eax,%k5"); | |
133 | asm volatile("kmovd %ebp,%k5"); | |
134 | asm volatile("kmovd %r13d,%k5"); | |
135 | asm volatile("kmovd %k5,%eax"); | |
136 | asm volatile("kmovd %k5,%ebp"); | |
137 | asm volatile("kmovd %k5,%r13d"); | |
138 | ||
139 | asm volatile("kortestw %k6,%k5"); | |
140 | asm volatile("kortestq %k6,%k5"); | |
141 | asm volatile("kortestb %k6,%k5"); | |
142 | asm volatile("kortestd %k6,%k5"); | |
143 | ||
144 | asm volatile("ktestw %k6,%k5"); | |
145 | asm volatile("ktestq %k6,%k5"); | |
146 | asm volatile("ktestb %k6,%k5"); | |
147 | asm volatile("ktestd %k6,%k5"); | |
148 | ||
149 | asm volatile("kshiftrw $0x12,%k6,%k5"); | |
150 | asm volatile("kshiftrq $0x5b,%k6,%k5"); | |
151 | asm volatile("kshiftlw $0x12,%k6,%k5"); | |
152 | asm volatile("kshiftlq $0x5b,%k6,%k5"); | |
153 | ||
154 | /* AVX-512: Op code 0f 5b */ | |
155 | asm volatile("vcvtdq2ps %xmm5,%xmm6"); | |
156 | asm volatile("vcvtqq2ps %zmm29,%ymm6{%k7}"); | |
157 | asm volatile("vcvtps2dq %xmm5,%xmm6"); | |
158 | asm volatile("vcvttps2dq %xmm5,%xmm6"); | |
159 | ||
160 | /* AVX-512: Op code 0f 6f */ | |
161 | ||
162 | asm volatile("movq %mm0,%mm4"); | |
163 | asm volatile("vmovdqa %ymm4,%ymm6"); | |
164 | asm volatile("vmovdqa32 %zmm25,%zmm26"); | |
165 | asm volatile("vmovdqa64 %zmm25,%zmm26"); | |
166 | asm volatile("vmovdqu %ymm4,%ymm6"); | |
167 | asm volatile("vmovdqu32 %zmm29,%zmm30"); | |
168 | asm volatile("vmovdqu64 %zmm25,%zmm26"); | |
169 | asm volatile("vmovdqu8 %zmm29,%zmm30"); | |
170 | asm volatile("vmovdqu16 %zmm25,%zmm26"); | |
171 | ||
172 | /* AVX-512: Op code 0f 78 */ | |
173 | ||
174 | asm volatile("vmread %rax,%rbx"); | |
175 | asm volatile("vcvttps2udq %zmm25,%zmm26"); | |
176 | asm volatile("vcvttpd2udq %zmm29,%ymm6{%k7}"); | |
177 | asm volatile("vcvttsd2usi %xmm6,%rax"); | |
178 | asm volatile("vcvttss2usi %xmm6,%rax"); | |
179 | asm volatile("vcvttps2uqq %ymm5,%zmm26{%k7}"); | |
180 | asm volatile("vcvttpd2uqq %zmm29,%zmm30"); | |
181 | ||
182 | /* AVX-512: Op code 0f 79 */ | |
183 | ||
184 | asm volatile("vmwrite %rax,%rbx"); | |
185 | asm volatile("vcvtps2udq %zmm25,%zmm26"); | |
186 | asm volatile("vcvtpd2udq %zmm29,%ymm6{%k7}"); | |
187 | asm volatile("vcvtsd2usi %xmm6,%rax"); | |
188 | asm volatile("vcvtss2usi %xmm6,%rax"); | |
189 | asm volatile("vcvtps2uqq %ymm5,%zmm26{%k7}"); | |
190 | asm volatile("vcvtpd2uqq %zmm29,%zmm30"); | |
191 | ||
192 | /* AVX-512: Op code 0f 7a */ | |
193 | ||
194 | asm volatile("vcvtudq2pd %ymm5,%zmm29{%k7}"); | |
195 | asm volatile("vcvtuqq2pd %zmm25,%zmm26"); | |
196 | asm volatile("vcvtudq2ps %zmm29,%zmm30"); | |
197 | asm volatile("vcvtuqq2ps %zmm25,%ymm26{%k7}"); | |
198 | asm volatile("vcvttps2qq %ymm25,%zmm26{%k7}"); | |
199 | asm volatile("vcvttpd2qq %zmm29,%zmm30"); | |
200 | ||
201 | /* AVX-512: Op code 0f 7b */ | |
202 | ||
203 | asm volatile("vcvtusi2sd %eax,%xmm5,%xmm6"); | |
204 | asm volatile("vcvtusi2ss %eax,%xmm5,%xmm6"); | |
205 | asm volatile("vcvtps2qq %ymm5,%zmm26{%k7}"); | |
206 | asm volatile("vcvtpd2qq %zmm29,%zmm30"); | |
207 | ||
208 | /* AVX-512: Op code 0f 7f */ | |
209 | ||
210 | asm volatile("movq.s %mm0,%mm4"); | |
211 | asm volatile("vmovdqa %ymm8,%ymm6"); | |
212 | asm volatile("vmovdqa32.s %zmm25,%zmm26"); | |
213 | asm volatile("vmovdqa64.s %zmm25,%zmm26"); | |
214 | asm volatile("vmovdqu %ymm8,%ymm6"); | |
215 | asm volatile("vmovdqu32.s %zmm25,%zmm26"); | |
216 | asm volatile("vmovdqu64.s %zmm25,%zmm26"); | |
217 | asm volatile("vmovdqu8.s %zmm30,(%rcx)"); | |
218 | asm volatile("vmovdqu16.s %zmm25,%zmm26"); | |
219 | ||
220 | /* AVX-512: Op code 0f db */ | |
221 | ||
222 | asm volatile("pand %mm1,%mm2"); | |
223 | asm volatile("pand %xmm1,%xmm2"); | |
224 | asm volatile("vpand %ymm4,%ymm6,%ymm2"); | |
225 | asm volatile("vpandd %zmm24,%zmm25,%zmm26"); | |
226 | asm volatile("vpandq %zmm24,%zmm25,%zmm26"); | |
227 | ||
228 | /* AVX-512: Op code 0f df */ | |
229 | ||
230 | asm volatile("pandn %mm1,%mm2"); | |
231 | asm volatile("pandn %xmm1,%xmm2"); | |
232 | asm volatile("vpandn %ymm4,%ymm6,%ymm2"); | |
233 | asm volatile("vpandnd %zmm24,%zmm25,%zmm26"); | |
234 | asm volatile("vpandnq %zmm24,%zmm25,%zmm26"); | |
235 | ||
236 | /* AVX-512: Op code 0f e6 */ | |
237 | ||
238 | asm volatile("vcvttpd2dq %xmm1,%xmm2"); | |
239 | asm volatile("vcvtdq2pd %xmm5,%xmm6"); | |
240 | asm volatile("vcvtdq2pd %ymm5,%zmm26{%k7}"); | |
241 | asm volatile("vcvtqq2pd %zmm25,%zmm26"); | |
242 | asm volatile("vcvtpd2dq %xmm1,%xmm2"); | |
243 | ||
244 | /* AVX-512: Op code 0f eb */ | |
245 | ||
246 | asm volatile("por %mm4,%mm6"); | |
247 | asm volatile("vpor %ymm4,%ymm6,%ymm2"); | |
248 | asm volatile("vpord %zmm24,%zmm25,%zmm26"); | |
249 | asm volatile("vporq %zmm24,%zmm25,%zmm26"); | |
250 | ||
251 | /* AVX-512: Op code 0f ef */ | |
252 | ||
253 | asm volatile("pxor %mm4,%mm6"); | |
254 | asm volatile("vpxor %ymm4,%ymm6,%ymm2"); | |
255 | asm volatile("vpxord %zmm24,%zmm25,%zmm26"); | |
256 | asm volatile("vpxorq %zmm24,%zmm25,%zmm26"); | |
257 | ||
258 | /* AVX-512: Op code 0f 38 10 */ | |
259 | ||
260 | asm volatile("pblendvb %xmm1,%xmm0"); | |
261 | asm volatile("vpsrlvw %zmm27,%zmm28,%zmm29"); | |
262 | asm volatile("vpmovuswb %zmm28,%ymm6{%k7}"); | |
263 | ||
264 | /* AVX-512: Op code 0f 38 11 */ | |
265 | ||
266 | asm volatile("vpmovusdb %zmm28,%xmm6{%k7}"); | |
267 | asm volatile("vpsravw %zmm27,%zmm28,%zmm29"); | |
268 | ||
269 | /* AVX-512: Op code 0f 38 12 */ | |
270 | ||
271 | asm volatile("vpmovusqb %zmm27,%xmm6{%k7}"); | |
272 | asm volatile("vpsllvw %zmm27,%zmm28,%zmm29"); | |
273 | ||
274 | /* AVX-512: Op code 0f 38 13 */ | |
275 | ||
276 | asm volatile("vcvtph2ps %xmm3,%ymm5"); | |
277 | asm volatile("vcvtph2ps %ymm5,%zmm27{%k7}"); | |
278 | asm volatile("vpmovusdw %zmm27,%ymm6{%k7}"); | |
279 | ||
280 | /* AVX-512: Op code 0f 38 14 */ | |
281 | ||
282 | asm volatile("blendvps %xmm1,%xmm0"); | |
283 | asm volatile("vpmovusqw %zmm27,%xmm6{%k7}"); | |
284 | asm volatile("vprorvd %zmm27,%zmm28,%zmm29"); | |
285 | asm volatile("vprorvq %zmm27,%zmm28,%zmm29"); | |
286 | ||
287 | /* AVX-512: Op code 0f 38 15 */ | |
288 | ||
289 | asm volatile("blendvpd %xmm1,%xmm0"); | |
290 | asm volatile("vpmovusqd %zmm27,%ymm6{%k7}"); | |
291 | asm volatile("vprolvd %zmm27,%zmm28,%zmm29"); | |
292 | asm volatile("vprolvq %zmm27,%zmm28,%zmm29"); | |
293 | ||
294 | /* AVX-512: Op code 0f 38 16 */ | |
295 | ||
296 | asm volatile("vpermps %ymm4,%ymm6,%ymm2"); | |
297 | asm volatile("vpermps %ymm24,%ymm26,%ymm22{%k7}"); | |
298 | asm volatile("vpermpd %ymm24,%ymm26,%ymm22{%k7}"); | |
299 | ||
300 | /* AVX-512: Op code 0f 38 19 */ | |
301 | ||
302 | asm volatile("vbroadcastsd %xmm4,%ymm6"); | |
303 | asm volatile("vbroadcastf32x2 %xmm27,%zmm26"); | |
304 | ||
305 | /* AVX-512: Op code 0f 38 1a */ | |
306 | ||
307 | asm volatile("vbroadcastf128 (%rcx),%ymm4"); | |
308 | asm volatile("vbroadcastf32x4 (%rcx),%zmm26"); | |
309 | asm volatile("vbroadcastf64x2 (%rcx),%zmm26"); | |
310 | ||
311 | /* AVX-512: Op code 0f 38 1b */ | |
312 | ||
313 | asm volatile("vbroadcastf32x8 (%rcx),%zmm27"); | |
314 | asm volatile("vbroadcastf64x4 (%rcx),%zmm26"); | |
315 | ||
316 | /* AVX-512: Op code 0f 38 1f */ | |
317 | ||
318 | asm volatile("vpabsq %zmm27,%zmm28"); | |
319 | ||
320 | /* AVX-512: Op code 0f 38 20 */ | |
321 | ||
322 | asm volatile("vpmovsxbw %xmm4,%xmm5"); | |
323 | asm volatile("vpmovswb %zmm27,%ymm6{%k7}"); | |
324 | ||
325 | /* AVX-512: Op code 0f 38 21 */ | |
326 | ||
327 | asm volatile("vpmovsxbd %xmm4,%ymm6"); | |
328 | asm volatile("vpmovsdb %zmm27,%xmm6{%k7}"); | |
329 | ||
330 | /* AVX-512: Op code 0f 38 22 */ | |
331 | ||
332 | asm volatile("vpmovsxbq %xmm4,%ymm4"); | |
333 | asm volatile("vpmovsqb %zmm27,%xmm6{%k7}"); | |
334 | ||
335 | /* AVX-512: Op code 0f 38 23 */ | |
336 | ||
337 | asm volatile("vpmovsxwd %xmm4,%ymm4"); | |
338 | asm volatile("vpmovsdw %zmm27,%ymm6{%k7}"); | |
339 | ||
340 | /* AVX-512: Op code 0f 38 24 */ | |
341 | ||
342 | asm volatile("vpmovsxwq %xmm4,%ymm6"); | |
343 | asm volatile("vpmovsqw %zmm27,%xmm6{%k7}"); | |
344 | ||
345 | /* AVX-512: Op code 0f 38 25 */ | |
346 | ||
347 | asm volatile("vpmovsxdq %xmm4,%ymm4"); | |
348 | asm volatile("vpmovsqd %zmm27,%ymm6{%k7}"); | |
349 | ||
350 | /* AVX-512: Op code 0f 38 26 */ | |
351 | ||
352 | asm volatile("vptestmb %zmm27,%zmm28,%k5"); | |
353 | asm volatile("vptestmw %zmm27,%zmm28,%k5"); | |
354 | asm volatile("vptestnmb %zmm26,%zmm27,%k5"); | |
355 | asm volatile("vptestnmw %zmm26,%zmm27,%k5"); | |
356 | ||
357 | /* AVX-512: Op code 0f 38 27 */ | |
358 | ||
359 | asm volatile("vptestmd %zmm27,%zmm28,%k5"); | |
360 | asm volatile("vptestmq %zmm27,%zmm28,%k5"); | |
361 | asm volatile("vptestnmd %zmm26,%zmm27,%k5"); | |
362 | asm volatile("vptestnmq %zmm26,%zmm27,%k5"); | |
363 | ||
364 | /* AVX-512: Op code 0f 38 28 */ | |
365 | ||
366 | asm volatile("vpmuldq %ymm4,%ymm6,%ymm2"); | |
367 | asm volatile("vpmovm2b %k5,%zmm28"); | |
368 | asm volatile("vpmovm2w %k5,%zmm28"); | |
369 | ||
370 | /* AVX-512: Op code 0f 38 29 */ | |
371 | ||
372 | asm volatile("vpcmpeqq %ymm4,%ymm6,%ymm2"); | |
373 | asm volatile("vpmovb2m %zmm28,%k5"); | |
374 | asm volatile("vpmovw2m %zmm28,%k5"); | |
375 | ||
376 | /* AVX-512: Op code 0f 38 2a */ | |
377 | ||
378 | asm volatile("vmovntdqa (%rcx),%ymm4"); | |
379 | asm volatile("vpbroadcastmb2q %k6,%zmm30"); | |
380 | ||
381 | /* AVX-512: Op code 0f 38 2c */ | |
382 | ||
383 | asm volatile("vmaskmovps (%rcx),%ymm4,%ymm6"); | |
384 | asm volatile("vscalefps %zmm24,%zmm25,%zmm26"); | |
385 | asm volatile("vscalefpd %zmm24,%zmm25,%zmm26"); | |
386 | ||
387 | /* AVX-512: Op code 0f 38 2d */ | |
388 | ||
389 | asm volatile("vmaskmovpd (%rcx),%ymm4,%ymm6"); | |
390 | asm volatile("vscalefss %xmm24,%xmm25,%xmm26{%k7}"); | |
391 | asm volatile("vscalefsd %xmm24,%xmm25,%xmm26{%k7}"); | |
392 | ||
393 | /* AVX-512: Op code 0f 38 30 */ | |
394 | ||
395 | asm volatile("vpmovzxbw %xmm4,%ymm4"); | |
396 | asm volatile("vpmovwb %zmm27,%ymm6{%k7}"); | |
397 | ||
398 | /* AVX-512: Op code 0f 38 31 */ | |
399 | ||
400 | asm volatile("vpmovzxbd %xmm4,%ymm6"); | |
401 | asm volatile("vpmovdb %zmm27,%xmm6{%k7}"); | |
402 | ||
403 | /* AVX-512: Op code 0f 38 32 */ | |
404 | ||
405 | asm volatile("vpmovzxbq %xmm4,%ymm4"); | |
406 | asm volatile("vpmovqb %zmm27,%xmm6{%k7}"); | |
407 | ||
408 | /* AVX-512: Op code 0f 38 33 */ | |
409 | ||
410 | asm volatile("vpmovzxwd %xmm4,%ymm4"); | |
411 | asm volatile("vpmovdw %zmm27,%ymm6{%k7}"); | |
412 | ||
413 | /* AVX-512: Op code 0f 38 34 */ | |
414 | ||
415 | asm volatile("vpmovzxwq %xmm4,%ymm6"); | |
416 | asm volatile("vpmovqw %zmm27,%xmm6{%k7}"); | |
417 | ||
418 | /* AVX-512: Op code 0f 38 35 */ | |
419 | ||
420 | asm volatile("vpmovzxdq %xmm4,%ymm4"); | |
421 | asm volatile("vpmovqd %zmm27,%ymm6{%k7}"); | |
422 | ||
423 | /* AVX-512: Op code 0f 38 38 */ | |
424 | ||
425 | asm volatile("vpermd %ymm4,%ymm6,%ymm2"); | |
426 | asm volatile("vpermd %ymm24,%ymm26,%ymm22{%k7}"); | |
427 | asm volatile("vpermq %ymm24,%ymm26,%ymm22{%k7}"); | |
428 | ||
429 | /* AVX-512: Op code 0f 38 38 */ | |
430 | ||
431 | asm volatile("vpminsb %ymm4,%ymm6,%ymm2"); | |
432 | asm volatile("vpmovm2d %k5,%zmm28"); | |
433 | asm volatile("vpmovm2q %k5,%zmm28"); | |
434 | ||
435 | /* AVX-512: Op code 0f 38 39 */ | |
436 | ||
437 | asm volatile("vpminsd %xmm1,%xmm2,%xmm3"); | |
438 | asm volatile("vpminsd %zmm24,%zmm25,%zmm26"); | |
439 | asm volatile("vpminsq %zmm24,%zmm25,%zmm26"); | |
440 | asm volatile("vpmovd2m %zmm28,%k5"); | |
441 | asm volatile("vpmovq2m %zmm28,%k5"); | |
442 | ||
443 | /* AVX-512: Op code 0f 38 3a */ | |
444 | ||
445 | asm volatile("vpminuw %ymm4,%ymm6,%ymm2"); | |
446 | asm volatile("vpbroadcastmw2d %k6,%zmm28"); | |
447 | ||
448 | /* AVX-512: Op code 0f 38 3b */ | |
449 | ||
450 | asm volatile("vpminud %ymm4,%ymm6,%ymm2"); | |
451 | asm volatile("vpminud %zmm24,%zmm25,%zmm26"); | |
452 | asm volatile("vpminuq %zmm24,%zmm25,%zmm26"); | |
453 | ||
454 | /* AVX-512: Op code 0f 38 3d */ | |
455 | ||
456 | asm volatile("vpmaxsd %ymm4,%ymm6,%ymm2"); | |
457 | asm volatile("vpmaxsd %zmm24,%zmm25,%zmm26"); | |
458 | asm volatile("vpmaxsq %zmm24,%zmm25,%zmm26"); | |
459 | ||
460 | /* AVX-512: Op code 0f 38 3f */ | |
461 | ||
462 | asm volatile("vpmaxud %ymm4,%ymm6,%ymm2"); | |
463 | asm volatile("vpmaxud %zmm24,%zmm25,%zmm26"); | |
464 | asm volatile("vpmaxuq %zmm24,%zmm25,%zmm26"); | |
465 | ||
466 | /* AVX-512: Op code 0f 38 42 */ | |
467 | ||
468 | asm volatile("vpmulld %ymm4,%ymm6,%ymm2"); | |
469 | asm volatile("vpmulld %zmm24,%zmm25,%zmm26"); | |
470 | asm volatile("vpmullq %zmm24,%zmm25,%zmm26"); | |
471 | ||
472 | /* AVX-512: Op code 0f 38 42 */ | |
473 | ||
474 | asm volatile("vgetexpps %zmm25,%zmm26"); | |
475 | asm volatile("vgetexppd %zmm27,%zmm28"); | |
476 | ||
477 | /* AVX-512: Op code 0f 38 43 */ | |
478 | ||
479 | asm volatile("vgetexpss %xmm24,%xmm25,%xmm26{%k7}"); | |
480 | asm volatile("vgetexpsd %xmm28,%xmm29,%xmm30{%k7}"); | |
481 | ||
482 | /* AVX-512: Op code 0f 38 44 */ | |
483 | ||
484 | asm volatile("vplzcntd %zmm27,%zmm28"); | |
485 | asm volatile("vplzcntq %zmm27,%zmm28"); | |
486 | ||
487 | /* AVX-512: Op code 0f 38 46 */ | |
488 | ||
489 | asm volatile("vpsravd %ymm4,%ymm6,%ymm2"); | |
490 | asm volatile("vpsravd %zmm24,%zmm25,%zmm26"); | |
491 | asm volatile("vpsravq %zmm24,%zmm25,%zmm26"); | |
492 | ||
493 | /* AVX-512: Op code 0f 38 4c */ | |
494 | ||
495 | asm volatile("vrcp14ps %zmm25,%zmm26"); | |
496 | asm volatile("vrcp14pd %zmm27,%zmm28"); | |
497 | ||
498 | /* AVX-512: Op code 0f 38 4d */ | |
499 | ||
500 | asm volatile("vrcp14ss %xmm24,%xmm25,%xmm26{%k7}"); | |
501 | asm volatile("vrcp14sd %xmm24,%xmm25,%xmm26{%k7}"); | |
502 | ||
503 | /* AVX-512: Op code 0f 38 4e */ | |
504 | ||
505 | asm volatile("vrsqrt14ps %zmm25,%zmm26"); | |
506 | asm volatile("vrsqrt14pd %zmm27,%zmm28"); | |
507 | ||
508 | /* AVX-512: Op code 0f 38 4f */ | |
509 | ||
510 | asm volatile("vrsqrt14ss %xmm24,%xmm25,%xmm26{%k7}"); | |
511 | asm volatile("vrsqrt14sd %xmm24,%xmm25,%xmm26{%k7}"); | |
512 | ||
513 | /* AVX-512: Op code 0f 38 59 */ | |
514 | ||
515 | asm volatile("vpbroadcastq %xmm4,%xmm6"); | |
516 | asm volatile("vbroadcasti32x2 %xmm27,%zmm26"); | |
517 | ||
518 | /* AVX-512: Op code 0f 38 5a */ | |
519 | ||
520 | asm volatile("vbroadcasti128 (%rcx),%ymm4"); | |
521 | asm volatile("vbroadcasti32x4 (%rcx),%zmm26"); | |
522 | asm volatile("vbroadcasti64x2 (%rcx),%zmm26"); | |
523 | ||
524 | /* AVX-512: Op code 0f 38 5b */ | |
525 | ||
526 | asm volatile("vbroadcasti32x8 (%rcx),%zmm28"); | |
527 | asm volatile("vbroadcasti64x4 (%rcx),%zmm26"); | |
528 | ||
529 | /* AVX-512: Op code 0f 38 64 */ | |
530 | ||
531 | asm volatile("vpblendmd %zmm26,%zmm27,%zmm28"); | |
532 | asm volatile("vpblendmq %zmm26,%zmm27,%zmm28"); | |
533 | ||
534 | /* AVX-512: Op code 0f 38 65 */ | |
535 | ||
536 | asm volatile("vblendmps %zmm24,%zmm25,%zmm26"); | |
537 | asm volatile("vblendmpd %zmm26,%zmm27,%zmm28"); | |
538 | ||
539 | /* AVX-512: Op code 0f 38 66 */ | |
540 | ||
541 | asm volatile("vpblendmb %zmm26,%zmm27,%zmm28"); | |
542 | asm volatile("vpblendmw %zmm26,%zmm27,%zmm28"); | |
543 | ||
544 | /* AVX-512: Op code 0f 38 75 */ | |
545 | ||
546 | asm volatile("vpermi2b %zmm24,%zmm25,%zmm26"); | |
547 | asm volatile("vpermi2w %zmm26,%zmm27,%zmm28"); | |
548 | ||
549 | /* AVX-512: Op code 0f 38 76 */ | |
550 | ||
551 | asm volatile("vpermi2d %zmm26,%zmm27,%zmm28"); | |
552 | asm volatile("vpermi2q %zmm26,%zmm27,%zmm28"); | |
553 | ||
554 | /* AVX-512: Op code 0f 38 77 */ | |
555 | ||
556 | asm volatile("vpermi2ps %zmm26,%zmm27,%zmm28"); | |
557 | asm volatile("vpermi2pd %zmm26,%zmm27,%zmm28"); | |
558 | ||
559 | /* AVX-512: Op code 0f 38 7a */ | |
560 | ||
561 | asm volatile("vpbroadcastb %eax,%xmm30"); | |
562 | ||
563 | /* AVX-512: Op code 0f 38 7b */ | |
564 | ||
565 | asm volatile("vpbroadcastw %eax,%xmm30"); | |
566 | ||
567 | /* AVX-512: Op code 0f 38 7c */ | |
568 | ||
569 | asm volatile("vpbroadcastd %eax,%xmm30"); | |
570 | asm volatile("vpbroadcastq %rax,%zmm30"); | |
571 | ||
572 | /* AVX-512: Op code 0f 38 7d */ | |
573 | ||
574 | asm volatile("vpermt2b %zmm26,%zmm27,%zmm28"); | |
575 | asm volatile("vpermt2w %zmm26,%zmm27,%zmm28"); | |
576 | ||
577 | /* AVX-512: Op code 0f 38 7e */ | |
578 | ||
579 | asm volatile("vpermt2d %zmm26,%zmm27,%zmm28"); | |
580 | asm volatile("vpermt2q %zmm26,%zmm27,%zmm28"); | |
581 | ||
582 | /* AVX-512: Op code 0f 38 7f */ | |
583 | ||
584 | asm volatile("vpermt2ps %zmm26,%zmm27,%zmm28"); | |
585 | asm volatile("vpermt2pd %zmm26,%zmm27,%zmm28"); | |
586 | ||
587 | /* AVX-512: Op code 0f 38 83 */ | |
588 | ||
589 | asm volatile("vpmultishiftqb %zmm26,%zmm27,%zmm28"); | |
590 | ||
591 | /* AVX-512: Op code 0f 38 88 */ | |
592 | ||
593 | asm volatile("vexpandps (%rcx),%zmm26"); | |
594 | asm volatile("vexpandpd (%rcx),%zmm28"); | |
595 | ||
596 | /* AVX-512: Op code 0f 38 89 */ | |
597 | ||
598 | asm volatile("vpexpandd (%rcx),%zmm28"); | |
599 | asm volatile("vpexpandq (%rcx),%zmm26"); | |
600 | ||
601 | /* AVX-512: Op code 0f 38 8a */ | |
602 | ||
603 | asm volatile("vcompressps %zmm28,(%rcx)"); | |
604 | asm volatile("vcompresspd %zmm28,(%rcx)"); | |
605 | ||
606 | /* AVX-512: Op code 0f 38 8b */ | |
607 | ||
608 | asm volatile("vpcompressd %zmm28,(%rcx)"); | |
609 | asm volatile("vpcompressq %zmm26,(%rcx)"); | |
610 | ||
611 | /* AVX-512: Op code 0f 38 8d */ | |
612 | ||
613 | asm volatile("vpermb %zmm26,%zmm27,%zmm28"); | |
614 | asm volatile("vpermw %zmm26,%zmm27,%zmm28"); | |
615 | ||
616 | /* AVX-512: Op code 0f 38 90 */ | |
617 | ||
618 | asm volatile("vpgatherdd %xmm2,0x02(%rbp,%xmm7,2),%xmm1"); | |
619 | asm volatile("vpgatherdq %xmm2,0x04(%rbp,%xmm7,2),%xmm1"); | |
620 | asm volatile("vpgatherdd 0x7b(%rbp,%zmm27,8),%zmm26{%k1}"); | |
621 | asm volatile("vpgatherdq 0x7b(%rbp,%ymm27,8),%zmm26{%k1}"); | |
622 | ||
623 | /* AVX-512: Op code 0f 38 91 */ | |
624 | ||
625 | asm volatile("vpgatherqd %xmm2,0x02(%rbp,%xmm7,2),%xmm1"); | |
626 | asm volatile("vpgatherqq %xmm2,0x02(%rbp,%xmm7,2),%xmm1"); | |
627 | asm volatile("vpgatherqd 0x7b(%rbp,%zmm27,8),%ymm26{%k1}"); | |
628 | asm volatile("vpgatherqq 0x7b(%rbp,%zmm27,8),%zmm26{%k1}"); | |
629 | ||
630 | /* AVX-512: Op code 0f 38 a0 */ | |
631 | ||
632 | asm volatile("vpscatterdd %zmm28,0x7b(%rbp,%zmm29,8){%k1}"); | |
633 | asm volatile("vpscatterdq %zmm26,0x7b(%rbp,%ymm27,8){%k1}"); | |
634 | ||
635 | /* AVX-512: Op code 0f 38 a1 */ | |
636 | ||
637 | asm volatile("vpscatterqd %ymm6,0x7b(%rbp,%zmm29,8){%k1}"); | |
638 | asm volatile("vpscatterqq %ymm6,0x7b(%rbp,%ymm27,8){%k1}"); | |
639 | ||
640 | /* AVX-512: Op code 0f 38 a2 */ | |
641 | ||
642 | asm volatile("vscatterdps %zmm28,0x7b(%rbp,%zmm29,8){%k1}"); | |
643 | asm volatile("vscatterdpd %zmm28,0x7b(%rbp,%ymm27,8){%k1}"); | |
644 | ||
645 | /* AVX-512: Op code 0f 38 a3 */ | |
646 | ||
647 | asm volatile("vscatterqps %ymm6,0x7b(%rbp,%zmm29,8){%k1}"); | |
648 | asm volatile("vscatterqpd %zmm28,0x7b(%rbp,%zmm29,8){%k1}"); | |
649 | ||
650 | /* AVX-512: Op code 0f 38 b4 */ | |
651 | ||
652 | asm volatile("vpmadd52luq %zmm26,%zmm27,%zmm28"); | |
653 | ||
654 | /* AVX-512: Op code 0f 38 b5 */ | |
655 | ||
656 | asm volatile("vpmadd52huq %zmm26,%zmm27,%zmm28"); | |
657 | ||
658 | /* AVX-512: Op code 0f 38 c4 */ | |
659 | ||
660 | asm volatile("vpconflictd %zmm26,%zmm27"); | |
661 | asm volatile("vpconflictq %zmm26,%zmm27"); | |
662 | ||
663 | /* AVX-512: Op code 0f 38 c8 */ | |
664 | ||
665 | asm volatile("vexp2ps %zmm29,%zmm30"); | |
666 | asm volatile("vexp2pd %zmm26,%zmm27"); | |
667 | ||
668 | /* AVX-512: Op code 0f 38 ca */ | |
669 | ||
670 | asm volatile("vrcp28ps %zmm29,%zmm30"); | |
671 | asm volatile("vrcp28pd %zmm26,%zmm27"); | |
672 | ||
673 | /* AVX-512: Op code 0f 38 cb */ | |
674 | ||
675 | asm volatile("vrcp28ss %xmm28,%xmm29,%xmm30{%k7}"); | |
676 | asm volatile("vrcp28sd %xmm25,%xmm26,%xmm27{%k7}"); | |
677 | ||
678 | /* AVX-512: Op code 0f 38 cc */ | |
679 | ||
680 | asm volatile("vrsqrt28ps %zmm29,%zmm30"); | |
681 | asm volatile("vrsqrt28pd %zmm26,%zmm27"); | |
682 | ||
683 | /* AVX-512: Op code 0f 38 cd */ | |
684 | ||
685 | asm volatile("vrsqrt28ss %xmm28,%xmm29,%xmm30{%k7}"); | |
686 | asm volatile("vrsqrt28sd %xmm25,%xmm26,%xmm27{%k7}"); | |
687 | ||
688 | /* AVX-512: Op code 0f 3a 03 */ | |
689 | ||
690 | asm volatile("valignd $0x12,%zmm28,%zmm29,%zmm30"); | |
691 | asm volatile("valignq $0x12,%zmm25,%zmm26,%zmm27"); | |
692 | ||
693 | /* AVX-512: Op code 0f 3a 08 */ | |
694 | ||
695 | asm volatile("vroundps $0x5,%ymm6,%ymm2"); | |
696 | asm volatile("vrndscaleps $0x12,%zmm25,%zmm26"); | |
697 | ||
698 | /* AVX-512: Op code 0f 3a 09 */ | |
699 | ||
700 | asm volatile("vroundpd $0x5,%ymm6,%ymm2"); | |
701 | asm volatile("vrndscalepd $0x12,%zmm25,%zmm26"); | |
702 | ||
703 | /* AVX-512: Op code 0f 3a 1a */ | |
704 | ||
705 | asm volatile("vroundss $0x5,%xmm4,%xmm6,%xmm2"); | |
706 | asm volatile("vrndscaless $0x12,%xmm24,%xmm25,%xmm26{%k7}"); | |
707 | ||
708 | /* AVX-512: Op code 0f 3a 0b */ | |
709 | ||
710 | asm volatile("vroundsd $0x5,%xmm4,%xmm6,%xmm2"); | |
711 | asm volatile("vrndscalesd $0x12,%xmm24,%xmm25,%xmm26{%k7}"); | |
712 | ||
713 | /* AVX-512: Op code 0f 3a 18 */ | |
714 | ||
715 | asm volatile("vinsertf128 $0x5,%xmm4,%ymm4,%ymm6"); | |
716 | asm volatile("vinsertf32x4 $0x12,%xmm24,%zmm25,%zmm26{%k7}"); | |
717 | asm volatile("vinsertf64x2 $0x12,%xmm24,%zmm25,%zmm26{%k7}"); | |
718 | ||
719 | /* AVX-512: Op code 0f 3a 19 */ | |
720 | ||
721 | asm volatile("vextractf128 $0x5,%ymm4,%xmm4"); | |
722 | asm volatile("vextractf32x4 $0x12,%zmm25,%xmm26{%k7}"); | |
723 | asm volatile("vextractf64x2 $0x12,%zmm25,%xmm26{%k7}"); | |
724 | ||
725 | /* AVX-512: Op code 0f 3a 1a */ | |
726 | ||
727 | asm volatile("vinsertf32x8 $0x12,%ymm25,%zmm26,%zmm27{%k7}"); | |
728 | asm volatile("vinsertf64x4 $0x12,%ymm28,%zmm29,%zmm30{%k7}"); | |
729 | ||
730 | /* AVX-512: Op code 0f 3a 1b */ | |
731 | ||
732 | asm volatile("vextractf32x8 $0x12,%zmm29,%ymm30{%k7}"); | |
733 | asm volatile("vextractf64x4 $0x12,%zmm26,%ymm27{%k7}"); | |
734 | ||
735 | /* AVX-512: Op code 0f 3a 1e */ | |
736 | ||
737 | asm volatile("vpcmpud $0x12,%zmm29,%zmm30,%k5"); | |
738 | asm volatile("vpcmpuq $0x12,%zmm26,%zmm27,%k5"); | |
739 | ||
740 | /* AVX-512: Op code 0f 3a 1f */ | |
741 | ||
742 | asm volatile("vpcmpd $0x12,%zmm29,%zmm30,%k5"); | |
743 | asm volatile("vpcmpq $0x12,%zmm26,%zmm27,%k5"); | |
744 | ||
745 | /* AVX-512: Op code 0f 3a 23 */ | |
746 | ||
747 | asm volatile("vshuff32x4 $0x12,%zmm28,%zmm29,%zmm30"); | |
748 | asm volatile("vshuff64x2 $0x12,%zmm25,%zmm26,%zmm27"); | |
749 | ||
750 | /* AVX-512: Op code 0f 3a 25 */ | |
751 | ||
752 | asm volatile("vpternlogd $0x12,%zmm28,%zmm29,%zmm30"); | |
753 | asm volatile("vpternlogq $0x12,%zmm28,%zmm29,%zmm30"); | |
754 | ||
755 | /* AVX-512: Op code 0f 3a 26 */ | |
756 | ||
757 | asm volatile("vgetmantps $0x12,%zmm26,%zmm27"); | |
758 | asm volatile("vgetmantpd $0x12,%zmm29,%zmm30"); | |
759 | ||
760 | /* AVX-512: Op code 0f 3a 27 */ | |
761 | ||
762 | asm volatile("vgetmantss $0x12,%xmm25,%xmm26,%xmm27{%k7}"); | |
763 | asm volatile("vgetmantsd $0x12,%xmm28,%xmm29,%xmm30{%k7}"); | |
764 | ||
765 | /* AVX-512: Op code 0f 3a 38 */ | |
766 | ||
767 | asm volatile("vinserti128 $0x5,%xmm4,%ymm4,%ymm6"); | |
768 | asm volatile("vinserti32x4 $0x12,%xmm24,%zmm25,%zmm26{%k7}"); | |
769 | asm volatile("vinserti64x2 $0x12,%xmm24,%zmm25,%zmm26{%k7}"); | |
770 | ||
771 | /* AVX-512: Op code 0f 3a 39 */ | |
772 | ||
773 | asm volatile("vextracti128 $0x5,%ymm4,%xmm6"); | |
774 | asm volatile("vextracti32x4 $0x12,%zmm25,%xmm26{%k7}"); | |
775 | asm volatile("vextracti64x2 $0x12,%zmm25,%xmm26{%k7}"); | |
776 | ||
777 | /* AVX-512: Op code 0f 3a 3a */ | |
778 | ||
779 | asm volatile("vinserti32x8 $0x12,%ymm28,%zmm29,%zmm30{%k7}"); | |
780 | asm volatile("vinserti64x4 $0x12,%ymm25,%zmm26,%zmm27{%k7}"); | |
781 | ||
782 | /* AVX-512: Op code 0f 3a 3b */ | |
783 | ||
784 | asm volatile("vextracti32x8 $0x12,%zmm29,%ymm30{%k7}"); | |
785 | asm volatile("vextracti64x4 $0x12,%zmm26,%ymm27{%k7}"); | |
786 | ||
787 | /* AVX-512: Op code 0f 3a 3e */ | |
788 | ||
789 | asm volatile("vpcmpub $0x12,%zmm29,%zmm30,%k5"); | |
790 | asm volatile("vpcmpuw $0x12,%zmm26,%zmm27,%k5"); | |
791 | ||
792 | /* AVX-512: Op code 0f 3a 3f */ | |
793 | ||
794 | asm volatile("vpcmpb $0x12,%zmm29,%zmm30,%k5"); | |
795 | asm volatile("vpcmpw $0x12,%zmm26,%zmm27,%k5"); | |
796 | ||
797 | /* AVX-512: Op code 0f 3a 43 */ | |
798 | ||
799 | asm volatile("vmpsadbw $0x5,%ymm4,%ymm6,%ymm2"); | |
800 | asm volatile("vdbpsadbw $0x12,%zmm4,%zmm5,%zmm6"); | |
801 | ||
802 | /* AVX-512: Op code 0f 3a 43 */ | |
803 | ||
804 | asm volatile("vshufi32x4 $0x12,%zmm25,%zmm26,%zmm27"); | |
805 | asm volatile("vshufi64x2 $0x12,%zmm28,%zmm29,%zmm30"); | |
806 | ||
807 | /* AVX-512: Op code 0f 3a 50 */ | |
808 | ||
809 | asm volatile("vrangeps $0x12,%zmm25,%zmm26,%zmm27"); | |
810 | asm volatile("vrangepd $0x12,%zmm28,%zmm29,%zmm30"); | |
811 | ||
812 | /* AVX-512: Op code 0f 3a 51 */ | |
813 | ||
814 | asm volatile("vrangess $0x12,%xmm25,%xmm26,%xmm27"); | |
815 | asm volatile("vrangesd $0x12,%xmm28,%xmm29,%xmm30"); | |
816 | ||
817 | /* AVX-512: Op code 0f 3a 54 */ | |
818 | ||
819 | asm volatile("vfixupimmps $0x12,%zmm28,%zmm29,%zmm30"); | |
820 | asm volatile("vfixupimmpd $0x12,%zmm25,%zmm26,%zmm27"); | |
821 | ||
822 | /* AVX-512: Op code 0f 3a 55 */ | |
823 | ||
824 | asm volatile("vfixupimmss $0x12,%xmm28,%xmm29,%xmm30{%k7}"); | |
825 | asm volatile("vfixupimmsd $0x12,%xmm25,%xmm26,%xmm27{%k7}"); | |
826 | ||
827 | /* AVX-512: Op code 0f 3a 56 */ | |
828 | ||
829 | asm volatile("vreduceps $0x12,%zmm26,%zmm27"); | |
830 | asm volatile("vreducepd $0x12,%zmm29,%zmm30"); | |
831 | ||
832 | /* AVX-512: Op code 0f 3a 57 */ | |
833 | ||
834 | asm volatile("vreducess $0x12,%xmm25,%xmm26,%xmm27"); | |
835 | asm volatile("vreducesd $0x12,%xmm28,%xmm29,%xmm30"); | |
836 | ||
837 | /* AVX-512: Op code 0f 3a 66 */ | |
838 | ||
839 | asm volatile("vfpclassps $0x12,%zmm27,%k5"); | |
840 | asm volatile("vfpclasspd $0x12,%zmm30,%k5"); | |
841 | ||
842 | /* AVX-512: Op code 0f 3a 67 */ | |
843 | ||
844 | asm volatile("vfpclassss $0x12,%xmm27,%k5"); | |
845 | asm volatile("vfpclasssd $0x12,%xmm30,%k5"); | |
846 | ||
847 | /* AVX-512: Op code 0f 72 (Grp13) */ | |
848 | ||
849 | asm volatile("vprord $0x12,%zmm25,%zmm26"); | |
850 | asm volatile("vprorq $0x12,%zmm25,%zmm26"); | |
851 | asm volatile("vprold $0x12,%zmm29,%zmm30"); | |
852 | asm volatile("vprolq $0x12,%zmm29,%zmm30"); | |
853 | asm volatile("psrad $0x2,%mm6"); | |
854 | asm volatile("vpsrad $0x5,%ymm6,%ymm2"); | |
855 | asm volatile("vpsrad $0x5,%zmm26,%zmm22"); | |
856 | asm volatile("vpsraq $0x5,%zmm26,%zmm22"); | |
857 | ||
858 | /* AVX-512: Op code 0f 38 c6 (Grp18) */ | |
859 | ||
860 | asm volatile("vgatherpf0dps 0x7b(%r14,%zmm31,8){%k1}"); | |
861 | asm volatile("vgatherpf0dpd 0x7b(%r14,%ymm31,8){%k1}"); | |
862 | asm volatile("vgatherpf1dps 0x7b(%r14,%zmm31,8){%k1}"); | |
863 | asm volatile("vgatherpf1dpd 0x7b(%r14,%ymm31,8){%k1}"); | |
864 | asm volatile("vscatterpf0dps 0x7b(%r14,%zmm31,8){%k1}"); | |
865 | asm volatile("vscatterpf0dpd 0x7b(%r14,%ymm31,8){%k1}"); | |
866 | asm volatile("vscatterpf1dps 0x7b(%r14,%zmm31,8){%k1}"); | |
867 | asm volatile("vscatterpf1dpd 0x7b(%r14,%ymm31,8){%k1}"); | |
868 | ||
869 | /* AVX-512: Op code 0f 38 c7 (Grp19) */ | |
870 | ||
871 | asm volatile("vgatherpf0qps 0x7b(%r14,%zmm31,8){%k1}"); | |
872 | asm volatile("vgatherpf0qpd 0x7b(%r14,%zmm31,8){%k1}"); | |
873 | asm volatile("vgatherpf1qps 0x7b(%r14,%zmm31,8){%k1}"); | |
874 | asm volatile("vgatherpf1qpd 0x7b(%r14,%zmm31,8){%k1}"); | |
875 | asm volatile("vscatterpf0qps 0x7b(%r14,%zmm31,8){%k1}"); | |
876 | asm volatile("vscatterpf0qpd 0x7b(%r14,%zmm31,8){%k1}"); | |
877 | asm volatile("vscatterpf1qps 0x7b(%r14,%zmm31,8){%k1}"); | |
878 | asm volatile("vscatterpf1qpd 0x7b(%r14,%zmm31,8){%k1}"); | |
879 | ||
880 | /* AVX-512: Examples */ | |
881 | ||
882 | asm volatile("vaddpd %zmm28,%zmm29,%zmm30"); | |
883 | asm volatile("vaddpd %zmm28,%zmm29,%zmm30{%k7}"); | |
884 | asm volatile("vaddpd %zmm28,%zmm29,%zmm30{%k7}{z}"); | |
885 | asm volatile("vaddpd {rn-sae},%zmm28,%zmm29,%zmm30"); | |
886 | asm volatile("vaddpd {ru-sae},%zmm28,%zmm29,%zmm30"); | |
887 | asm volatile("vaddpd {rd-sae},%zmm28,%zmm29,%zmm30"); | |
888 | asm volatile("vaddpd {rz-sae},%zmm28,%zmm29,%zmm30"); | |
889 | asm volatile("vaddpd (%rcx),%zmm29,%zmm30"); | |
890 | asm volatile("vaddpd 0x123(%rax,%r14,8),%zmm29,%zmm30"); | |
891 | asm volatile("vaddpd (%rcx){1to8},%zmm29,%zmm30"); | |
892 | asm volatile("vaddpd 0x1fc0(%rdx),%zmm29,%zmm30"); | |
893 | asm volatile("vaddpd 0x3f8(%rdx){1to8},%zmm29,%zmm30"); | |
894 | asm volatile("vcmpeq_uqps 0x1fc(%rdx){1to16},%zmm30,%k5"); | |
895 | asm volatile("vcmpltsd 0x123(%rax,%r14,8),%xmm29,%k5{%k7}"); | |
896 | asm volatile("vcmplesd {sae},%xmm28,%xmm29,%k5{%k7}"); | |
897 | asm volatile("vgetmantss $0x5b,0x123(%rax,%r14,8),%xmm29,%xmm30{%k7}"); | |
898 | ||
98e4619f AH |
899 | /* bndmk m64, bnd */ |
900 | ||
6c4d0b41 AH |
901 | asm volatile("bndmk (%rax), %bnd0"); |
902 | asm volatile("bndmk (%r8), %bnd0"); | |
903 | asm volatile("bndmk (0x12345678), %bnd0"); | |
904 | asm volatile("bndmk (%rax), %bnd3"); | |
905 | asm volatile("bndmk (%rcx,%rax,1), %bnd0"); | |
906 | asm volatile("bndmk 0x12345678(,%rax,1), %bnd0"); | |
907 | asm volatile("bndmk (%rax,%rcx,1), %bnd0"); | |
908 | asm volatile("bndmk (%rax,%rcx,8), %bnd0"); | |
909 | asm volatile("bndmk 0x12(%rax), %bnd0"); | |
910 | asm volatile("bndmk 0x12(%rbp), %bnd0"); | |
911 | asm volatile("bndmk 0x12(%rcx,%rax,1), %bnd0"); | |
912 | asm volatile("bndmk 0x12(%rbp,%rax,1), %bnd0"); | |
913 | asm volatile("bndmk 0x12(%rax,%rcx,1), %bnd0"); | |
914 | asm volatile("bndmk 0x12(%rax,%rcx,8), %bnd0"); | |
915 | asm volatile("bndmk 0x12345678(%rax), %bnd0"); | |
916 | asm volatile("bndmk 0x12345678(%rbp), %bnd0"); | |
917 | asm volatile("bndmk 0x12345678(%rcx,%rax,1), %bnd0"); | |
918 | asm volatile("bndmk 0x12345678(%rbp,%rax,1), %bnd0"); | |
919 | asm volatile("bndmk 0x12345678(%rax,%rcx,1), %bnd0"); | |
920 | asm volatile("bndmk 0x12345678(%rax,%rcx,8), %bnd0"); | |
921 | ||
922 | /* bndcl r/m64, bnd */ | |
923 | ||
924 | asm volatile("bndcl (%rax), %bnd0"); | |
925 | asm volatile("bndcl (%r8), %bnd0"); | |
926 | asm volatile("bndcl (0x12345678), %bnd0"); | |
927 | asm volatile("bndcl (%rax), %bnd3"); | |
928 | asm volatile("bndcl (%rcx,%rax,1), %bnd0"); | |
929 | asm volatile("bndcl 0x12345678(,%rax,1), %bnd0"); | |
930 | asm volatile("bndcl (%rax,%rcx,1), %bnd0"); | |
931 | asm volatile("bndcl (%rax,%rcx,8), %bnd0"); | |
932 | asm volatile("bndcl 0x12(%rax), %bnd0"); | |
933 | asm volatile("bndcl 0x12(%rbp), %bnd0"); | |
934 | asm volatile("bndcl 0x12(%rcx,%rax,1), %bnd0"); | |
935 | asm volatile("bndcl 0x12(%rbp,%rax,1), %bnd0"); | |
936 | asm volatile("bndcl 0x12(%rax,%rcx,1), %bnd0"); | |
937 | asm volatile("bndcl 0x12(%rax,%rcx,8), %bnd0"); | |
938 | asm volatile("bndcl 0x12345678(%rax), %bnd0"); | |
939 | asm volatile("bndcl 0x12345678(%rbp), %bnd0"); | |
940 | asm volatile("bndcl 0x12345678(%rcx,%rax,1), %bnd0"); | |
941 | asm volatile("bndcl 0x12345678(%rbp,%rax,1), %bnd0"); | |
942 | asm volatile("bndcl 0x12345678(%rax,%rcx,1), %bnd0"); | |
943 | asm volatile("bndcl 0x12345678(%rax,%rcx,8), %bnd0"); | |
944 | asm volatile("bndcl %rax, %bnd0"); | |
945 | ||
946 | /* bndcu r/m64, bnd */ | |
947 | ||
948 | asm volatile("bndcu (%rax), %bnd0"); | |
949 | asm volatile("bndcu (%r8), %bnd0"); | |
950 | asm volatile("bndcu (0x12345678), %bnd0"); | |
951 | asm volatile("bndcu (%rax), %bnd3"); | |
952 | asm volatile("bndcu (%rcx,%rax,1), %bnd0"); | |
953 | asm volatile("bndcu 0x12345678(,%rax,1), %bnd0"); | |
954 | asm volatile("bndcu (%rax,%rcx,1), %bnd0"); | |
955 | asm volatile("bndcu (%rax,%rcx,8), %bnd0"); | |
956 | asm volatile("bndcu 0x12(%rax), %bnd0"); | |
957 | asm volatile("bndcu 0x12(%rbp), %bnd0"); | |
958 | asm volatile("bndcu 0x12(%rcx,%rax,1), %bnd0"); | |
959 | asm volatile("bndcu 0x12(%rbp,%rax,1), %bnd0"); | |
960 | asm volatile("bndcu 0x12(%rax,%rcx,1), %bnd0"); | |
961 | asm volatile("bndcu 0x12(%rax,%rcx,8), %bnd0"); | |
962 | asm volatile("bndcu 0x12345678(%rax), %bnd0"); | |
963 | asm volatile("bndcu 0x12345678(%rbp), %bnd0"); | |
964 | asm volatile("bndcu 0x12345678(%rcx,%rax,1), %bnd0"); | |
965 | asm volatile("bndcu 0x12345678(%rbp,%rax,1), %bnd0"); | |
966 | asm volatile("bndcu 0x12345678(%rax,%rcx,1), %bnd0"); | |
967 | asm volatile("bndcu 0x12345678(%rax,%rcx,8), %bnd0"); | |
968 | asm volatile("bndcu %rax, %bnd0"); | |
969 | ||
970 | /* bndcn r/m64, bnd */ | |
971 | ||
972 | asm volatile("bndcn (%rax), %bnd0"); | |
973 | asm volatile("bndcn (%r8), %bnd0"); | |
974 | asm volatile("bndcn (0x12345678), %bnd0"); | |
975 | asm volatile("bndcn (%rax), %bnd3"); | |
976 | asm volatile("bndcn (%rcx,%rax,1), %bnd0"); | |
977 | asm volatile("bndcn 0x12345678(,%rax,1), %bnd0"); | |
978 | asm volatile("bndcn (%rax,%rcx,1), %bnd0"); | |
979 | asm volatile("bndcn (%rax,%rcx,8), %bnd0"); | |
980 | asm volatile("bndcn 0x12(%rax), %bnd0"); | |
981 | asm volatile("bndcn 0x12(%rbp), %bnd0"); | |
982 | asm volatile("bndcn 0x12(%rcx,%rax,1), %bnd0"); | |
983 | asm volatile("bndcn 0x12(%rbp,%rax,1), %bnd0"); | |
984 | asm volatile("bndcn 0x12(%rax,%rcx,1), %bnd0"); | |
985 | asm volatile("bndcn 0x12(%rax,%rcx,8), %bnd0"); | |
986 | asm volatile("bndcn 0x12345678(%rax), %bnd0"); | |
987 | asm volatile("bndcn 0x12345678(%rbp), %bnd0"); | |
988 | asm volatile("bndcn 0x12345678(%rcx,%rax,1), %bnd0"); | |
989 | asm volatile("bndcn 0x12345678(%rbp,%rax,1), %bnd0"); | |
990 | asm volatile("bndcn 0x12345678(%rax,%rcx,1), %bnd0"); | |
991 | asm volatile("bndcn 0x12345678(%rax,%rcx,8), %bnd0"); | |
992 | asm volatile("bndcn %rax, %bnd0"); | |
993 | ||
994 | /* bndmov m128, bnd */ | |
995 | ||
996 | asm volatile("bndmov (%rax), %bnd0"); | |
997 | asm volatile("bndmov (%r8), %bnd0"); | |
998 | asm volatile("bndmov (0x12345678), %bnd0"); | |
999 | asm volatile("bndmov (%rax), %bnd3"); | |
1000 | asm volatile("bndmov (%rcx,%rax,1), %bnd0"); | |
1001 | asm volatile("bndmov 0x12345678(,%rax,1), %bnd0"); | |
1002 | asm volatile("bndmov (%rax,%rcx,1), %bnd0"); | |
1003 | asm volatile("bndmov (%rax,%rcx,8), %bnd0"); | |
1004 | asm volatile("bndmov 0x12(%rax), %bnd0"); | |
1005 | asm volatile("bndmov 0x12(%rbp), %bnd0"); | |
1006 | asm volatile("bndmov 0x12(%rcx,%rax,1), %bnd0"); | |
1007 | asm volatile("bndmov 0x12(%rbp,%rax,1), %bnd0"); | |
1008 | asm volatile("bndmov 0x12(%rax,%rcx,1), %bnd0"); | |
1009 | asm volatile("bndmov 0x12(%rax,%rcx,8), %bnd0"); | |
1010 | asm volatile("bndmov 0x12345678(%rax), %bnd0"); | |
1011 | asm volatile("bndmov 0x12345678(%rbp), %bnd0"); | |
1012 | asm volatile("bndmov 0x12345678(%rcx,%rax,1), %bnd0"); | |
1013 | asm volatile("bndmov 0x12345678(%rbp,%rax,1), %bnd0"); | |
1014 | asm volatile("bndmov 0x12345678(%rax,%rcx,1), %bnd0"); | |
1015 | asm volatile("bndmov 0x12345678(%rax,%rcx,8), %bnd0"); | |
1016 | ||
1017 | /* bndmov bnd, m128 */ | |
1018 | ||
1019 | asm volatile("bndmov %bnd0, (%rax)"); | |
1020 | asm volatile("bndmov %bnd0, (%r8)"); | |
1021 | asm volatile("bndmov %bnd0, (0x12345678)"); | |
1022 | asm volatile("bndmov %bnd3, (%rax)"); | |
1023 | asm volatile("bndmov %bnd0, (%rcx,%rax,1)"); | |
1024 | asm volatile("bndmov %bnd0, 0x12345678(,%rax,1)"); | |
1025 | asm volatile("bndmov %bnd0, (%rax,%rcx,1)"); | |
1026 | asm volatile("bndmov %bnd0, (%rax,%rcx,8)"); | |
1027 | asm volatile("bndmov %bnd0, 0x12(%rax)"); | |
1028 | asm volatile("bndmov %bnd0, 0x12(%rbp)"); | |
1029 | asm volatile("bndmov %bnd0, 0x12(%rcx,%rax,1)"); | |
1030 | asm volatile("bndmov %bnd0, 0x12(%rbp,%rax,1)"); | |
1031 | asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,1)"); | |
1032 | asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,8)"); | |
1033 | asm volatile("bndmov %bnd0, 0x12345678(%rax)"); | |
1034 | asm volatile("bndmov %bnd0, 0x12345678(%rbp)"); | |
1035 | asm volatile("bndmov %bnd0, 0x12345678(%rcx,%rax,1)"); | |
1036 | asm volatile("bndmov %bnd0, 0x12345678(%rbp,%rax,1)"); | |
1037 | asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,1)"); | |
1038 | asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,8)"); | |
1039 | ||
1040 | /* bndmov bnd2, bnd1 */ | |
1041 | ||
1042 | asm volatile("bndmov %bnd0, %bnd1"); | |
1043 | asm volatile("bndmov %bnd1, %bnd0"); | |
1044 | ||
1045 | /* bndldx mib, bnd */ | |
1046 | ||
1047 | asm volatile("bndldx (%rax), %bnd0"); | |
1048 | asm volatile("bndldx (%r8), %bnd0"); | |
1049 | asm volatile("bndldx (0x12345678), %bnd0"); | |
1050 | asm volatile("bndldx (%rax), %bnd3"); | |
1051 | asm volatile("bndldx (%rcx,%rax,1), %bnd0"); | |
1052 | asm volatile("bndldx 0x12345678(,%rax,1), %bnd0"); | |
1053 | asm volatile("bndldx (%rax,%rcx,1), %bnd0"); | |
1054 | asm volatile("bndldx 0x12(%rax), %bnd0"); | |
1055 | asm volatile("bndldx 0x12(%rbp), %bnd0"); | |
1056 | asm volatile("bndldx 0x12(%rcx,%rax,1), %bnd0"); | |
1057 | asm volatile("bndldx 0x12(%rbp,%rax,1), %bnd0"); | |
1058 | asm volatile("bndldx 0x12(%rax,%rcx,1), %bnd0"); | |
1059 | asm volatile("bndldx 0x12345678(%rax), %bnd0"); | |
1060 | asm volatile("bndldx 0x12345678(%rbp), %bnd0"); | |
1061 | asm volatile("bndldx 0x12345678(%rcx,%rax,1), %bnd0"); | |
1062 | asm volatile("bndldx 0x12345678(%rbp,%rax,1), %bnd0"); | |
1063 | asm volatile("bndldx 0x12345678(%rax,%rcx,1), %bnd0"); | |
1064 | ||
1065 | /* bndstx bnd, mib */ | |
1066 | ||
1067 | asm volatile("bndstx %bnd0, (%rax)"); | |
1068 | asm volatile("bndstx %bnd0, (%r8)"); | |
1069 | asm volatile("bndstx %bnd0, (0x12345678)"); | |
1070 | asm volatile("bndstx %bnd3, (%rax)"); | |
1071 | asm volatile("bndstx %bnd0, (%rcx,%rax,1)"); | |
1072 | asm volatile("bndstx %bnd0, 0x12345678(,%rax,1)"); | |
1073 | asm volatile("bndstx %bnd0, (%rax,%rcx,1)"); | |
1074 | asm volatile("bndstx %bnd0, 0x12(%rax)"); | |
1075 | asm volatile("bndstx %bnd0, 0x12(%rbp)"); | |
1076 | asm volatile("bndstx %bnd0, 0x12(%rcx,%rax,1)"); | |
1077 | asm volatile("bndstx %bnd0, 0x12(%rbp,%rax,1)"); | |
1078 | asm volatile("bndstx %bnd0, 0x12(%rax,%rcx,1)"); | |
1079 | asm volatile("bndstx %bnd0, 0x12345678(%rax)"); | |
1080 | asm volatile("bndstx %bnd0, 0x12345678(%rbp)"); | |
1081 | asm volatile("bndstx %bnd0, 0x12345678(%rcx,%rax,1)"); | |
1082 | asm volatile("bndstx %bnd0, 0x12345678(%rbp,%rax,1)"); | |
1083 | asm volatile("bndstx %bnd0, 0x12345678(%rax,%rcx,1)"); | |
1084 | ||
1085 | /* bnd prefix on call, ret, jmp and all jcc */ | |
1086 | ||
1087 | asm volatile("bnd call label1"); /* Expecting: call unconditional 0 */ | |
1088 | asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */ | |
1089 | asm volatile("bnd ret"); /* Expecting: ret indirect 0 */ | |
1090 | asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */ | |
1091 | asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */ | |
1092 | asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */ | |
1093 | asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0 */ | |
1094 | ||
1095 | /* sha1rnds4 imm8, xmm2/m128, xmm1 */ | |
1096 | ||
1097 | asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0"); | |
1098 | asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2"); | |
1099 | asm volatile("sha1rnds4 $0x91, %xmm8, %xmm0"); | |
1100 | asm volatile("sha1rnds4 $0x91, %xmm7, %xmm8"); | |
1101 | asm volatile("sha1rnds4 $0x91, %xmm15, %xmm8"); | |
1102 | asm volatile("sha1rnds4 $0x91, (%rax), %xmm0"); | |
1103 | asm volatile("sha1rnds4 $0x91, (%r8), %xmm0"); | |
1104 | asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0"); | |
1105 | asm volatile("sha1rnds4 $0x91, (%rax), %xmm3"); | |
1106 | asm volatile("sha1rnds4 $0x91, (%rcx,%rax,1), %xmm0"); | |
1107 | asm volatile("sha1rnds4 $0x91, 0x12345678(,%rax,1), %xmm0"); | |
1108 | asm volatile("sha1rnds4 $0x91, (%rax,%rcx,1), %xmm0"); | |
1109 | asm volatile("sha1rnds4 $0x91, (%rax,%rcx,8), %xmm0"); | |
1110 | asm volatile("sha1rnds4 $0x91, 0x12(%rax), %xmm0"); | |
1111 | asm volatile("sha1rnds4 $0x91, 0x12(%rbp), %xmm0"); | |
1112 | asm volatile("sha1rnds4 $0x91, 0x12(%rcx,%rax,1), %xmm0"); | |
1113 | asm volatile("sha1rnds4 $0x91, 0x12(%rbp,%rax,1), %xmm0"); | |
1114 | asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,1), %xmm0"); | |
1115 | asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,8), %xmm0"); | |
1116 | asm volatile("sha1rnds4 $0x91, 0x12345678(%rax), %xmm0"); | |
1117 | asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp), %xmm0"); | |
1118 | asm volatile("sha1rnds4 $0x91, 0x12345678(%rcx,%rax,1), %xmm0"); | |
1119 | asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp,%rax,1), %xmm0"); | |
1120 | asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,1), %xmm0"); | |
1121 | asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm0"); | |
1122 | asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm15"); | |
1123 | ||
1124 | /* sha1nexte xmm2/m128, xmm1 */ | |
1125 | ||
1126 | asm volatile("sha1nexte %xmm1, %xmm0"); | |
1127 | asm volatile("sha1nexte %xmm7, %xmm2"); | |
1128 | asm volatile("sha1nexte %xmm8, %xmm0"); | |
1129 | asm volatile("sha1nexte %xmm7, %xmm8"); | |
1130 | asm volatile("sha1nexte %xmm15, %xmm8"); | |
1131 | asm volatile("sha1nexte (%rax), %xmm0"); | |
1132 | asm volatile("sha1nexte (%r8), %xmm0"); | |
1133 | asm volatile("sha1nexte (0x12345678), %xmm0"); | |
1134 | asm volatile("sha1nexte (%rax), %xmm3"); | |
1135 | asm volatile("sha1nexte (%rcx,%rax,1), %xmm0"); | |
1136 | asm volatile("sha1nexte 0x12345678(,%rax,1), %xmm0"); | |
1137 | asm volatile("sha1nexte (%rax,%rcx,1), %xmm0"); | |
1138 | asm volatile("sha1nexte (%rax,%rcx,8), %xmm0"); | |
1139 | asm volatile("sha1nexte 0x12(%rax), %xmm0"); | |
1140 | asm volatile("sha1nexte 0x12(%rbp), %xmm0"); | |
1141 | asm volatile("sha1nexte 0x12(%rcx,%rax,1), %xmm0"); | |
1142 | asm volatile("sha1nexte 0x12(%rbp,%rax,1), %xmm0"); | |
1143 | asm volatile("sha1nexte 0x12(%rax,%rcx,1), %xmm0"); | |
1144 | asm volatile("sha1nexte 0x12(%rax,%rcx,8), %xmm0"); | |
1145 | asm volatile("sha1nexte 0x12345678(%rax), %xmm0"); | |
1146 | asm volatile("sha1nexte 0x12345678(%rbp), %xmm0"); | |
1147 | asm volatile("sha1nexte 0x12345678(%rcx,%rax,1), %xmm0"); | |
1148 | asm volatile("sha1nexte 0x12345678(%rbp,%rax,1), %xmm0"); | |
1149 | asm volatile("sha1nexte 0x12345678(%rax,%rcx,1), %xmm0"); | |
1150 | asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm0"); | |
1151 | asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm15"); | |
1152 | ||
1153 | /* sha1msg1 xmm2/m128, xmm1 */ | |
1154 | ||
1155 | asm volatile("sha1msg1 %xmm1, %xmm0"); | |
1156 | asm volatile("sha1msg1 %xmm7, %xmm2"); | |
1157 | asm volatile("sha1msg1 %xmm8, %xmm0"); | |
1158 | asm volatile("sha1msg1 %xmm7, %xmm8"); | |
1159 | asm volatile("sha1msg1 %xmm15, %xmm8"); | |
1160 | asm volatile("sha1msg1 (%rax), %xmm0"); | |
1161 | asm volatile("sha1msg1 (%r8), %xmm0"); | |
1162 | asm volatile("sha1msg1 (0x12345678), %xmm0"); | |
1163 | asm volatile("sha1msg1 (%rax), %xmm3"); | |
1164 | asm volatile("sha1msg1 (%rcx,%rax,1), %xmm0"); | |
1165 | asm volatile("sha1msg1 0x12345678(,%rax,1), %xmm0"); | |
1166 | asm volatile("sha1msg1 (%rax,%rcx,1), %xmm0"); | |
1167 | asm volatile("sha1msg1 (%rax,%rcx,8), %xmm0"); | |
1168 | asm volatile("sha1msg1 0x12(%rax), %xmm0"); | |
1169 | asm volatile("sha1msg1 0x12(%rbp), %xmm0"); | |
1170 | asm volatile("sha1msg1 0x12(%rcx,%rax,1), %xmm0"); | |
1171 | asm volatile("sha1msg1 0x12(%rbp,%rax,1), %xmm0"); | |
1172 | asm volatile("sha1msg1 0x12(%rax,%rcx,1), %xmm0"); | |
1173 | asm volatile("sha1msg1 0x12(%rax,%rcx,8), %xmm0"); | |
1174 | asm volatile("sha1msg1 0x12345678(%rax), %xmm0"); | |
1175 | asm volatile("sha1msg1 0x12345678(%rbp), %xmm0"); | |
1176 | asm volatile("sha1msg1 0x12345678(%rcx,%rax,1), %xmm0"); | |
1177 | asm volatile("sha1msg1 0x12345678(%rbp,%rax,1), %xmm0"); | |
1178 | asm volatile("sha1msg1 0x12345678(%rax,%rcx,1), %xmm0"); | |
1179 | asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm0"); | |
1180 | asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm15"); | |
1181 | ||
1182 | /* sha1msg2 xmm2/m128, xmm1 */ | |
1183 | ||
1184 | asm volatile("sha1msg2 %xmm1, %xmm0"); | |
1185 | asm volatile("sha1msg2 %xmm7, %xmm2"); | |
1186 | asm volatile("sha1msg2 %xmm8, %xmm0"); | |
1187 | asm volatile("sha1msg2 %xmm7, %xmm8"); | |
1188 | asm volatile("sha1msg2 %xmm15, %xmm8"); | |
1189 | asm volatile("sha1msg2 (%rax), %xmm0"); | |
1190 | asm volatile("sha1msg2 (%r8), %xmm0"); | |
1191 | asm volatile("sha1msg2 (0x12345678), %xmm0"); | |
1192 | asm volatile("sha1msg2 (%rax), %xmm3"); | |
1193 | asm volatile("sha1msg2 (%rcx,%rax,1), %xmm0"); | |
1194 | asm volatile("sha1msg2 0x12345678(,%rax,1), %xmm0"); | |
1195 | asm volatile("sha1msg2 (%rax,%rcx,1), %xmm0"); | |
1196 | asm volatile("sha1msg2 (%rax,%rcx,8), %xmm0"); | |
1197 | asm volatile("sha1msg2 0x12(%rax), %xmm0"); | |
1198 | asm volatile("sha1msg2 0x12(%rbp), %xmm0"); | |
1199 | asm volatile("sha1msg2 0x12(%rcx,%rax,1), %xmm0"); | |
1200 | asm volatile("sha1msg2 0x12(%rbp,%rax,1), %xmm0"); | |
1201 | asm volatile("sha1msg2 0x12(%rax,%rcx,1), %xmm0"); | |
1202 | asm volatile("sha1msg2 0x12(%rax,%rcx,8), %xmm0"); | |
1203 | asm volatile("sha1msg2 0x12345678(%rax), %xmm0"); | |
1204 | asm volatile("sha1msg2 0x12345678(%rbp), %xmm0"); | |
1205 | asm volatile("sha1msg2 0x12345678(%rcx,%rax,1), %xmm0"); | |
1206 | asm volatile("sha1msg2 0x12345678(%rbp,%rax,1), %xmm0"); | |
1207 | asm volatile("sha1msg2 0x12345678(%rax,%rcx,1), %xmm0"); | |
1208 | asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm0"); | |
1209 | asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm15"); | |
1210 | ||
1211 | /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */ | |
1212 | /* Note sha256rnds2 has an implicit operand 'xmm0' */ | |
1213 | ||
1214 | asm volatile("sha256rnds2 %xmm4, %xmm1"); | |
1215 | asm volatile("sha256rnds2 %xmm7, %xmm2"); | |
1216 | asm volatile("sha256rnds2 %xmm8, %xmm1"); | |
1217 | asm volatile("sha256rnds2 %xmm7, %xmm8"); | |
1218 | asm volatile("sha256rnds2 %xmm15, %xmm8"); | |
1219 | asm volatile("sha256rnds2 (%rax), %xmm1"); | |
1220 | asm volatile("sha256rnds2 (%r8), %xmm1"); | |
1221 | asm volatile("sha256rnds2 (0x12345678), %xmm1"); | |
1222 | asm volatile("sha256rnds2 (%rax), %xmm3"); | |
1223 | asm volatile("sha256rnds2 (%rcx,%rax,1), %xmm1"); | |
1224 | asm volatile("sha256rnds2 0x12345678(,%rax,1), %xmm1"); | |
1225 | asm volatile("sha256rnds2 (%rax,%rcx,1), %xmm1"); | |
1226 | asm volatile("sha256rnds2 (%rax,%rcx,8), %xmm1"); | |
1227 | asm volatile("sha256rnds2 0x12(%rax), %xmm1"); | |
1228 | asm volatile("sha256rnds2 0x12(%rbp), %xmm1"); | |
1229 | asm volatile("sha256rnds2 0x12(%rcx,%rax,1), %xmm1"); | |
1230 | asm volatile("sha256rnds2 0x12(%rbp,%rax,1), %xmm1"); | |
1231 | asm volatile("sha256rnds2 0x12(%rax,%rcx,1), %xmm1"); | |
1232 | asm volatile("sha256rnds2 0x12(%rax,%rcx,8), %xmm1"); | |
1233 | asm volatile("sha256rnds2 0x12345678(%rax), %xmm1"); | |
1234 | asm volatile("sha256rnds2 0x12345678(%rbp), %xmm1"); | |
1235 | asm volatile("sha256rnds2 0x12345678(%rcx,%rax,1), %xmm1"); | |
1236 | asm volatile("sha256rnds2 0x12345678(%rbp,%rax,1), %xmm1"); | |
1237 | asm volatile("sha256rnds2 0x12345678(%rax,%rcx,1), %xmm1"); | |
1238 | asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm1"); | |
1239 | asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm15"); | |
1240 | ||
1241 | /* sha256msg1 xmm2/m128, xmm1 */ | |
1242 | ||
1243 | asm volatile("sha256msg1 %xmm1, %xmm0"); | |
1244 | asm volatile("sha256msg1 %xmm7, %xmm2"); | |
1245 | asm volatile("sha256msg1 %xmm8, %xmm0"); | |
1246 | asm volatile("sha256msg1 %xmm7, %xmm8"); | |
1247 | asm volatile("sha256msg1 %xmm15, %xmm8"); | |
1248 | asm volatile("sha256msg1 (%rax), %xmm0"); | |
1249 | asm volatile("sha256msg1 (%r8), %xmm0"); | |
1250 | asm volatile("sha256msg1 (0x12345678), %xmm0"); | |
1251 | asm volatile("sha256msg1 (%rax), %xmm3"); | |
1252 | asm volatile("sha256msg1 (%rcx,%rax,1), %xmm0"); | |
1253 | asm volatile("sha256msg1 0x12345678(,%rax,1), %xmm0"); | |
1254 | asm volatile("sha256msg1 (%rax,%rcx,1), %xmm0"); | |
1255 | asm volatile("sha256msg1 (%rax,%rcx,8), %xmm0"); | |
1256 | asm volatile("sha256msg1 0x12(%rax), %xmm0"); | |
1257 | asm volatile("sha256msg1 0x12(%rbp), %xmm0"); | |
1258 | asm volatile("sha256msg1 0x12(%rcx,%rax,1), %xmm0"); | |
1259 | asm volatile("sha256msg1 0x12(%rbp,%rax,1), %xmm0"); | |
1260 | asm volatile("sha256msg1 0x12(%rax,%rcx,1), %xmm0"); | |
1261 | asm volatile("sha256msg1 0x12(%rax,%rcx,8), %xmm0"); | |
1262 | asm volatile("sha256msg1 0x12345678(%rax), %xmm0"); | |
1263 | asm volatile("sha256msg1 0x12345678(%rbp), %xmm0"); | |
1264 | asm volatile("sha256msg1 0x12345678(%rcx,%rax,1), %xmm0"); | |
1265 | asm volatile("sha256msg1 0x12345678(%rbp,%rax,1), %xmm0"); | |
1266 | asm volatile("sha256msg1 0x12345678(%rax,%rcx,1), %xmm0"); | |
1267 | asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm0"); | |
1268 | asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm15"); | |
1269 | ||
1270 | /* sha256msg2 xmm2/m128, xmm1 */ | |
1271 | ||
1272 | asm volatile("sha256msg2 %xmm1, %xmm0"); | |
1273 | asm volatile("sha256msg2 %xmm7, %xmm2"); | |
1274 | asm volatile("sha256msg2 %xmm8, %xmm0"); | |
1275 | asm volatile("sha256msg2 %xmm7, %xmm8"); | |
1276 | asm volatile("sha256msg2 %xmm15, %xmm8"); | |
1277 | asm volatile("sha256msg2 (%rax), %xmm0"); | |
1278 | asm volatile("sha256msg2 (%r8), %xmm0"); | |
1279 | asm volatile("sha256msg2 (0x12345678), %xmm0"); | |
1280 | asm volatile("sha256msg2 (%rax), %xmm3"); | |
1281 | asm volatile("sha256msg2 (%rcx,%rax,1), %xmm0"); | |
1282 | asm volatile("sha256msg2 0x12345678(,%rax,1), %xmm0"); | |
1283 | asm volatile("sha256msg2 (%rax,%rcx,1), %xmm0"); | |
1284 | asm volatile("sha256msg2 (%rax,%rcx,8), %xmm0"); | |
1285 | asm volatile("sha256msg2 0x12(%rax), %xmm0"); | |
1286 | asm volatile("sha256msg2 0x12(%rbp), %xmm0"); | |
1287 | asm volatile("sha256msg2 0x12(%rcx,%rax,1), %xmm0"); | |
1288 | asm volatile("sha256msg2 0x12(%rbp,%rax,1), %xmm0"); | |
1289 | asm volatile("sha256msg2 0x12(%rax,%rcx,1), %xmm0"); | |
1290 | asm volatile("sha256msg2 0x12(%rax,%rcx,8), %xmm0"); | |
1291 | asm volatile("sha256msg2 0x12345678(%rax), %xmm0"); | |
1292 | asm volatile("sha256msg2 0x12345678(%rbp), %xmm0"); | |
1293 | asm volatile("sha256msg2 0x12345678(%rcx,%rax,1), %xmm0"); | |
1294 | asm volatile("sha256msg2 0x12345678(%rbp,%rax,1), %xmm0"); | |
1295 | asm volatile("sha256msg2 0x12345678(%rax,%rcx,1), %xmm0"); | |
1296 | asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm0"); | |
1297 | asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm15"); | |
1298 | ||
1299 | /* clflushopt m8 */ | |
1300 | ||
1301 | asm volatile("clflushopt (%rax)"); | |
1302 | asm volatile("clflushopt (%r8)"); | |
1303 | asm volatile("clflushopt (0x12345678)"); | |
1304 | asm volatile("clflushopt 0x12345678(%rax,%rcx,8)"); | |
1305 | asm volatile("clflushopt 0x12345678(%r8,%rcx,8)"); | |
1306 | /* Also check instructions in the same group encoding as clflushopt */ | |
1307 | asm volatile("clflush (%rax)"); | |
1308 | asm volatile("clflush (%r8)"); | |
1309 | asm volatile("sfence"); | |
1310 | ||
1311 | /* clwb m8 */ | |
1312 | ||
1313 | asm volatile("clwb (%rax)"); | |
1314 | asm volatile("clwb (%r8)"); | |
1315 | asm volatile("clwb (0x12345678)"); | |
1316 | asm volatile("clwb 0x12345678(%rax,%rcx,8)"); | |
1317 | asm volatile("clwb 0x12345678(%r8,%rcx,8)"); | |
1318 | /* Also check instructions in the same group encoding as clwb */ | |
1319 | asm volatile("xsaveopt (%rax)"); | |
1320 | asm volatile("xsaveopt (%r8)"); | |
1321 | asm volatile("mfence"); | |
1322 | ||
1323 | /* xsavec mem */ | |
1324 | ||
1325 | asm volatile("xsavec (%rax)"); | |
1326 | asm volatile("xsavec (%r8)"); | |
1327 | asm volatile("xsavec (0x12345678)"); | |
1328 | asm volatile("xsavec 0x12345678(%rax,%rcx,8)"); | |
1329 | asm volatile("xsavec 0x12345678(%r8,%rcx,8)"); | |
1330 | ||
1331 | /* xsaves mem */ | |
1332 | ||
1333 | asm volatile("xsaves (%rax)"); | |
1334 | asm volatile("xsaves (%r8)"); | |
1335 | asm volatile("xsaves (0x12345678)"); | |
1336 | asm volatile("xsaves 0x12345678(%rax,%rcx,8)"); | |
1337 | asm volatile("xsaves 0x12345678(%r8,%rcx,8)"); | |
1338 | ||
1339 | /* xrstors mem */ | |
1340 | ||
1341 | asm volatile("xrstors (%rax)"); | |
1342 | asm volatile("xrstors (%r8)"); | |
1343 | asm volatile("xrstors (0x12345678)"); | |
1344 | asm volatile("xrstors 0x12345678(%rax,%rcx,8)"); | |
1345 | asm volatile("xrstors 0x12345678(%r8,%rcx,8)"); | |
1346 | ||
d5b1a5f6 AH |
1347 | /* ptwrite */ |
1348 | ||
1349 | asm volatile("ptwrite (%rax)"); | |
1350 | asm volatile("ptwrite (%r8)"); | |
1351 | asm volatile("ptwrite (0x12345678)"); | |
1352 | asm volatile("ptwrite 0x12345678(%rax,%rcx,8)"); | |
1353 | asm volatile("ptwrite 0x12345678(%r8,%rcx,8)"); | |
1354 | ||
1355 | asm volatile("ptwritel (%rax)"); | |
1356 | asm volatile("ptwritel (%r8)"); | |
1357 | asm volatile("ptwritel (0x12345678)"); | |
1358 | asm volatile("ptwritel 0x12345678(%rax,%rcx,8)"); | |
1359 | asm volatile("ptwritel 0x12345678(%r8,%rcx,8)"); | |
1360 | ||
1361 | asm volatile("ptwriteq (%rax)"); | |
1362 | asm volatile("ptwriteq (%r8)"); | |
1363 | asm volatile("ptwriteq (0x12345678)"); | |
1364 | asm volatile("ptwriteq 0x12345678(%rax,%rcx,8)"); | |
1365 | asm volatile("ptwriteq 0x12345678(%r8,%rcx,8)"); | |
1366 | ||
6c4d0b41 AH |
1367 | #else /* #ifdef __x86_64__ */ |
1368 | ||
1369 | /* bound r32, mem (same op code as EVEX prefix) */ | |
1370 | ||
1371 | asm volatile("bound %eax, 0x12345678(%ecx)"); | |
1372 | asm volatile("bound %ecx, 0x12345678(%eax)"); | |
1373 | asm volatile("bound %edx, 0x12345678(%eax)"); | |
1374 | asm volatile("bound %ebx, 0x12345678(%eax)"); | |
1375 | asm volatile("bound %esp, 0x12345678(%eax)"); | |
1376 | asm volatile("bound %ebp, 0x12345678(%eax)"); | |
1377 | asm volatile("bound %esi, 0x12345678(%eax)"); | |
1378 | asm volatile("bound %edi, 0x12345678(%eax)"); | |
1379 | asm volatile("bound %ecx, (%eax)"); | |
1380 | asm volatile("bound %eax, (0x12345678)"); | |
1381 | asm volatile("bound %edx, (%ecx,%eax,1)"); | |
1382 | asm volatile("bound %edx, 0x12345678(,%eax,1)"); | |
1383 | asm volatile("bound %edx, (%eax,%ecx,1)"); | |
1384 | asm volatile("bound %edx, (%eax,%ecx,8)"); | |
1385 | asm volatile("bound %edx, 0x12(%eax)"); | |
1386 | asm volatile("bound %edx, 0x12(%ebp)"); | |
1387 | asm volatile("bound %edx, 0x12(%ecx,%eax,1)"); | |
1388 | asm volatile("bound %edx, 0x12(%ebp,%eax,1)"); | |
1389 | asm volatile("bound %edx, 0x12(%eax,%ecx,1)"); | |
1390 | asm volatile("bound %edx, 0x12(%eax,%ecx,8)"); | |
1391 | asm volatile("bound %edx, 0x12345678(%eax)"); | |
1392 | asm volatile("bound %edx, 0x12345678(%ebp)"); | |
1393 | asm volatile("bound %edx, 0x12345678(%ecx,%eax,1)"); | |
1394 | asm volatile("bound %edx, 0x12345678(%ebp,%eax,1)"); | |
1395 | asm volatile("bound %edx, 0x12345678(%eax,%ecx,1)"); | |
1396 | asm volatile("bound %edx, 0x12345678(%eax,%ecx,8)"); | |
1397 | ||
1398 | /* bound r16, mem (same op code as EVEX prefix) */ | |
1399 | ||
1400 | asm volatile("bound %ax, 0x12345678(%ecx)"); | |
1401 | asm volatile("bound %cx, 0x12345678(%eax)"); | |
1402 | asm volatile("bound %dx, 0x12345678(%eax)"); | |
1403 | asm volatile("bound %bx, 0x12345678(%eax)"); | |
1404 | asm volatile("bound %sp, 0x12345678(%eax)"); | |
1405 | asm volatile("bound %bp, 0x12345678(%eax)"); | |
1406 | asm volatile("bound %si, 0x12345678(%eax)"); | |
1407 | asm volatile("bound %di, 0x12345678(%eax)"); | |
1408 | asm volatile("bound %cx, (%eax)"); | |
1409 | asm volatile("bound %ax, (0x12345678)"); | |
1410 | asm volatile("bound %dx, (%ecx,%eax,1)"); | |
1411 | asm volatile("bound %dx, 0x12345678(,%eax,1)"); | |
1412 | asm volatile("bound %dx, (%eax,%ecx,1)"); | |
1413 | asm volatile("bound %dx, (%eax,%ecx,8)"); | |
1414 | asm volatile("bound %dx, 0x12(%eax)"); | |
1415 | asm volatile("bound %dx, 0x12(%ebp)"); | |
1416 | asm volatile("bound %dx, 0x12(%ecx,%eax,1)"); | |
1417 | asm volatile("bound %dx, 0x12(%ebp,%eax,1)"); | |
1418 | asm volatile("bound %dx, 0x12(%eax,%ecx,1)"); | |
1419 | asm volatile("bound %dx, 0x12(%eax,%ecx,8)"); | |
1420 | asm volatile("bound %dx, 0x12345678(%eax)"); | |
1421 | asm volatile("bound %dx, 0x12345678(%ebp)"); | |
1422 | asm volatile("bound %dx, 0x12345678(%ecx,%eax,1)"); | |
1423 | asm volatile("bound %dx, 0x12345678(%ebp,%eax,1)"); | |
1424 | asm volatile("bound %dx, 0x12345678(%eax,%ecx,1)"); | |
1425 | asm volatile("bound %dx, 0x12345678(%eax,%ecx,8)"); | |
1426 | ||
1427 | /* AVX-512: Instructions with the same op codes as Mask Instructions */ | |
1428 | ||
1429 | asm volatile("cmovno %eax,%ebx"); | |
1430 | asm volatile("cmovno 0x12345678(%eax),%ecx"); | |
1431 | asm volatile("cmovno 0x12345678(%eax),%cx"); | |
1432 | ||
1433 | asm volatile("cmove %eax,%ebx"); | |
1434 | asm volatile("cmove 0x12345678(%eax),%ecx"); | |
1435 | asm volatile("cmove 0x12345678(%eax),%cx"); | |
1436 | ||
1437 | asm volatile("seto 0x12345678(%eax)"); | |
1438 | asm volatile("setno 0x12345678(%eax)"); | |
1439 | asm volatile("setb 0x12345678(%eax)"); | |
1440 | asm volatile("setc 0x12345678(%eax)"); | |
1441 | asm volatile("setnae 0x12345678(%eax)"); | |
1442 | asm volatile("setae 0x12345678(%eax)"); | |
1443 | asm volatile("setnb 0x12345678(%eax)"); | |
1444 | asm volatile("setnc 0x12345678(%eax)"); | |
1445 | asm volatile("sets 0x12345678(%eax)"); | |
1446 | asm volatile("setns 0x12345678(%eax)"); | |
1447 | ||
1448 | /* AVX-512: Mask Instructions */ | |
1449 | ||
1450 | asm volatile("kandw %k7,%k6,%k5"); | |
1451 | asm volatile("kandq %k7,%k6,%k5"); | |
1452 | asm volatile("kandb %k7,%k6,%k5"); | |
1453 | asm volatile("kandd %k7,%k6,%k5"); | |
1454 | ||
1455 | asm volatile("kandnw %k7,%k6,%k5"); | |
1456 | asm volatile("kandnq %k7,%k6,%k5"); | |
1457 | asm volatile("kandnb %k7,%k6,%k5"); | |
1458 | asm volatile("kandnd %k7,%k6,%k5"); | |
1459 | ||
1460 | asm volatile("knotw %k7,%k6"); | |
1461 | asm volatile("knotq %k7,%k6"); | |
1462 | asm volatile("knotb %k7,%k6"); | |
1463 | asm volatile("knotd %k7,%k6"); | |
1464 | ||
1465 | asm volatile("korw %k7,%k6,%k5"); | |
1466 | asm volatile("korq %k7,%k6,%k5"); | |
1467 | asm volatile("korb %k7,%k6,%k5"); | |
1468 | asm volatile("kord %k7,%k6,%k5"); | |
1469 | ||
1470 | asm volatile("kxnorw %k7,%k6,%k5"); | |
1471 | asm volatile("kxnorq %k7,%k6,%k5"); | |
1472 | asm volatile("kxnorb %k7,%k6,%k5"); | |
1473 | asm volatile("kxnord %k7,%k6,%k5"); | |
1474 | ||
1475 | asm volatile("kxorw %k7,%k6,%k5"); | |
1476 | asm volatile("kxorq %k7,%k6,%k5"); | |
1477 | asm volatile("kxorb %k7,%k6,%k5"); | |
1478 | asm volatile("kxord %k7,%k6,%k5"); | |
1479 | ||
1480 | asm volatile("kaddw %k7,%k6,%k5"); | |
1481 | asm volatile("kaddq %k7,%k6,%k5"); | |
1482 | asm volatile("kaddb %k7,%k6,%k5"); | |
1483 | asm volatile("kaddd %k7,%k6,%k5"); | |
1484 | ||
1485 | asm volatile("kunpckbw %k7,%k6,%k5"); | |
1486 | asm volatile("kunpckwd %k7,%k6,%k5"); | |
1487 | asm volatile("kunpckdq %k7,%k6,%k5"); | |
1488 | ||
1489 | asm volatile("kmovw %k6,%k5"); | |
1490 | asm volatile("kmovw (%ecx),%k5"); | |
1491 | asm volatile("kmovw 0x123(%eax,%ecx,8),%k5"); | |
1492 | asm volatile("kmovw %k5,(%ecx)"); | |
1493 | asm volatile("kmovw %k5,0x123(%eax,%ecx,8)"); | |
1494 | asm volatile("kmovw %eax,%k5"); | |
1495 | asm volatile("kmovw %ebp,%k5"); | |
1496 | asm volatile("kmovw %k5,%eax"); | |
1497 | asm volatile("kmovw %k5,%ebp"); | |
1498 | ||
1499 | asm volatile("kmovq %k6,%k5"); | |
1500 | asm volatile("kmovq (%ecx),%k5"); | |
1501 | asm volatile("kmovq 0x123(%eax,%ecx,8),%k5"); | |
1502 | asm volatile("kmovq %k5,(%ecx)"); | |
1503 | asm volatile("kmovq %k5,0x123(%eax,%ecx,8)"); | |
1504 | ||
1505 | asm volatile("kmovb %k6,%k5"); | |
1506 | asm volatile("kmovb (%ecx),%k5"); | |
1507 | asm volatile("kmovb 0x123(%eax,%ecx,8),%k5"); | |
1508 | asm volatile("kmovb %k5,(%ecx)"); | |
1509 | asm volatile("kmovb %k5,0x123(%eax,%ecx,8)"); | |
1510 | asm volatile("kmovb %eax,%k5"); | |
1511 | asm volatile("kmovb %ebp,%k5"); | |
1512 | asm volatile("kmovb %k5,%eax"); | |
1513 | asm volatile("kmovb %k5,%ebp"); | |
1514 | ||
1515 | asm volatile("kmovd %k6,%k5"); | |
1516 | asm volatile("kmovd (%ecx),%k5"); | |
1517 | asm volatile("kmovd 0x123(%eax,%ecx,8),%k5"); | |
1518 | asm volatile("kmovd %k5,(%ecx)"); | |
1519 | asm volatile("kmovd %k5,0x123(%eax,%ecx,8)"); | |
1520 | asm volatile("kmovd %eax,%k5"); | |
1521 | asm volatile("kmovd %ebp,%k5"); | |
1522 | asm volatile("kmovd %k5,%eax"); | |
1523 | asm volatile("kmovd %k5,%ebp"); | |
1524 | ||
1525 | asm volatile("kortestw %k6,%k5"); | |
1526 | asm volatile("kortestq %k6,%k5"); | |
1527 | asm volatile("kortestb %k6,%k5"); | |
1528 | asm volatile("kortestd %k6,%k5"); | |
1529 | ||
1530 | asm volatile("ktestw %k6,%k5"); | |
1531 | asm volatile("ktestq %k6,%k5"); | |
1532 | asm volatile("ktestb %k6,%k5"); | |
1533 | asm volatile("ktestd %k6,%k5"); | |
1534 | ||
1535 | asm volatile("kshiftrw $0x12,%k6,%k5"); | |
1536 | asm volatile("kshiftrq $0x5b,%k6,%k5"); | |
1537 | asm volatile("kshiftlw $0x12,%k6,%k5"); | |
1538 | asm volatile("kshiftlq $0x5b,%k6,%k5"); | |
1539 | ||
1540 | /* AVX-512: Op code 0f 5b */ | |
1541 | asm volatile("vcvtdq2ps %xmm5,%xmm6"); | |
1542 | asm volatile("vcvtqq2ps %zmm5,%ymm6{%k7}"); | |
1543 | asm volatile("vcvtps2dq %xmm5,%xmm6"); | |
1544 | asm volatile("vcvttps2dq %xmm5,%xmm6"); | |
1545 | ||
1546 | /* AVX-512: Op code 0f 6f */ | |
1547 | ||
1548 | asm volatile("movq %mm0,%mm4"); | |
1549 | asm volatile("vmovdqa %ymm4,%ymm6"); | |
1550 | asm volatile("vmovdqa32 %zmm5,%zmm6"); | |
1551 | asm volatile("vmovdqa64 %zmm5,%zmm6"); | |
1552 | asm volatile("vmovdqu %ymm4,%ymm6"); | |
1553 | asm volatile("vmovdqu32 %zmm5,%zmm6"); | |
1554 | asm volatile("vmovdqu64 %zmm5,%zmm6"); | |
1555 | asm volatile("vmovdqu8 %zmm5,%zmm6"); | |
1556 | asm volatile("vmovdqu16 %zmm5,%zmm6"); | |
1557 | ||
1558 | /* AVX-512: Op code 0f 78 */ | |
1559 | ||
1560 | asm volatile("vmread %eax,%ebx"); | |
1561 | asm volatile("vcvttps2udq %zmm5,%zmm6"); | |
1562 | asm volatile("vcvttpd2udq %zmm5,%ymm6{%k7}"); | |
1563 | asm volatile("vcvttsd2usi %xmm6,%eax"); | |
1564 | asm volatile("vcvttss2usi %xmm6,%eax"); | |
1565 | asm volatile("vcvttps2uqq %ymm5,%zmm6{%k7}"); | |
1566 | asm volatile("vcvttpd2uqq %zmm5,%zmm6"); | |
1567 | ||
1568 | /* AVX-512: Op code 0f 79 */ | |
1569 | ||
1570 | asm volatile("vmwrite %eax,%ebx"); | |
1571 | asm volatile("vcvtps2udq %zmm5,%zmm6"); | |
1572 | asm volatile("vcvtpd2udq %zmm5,%ymm6{%k7}"); | |
1573 | asm volatile("vcvtsd2usi %xmm6,%eax"); | |
1574 | asm volatile("vcvtss2usi %xmm6,%eax"); | |
1575 | asm volatile("vcvtps2uqq %ymm5,%zmm6{%k7}"); | |
1576 | asm volatile("vcvtpd2uqq %zmm5,%zmm6"); | |
1577 | ||
1578 | /* AVX-512: Op code 0f 7a */ | |
1579 | ||
1580 | asm volatile("vcvtudq2pd %ymm5,%zmm6{%k7}"); | |
1581 | asm volatile("vcvtuqq2pd %zmm5,%zmm6"); | |
1582 | asm volatile("vcvtudq2ps %zmm5,%zmm6"); | |
1583 | asm volatile("vcvtuqq2ps %zmm5,%ymm6{%k7}"); | |
1584 | asm volatile("vcvttps2qq %ymm5,%zmm6{%k7}"); | |
1585 | asm volatile("vcvttpd2qq %zmm5,%zmm6"); | |
1586 | ||
1587 | /* AVX-512: Op code 0f 7b */ | |
1588 | ||
1589 | asm volatile("vcvtusi2sd %eax,%xmm5,%xmm6"); | |
1590 | asm volatile("vcvtusi2ss %eax,%xmm5,%xmm6"); | |
1591 | asm volatile("vcvtps2qq %ymm5,%zmm6{%k7}"); | |
1592 | asm volatile("vcvtpd2qq %zmm5,%zmm6"); | |
1593 | ||
1594 | /* AVX-512: Op code 0f 7f */ | |
1595 | ||
1596 | asm volatile("movq.s %mm0,%mm4"); | |
1597 | asm volatile("vmovdqa.s %ymm5,%ymm6"); | |
1598 | asm volatile("vmovdqa32.s %zmm5,%zmm6"); | |
1599 | asm volatile("vmovdqa64.s %zmm5,%zmm6"); | |
1600 | asm volatile("vmovdqu.s %ymm5,%ymm6"); | |
1601 | asm volatile("vmovdqu32.s %zmm5,%zmm6"); | |
1602 | asm volatile("vmovdqu64.s %zmm5,%zmm6"); | |
1603 | asm volatile("vmovdqu8.s %zmm5,%zmm6"); | |
1604 | asm volatile("vmovdqu16.s %zmm5,%zmm6"); | |
1605 | ||
1606 | /* AVX-512: Op code 0f db */ | |
1607 | ||
1608 | asm volatile("pand %mm1,%mm2"); | |
1609 | asm volatile("pand %xmm1,%xmm2"); | |
1610 | asm volatile("vpand %ymm4,%ymm6,%ymm2"); | |
1611 | asm volatile("vpandd %zmm4,%zmm5,%zmm6"); | |
1612 | asm volatile("vpandq %zmm4,%zmm5,%zmm6"); | |
1613 | ||
1614 | /* AVX-512: Op code 0f df */ | |
1615 | ||
1616 | asm volatile("pandn %mm1,%mm2"); | |
1617 | asm volatile("pandn %xmm1,%xmm2"); | |
1618 | asm volatile("vpandn %ymm4,%ymm6,%ymm2"); | |
1619 | asm volatile("vpandnd %zmm4,%zmm5,%zmm6"); | |
1620 | asm volatile("vpandnq %zmm4,%zmm5,%zmm6"); | |
1621 | ||
1622 | /* AVX-512: Op code 0f e6 */ | |
1623 | ||
1624 | asm volatile("vcvttpd2dq %xmm1,%xmm2"); | |
1625 | asm volatile("vcvtdq2pd %xmm5,%xmm6"); | |
1626 | asm volatile("vcvtdq2pd %ymm5,%zmm6{%k7}"); | |
1627 | asm volatile("vcvtqq2pd %zmm5,%zmm6"); | |
1628 | asm volatile("vcvtpd2dq %xmm1,%xmm2"); | |
1629 | ||
1630 | /* AVX-512: Op code 0f eb */ | |
1631 | ||
1632 | asm volatile("por %mm4,%mm6"); | |
1633 | asm volatile("vpor %ymm4,%ymm6,%ymm2"); | |
1634 | asm volatile("vpord %zmm4,%zmm5,%zmm6"); | |
1635 | asm volatile("vporq %zmm4,%zmm5,%zmm6"); | |
1636 | ||
1637 | /* AVX-512: Op code 0f ef */ | |
1638 | ||
1639 | asm volatile("pxor %mm4,%mm6"); | |
1640 | asm volatile("vpxor %ymm4,%ymm6,%ymm2"); | |
1641 | asm volatile("vpxord %zmm4,%zmm5,%zmm6"); | |
1642 | asm volatile("vpxorq %zmm4,%zmm5,%zmm6"); | |
1643 | ||
1644 | /* AVX-512: Op code 0f 38 10 */ | |
1645 | ||
1646 | asm volatile("pblendvb %xmm1,%xmm0"); | |
1647 | asm volatile("vpsrlvw %zmm4,%zmm5,%zmm6"); | |
1648 | asm volatile("vpmovuswb %zmm5,%ymm6{%k7}"); | |
1649 | ||
1650 | /* AVX-512: Op code 0f 38 11 */ | |
1651 | ||
1652 | asm volatile("vpmovusdb %zmm5,%xmm6{%k7}"); | |
1653 | asm volatile("vpsravw %zmm4,%zmm5,%zmm6"); | |
1654 | ||
1655 | /* AVX-512: Op code 0f 38 12 */ | |
1656 | ||
1657 | asm volatile("vpmovusqb %zmm5,%xmm6{%k7}"); | |
1658 | asm volatile("vpsllvw %zmm4,%zmm5,%zmm6"); | |
1659 | ||
1660 | /* AVX-512: Op code 0f 38 13 */ | |
1661 | ||
1662 | asm volatile("vcvtph2ps %xmm3,%ymm5"); | |
1663 | asm volatile("vcvtph2ps %ymm5,%zmm6{%k7}"); | |
1664 | asm volatile("vpmovusdw %zmm5,%ymm6{%k7}"); | |
1665 | ||
1666 | /* AVX-512: Op code 0f 38 14 */ | |
1667 | ||
1668 | asm volatile("blendvps %xmm1,%xmm0"); | |
1669 | asm volatile("vpmovusqw %zmm5,%xmm6{%k7}"); | |
1670 | asm volatile("vprorvd %zmm4,%zmm5,%zmm6"); | |
1671 | asm volatile("vprorvq %zmm4,%zmm5,%zmm6"); | |
1672 | ||
1673 | /* AVX-512: Op code 0f 38 15 */ | |
1674 | ||
1675 | asm volatile("blendvpd %xmm1,%xmm0"); | |
1676 | asm volatile("vpmovusqd %zmm5,%ymm6{%k7}"); | |
1677 | asm volatile("vprolvd %zmm4,%zmm5,%zmm6"); | |
1678 | asm volatile("vprolvq %zmm4,%zmm5,%zmm6"); | |
1679 | ||
1680 | /* AVX-512: Op code 0f 38 16 */ | |
1681 | ||
1682 | asm volatile("vpermps %ymm4,%ymm6,%ymm2"); | |
1683 | asm volatile("vpermps %ymm4,%ymm6,%ymm2{%k7}"); | |
1684 | asm volatile("vpermpd %ymm4,%ymm6,%ymm2{%k7}"); | |
1685 | ||
1686 | /* AVX-512: Op code 0f 38 19 */ | |
1687 | ||
1688 | asm volatile("vbroadcastsd %xmm4,%ymm6"); | |
1689 | asm volatile("vbroadcastf32x2 %xmm7,%zmm6"); | |
1690 | ||
1691 | /* AVX-512: Op code 0f 38 1a */ | |
1692 | ||
1693 | asm volatile("vbroadcastf128 (%ecx),%ymm4"); | |
1694 | asm volatile("vbroadcastf32x4 (%ecx),%zmm6"); | |
1695 | asm volatile("vbroadcastf64x2 (%ecx),%zmm6"); | |
1696 | ||
1697 | /* AVX-512: Op code 0f 38 1b */ | |
1698 | ||
1699 | asm volatile("vbroadcastf32x8 (%ecx),%zmm6"); | |
1700 | asm volatile("vbroadcastf64x4 (%ecx),%zmm6"); | |
1701 | ||
1702 | /* AVX-512: Op code 0f 38 1f */ | |
1703 | ||
1704 | asm volatile("vpabsq %zmm4,%zmm6"); | |
1705 | ||
1706 | /* AVX-512: Op code 0f 38 20 */ | |
1707 | ||
1708 | asm volatile("vpmovsxbw %xmm4,%xmm5"); | |
1709 | asm volatile("vpmovswb %zmm5,%ymm6{%k7}"); | |
1710 | ||
1711 | /* AVX-512: Op code 0f 38 21 */ | |
1712 | ||
1713 | asm volatile("vpmovsxbd %xmm4,%ymm6"); | |
1714 | asm volatile("vpmovsdb %zmm5,%xmm6{%k7}"); | |
1715 | ||
1716 | /* AVX-512: Op code 0f 38 22 */ | |
1717 | ||
1718 | asm volatile("vpmovsxbq %xmm4,%ymm4"); | |
1719 | asm volatile("vpmovsqb %zmm5,%xmm6{%k7}"); | |
1720 | ||
1721 | /* AVX-512: Op code 0f 38 23 */ | |
1722 | ||
1723 | asm volatile("vpmovsxwd %xmm4,%ymm4"); | |
1724 | asm volatile("vpmovsdw %zmm5,%ymm6{%k7}"); | |
1725 | ||
1726 | /* AVX-512: Op code 0f 38 24 */ | |
1727 | ||
1728 | asm volatile("vpmovsxwq %xmm4,%ymm6"); | |
1729 | asm volatile("vpmovsqw %zmm5,%xmm6{%k7}"); | |
1730 | ||
1731 | /* AVX-512: Op code 0f 38 25 */ | |
1732 | ||
1733 | asm volatile("vpmovsxdq %xmm4,%ymm4"); | |
1734 | asm volatile("vpmovsqd %zmm5,%ymm6{%k7}"); | |
1735 | ||
1736 | /* AVX-512: Op code 0f 38 26 */ | |
1737 | ||
1738 | asm volatile("vptestmb %zmm5,%zmm6,%k5"); | |
1739 | asm volatile("vptestmw %zmm5,%zmm6,%k5"); | |
1740 | asm volatile("vptestnmb %zmm4,%zmm5,%k5"); | |
1741 | asm volatile("vptestnmw %zmm4,%zmm5,%k5"); | |
1742 | ||
1743 | /* AVX-512: Op code 0f 38 27 */ | |
1744 | ||
1745 | asm volatile("vptestmd %zmm5,%zmm6,%k5"); | |
1746 | asm volatile("vptestmq %zmm5,%zmm6,%k5"); | |
1747 | asm volatile("vptestnmd %zmm4,%zmm5,%k5"); | |
1748 | asm volatile("vptestnmq %zmm4,%zmm5,%k5"); | |
1749 | ||
1750 | /* AVX-512: Op code 0f 38 28 */ | |
1751 | ||
1752 | asm volatile("vpmuldq %ymm4,%ymm6,%ymm2"); | |
1753 | asm volatile("vpmovm2b %k5,%zmm6"); | |
1754 | asm volatile("vpmovm2w %k5,%zmm6"); | |
1755 | ||
1756 | /* AVX-512: Op code 0f 38 29 */ | |
1757 | ||
1758 | asm volatile("vpcmpeqq %ymm4,%ymm6,%ymm2"); | |
1759 | asm volatile("vpmovb2m %zmm6,%k5"); | |
1760 | asm volatile("vpmovw2m %zmm6,%k5"); | |
1761 | ||
1762 | /* AVX-512: Op code 0f 38 2a */ | |
1763 | ||
1764 | asm volatile("vmovntdqa (%ecx),%ymm4"); | |
1765 | asm volatile("vpbroadcastmb2q %k6,%zmm1"); | |
1766 | ||
1767 | /* AVX-512: Op code 0f 38 2c */ | |
1768 | ||
1769 | asm volatile("vmaskmovps (%ecx),%ymm4,%ymm6"); | |
1770 | asm volatile("vscalefps %zmm4,%zmm5,%zmm6"); | |
1771 | asm volatile("vscalefpd %zmm4,%zmm5,%zmm6"); | |
1772 | ||
1773 | /* AVX-512: Op code 0f 38 2d */ | |
1774 | ||
1775 | asm volatile("vmaskmovpd (%ecx),%ymm4,%ymm6"); | |
1776 | asm volatile("vscalefss %xmm4,%xmm5,%xmm6{%k7}"); | |
1777 | asm volatile("vscalefsd %xmm4,%xmm5,%xmm6{%k7}"); | |
1778 | ||
1779 | /* AVX-512: Op code 0f 38 30 */ | |
1780 | ||
1781 | asm volatile("vpmovzxbw %xmm4,%ymm4"); | |
1782 | asm volatile("vpmovwb %zmm5,%ymm6{%k7}"); | |
1783 | ||
1784 | /* AVX-512: Op code 0f 38 31 */ | |
1785 | ||
1786 | asm volatile("vpmovzxbd %xmm4,%ymm6"); | |
1787 | asm volatile("vpmovdb %zmm5,%xmm6{%k7}"); | |
1788 | ||
1789 | /* AVX-512: Op code 0f 38 32 */ | |
1790 | ||
1791 | asm volatile("vpmovzxbq %xmm4,%ymm4"); | |
1792 | asm volatile("vpmovqb %zmm5,%xmm6{%k7}"); | |
1793 | ||
1794 | /* AVX-512: Op code 0f 38 33 */ | |
1795 | ||
1796 | asm volatile("vpmovzxwd %xmm4,%ymm4"); | |
1797 | asm volatile("vpmovdw %zmm5,%ymm6{%k7}"); | |
1798 | ||
1799 | /* AVX-512: Op code 0f 38 34 */ | |
1800 | ||
1801 | asm volatile("vpmovzxwq %xmm4,%ymm6"); | |
1802 | asm volatile("vpmovqw %zmm5,%xmm6{%k7}"); | |
1803 | ||
1804 | /* AVX-512: Op code 0f 38 35 */ | |
1805 | ||
1806 | asm volatile("vpmovzxdq %xmm4,%ymm4"); | |
1807 | asm volatile("vpmovqd %zmm5,%ymm6{%k7}"); | |
1808 | ||
1809 | /* AVX-512: Op code 0f 38 36 */ | |
1810 | ||
1811 | asm volatile("vpermd %ymm4,%ymm6,%ymm2"); | |
1812 | asm volatile("vpermd %ymm4,%ymm6,%ymm2{%k7}"); | |
1813 | asm volatile("vpermq %ymm4,%ymm6,%ymm2{%k7}"); | |
1814 | ||
1815 | /* AVX-512: Op code 0f 38 38 */ | |
1816 | ||
1817 | asm volatile("vpminsb %ymm4,%ymm6,%ymm2"); | |
1818 | asm volatile("vpmovm2d %k5,%zmm6"); | |
1819 | asm volatile("vpmovm2q %k5,%zmm6"); | |
1820 | ||
1821 | /* AVX-512: Op code 0f 38 39 */ | |
1822 | ||
1823 | asm volatile("vpminsd %xmm1,%xmm2,%xmm3"); | |
1824 | asm volatile("vpminsd %zmm4,%zmm5,%zmm6"); | |
1825 | asm volatile("vpminsq %zmm4,%zmm5,%zmm6"); | |
1826 | asm volatile("vpmovd2m %zmm6,%k5"); | |
1827 | asm volatile("vpmovq2m %zmm6,%k5"); | |
1828 | ||
1829 | /* AVX-512: Op code 0f 38 3a */ | |
1830 | ||
1831 | asm volatile("vpminuw %ymm4,%ymm6,%ymm2"); | |
1832 | asm volatile("vpbroadcastmw2d %k6,%zmm6"); | |
1833 | ||
1834 | /* AVX-512: Op code 0f 38 3b */ | |
1835 | ||
1836 | asm volatile("vpminud %ymm4,%ymm6,%ymm2"); | |
1837 | asm volatile("vpminud %zmm4,%zmm5,%zmm6"); | |
1838 | asm volatile("vpminuq %zmm4,%zmm5,%zmm6"); | |
1839 | ||
1840 | /* AVX-512: Op code 0f 38 3d */ | |
1841 | ||
1842 | asm volatile("vpmaxsd %ymm4,%ymm6,%ymm2"); | |
1843 | asm volatile("vpmaxsd %zmm4,%zmm5,%zmm6"); | |
1844 | asm volatile("vpmaxsq %zmm4,%zmm5,%zmm6"); | |
1845 | ||
1846 | /* AVX-512: Op code 0f 38 3f */ | |
1847 | ||
1848 | asm volatile("vpmaxud %ymm4,%ymm6,%ymm2"); | |
1849 | asm volatile("vpmaxud %zmm4,%zmm5,%zmm6"); | |
1850 | asm volatile("vpmaxuq %zmm4,%zmm5,%zmm6"); | |
1851 | ||
1852 | /* AVX-512: Op code 0f 38 40 */ | |
1853 | ||
1854 | asm volatile("vpmulld %ymm4,%ymm6,%ymm2"); | |
1855 | asm volatile("vpmulld %zmm4,%zmm5,%zmm6"); | |
1856 | asm volatile("vpmullq %zmm4,%zmm5,%zmm6"); | |
1857 | ||
1858 | /* AVX-512: Op code 0f 38 42 */ | |
1859 | ||
1860 | asm volatile("vgetexpps %zmm5,%zmm6"); | |
1861 | asm volatile("vgetexppd %zmm5,%zmm6"); | |
1862 | ||
1863 | /* AVX-512: Op code 0f 38 43 */ | |
1864 | ||
1865 | asm volatile("vgetexpss %xmm4,%xmm5,%xmm6{%k7}"); | |
1866 | asm volatile("vgetexpsd %xmm2,%xmm3,%xmm4{%k7}"); | |
1867 | ||
1868 | /* AVX-512: Op code 0f 38 44 */ | |
98e4619f | 1869 | |
6c4d0b41 AH |
1870 | asm volatile("vplzcntd %zmm5,%zmm6"); |
1871 | asm volatile("vplzcntq %zmm5,%zmm6"); | |
98e4619f | 1872 | |
6c4d0b41 | 1873 | /* AVX-512: Op code 0f 38 46 */ |
98e4619f | 1874 | |
6c4d0b41 AH |
1875 | asm volatile("vpsravd %ymm4,%ymm6,%ymm2"); |
1876 | asm volatile("vpsravd %zmm4,%zmm5,%zmm6"); | |
1877 | asm volatile("vpsravq %zmm4,%zmm5,%zmm6"); | |
98e4619f | 1878 | |
6c4d0b41 | 1879 | /* AVX-512: Op code 0f 38 4c */ |
98e4619f | 1880 | |
6c4d0b41 AH |
1881 | asm volatile("vrcp14ps %zmm5,%zmm6"); |
1882 | asm volatile("vrcp14pd %zmm5,%zmm6"); | |
98e4619f | 1883 | |
6c4d0b41 | 1884 | /* AVX-512: Op code 0f 38 4d */ |
98e4619f | 1885 | |
6c4d0b41 AH |
1886 | asm volatile("vrcp14ss %xmm4,%xmm5,%xmm6{%k7}"); |
1887 | asm volatile("vrcp14sd %xmm4,%xmm5,%xmm6{%k7}"); | |
98e4619f | 1888 | |
6c4d0b41 | 1889 | /* AVX-512: Op code 0f 38 4e */ |
98e4619f | 1890 | |
6c4d0b41 AH |
1891 | asm volatile("vrsqrt14ps %zmm5,%zmm6"); |
1892 | asm volatile("vrsqrt14pd %zmm5,%zmm6"); | |
98e4619f | 1893 | |
6c4d0b41 | 1894 | /* AVX-512: Op code 0f 38 4f */ |
98e4619f | 1895 | |
6c4d0b41 AH |
1896 | asm volatile("vrsqrt14ss %xmm4,%xmm5,%xmm6{%k7}"); |
1897 | asm volatile("vrsqrt14sd %xmm4,%xmm5,%xmm6{%k7}"); | |
98e4619f | 1898 | |
6c4d0b41 | 1899 | /* AVX-512: Op code 0f 38 59 */ |
98e4619f | 1900 | |
6c4d0b41 AH |
1901 | asm volatile("vpbroadcastq %xmm4,%xmm6"); |
1902 | asm volatile("vbroadcasti32x2 %xmm7,%zmm6"); | |
98e4619f | 1903 | |
6c4d0b41 AH |
1904 | /* AVX-512: Op code 0f 38 5a */ |
1905 | ||
1906 | asm volatile("vbroadcasti128 (%ecx),%ymm4"); | |
1907 | asm volatile("vbroadcasti32x4 (%ecx),%zmm6"); | |
1908 | asm volatile("vbroadcasti64x2 (%ecx),%zmm6"); | |
1909 | ||
1910 | /* AVX-512: Op code 0f 38 5b */ | |
1911 | ||
1912 | asm volatile("vbroadcasti32x8 (%ecx),%zmm6"); | |
1913 | asm volatile("vbroadcasti64x4 (%ecx),%zmm6"); | |
1914 | ||
1915 | /* AVX-512: Op code 0f 38 64 */ | |
1916 | ||
1917 | asm volatile("vpblendmd %zmm4,%zmm5,%zmm6"); | |
1918 | asm volatile("vpblendmq %zmm4,%zmm5,%zmm6"); | |
1919 | ||
1920 | /* AVX-512: Op code 0f 38 65 */ | |
1921 | ||
1922 | asm volatile("vblendmps %zmm4,%zmm5,%zmm6"); | |
1923 | asm volatile("vblendmpd %zmm4,%zmm5,%zmm6"); | |
1924 | ||
1925 | /* AVX-512: Op code 0f 38 66 */ | |
1926 | ||
1927 | asm volatile("vpblendmb %zmm4,%zmm5,%zmm6"); | |
1928 | asm volatile("vpblendmw %zmm4,%zmm5,%zmm6"); | |
1929 | ||
1930 | /* AVX-512: Op code 0f 38 75 */ | |
1931 | ||
1932 | asm volatile("vpermi2b %zmm4,%zmm5,%zmm6"); | |
1933 | asm volatile("vpermi2w %zmm4,%zmm5,%zmm6"); | |
1934 | ||
1935 | /* AVX-512: Op code 0f 38 76 */ | |
1936 | ||
1937 | asm volatile("vpermi2d %zmm4,%zmm5,%zmm6"); | |
1938 | asm volatile("vpermi2q %zmm4,%zmm5,%zmm6"); | |
1939 | ||
1940 | /* AVX-512: Op code 0f 38 77 */ | |
1941 | ||
1942 | asm volatile("vpermi2ps %zmm4,%zmm5,%zmm6"); | |
1943 | asm volatile("vpermi2pd %zmm4,%zmm5,%zmm6"); | |
1944 | ||
1945 | /* AVX-512: Op code 0f 38 7a */ | |
1946 | ||
1947 | asm volatile("vpbroadcastb %eax,%xmm3"); | |
1948 | ||
1949 | /* AVX-512: Op code 0f 38 7b */ | |
1950 | ||
1951 | asm volatile("vpbroadcastw %eax,%xmm3"); | |
1952 | ||
1953 | /* AVX-512: Op code 0f 38 7c */ | |
1954 | ||
1955 | asm volatile("vpbroadcastd %eax,%xmm3"); | |
1956 | ||
1957 | /* AVX-512: Op code 0f 38 7d */ | |
1958 | ||
1959 | asm volatile("vpermt2b %zmm4,%zmm5,%zmm6"); | |
1960 | asm volatile("vpermt2w %zmm4,%zmm5,%zmm6"); | |
1961 | ||
1962 | /* AVX-512: Op code 0f 38 7e */ | |
1963 | ||
1964 | asm volatile("vpermt2d %zmm4,%zmm5,%zmm6"); | |
1965 | asm volatile("vpermt2q %zmm4,%zmm5,%zmm6"); | |
1966 | ||
1967 | /* AVX-512: Op code 0f 38 7f */ | |
1968 | ||
1969 | asm volatile("vpermt2ps %zmm4,%zmm5,%zmm6"); | |
1970 | asm volatile("vpermt2pd %zmm4,%zmm5,%zmm6"); | |
1971 | ||
1972 | /* AVX-512: Op code 0f 38 83 */ | |
1973 | ||
1974 | asm volatile("vpmultishiftqb %zmm4,%zmm5,%zmm6"); | |
1975 | ||
1976 | /* AVX-512: Op code 0f 38 88 */ | |
1977 | ||
1978 | asm volatile("vexpandps (%ecx),%zmm6"); | |
1979 | asm volatile("vexpandpd (%ecx),%zmm6"); | |
1980 | ||
1981 | /* AVX-512: Op code 0f 38 89 */ | |
1982 | ||
1983 | asm volatile("vpexpandd (%ecx),%zmm6"); | |
1984 | asm volatile("vpexpandq (%ecx),%zmm6"); | |
1985 | ||
1986 | /* AVX-512: Op code 0f 38 8a */ | |
1987 | ||
1988 | asm volatile("vcompressps %zmm6,(%ecx)"); | |
1989 | asm volatile("vcompresspd %zmm6,(%ecx)"); | |
1990 | ||
1991 | /* AVX-512: Op code 0f 38 8b */ | |
1992 | ||
1993 | asm volatile("vpcompressd %zmm6,(%ecx)"); | |
1994 | asm volatile("vpcompressq %zmm6,(%ecx)"); | |
1995 | ||
1996 | /* AVX-512: Op code 0f 38 8d */ | |
1997 | ||
1998 | asm volatile("vpermb %zmm4,%zmm5,%zmm6"); | |
1999 | asm volatile("vpermw %zmm4,%zmm5,%zmm6"); | |
2000 | ||
2001 | /* AVX-512: Op code 0f 38 90 */ | |
2002 | ||
2003 | asm volatile("vpgatherdd %xmm2,0x02(%ebp,%xmm7,2),%xmm1"); | |
2004 | asm volatile("vpgatherdq %xmm2,0x04(%ebp,%xmm7,2),%xmm1"); | |
2005 | asm volatile("vpgatherdd 0x7b(%ebp,%zmm7,8),%zmm6{%k1}"); | |
2006 | asm volatile("vpgatherdq 0x7b(%ebp,%ymm7,8),%zmm6{%k1}"); | |
2007 | ||
2008 | /* AVX-512: Op code 0f 38 91 */ | |
2009 | ||
2010 | asm volatile("vpgatherqd %xmm2,0x02(%ebp,%xmm7,2),%xmm1"); | |
2011 | asm volatile("vpgatherqq %xmm2,0x02(%ebp,%xmm7,2),%xmm1"); | |
2012 | asm volatile("vpgatherqd 0x7b(%ebp,%zmm7,8),%ymm6{%k1}"); | |
2013 | asm volatile("vpgatherqq 0x7b(%ebp,%zmm7,8),%zmm6{%k1}"); | |
2014 | ||
2015 | /* AVX-512: Op code 0f 38 a0 */ | |
2016 | ||
2017 | asm volatile("vpscatterdd %zmm6,0x7b(%ebp,%zmm7,8){%k1}"); | |
2018 | asm volatile("vpscatterdq %zmm6,0x7b(%ebp,%ymm7,8){%k1}"); | |
2019 | ||
2020 | /* AVX-512: Op code 0f 38 a1 */ | |
2021 | ||
2022 | asm volatile("vpscatterqd %ymm6,0x7b(%ebp,%zmm7,8){%k1}"); | |
2023 | asm volatile("vpscatterqq %ymm6,0x7b(%ebp,%ymm7,8){%k1}"); | |
2024 | ||
2025 | /* AVX-512: Op code 0f 38 a2 */ | |
2026 | ||
2027 | asm volatile("vscatterdps %zmm6,0x7b(%ebp,%zmm7,8){%k1}"); | |
2028 | asm volatile("vscatterdpd %zmm6,0x7b(%ebp,%ymm7,8){%k1}"); | |
2029 | ||
2030 | /* AVX-512: Op code 0f 38 a3 */ | |
2031 | ||
2032 | asm volatile("vscatterqps %ymm6,0x7b(%ebp,%zmm7,8){%k1}"); | |
2033 | asm volatile("vscatterqpd %zmm6,0x7b(%ebp,%zmm7,8){%k1}"); | |
2034 | ||
2035 | /* AVX-512: Op code 0f 38 b4 */ | |
2036 | ||
2037 | asm volatile("vpmadd52luq %zmm4,%zmm5,%zmm6"); | |
2038 | ||
2039 | /* AVX-512: Op code 0f 38 b5 */ | |
2040 | ||
2041 | asm volatile("vpmadd52huq %zmm4,%zmm5,%zmm6"); | |
2042 | ||
2043 | /* AVX-512: Op code 0f 38 c4 */ | |
2044 | ||
2045 | asm volatile("vpconflictd %zmm5,%zmm6"); | |
2046 | asm volatile("vpconflictq %zmm5,%zmm6"); | |
2047 | ||
2048 | /* AVX-512: Op code 0f 38 c8 */ | |
2049 | ||
2050 | asm volatile("vexp2ps %zmm6,%zmm7"); | |
2051 | asm volatile("vexp2pd %zmm6,%zmm7"); | |
2052 | ||
2053 | /* AVX-512: Op code 0f 38 ca */ | |
2054 | ||
2055 | asm volatile("vrcp28ps %zmm6,%zmm7"); | |
2056 | asm volatile("vrcp28pd %zmm6,%zmm7"); | |
2057 | ||
2058 | /* AVX-512: Op code 0f 38 cb */ | |
2059 | ||
2060 | asm volatile("vrcp28ss %xmm5,%xmm6,%xmm7{%k7}"); | |
2061 | asm volatile("vrcp28sd %xmm5,%xmm6,%xmm7{%k7}"); | |
2062 | ||
2063 | /* AVX-512: Op code 0f 38 cc */ | |
2064 | ||
2065 | asm volatile("vrsqrt28ps %zmm6,%zmm7"); | |
2066 | asm volatile("vrsqrt28pd %zmm6,%zmm7"); | |
2067 | ||
2068 | /* AVX-512: Op code 0f 38 cd */ | |
2069 | ||
2070 | asm volatile("vrsqrt28ss %xmm5,%xmm6,%xmm7{%k7}"); | |
2071 | asm volatile("vrsqrt28sd %xmm5,%xmm6,%xmm7{%k7}"); | |
2072 | ||
2073 | /* AVX-512: Op code 0f 3a 03 */ | |
2074 | ||
2075 | asm volatile("valignd $0x12,%zmm5,%zmm6,%zmm7"); | |
2076 | asm volatile("valignq $0x12,%zmm5,%zmm6,%zmm7"); | |
2077 | ||
2078 | /* AVX-512: Op code 0f 3a 08 */ | |
2079 | ||
2080 | asm volatile("vroundps $0x5,%ymm6,%ymm2"); | |
2081 | asm volatile("vrndscaleps $0x12,%zmm5,%zmm6"); | |
2082 | ||
2083 | /* AVX-512: Op code 0f 3a 09 */ | |
2084 | ||
2085 | asm volatile("vroundpd $0x5,%ymm6,%ymm2"); | |
2086 | asm volatile("vrndscalepd $0x12,%zmm5,%zmm6"); | |
2087 | ||
2088 | /* AVX-512: Op code 0f 3a 0a */ | |
2089 | ||
2090 | asm volatile("vroundss $0x5,%xmm4,%xmm6,%xmm2"); | |
2091 | asm volatile("vrndscaless $0x12,%xmm4,%xmm5,%xmm6{%k7}"); | |
2092 | ||
2093 | /* AVX-512: Op code 0f 3a 0b */ | |
2094 | ||
2095 | asm volatile("vroundsd $0x5,%xmm4,%xmm6,%xmm2"); | |
2096 | asm volatile("vrndscalesd $0x12,%xmm4,%xmm5,%xmm6{%k7}"); | |
2097 | ||
2098 | /* AVX-512: Op code 0f 3a 18 */ | |
2099 | ||
2100 | asm volatile("vinsertf128 $0x5,%xmm4,%ymm4,%ymm6"); | |
2101 | asm volatile("vinsertf32x4 $0x12,%xmm4,%zmm5,%zmm6{%k7}"); | |
2102 | asm volatile("vinsertf64x2 $0x12,%xmm4,%zmm5,%zmm6{%k7}"); | |
2103 | ||
2104 | /* AVX-512: Op code 0f 3a 19 */ | |
2105 | ||
2106 | asm volatile("vextractf128 $0x5,%ymm4,%xmm4"); | |
2107 | asm volatile("vextractf32x4 $0x12,%zmm5,%xmm6{%k7}"); | |
2108 | asm volatile("vextractf64x2 $0x12,%zmm5,%xmm6{%k7}"); | |
2109 | ||
2110 | /* AVX-512: Op code 0f 3a 1a */ | |
2111 | ||
2112 | asm volatile("vinsertf32x8 $0x12,%ymm5,%zmm6,%zmm7{%k7}"); | |
2113 | asm volatile("vinsertf64x4 $0x12,%ymm5,%zmm6,%zmm7{%k7}"); | |
2114 | ||
2115 | /* AVX-512: Op code 0f 3a 1b */ | |
2116 | ||
2117 | asm volatile("vextractf32x8 $0x12,%zmm6,%ymm7{%k7}"); | |
2118 | asm volatile("vextractf64x4 $0x12,%zmm6,%ymm7{%k7}"); | |
2119 | ||
2120 | /* AVX-512: Op code 0f 3a 1e */ | |
2121 | ||
2122 | asm volatile("vpcmpud $0x12,%zmm6,%zmm7,%k5"); | |
2123 | asm volatile("vpcmpuq $0x12,%zmm6,%zmm7,%k5"); | |
2124 | ||
2125 | /* AVX-512: Op code 0f 3a 1f */ | |
2126 | ||
2127 | asm volatile("vpcmpd $0x12,%zmm6,%zmm7,%k5"); | |
2128 | asm volatile("vpcmpq $0x12,%zmm6,%zmm7,%k5"); | |
2129 | ||
2130 | /* AVX-512: Op code 0f 3a 23 */ | |
2131 | ||
2132 | asm volatile("vshuff32x4 $0x12,%zmm5,%zmm6,%zmm7"); | |
2133 | asm volatile("vshuff64x2 $0x12,%zmm5,%zmm6,%zmm7"); | |
2134 | ||
2135 | /* AVX-512: Op code 0f 3a 25 */ | |
2136 | ||
2137 | asm volatile("vpternlogd $0x12,%zmm5,%zmm6,%zmm7"); | |
2138 | asm volatile("vpternlogq $0x12,%zmm5,%zmm6,%zmm7"); | |
2139 | ||
2140 | /* AVX-512: Op code 0f 3a 26 */ | |
2141 | ||
2142 | asm volatile("vgetmantps $0x12,%zmm6,%zmm7"); | |
2143 | asm volatile("vgetmantpd $0x12,%zmm6,%zmm7"); | |
2144 | ||
2145 | /* AVX-512: Op code 0f 3a 27 */ | |
2146 | ||
2147 | asm volatile("vgetmantss $0x12,%xmm5,%xmm6,%xmm7{%k7}"); | |
2148 | asm volatile("vgetmantsd $0x12,%xmm5,%xmm6,%xmm7{%k7}"); | |
2149 | ||
2150 | /* AVX-512: Op code 0f 3a 38 */ | |
2151 | ||
2152 | asm volatile("vinserti128 $0x5,%xmm4,%ymm4,%ymm6"); | |
2153 | asm volatile("vinserti32x4 $0x12,%xmm4,%zmm5,%zmm6{%k7}"); | |
2154 | asm volatile("vinserti64x2 $0x12,%xmm4,%zmm5,%zmm6{%k7}"); | |
2155 | ||
2156 | /* AVX-512: Op code 0f 3a 39 */ | |
2157 | ||
2158 | asm volatile("vextracti128 $0x5,%ymm4,%xmm6"); | |
2159 | asm volatile("vextracti32x4 $0x12,%zmm5,%xmm6{%k7}"); | |
2160 | asm volatile("vextracti64x2 $0x12,%zmm5,%xmm6{%k7}"); | |
2161 | ||
2162 | /* AVX-512: Op code 0f 3a 3a */ | |
2163 | ||
2164 | asm volatile("vinserti32x8 $0x12,%ymm5,%zmm6,%zmm7{%k7}"); | |
2165 | asm volatile("vinserti64x4 $0x12,%ymm5,%zmm6,%zmm7{%k7}"); | |
2166 | ||
2167 | /* AVX-512: Op code 0f 3a 3b */ | |
2168 | ||
2169 | asm volatile("vextracti32x8 $0x12,%zmm6,%ymm7{%k7}"); | |
2170 | asm volatile("vextracti64x4 $0x12,%zmm6,%ymm7{%k7}"); | |
2171 | ||
2172 | /* AVX-512: Op code 0f 3a 3e */ | |
2173 | ||
2174 | asm volatile("vpcmpub $0x12,%zmm6,%zmm7,%k5"); | |
2175 | asm volatile("vpcmpuw $0x12,%zmm6,%zmm7,%k5"); | |
98e4619f | 2176 | |
6c4d0b41 | 2177 | /* AVX-512: Op code 0f 3a 3f */ |
98e4619f | 2178 | |
6c4d0b41 AH |
2179 | asm volatile("vpcmpb $0x12,%zmm6,%zmm7,%k5"); |
2180 | asm volatile("vpcmpw $0x12,%zmm6,%zmm7,%k5"); | |
98e4619f | 2181 | |
6c4d0b41 | 2182 | /* AVX-512: Op code 0f 3a 42 */ |
98e4619f | 2183 | |
6c4d0b41 AH |
2184 | asm volatile("vmpsadbw $0x5,%ymm4,%ymm6,%ymm2"); |
2185 | asm volatile("vdbpsadbw $0x12,%zmm4,%zmm5,%zmm6"); | |
98e4619f | 2186 | |
6c4d0b41 | 2187 | /* AVX-512: Op code 0f 3a 43 */ |
3fe78d6a | 2188 | |
6c4d0b41 AH |
2189 | asm volatile("vshufi32x4 $0x12,%zmm5,%zmm6,%zmm7"); |
2190 | asm volatile("vshufi64x2 $0x12,%zmm5,%zmm6,%zmm7"); | |
3fe78d6a | 2191 | |
6c4d0b41 | 2192 | /* AVX-512: Op code 0f 3a 50 */ |
3fe78d6a | 2193 | |
6c4d0b41 AH |
2194 | asm volatile("vrangeps $0x12,%zmm5,%zmm6,%zmm7"); |
2195 | asm volatile("vrangepd $0x12,%zmm5,%zmm6,%zmm7"); | |
3fe78d6a | 2196 | |
6c4d0b41 | 2197 | /* AVX-512: Op code 0f 3a 51 */ |
3fe78d6a | 2198 | |
6c4d0b41 AH |
2199 | asm volatile("vrangess $0x12,%xmm5,%xmm6,%xmm7"); |
2200 | asm volatile("vrangesd $0x12,%xmm5,%xmm6,%xmm7"); | |
3fe78d6a | 2201 | |
6c4d0b41 | 2202 | /* AVX-512: Op code 0f 3a 54 */ |
3fe78d6a | 2203 | |
6c4d0b41 AH |
2204 | asm volatile("vfixupimmps $0x12,%zmm5,%zmm6,%zmm7"); |
2205 | asm volatile("vfixupimmpd $0x12,%zmm5,%zmm6,%zmm7"); | |
3fe78d6a | 2206 | |
6c4d0b41 | 2207 | /* AVX-512: Op code 0f 3a 55 */ |
3fe78d6a | 2208 | |
6c4d0b41 AH |
2209 | asm volatile("vfixupimmss $0x12,%xmm5,%xmm6,%xmm7{%k7}"); |
2210 | asm volatile("vfixupimmsd $0x12,%xmm5,%xmm6,%xmm7{%k7}"); | |
3fe78d6a | 2211 | |
6c4d0b41 | 2212 | /* AVX-512: Op code 0f 3a 56 */ |
3fe78d6a | 2213 | |
6c4d0b41 AH |
2214 | asm volatile("vreduceps $0x12,%zmm6,%zmm7"); |
2215 | asm volatile("vreducepd $0x12,%zmm6,%zmm7"); | |
3fe78d6a | 2216 | |
6c4d0b41 | 2217 | /* AVX-512: Op code 0f 3a 57 */ |
3fe78d6a | 2218 | |
6c4d0b41 AH |
2219 | asm volatile("vreducess $0x12,%xmm5,%xmm6,%xmm7"); |
2220 | asm volatile("vreducesd $0x12,%xmm5,%xmm6,%xmm7"); | |
3fe78d6a | 2221 | |
6c4d0b41 | 2222 | /* AVX-512: Op code 0f 3a 66 */ |
ac1c8859 | 2223 | |
6c4d0b41 AH |
2224 | asm volatile("vfpclassps $0x12,%zmm7,%k5"); |
2225 | asm volatile("vfpclasspd $0x12,%zmm7,%k5"); | |
ac1c8859 | 2226 | |
6c4d0b41 | 2227 | /* AVX-512: Op code 0f 3a 67 */ |
ac1c8859 | 2228 | |
6c4d0b41 AH |
2229 | asm volatile("vfpclassss $0x12,%xmm7,%k5"); |
2230 | asm volatile("vfpclasssd $0x12,%xmm7,%k5"); | |
ac1c8859 | 2231 | |
6c4d0b41 | 2232 | /* AVX-512: Op code 0f 72 (Grp13) */ |
f83b6b64 | 2233 | |
6c4d0b41 AH |
2234 | asm volatile("vprord $0x12,%zmm5,%zmm6"); |
2235 | asm volatile("vprorq $0x12,%zmm5,%zmm6"); | |
2236 | asm volatile("vprold $0x12,%zmm5,%zmm6"); | |
2237 | asm volatile("vprolq $0x12,%zmm5,%zmm6"); | |
2238 | asm volatile("psrad $0x2,%mm6"); | |
2239 | asm volatile("vpsrad $0x5,%ymm6,%ymm2"); | |
2240 | asm volatile("vpsrad $0x5,%zmm6,%zmm2"); | |
2241 | asm volatile("vpsraq $0x5,%zmm6,%zmm2"); | |
f83b6b64 | 2242 | |
6c4d0b41 | 2243 | /* AVX-512: Op code 0f 38 c6 (Grp18) */ |
f83b6b64 | 2244 | |
6c4d0b41 AH |
2245 | asm volatile("vgatherpf0dps 0x7b(%ebp,%zmm7,8){%k1}"); |
2246 | asm volatile("vgatherpf0dpd 0x7b(%ebp,%ymm7,8){%k1}"); | |
2247 | asm volatile("vgatherpf1dps 0x7b(%ebp,%zmm7,8){%k1}"); | |
2248 | asm volatile("vgatherpf1dpd 0x7b(%ebp,%ymm7,8){%k1}"); | |
2249 | asm volatile("vscatterpf0dps 0x7b(%ebp,%zmm7,8){%k1}"); | |
2250 | asm volatile("vscatterpf0dpd 0x7b(%ebp,%ymm7,8){%k1}"); | |
2251 | asm volatile("vscatterpf1dps 0x7b(%ebp,%zmm7,8){%k1}"); | |
2252 | asm volatile("vscatterpf1dpd 0x7b(%ebp,%ymm7,8){%k1}"); | |
f83b6b64 | 2253 | |
6c4d0b41 | 2254 | /* AVX-512: Op code 0f 38 c7 (Grp19) */ |
f83b6b64 | 2255 | |
6c4d0b41 AH |
2256 | asm volatile("vgatherpf0qps 0x7b(%ebp,%zmm7,8){%k1}"); |
2257 | asm volatile("vgatherpf0qpd 0x7b(%ebp,%zmm7,8){%k1}"); | |
2258 | asm volatile("vgatherpf1qps 0x7b(%ebp,%zmm7,8){%k1}"); | |
2259 | asm volatile("vgatherpf1qpd 0x7b(%ebp,%zmm7,8){%k1}"); | |
2260 | asm volatile("vscatterpf0qps 0x7b(%ebp,%zmm7,8){%k1}"); | |
2261 | asm volatile("vscatterpf0qpd 0x7b(%ebp,%zmm7,8){%k1}"); | |
2262 | asm volatile("vscatterpf1qps 0x7b(%ebp,%zmm7,8){%k1}"); | |
2263 | asm volatile("vscatterpf1qpd 0x7b(%ebp,%zmm7,8){%k1}"); | |
f83b6b64 | 2264 | |
6c4d0b41 AH |
2265 | /* AVX-512: Examples */ |
2266 | ||
2267 | asm volatile("vaddpd %zmm4,%zmm5,%zmm6"); | |
2268 | asm volatile("vaddpd %zmm4,%zmm5,%zmm6{%k7}"); | |
2269 | asm volatile("vaddpd %zmm4,%zmm5,%zmm6{%k7}{z}"); | |
2270 | asm volatile("vaddpd {rn-sae},%zmm4,%zmm5,%zmm6"); | |
2271 | asm volatile("vaddpd {ru-sae},%zmm4,%zmm5,%zmm6"); | |
2272 | asm volatile("vaddpd {rd-sae},%zmm4,%zmm5,%zmm6"); | |
2273 | asm volatile("vaddpd {rz-sae},%zmm4,%zmm5,%zmm6"); | |
2274 | asm volatile("vaddpd (%ecx),%zmm5,%zmm6"); | |
2275 | asm volatile("vaddpd 0x123(%eax,%ecx,8),%zmm5,%zmm6"); | |
2276 | asm volatile("vaddpd (%ecx){1to8},%zmm5,%zmm6"); | |
2277 | asm volatile("vaddpd 0x1fc0(%edx),%zmm5,%zmm6"); | |
2278 | asm volatile("vaddpd 0x3f8(%edx){1to8},%zmm5,%zmm6"); | |
2279 | asm volatile("vcmpeq_uqps 0x1fc(%edx){1to16},%zmm6,%k5"); | |
2280 | asm volatile("vcmpltsd 0x123(%eax,%ecx,8),%xmm3,%k5{%k7}"); | |
2281 | asm volatile("vcmplesd {sae},%xmm4,%xmm5,%k5{%k7}"); | |
2282 | asm volatile("vgetmantss $0x5b,0x123(%eax,%ecx,8),%xmm4,%xmm5{%k7}"); | |
98e4619f AH |
2283 | |
2284 | /* bndmk m32, bnd */ | |
2285 | ||
2286 | asm volatile("bndmk (%eax), %bnd0"); | |
2287 | asm volatile("bndmk (0x12345678), %bnd0"); | |
2288 | asm volatile("bndmk (%eax), %bnd3"); | |
2289 | asm volatile("bndmk (%ecx,%eax,1), %bnd0"); | |
2290 | asm volatile("bndmk 0x12345678(,%eax,1), %bnd0"); | |
2291 | asm volatile("bndmk (%eax,%ecx,1), %bnd0"); | |
2292 | asm volatile("bndmk (%eax,%ecx,8), %bnd0"); | |
2293 | asm volatile("bndmk 0x12(%eax), %bnd0"); | |
2294 | asm volatile("bndmk 0x12(%ebp), %bnd0"); | |
2295 | asm volatile("bndmk 0x12(%ecx,%eax,1), %bnd0"); | |
2296 | asm volatile("bndmk 0x12(%ebp,%eax,1), %bnd0"); | |
2297 | asm volatile("bndmk 0x12(%eax,%ecx,1), %bnd0"); | |
2298 | asm volatile("bndmk 0x12(%eax,%ecx,8), %bnd0"); | |
2299 | asm volatile("bndmk 0x12345678(%eax), %bnd0"); | |
2300 | asm volatile("bndmk 0x12345678(%ebp), %bnd0"); | |
2301 | asm volatile("bndmk 0x12345678(%ecx,%eax,1), %bnd0"); | |
2302 | asm volatile("bndmk 0x12345678(%ebp,%eax,1), %bnd0"); | |
2303 | asm volatile("bndmk 0x12345678(%eax,%ecx,1), %bnd0"); | |
2304 | asm volatile("bndmk 0x12345678(%eax,%ecx,8), %bnd0"); | |
2305 | ||
2306 | /* bndcl r/m32, bnd */ | |
2307 | ||
2308 | asm volatile("bndcl (%eax), %bnd0"); | |
2309 | asm volatile("bndcl (0x12345678), %bnd0"); | |
2310 | asm volatile("bndcl (%eax), %bnd3"); | |
2311 | asm volatile("bndcl (%ecx,%eax,1), %bnd0"); | |
2312 | asm volatile("bndcl 0x12345678(,%eax,1), %bnd0"); | |
2313 | asm volatile("bndcl (%eax,%ecx,1), %bnd0"); | |
2314 | asm volatile("bndcl (%eax,%ecx,8), %bnd0"); | |
2315 | asm volatile("bndcl 0x12(%eax), %bnd0"); | |
2316 | asm volatile("bndcl 0x12(%ebp), %bnd0"); | |
2317 | asm volatile("bndcl 0x12(%ecx,%eax,1), %bnd0"); | |
2318 | asm volatile("bndcl 0x12(%ebp,%eax,1), %bnd0"); | |
2319 | asm volatile("bndcl 0x12(%eax,%ecx,1), %bnd0"); | |
2320 | asm volatile("bndcl 0x12(%eax,%ecx,8), %bnd0"); | |
2321 | asm volatile("bndcl 0x12345678(%eax), %bnd0"); | |
2322 | asm volatile("bndcl 0x12345678(%ebp), %bnd0"); | |
2323 | asm volatile("bndcl 0x12345678(%ecx,%eax,1), %bnd0"); | |
2324 | asm volatile("bndcl 0x12345678(%ebp,%eax,1), %bnd0"); | |
2325 | asm volatile("bndcl 0x12345678(%eax,%ecx,1), %bnd0"); | |
2326 | asm volatile("bndcl 0x12345678(%eax,%ecx,8), %bnd0"); | |
2327 | asm volatile("bndcl %eax, %bnd0"); | |
2328 | ||
2329 | /* bndcu r/m32, bnd */ | |
2330 | ||
2331 | asm volatile("bndcu (%eax), %bnd0"); | |
2332 | asm volatile("bndcu (0x12345678), %bnd0"); | |
2333 | asm volatile("bndcu (%eax), %bnd3"); | |
2334 | asm volatile("bndcu (%ecx,%eax,1), %bnd0"); | |
2335 | asm volatile("bndcu 0x12345678(,%eax,1), %bnd0"); | |
2336 | asm volatile("bndcu (%eax,%ecx,1), %bnd0"); | |
2337 | asm volatile("bndcu (%eax,%ecx,8), %bnd0"); | |
2338 | asm volatile("bndcu 0x12(%eax), %bnd0"); | |
2339 | asm volatile("bndcu 0x12(%ebp), %bnd0"); | |
2340 | asm volatile("bndcu 0x12(%ecx,%eax,1), %bnd0"); | |
2341 | asm volatile("bndcu 0x12(%ebp,%eax,1), %bnd0"); | |
2342 | asm volatile("bndcu 0x12(%eax,%ecx,1), %bnd0"); | |
2343 | asm volatile("bndcu 0x12(%eax,%ecx,8), %bnd0"); | |
2344 | asm volatile("bndcu 0x12345678(%eax), %bnd0"); | |
2345 | asm volatile("bndcu 0x12345678(%ebp), %bnd0"); | |
2346 | asm volatile("bndcu 0x12345678(%ecx,%eax,1), %bnd0"); | |
2347 | asm volatile("bndcu 0x12345678(%ebp,%eax,1), %bnd0"); | |
2348 | asm volatile("bndcu 0x12345678(%eax,%ecx,1), %bnd0"); | |
2349 | asm volatile("bndcu 0x12345678(%eax,%ecx,8), %bnd0"); | |
2350 | asm volatile("bndcu %eax, %bnd0"); | |
2351 | ||
2352 | /* bndcn r/m32, bnd */ | |
2353 | ||
2354 | asm volatile("bndcn (%eax), %bnd0"); | |
2355 | asm volatile("bndcn (0x12345678), %bnd0"); | |
2356 | asm volatile("bndcn (%eax), %bnd3"); | |
2357 | asm volatile("bndcn (%ecx,%eax,1), %bnd0"); | |
2358 | asm volatile("bndcn 0x12345678(,%eax,1), %bnd0"); | |
2359 | asm volatile("bndcn (%eax,%ecx,1), %bnd0"); | |
2360 | asm volatile("bndcn (%eax,%ecx,8), %bnd0"); | |
2361 | asm volatile("bndcn 0x12(%eax), %bnd0"); | |
2362 | asm volatile("bndcn 0x12(%ebp), %bnd0"); | |
2363 | asm volatile("bndcn 0x12(%ecx,%eax,1), %bnd0"); | |
2364 | asm volatile("bndcn 0x12(%ebp,%eax,1), %bnd0"); | |
2365 | asm volatile("bndcn 0x12(%eax,%ecx,1), %bnd0"); | |
2366 | asm volatile("bndcn 0x12(%eax,%ecx,8), %bnd0"); | |
2367 | asm volatile("bndcn 0x12345678(%eax), %bnd0"); | |
2368 | asm volatile("bndcn 0x12345678(%ebp), %bnd0"); | |
2369 | asm volatile("bndcn 0x12345678(%ecx,%eax,1), %bnd0"); | |
2370 | asm volatile("bndcn 0x12345678(%ebp,%eax,1), %bnd0"); | |
2371 | asm volatile("bndcn 0x12345678(%eax,%ecx,1), %bnd0"); | |
2372 | asm volatile("bndcn 0x12345678(%eax,%ecx,8), %bnd0"); | |
2373 | asm volatile("bndcn %eax, %bnd0"); | |
2374 | ||
2375 | /* bndmov m64, bnd */ | |
2376 | ||
2377 | asm volatile("bndmov (%eax), %bnd0"); | |
2378 | asm volatile("bndmov (0x12345678), %bnd0"); | |
2379 | asm volatile("bndmov (%eax), %bnd3"); | |
2380 | asm volatile("bndmov (%ecx,%eax,1), %bnd0"); | |
2381 | asm volatile("bndmov 0x12345678(,%eax,1), %bnd0"); | |
2382 | asm volatile("bndmov (%eax,%ecx,1), %bnd0"); | |
2383 | asm volatile("bndmov (%eax,%ecx,8), %bnd0"); | |
2384 | asm volatile("bndmov 0x12(%eax), %bnd0"); | |
2385 | asm volatile("bndmov 0x12(%ebp), %bnd0"); | |
2386 | asm volatile("bndmov 0x12(%ecx,%eax,1), %bnd0"); | |
2387 | asm volatile("bndmov 0x12(%ebp,%eax,1), %bnd0"); | |
2388 | asm volatile("bndmov 0x12(%eax,%ecx,1), %bnd0"); | |
2389 | asm volatile("bndmov 0x12(%eax,%ecx,8), %bnd0"); | |
2390 | asm volatile("bndmov 0x12345678(%eax), %bnd0"); | |
2391 | asm volatile("bndmov 0x12345678(%ebp), %bnd0"); | |
2392 | asm volatile("bndmov 0x12345678(%ecx,%eax,1), %bnd0"); | |
2393 | asm volatile("bndmov 0x12345678(%ebp,%eax,1), %bnd0"); | |
2394 | asm volatile("bndmov 0x12345678(%eax,%ecx,1), %bnd0"); | |
2395 | asm volatile("bndmov 0x12345678(%eax,%ecx,8), %bnd0"); | |
2396 | ||
2397 | /* bndmov bnd, m64 */ | |
2398 | ||
2399 | asm volatile("bndmov %bnd0, (%eax)"); | |
2400 | asm volatile("bndmov %bnd0, (0x12345678)"); | |
2401 | asm volatile("bndmov %bnd3, (%eax)"); | |
2402 | asm volatile("bndmov %bnd0, (%ecx,%eax,1)"); | |
2403 | asm volatile("bndmov %bnd0, 0x12345678(,%eax,1)"); | |
2404 | asm volatile("bndmov %bnd0, (%eax,%ecx,1)"); | |
2405 | asm volatile("bndmov %bnd0, (%eax,%ecx,8)"); | |
2406 | asm volatile("bndmov %bnd0, 0x12(%eax)"); | |
2407 | asm volatile("bndmov %bnd0, 0x12(%ebp)"); | |
2408 | asm volatile("bndmov %bnd0, 0x12(%ecx,%eax,1)"); | |
2409 | asm volatile("bndmov %bnd0, 0x12(%ebp,%eax,1)"); | |
2410 | asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,1)"); | |
2411 | asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,8)"); | |
2412 | asm volatile("bndmov %bnd0, 0x12345678(%eax)"); | |
2413 | asm volatile("bndmov %bnd0, 0x12345678(%ebp)"); | |
2414 | asm volatile("bndmov %bnd0, 0x12345678(%ecx,%eax,1)"); | |
2415 | asm volatile("bndmov %bnd0, 0x12345678(%ebp,%eax,1)"); | |
2416 | asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,1)"); | |
2417 | asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,8)"); | |
2418 | ||
2419 | /* bndmov bnd2, bnd1 */ | |
2420 | ||
2421 | asm volatile("bndmov %bnd0, %bnd1"); | |
2422 | asm volatile("bndmov %bnd1, %bnd0"); | |
2423 | ||
2424 | /* bndldx mib, bnd */ | |
2425 | ||
2426 | asm volatile("bndldx (%eax), %bnd0"); | |
2427 | asm volatile("bndldx (0x12345678), %bnd0"); | |
2428 | asm volatile("bndldx (%eax), %bnd3"); | |
2429 | asm volatile("bndldx (%ecx,%eax,1), %bnd0"); | |
2430 | asm volatile("bndldx 0x12345678(,%eax,1), %bnd0"); | |
2431 | asm volatile("bndldx (%eax,%ecx,1), %bnd0"); | |
2432 | asm volatile("bndldx 0x12(%eax), %bnd0"); | |
2433 | asm volatile("bndldx 0x12(%ebp), %bnd0"); | |
2434 | asm volatile("bndldx 0x12(%ecx,%eax,1), %bnd0"); | |
2435 | asm volatile("bndldx 0x12(%ebp,%eax,1), %bnd0"); | |
2436 | asm volatile("bndldx 0x12(%eax,%ecx,1), %bnd0"); | |
2437 | asm volatile("bndldx 0x12345678(%eax), %bnd0"); | |
2438 | asm volatile("bndldx 0x12345678(%ebp), %bnd0"); | |
2439 | asm volatile("bndldx 0x12345678(%ecx,%eax,1), %bnd0"); | |
2440 | asm volatile("bndldx 0x12345678(%ebp,%eax,1), %bnd0"); | |
2441 | asm volatile("bndldx 0x12345678(%eax,%ecx,1), %bnd0"); | |
2442 | ||
2443 | /* bndstx bnd, mib */ | |
2444 | ||
2445 | asm volatile("bndstx %bnd0, (%eax)"); | |
2446 | asm volatile("bndstx %bnd0, (0x12345678)"); | |
2447 | asm volatile("bndstx %bnd3, (%eax)"); | |
2448 | asm volatile("bndstx %bnd0, (%ecx,%eax,1)"); | |
2449 | asm volatile("bndstx %bnd0, 0x12345678(,%eax,1)"); | |
2450 | asm volatile("bndstx %bnd0, (%eax,%ecx,1)"); | |
2451 | asm volatile("bndstx %bnd0, 0x12(%eax)"); | |
2452 | asm volatile("bndstx %bnd0, 0x12(%ebp)"); | |
2453 | asm volatile("bndstx %bnd0, 0x12(%ecx,%eax,1)"); | |
2454 | asm volatile("bndstx %bnd0, 0x12(%ebp,%eax,1)"); | |
2455 | asm volatile("bndstx %bnd0, 0x12(%eax,%ecx,1)"); | |
2456 | asm volatile("bndstx %bnd0, 0x12345678(%eax)"); | |
2457 | asm volatile("bndstx %bnd0, 0x12345678(%ebp)"); | |
2458 | asm volatile("bndstx %bnd0, 0x12345678(%ecx,%eax,1)"); | |
2459 | asm volatile("bndstx %bnd0, 0x12345678(%ebp,%eax,1)"); | |
2460 | asm volatile("bndstx %bnd0, 0x12345678(%eax,%ecx,1)"); | |
2461 | ||
2462 | /* bnd prefix on call, ret, jmp and all jcc */ | |
2463 | ||
2464 | asm volatile("bnd call label1"); /* Expecting: call unconditional 0xfffffffc */ | |
2465 | asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */ | |
2466 | asm volatile("bnd ret"); /* Expecting: ret indirect 0 */ | |
2467 | asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */ | |
2468 | asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */ | |
2469 | asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */ | |
2470 | asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0xfffffffc */ | |
2471 | ||
3fe78d6a AH |
2472 | /* sha1rnds4 imm8, xmm2/m128, xmm1 */ |
2473 | ||
2474 | asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0"); | |
2475 | asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2"); | |
2476 | asm volatile("sha1rnds4 $0x91, (%eax), %xmm0"); | |
2477 | asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0"); | |
2478 | asm volatile("sha1rnds4 $0x91, (%eax), %xmm3"); | |
2479 | asm volatile("sha1rnds4 $0x91, (%ecx,%eax,1), %xmm0"); | |
2480 | asm volatile("sha1rnds4 $0x91, 0x12345678(,%eax,1), %xmm0"); | |
2481 | asm volatile("sha1rnds4 $0x91, (%eax,%ecx,1), %xmm0"); | |
2482 | asm volatile("sha1rnds4 $0x91, (%eax,%ecx,8), %xmm0"); | |
2483 | asm volatile("sha1rnds4 $0x91, 0x12(%eax), %xmm0"); | |
2484 | asm volatile("sha1rnds4 $0x91, 0x12(%ebp), %xmm0"); | |
2485 | asm volatile("sha1rnds4 $0x91, 0x12(%ecx,%eax,1), %xmm0"); | |
2486 | asm volatile("sha1rnds4 $0x91, 0x12(%ebp,%eax,1), %xmm0"); | |
2487 | asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,1), %xmm0"); | |
2488 | asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,8), %xmm0"); | |
2489 | asm volatile("sha1rnds4 $0x91, 0x12345678(%eax), %xmm0"); | |
2490 | asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp), %xmm0"); | |
2491 | asm volatile("sha1rnds4 $0x91, 0x12345678(%ecx,%eax,1), %xmm0"); | |
2492 | asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp,%eax,1), %xmm0"); | |
2493 | asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,1), %xmm0"); | |
2494 | asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,8), %xmm0"); | |
2495 | ||
2496 | /* sha1nexte xmm2/m128, xmm1 */ | |
2497 | ||
2498 | asm volatile("sha1nexte %xmm1, %xmm0"); | |
2499 | asm volatile("sha1nexte %xmm7, %xmm2"); | |
2500 | asm volatile("sha1nexte (%eax), %xmm0"); | |
2501 | asm volatile("sha1nexte (0x12345678), %xmm0"); | |
2502 | asm volatile("sha1nexte (%eax), %xmm3"); | |
2503 | asm volatile("sha1nexte (%ecx,%eax,1), %xmm0"); | |
2504 | asm volatile("sha1nexte 0x12345678(,%eax,1), %xmm0"); | |
2505 | asm volatile("sha1nexte (%eax,%ecx,1), %xmm0"); | |
2506 | asm volatile("sha1nexte (%eax,%ecx,8), %xmm0"); | |
2507 | asm volatile("sha1nexte 0x12(%eax), %xmm0"); | |
2508 | asm volatile("sha1nexte 0x12(%ebp), %xmm0"); | |
2509 | asm volatile("sha1nexte 0x12(%ecx,%eax,1), %xmm0"); | |
2510 | asm volatile("sha1nexte 0x12(%ebp,%eax,1), %xmm0"); | |
2511 | asm volatile("sha1nexte 0x12(%eax,%ecx,1), %xmm0"); | |
2512 | asm volatile("sha1nexte 0x12(%eax,%ecx,8), %xmm0"); | |
2513 | asm volatile("sha1nexte 0x12345678(%eax), %xmm0"); | |
2514 | asm volatile("sha1nexte 0x12345678(%ebp), %xmm0"); | |
2515 | asm volatile("sha1nexte 0x12345678(%ecx,%eax,1), %xmm0"); | |
2516 | asm volatile("sha1nexte 0x12345678(%ebp,%eax,1), %xmm0"); | |
2517 | asm volatile("sha1nexte 0x12345678(%eax,%ecx,1), %xmm0"); | |
2518 | asm volatile("sha1nexte 0x12345678(%eax,%ecx,8), %xmm0"); | |
2519 | ||
2520 | /* sha1msg1 xmm2/m128, xmm1 */ | |
2521 | ||
2522 | asm volatile("sha1msg1 %xmm1, %xmm0"); | |
2523 | asm volatile("sha1msg1 %xmm7, %xmm2"); | |
2524 | asm volatile("sha1msg1 (%eax), %xmm0"); | |
2525 | asm volatile("sha1msg1 (0x12345678), %xmm0"); | |
2526 | asm volatile("sha1msg1 (%eax), %xmm3"); | |
2527 | asm volatile("sha1msg1 (%ecx,%eax,1), %xmm0"); | |
2528 | asm volatile("sha1msg1 0x12345678(,%eax,1), %xmm0"); | |
2529 | asm volatile("sha1msg1 (%eax,%ecx,1), %xmm0"); | |
2530 | asm volatile("sha1msg1 (%eax,%ecx,8), %xmm0"); | |
2531 | asm volatile("sha1msg1 0x12(%eax), %xmm0"); | |
2532 | asm volatile("sha1msg1 0x12(%ebp), %xmm0"); | |
2533 | asm volatile("sha1msg1 0x12(%ecx,%eax,1), %xmm0"); | |
2534 | asm volatile("sha1msg1 0x12(%ebp,%eax,1), %xmm0"); | |
2535 | asm volatile("sha1msg1 0x12(%eax,%ecx,1), %xmm0"); | |
2536 | asm volatile("sha1msg1 0x12(%eax,%ecx,8), %xmm0"); | |
2537 | asm volatile("sha1msg1 0x12345678(%eax), %xmm0"); | |
2538 | asm volatile("sha1msg1 0x12345678(%ebp), %xmm0"); | |
2539 | asm volatile("sha1msg1 0x12345678(%ecx,%eax,1), %xmm0"); | |
2540 | asm volatile("sha1msg1 0x12345678(%ebp,%eax,1), %xmm0"); | |
2541 | asm volatile("sha1msg1 0x12345678(%eax,%ecx,1), %xmm0"); | |
2542 | asm volatile("sha1msg1 0x12345678(%eax,%ecx,8), %xmm0"); | |
2543 | ||
2544 | /* sha1msg2 xmm2/m128, xmm1 */ | |
2545 | ||
2546 | asm volatile("sha1msg2 %xmm1, %xmm0"); | |
2547 | asm volatile("sha1msg2 %xmm7, %xmm2"); | |
2548 | asm volatile("sha1msg2 (%eax), %xmm0"); | |
2549 | asm volatile("sha1msg2 (0x12345678), %xmm0"); | |
2550 | asm volatile("sha1msg2 (%eax), %xmm3"); | |
2551 | asm volatile("sha1msg2 (%ecx,%eax,1), %xmm0"); | |
2552 | asm volatile("sha1msg2 0x12345678(,%eax,1), %xmm0"); | |
2553 | asm volatile("sha1msg2 (%eax,%ecx,1), %xmm0"); | |
2554 | asm volatile("sha1msg2 (%eax,%ecx,8), %xmm0"); | |
2555 | asm volatile("sha1msg2 0x12(%eax), %xmm0"); | |
2556 | asm volatile("sha1msg2 0x12(%ebp), %xmm0"); | |
2557 | asm volatile("sha1msg2 0x12(%ecx,%eax,1), %xmm0"); | |
2558 | asm volatile("sha1msg2 0x12(%ebp,%eax,1), %xmm0"); | |
2559 | asm volatile("sha1msg2 0x12(%eax,%ecx,1), %xmm0"); | |
2560 | asm volatile("sha1msg2 0x12(%eax,%ecx,8), %xmm0"); | |
2561 | asm volatile("sha1msg2 0x12345678(%eax), %xmm0"); | |
2562 | asm volatile("sha1msg2 0x12345678(%ebp), %xmm0"); | |
2563 | asm volatile("sha1msg2 0x12345678(%ecx,%eax,1), %xmm0"); | |
2564 | asm volatile("sha1msg2 0x12345678(%ebp,%eax,1), %xmm0"); | |
2565 | asm volatile("sha1msg2 0x12345678(%eax,%ecx,1), %xmm0"); | |
2566 | asm volatile("sha1msg2 0x12345678(%eax,%ecx,8), %xmm0"); | |
2567 | ||
2568 | /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */ | |
2569 | /* Note sha256rnds2 has an implicit operand 'xmm0' */ | |
2570 | ||
2571 | asm volatile("sha256rnds2 %xmm4, %xmm1"); | |
2572 | asm volatile("sha256rnds2 %xmm7, %xmm2"); | |
2573 | asm volatile("sha256rnds2 (%eax), %xmm1"); | |
2574 | asm volatile("sha256rnds2 (0x12345678), %xmm1"); | |
2575 | asm volatile("sha256rnds2 (%eax), %xmm3"); | |
2576 | asm volatile("sha256rnds2 (%ecx,%eax,1), %xmm1"); | |
2577 | asm volatile("sha256rnds2 0x12345678(,%eax,1), %xmm1"); | |
2578 | asm volatile("sha256rnds2 (%eax,%ecx,1), %xmm1"); | |
2579 | asm volatile("sha256rnds2 (%eax,%ecx,8), %xmm1"); | |
2580 | asm volatile("sha256rnds2 0x12(%eax), %xmm1"); | |
2581 | asm volatile("sha256rnds2 0x12(%ebp), %xmm1"); | |
2582 | asm volatile("sha256rnds2 0x12(%ecx,%eax,1), %xmm1"); | |
2583 | asm volatile("sha256rnds2 0x12(%ebp,%eax,1), %xmm1"); | |
2584 | asm volatile("sha256rnds2 0x12(%eax,%ecx,1), %xmm1"); | |
2585 | asm volatile("sha256rnds2 0x12(%eax,%ecx,8), %xmm1"); | |
2586 | asm volatile("sha256rnds2 0x12345678(%eax), %xmm1"); | |
2587 | asm volatile("sha256rnds2 0x12345678(%ebp), %xmm1"); | |
2588 | asm volatile("sha256rnds2 0x12345678(%ecx,%eax,1), %xmm1"); | |
2589 | asm volatile("sha256rnds2 0x12345678(%ebp,%eax,1), %xmm1"); | |
2590 | asm volatile("sha256rnds2 0x12345678(%eax,%ecx,1), %xmm1"); | |
2591 | asm volatile("sha256rnds2 0x12345678(%eax,%ecx,8), %xmm1"); | |
2592 | ||
2593 | /* sha256msg1 xmm2/m128, xmm1 */ | |
2594 | ||
2595 | asm volatile("sha256msg1 %xmm1, %xmm0"); | |
2596 | asm volatile("sha256msg1 %xmm7, %xmm2"); | |
2597 | asm volatile("sha256msg1 (%eax), %xmm0"); | |
2598 | asm volatile("sha256msg1 (0x12345678), %xmm0"); | |
2599 | asm volatile("sha256msg1 (%eax), %xmm3"); | |
2600 | asm volatile("sha256msg1 (%ecx,%eax,1), %xmm0"); | |
2601 | asm volatile("sha256msg1 0x12345678(,%eax,1), %xmm0"); | |
2602 | asm volatile("sha256msg1 (%eax,%ecx,1), %xmm0"); | |
2603 | asm volatile("sha256msg1 (%eax,%ecx,8), %xmm0"); | |
2604 | asm volatile("sha256msg1 0x12(%eax), %xmm0"); | |
2605 | asm volatile("sha256msg1 0x12(%ebp), %xmm0"); | |
2606 | asm volatile("sha256msg1 0x12(%ecx,%eax,1), %xmm0"); | |
2607 | asm volatile("sha256msg1 0x12(%ebp,%eax,1), %xmm0"); | |
2608 | asm volatile("sha256msg1 0x12(%eax,%ecx,1), %xmm0"); | |
2609 | asm volatile("sha256msg1 0x12(%eax,%ecx,8), %xmm0"); | |
2610 | asm volatile("sha256msg1 0x12345678(%eax), %xmm0"); | |
2611 | asm volatile("sha256msg1 0x12345678(%ebp), %xmm0"); | |
2612 | asm volatile("sha256msg1 0x12345678(%ecx,%eax,1), %xmm0"); | |
2613 | asm volatile("sha256msg1 0x12345678(%ebp,%eax,1), %xmm0"); | |
2614 | asm volatile("sha256msg1 0x12345678(%eax,%ecx,1), %xmm0"); | |
2615 | asm volatile("sha256msg1 0x12345678(%eax,%ecx,8), %xmm0"); | |
2616 | ||
2617 | /* sha256msg2 xmm2/m128, xmm1 */ | |
2618 | ||
2619 | asm volatile("sha256msg2 %xmm1, %xmm0"); | |
2620 | asm volatile("sha256msg2 %xmm7, %xmm2"); | |
2621 | asm volatile("sha256msg2 (%eax), %xmm0"); | |
2622 | asm volatile("sha256msg2 (0x12345678), %xmm0"); | |
2623 | asm volatile("sha256msg2 (%eax), %xmm3"); | |
2624 | asm volatile("sha256msg2 (%ecx,%eax,1), %xmm0"); | |
2625 | asm volatile("sha256msg2 0x12345678(,%eax,1), %xmm0"); | |
2626 | asm volatile("sha256msg2 (%eax,%ecx,1), %xmm0"); | |
2627 | asm volatile("sha256msg2 (%eax,%ecx,8), %xmm0"); | |
2628 | asm volatile("sha256msg2 0x12(%eax), %xmm0"); | |
2629 | asm volatile("sha256msg2 0x12(%ebp), %xmm0"); | |
2630 | asm volatile("sha256msg2 0x12(%ecx,%eax,1), %xmm0"); | |
2631 | asm volatile("sha256msg2 0x12(%ebp,%eax,1), %xmm0"); | |
2632 | asm volatile("sha256msg2 0x12(%eax,%ecx,1), %xmm0"); | |
2633 | asm volatile("sha256msg2 0x12(%eax,%ecx,8), %xmm0"); | |
2634 | asm volatile("sha256msg2 0x12345678(%eax), %xmm0"); | |
2635 | asm volatile("sha256msg2 0x12345678(%ebp), %xmm0"); | |
2636 | asm volatile("sha256msg2 0x12345678(%ecx,%eax,1), %xmm0"); | |
2637 | asm volatile("sha256msg2 0x12345678(%ebp,%eax,1), %xmm0"); | |
2638 | asm volatile("sha256msg2 0x12345678(%eax,%ecx,1), %xmm0"); | |
2639 | asm volatile("sha256msg2 0x12345678(%eax,%ecx,8), %xmm0"); | |
2640 | ||
ac1c8859 AH |
2641 | /* clflushopt m8 */ |
2642 | ||
2643 | asm volatile("clflushopt (%eax)"); | |
2644 | asm volatile("clflushopt (0x12345678)"); | |
2645 | asm volatile("clflushopt 0x12345678(%eax,%ecx,8)"); | |
2646 | /* Also check instructions in the same group encoding as clflushopt */ | |
2647 | asm volatile("clflush (%eax)"); | |
2648 | asm volatile("sfence"); | |
2649 | ||
2650 | /* clwb m8 */ | |
2651 | ||
2652 | asm volatile("clwb (%eax)"); | |
2653 | asm volatile("clwb (0x12345678)"); | |
2654 | asm volatile("clwb 0x12345678(%eax,%ecx,8)"); | |
2655 | /* Also check instructions in the same group encoding as clwb */ | |
2656 | asm volatile("xsaveopt (%eax)"); | |
2657 | asm volatile("mfence"); | |
2658 | ||
f83b6b64 AH |
2659 | /* xsavec mem */ |
2660 | ||
2661 | asm volatile("xsavec (%eax)"); | |
2662 | asm volatile("xsavec (0x12345678)"); | |
2663 | asm volatile("xsavec 0x12345678(%eax,%ecx,8)"); | |
2664 | ||
2665 | /* xsaves mem */ | |
2666 | ||
2667 | asm volatile("xsaves (%eax)"); | |
2668 | asm volatile("xsaves (0x12345678)"); | |
2669 | asm volatile("xsaves 0x12345678(%eax,%ecx,8)"); | |
2670 | ||
2671 | /* xrstors mem */ | |
2672 | ||
2673 | asm volatile("xrstors (%eax)"); | |
2674 | asm volatile("xrstors (0x12345678)"); | |
2675 | asm volatile("xrstors 0x12345678(%eax,%ecx,8)"); | |
2676 | ||
d5b1a5f6 AH |
2677 | /* ptwrite */ |
2678 | ||
2679 | asm volatile("ptwrite (%eax)"); | |
2680 | asm volatile("ptwrite (0x12345678)"); | |
2681 | asm volatile("ptwrite 0x12345678(%eax,%ecx,8)"); | |
2682 | ||
2683 | asm volatile("ptwritel (%eax)"); | |
2684 | asm volatile("ptwritel (0x12345678)"); | |
2685 | asm volatile("ptwritel 0x12345678(%eax,%ecx,8)"); | |
2686 | ||
98e4619f AH |
2687 | #endif /* #ifndef __x86_64__ */ |
2688 | ||
2689 | /* Following line is a marker for the awk script - do not change */ | |
2690 | asm volatile("rdtsc"); /* Stop here */ | |
2691 | ||
2692 | return 0; | |
2693 | } |