1/*
2 * This file contains instructions for testing by the test titled:
3 *
4 *         "Test x86 instruction decoder - new instructions"
5 *
6 * Note that the 'Expecting' comment lines are consumed by the
7 * gen-insn-x86-dat.awk script and have the format:
8 *
9 *         Expecting: <op> <branch> <rel>
10 *
11 * If this file is changed, remember to run the gen-insn-x86-dat.sh
12 * script and commit the result.
13 *
14 * Refer to insn-x86.c for more details.
15 */
16
17int main(void)
18{
19	/* Following line is a marker for the awk script - do not change */
20	asm volatile("rdtsc"); /* Start here */
21
22#ifdef __x86_64__
23
24	/* bndmk m64, bnd */
25
26	asm volatile("bndmk (%rax), %bnd0");
27	asm volatile("bndmk (%r8), %bnd0");
28	asm volatile("bndmk (0x12345678), %bnd0");
29	asm volatile("bndmk (%rax), %bnd3");
30	asm volatile("bndmk (%rcx,%rax,1), %bnd0");
31	asm volatile("bndmk 0x12345678(,%rax,1), %bnd0");
32	asm volatile("bndmk (%rax,%rcx,1), %bnd0");
33	asm volatile("bndmk (%rax,%rcx,8), %bnd0");
34	asm volatile("bndmk 0x12(%rax), %bnd0");
35	asm volatile("bndmk 0x12(%rbp), %bnd0");
36	asm volatile("bndmk 0x12(%rcx,%rax,1), %bnd0");
37	asm volatile("bndmk 0x12(%rbp,%rax,1), %bnd0");
38	asm volatile("bndmk 0x12(%rax,%rcx,1), %bnd0");
39	asm volatile("bndmk 0x12(%rax,%rcx,8), %bnd0");
40	asm volatile("bndmk 0x12345678(%rax), %bnd0");
41	asm volatile("bndmk 0x12345678(%rbp), %bnd0");
42	asm volatile("bndmk 0x12345678(%rcx,%rax,1), %bnd0");
43	asm volatile("bndmk 0x12345678(%rbp,%rax,1), %bnd0");
44	asm volatile("bndmk 0x12345678(%rax,%rcx,1), %bnd0");
45	asm volatile("bndmk 0x12345678(%rax,%rcx,8), %bnd0");
46
47	/* bndcl r/m64, bnd */
48
49	asm volatile("bndcl (%rax), %bnd0");
50	asm volatile("bndcl (%r8), %bnd0");
51	asm volatile("bndcl (0x12345678), %bnd0");
52	asm volatile("bndcl (%rax), %bnd3");
53	asm volatile("bndcl (%rcx,%rax,1), %bnd0");
54	asm volatile("bndcl 0x12345678(,%rax,1), %bnd0");
55	asm volatile("bndcl (%rax,%rcx,1), %bnd0");
56	asm volatile("bndcl (%rax,%rcx,8), %bnd0");
57	asm volatile("bndcl 0x12(%rax), %bnd0");
58	asm volatile("bndcl 0x12(%rbp), %bnd0");
59	asm volatile("bndcl 0x12(%rcx,%rax,1), %bnd0");
60	asm volatile("bndcl 0x12(%rbp,%rax,1), %bnd0");
61	asm volatile("bndcl 0x12(%rax,%rcx,1), %bnd0");
62	asm volatile("bndcl 0x12(%rax,%rcx,8), %bnd0");
63	asm volatile("bndcl 0x12345678(%rax), %bnd0");
64	asm volatile("bndcl 0x12345678(%rbp), %bnd0");
65	asm volatile("bndcl 0x12345678(%rcx,%rax,1), %bnd0");
66	asm volatile("bndcl 0x12345678(%rbp,%rax,1), %bnd0");
67	asm volatile("bndcl 0x12345678(%rax,%rcx,1), %bnd0");
68	asm volatile("bndcl 0x12345678(%rax,%rcx,8), %bnd0");
69	asm volatile("bndcl %rax, %bnd0");
70
71	/* bndcu r/m64, bnd */
72
73	asm volatile("bndcu (%rax), %bnd0");
74	asm volatile("bndcu (%r8), %bnd0");
75	asm volatile("bndcu (0x12345678), %bnd0");
76	asm volatile("bndcu (%rax), %bnd3");
77	asm volatile("bndcu (%rcx,%rax,1), %bnd0");
78	asm volatile("bndcu 0x12345678(,%rax,1), %bnd0");
79	asm volatile("bndcu (%rax,%rcx,1), %bnd0");
80	asm volatile("bndcu (%rax,%rcx,8), %bnd0");
81	asm volatile("bndcu 0x12(%rax), %bnd0");
82	asm volatile("bndcu 0x12(%rbp), %bnd0");
83	asm volatile("bndcu 0x12(%rcx,%rax,1), %bnd0");
84	asm volatile("bndcu 0x12(%rbp,%rax,1), %bnd0");
85	asm volatile("bndcu 0x12(%rax,%rcx,1), %bnd0");
86	asm volatile("bndcu 0x12(%rax,%rcx,8), %bnd0");
87	asm volatile("bndcu 0x12345678(%rax), %bnd0");
88	asm volatile("bndcu 0x12345678(%rbp), %bnd0");
89	asm volatile("bndcu 0x12345678(%rcx,%rax,1), %bnd0");
90	asm volatile("bndcu 0x12345678(%rbp,%rax,1), %bnd0");
91	asm volatile("bndcu 0x12345678(%rax,%rcx,1), %bnd0");
92	asm volatile("bndcu 0x12345678(%rax,%rcx,8), %bnd0");
93	asm volatile("bndcu %rax, %bnd0");
94
95	/* bndcn r/m64, bnd */
96
97	asm volatile("bndcn (%rax), %bnd0");
98	asm volatile("bndcn (%r8), %bnd0");
99	asm volatile("bndcn (0x12345678), %bnd0");
100	asm volatile("bndcn (%rax), %bnd3");
101	asm volatile("bndcn (%rcx,%rax,1), %bnd0");
102	asm volatile("bndcn 0x12345678(,%rax,1), %bnd0");
103	asm volatile("bndcn (%rax,%rcx,1), %bnd0");
104	asm volatile("bndcn (%rax,%rcx,8), %bnd0");
105	asm volatile("bndcn 0x12(%rax), %bnd0");
106	asm volatile("bndcn 0x12(%rbp), %bnd0");
107	asm volatile("bndcn 0x12(%rcx,%rax,1), %bnd0");
108	asm volatile("bndcn 0x12(%rbp,%rax,1), %bnd0");
109	asm volatile("bndcn 0x12(%rax,%rcx,1), %bnd0");
110	asm volatile("bndcn 0x12(%rax,%rcx,8), %bnd0");
111	asm volatile("bndcn 0x12345678(%rax), %bnd0");
112	asm volatile("bndcn 0x12345678(%rbp), %bnd0");
113	asm volatile("bndcn 0x12345678(%rcx,%rax,1), %bnd0");
114	asm volatile("bndcn 0x12345678(%rbp,%rax,1), %bnd0");
115	asm volatile("bndcn 0x12345678(%rax,%rcx,1), %bnd0");
116	asm volatile("bndcn 0x12345678(%rax,%rcx,8), %bnd0");
117	asm volatile("bndcn %rax, %bnd0");
118
119	/* bndmov m128, bnd */
120
121	asm volatile("bndmov (%rax), %bnd0");
122	asm volatile("bndmov (%r8), %bnd0");
123	asm volatile("bndmov (0x12345678), %bnd0");
124	asm volatile("bndmov (%rax), %bnd3");
125	asm volatile("bndmov (%rcx,%rax,1), %bnd0");
126	asm volatile("bndmov 0x12345678(,%rax,1), %bnd0");
127	asm volatile("bndmov (%rax,%rcx,1), %bnd0");
128	asm volatile("bndmov (%rax,%rcx,8), %bnd0");
129	asm volatile("bndmov 0x12(%rax), %bnd0");
130	asm volatile("bndmov 0x12(%rbp), %bnd0");
131	asm volatile("bndmov 0x12(%rcx,%rax,1), %bnd0");
132	asm volatile("bndmov 0x12(%rbp,%rax,1), %bnd0");
133	asm volatile("bndmov 0x12(%rax,%rcx,1), %bnd0");
134	asm volatile("bndmov 0x12(%rax,%rcx,8), %bnd0");
135	asm volatile("bndmov 0x12345678(%rax), %bnd0");
136	asm volatile("bndmov 0x12345678(%rbp), %bnd0");
137	asm volatile("bndmov 0x12345678(%rcx,%rax,1), %bnd0");
138	asm volatile("bndmov 0x12345678(%rbp,%rax,1), %bnd0");
139	asm volatile("bndmov 0x12345678(%rax,%rcx,1), %bnd0");
140	asm volatile("bndmov 0x12345678(%rax,%rcx,8), %bnd0");
141
142	/* bndmov bnd, m128 */
143
144	asm volatile("bndmov %bnd0, (%rax)");
145	asm volatile("bndmov %bnd0, (%r8)");
146	asm volatile("bndmov %bnd0, (0x12345678)");
147	asm volatile("bndmov %bnd3, (%rax)");
148	asm volatile("bndmov %bnd0, (%rcx,%rax,1)");
149	asm volatile("bndmov %bnd0, 0x12345678(,%rax,1)");
150	asm volatile("bndmov %bnd0, (%rax,%rcx,1)");
151	asm volatile("bndmov %bnd0, (%rax,%rcx,8)");
152	asm volatile("bndmov %bnd0, 0x12(%rax)");
153	asm volatile("bndmov %bnd0, 0x12(%rbp)");
154	asm volatile("bndmov %bnd0, 0x12(%rcx,%rax,1)");
155	asm volatile("bndmov %bnd0, 0x12(%rbp,%rax,1)");
156	asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,1)");
157	asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,8)");
158	asm volatile("bndmov %bnd0, 0x12345678(%rax)");
159	asm volatile("bndmov %bnd0, 0x12345678(%rbp)");
160	asm volatile("bndmov %bnd0, 0x12345678(%rcx,%rax,1)");
161	asm volatile("bndmov %bnd0, 0x12345678(%rbp,%rax,1)");
162	asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,1)");
163	asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,8)");
164
165	/* bndmov bnd2, bnd1 */
166
167	asm volatile("bndmov %bnd0, %bnd1");
168	asm volatile("bndmov %bnd1, %bnd0");
169
170	/* bndldx mib, bnd */
171
172	asm volatile("bndldx (%rax), %bnd0");
173	asm volatile("bndldx (%r8), %bnd0");
174	asm volatile("bndldx (0x12345678), %bnd0");
175	asm volatile("bndldx (%rax), %bnd3");
176	asm volatile("bndldx (%rcx,%rax,1), %bnd0");
177	asm volatile("bndldx 0x12345678(,%rax,1), %bnd0");
178	asm volatile("bndldx (%rax,%rcx,1), %bnd0");
179	asm volatile("bndldx 0x12(%rax), %bnd0");
180	asm volatile("bndldx 0x12(%rbp), %bnd0");
181	asm volatile("bndldx 0x12(%rcx,%rax,1), %bnd0");
182	asm volatile("bndldx 0x12(%rbp,%rax,1), %bnd0");
183	asm volatile("bndldx 0x12(%rax,%rcx,1), %bnd0");
184	asm volatile("bndldx 0x12345678(%rax), %bnd0");
185	asm volatile("bndldx 0x12345678(%rbp), %bnd0");
186	asm volatile("bndldx 0x12345678(%rcx,%rax,1), %bnd0");
187	asm volatile("bndldx 0x12345678(%rbp,%rax,1), %bnd0");
188	asm volatile("bndldx 0x12345678(%rax,%rcx,1), %bnd0");
189
190	/* bndstx bnd, mib */
191
192	asm volatile("bndstx %bnd0, (%rax)");
193	asm volatile("bndstx %bnd0, (%r8)");
194	asm volatile("bndstx %bnd0, (0x12345678)");
195	asm volatile("bndstx %bnd3, (%rax)");
196	asm volatile("bndstx %bnd0, (%rcx,%rax,1)");
197	asm volatile("bndstx %bnd0, 0x12345678(,%rax,1)");
198	asm volatile("bndstx %bnd0, (%rax,%rcx,1)");
199	asm volatile("bndstx %bnd0, 0x12(%rax)");
200	asm volatile("bndstx %bnd0, 0x12(%rbp)");
201	asm volatile("bndstx %bnd0, 0x12(%rcx,%rax,1)");
202	asm volatile("bndstx %bnd0, 0x12(%rbp,%rax,1)");
203	asm volatile("bndstx %bnd0, 0x12(%rax,%rcx,1)");
204	asm volatile("bndstx %bnd0, 0x12345678(%rax)");
205	asm volatile("bndstx %bnd0, 0x12345678(%rbp)");
206	asm volatile("bndstx %bnd0, 0x12345678(%rcx,%rax,1)");
207	asm volatile("bndstx %bnd0, 0x12345678(%rbp,%rax,1)");
208	asm volatile("bndstx %bnd0, 0x12345678(%rax,%rcx,1)");
209
210	/* bnd prefix on call, ret, jmp and all jcc */
211
212	asm volatile("bnd call label1");  /* Expecting: call unconditional 0 */
213	asm volatile("bnd call *(%eax)"); /* Expecting: call indirect      0 */
214	asm volatile("bnd ret");          /* Expecting: ret  indirect      0 */
215	asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0 */
216	asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0 */
217	asm volatile("bnd jmp *(%ecx)");  /* Expecting: jmp  indirect      0 */
218	asm volatile("bnd jne label1");   /* Expecting: jcc  conditional   0 */
219
220	/* sha1rnds4 imm8, xmm2/m128, xmm1 */
221
222	asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0");
223	asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2");
224	asm volatile("sha1rnds4 $0x91, %xmm8, %xmm0");
225	asm volatile("sha1rnds4 $0x91, %xmm7, %xmm8");
226	asm volatile("sha1rnds4 $0x91, %xmm15, %xmm8");
227	asm volatile("sha1rnds4 $0x91, (%rax), %xmm0");
228	asm volatile("sha1rnds4 $0x91, (%r8), %xmm0");
229	asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0");
230	asm volatile("sha1rnds4 $0x91, (%rax), %xmm3");
231	asm volatile("sha1rnds4 $0x91, (%rcx,%rax,1), %xmm0");
232	asm volatile("sha1rnds4 $0x91, 0x12345678(,%rax,1), %xmm0");
233	asm volatile("sha1rnds4 $0x91, (%rax,%rcx,1), %xmm0");
234	asm volatile("sha1rnds4 $0x91, (%rax,%rcx,8), %xmm0");
235	asm volatile("sha1rnds4 $0x91, 0x12(%rax), %xmm0");
236	asm volatile("sha1rnds4 $0x91, 0x12(%rbp), %xmm0");
237	asm volatile("sha1rnds4 $0x91, 0x12(%rcx,%rax,1), %xmm0");
238	asm volatile("sha1rnds4 $0x91, 0x12(%rbp,%rax,1), %xmm0");
239	asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,1), %xmm0");
240	asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,8), %xmm0");
241	asm volatile("sha1rnds4 $0x91, 0x12345678(%rax), %xmm0");
242	asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp), %xmm0");
243	asm volatile("sha1rnds4 $0x91, 0x12345678(%rcx,%rax,1), %xmm0");
244	asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp,%rax,1), %xmm0");
245	asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,1), %xmm0");
246	asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm0");
247	asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm15");
248
249	/* sha1nexte xmm2/m128, xmm1 */
250
251	asm volatile("sha1nexte %xmm1, %xmm0");
252	asm volatile("sha1nexte %xmm7, %xmm2");
253	asm volatile("sha1nexte %xmm8, %xmm0");
254	asm volatile("sha1nexte %xmm7, %xmm8");
255	asm volatile("sha1nexte %xmm15, %xmm8");
256	asm volatile("sha1nexte (%rax), %xmm0");
257	asm volatile("sha1nexte (%r8), %xmm0");
258	asm volatile("sha1nexte (0x12345678), %xmm0");
259	asm volatile("sha1nexte (%rax), %xmm3");
260	asm volatile("sha1nexte (%rcx,%rax,1), %xmm0");
261	asm volatile("sha1nexte 0x12345678(,%rax,1), %xmm0");
262	asm volatile("sha1nexte (%rax,%rcx,1), %xmm0");
263	asm volatile("sha1nexte (%rax,%rcx,8), %xmm0");
264	asm volatile("sha1nexte 0x12(%rax), %xmm0");
265	asm volatile("sha1nexte 0x12(%rbp), %xmm0");
266	asm volatile("sha1nexte 0x12(%rcx,%rax,1), %xmm0");
267	asm volatile("sha1nexte 0x12(%rbp,%rax,1), %xmm0");
268	asm volatile("sha1nexte 0x12(%rax,%rcx,1), %xmm0");
269	asm volatile("sha1nexte 0x12(%rax,%rcx,8), %xmm0");
270	asm volatile("sha1nexte 0x12345678(%rax), %xmm0");
271	asm volatile("sha1nexte 0x12345678(%rbp), %xmm0");
272	asm volatile("sha1nexte 0x12345678(%rcx,%rax,1), %xmm0");
273	asm volatile("sha1nexte 0x12345678(%rbp,%rax,1), %xmm0");
274	asm volatile("sha1nexte 0x12345678(%rax,%rcx,1), %xmm0");
275	asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm0");
276	asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm15");
277
278	/* sha1msg1 xmm2/m128, xmm1 */
279
280	asm volatile("sha1msg1 %xmm1, %xmm0");
281	asm volatile("sha1msg1 %xmm7, %xmm2");
282	asm volatile("sha1msg1 %xmm8, %xmm0");
283	asm volatile("sha1msg1 %xmm7, %xmm8");
284	asm volatile("sha1msg1 %xmm15, %xmm8");
285	asm volatile("sha1msg1 (%rax), %xmm0");
286	asm volatile("sha1msg1 (%r8), %xmm0");
287	asm volatile("sha1msg1 (0x12345678), %xmm0");
288	asm volatile("sha1msg1 (%rax), %xmm3");
289	asm volatile("sha1msg1 (%rcx,%rax,1), %xmm0");
290	asm volatile("sha1msg1 0x12345678(,%rax,1), %xmm0");
291	asm volatile("sha1msg1 (%rax,%rcx,1), %xmm0");
292	asm volatile("sha1msg1 (%rax,%rcx,8), %xmm0");
293	asm volatile("sha1msg1 0x12(%rax), %xmm0");
294	asm volatile("sha1msg1 0x12(%rbp), %xmm0");
295	asm volatile("sha1msg1 0x12(%rcx,%rax,1), %xmm0");
296	asm volatile("sha1msg1 0x12(%rbp,%rax,1), %xmm0");
297	asm volatile("sha1msg1 0x12(%rax,%rcx,1), %xmm0");
298	asm volatile("sha1msg1 0x12(%rax,%rcx,8), %xmm0");
299	asm volatile("sha1msg1 0x12345678(%rax), %xmm0");
300	asm volatile("sha1msg1 0x12345678(%rbp), %xmm0");
301	asm volatile("sha1msg1 0x12345678(%rcx,%rax,1), %xmm0");
302	asm volatile("sha1msg1 0x12345678(%rbp,%rax,1), %xmm0");
303	asm volatile("sha1msg1 0x12345678(%rax,%rcx,1), %xmm0");
304	asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm0");
305	asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm15");
306
307	/* sha1msg2 xmm2/m128, xmm1 */
308
309	asm volatile("sha1msg2 %xmm1, %xmm0");
310	asm volatile("sha1msg2 %xmm7, %xmm2");
311	asm volatile("sha1msg2 %xmm8, %xmm0");
312	asm volatile("sha1msg2 %xmm7, %xmm8");
313	asm volatile("sha1msg2 %xmm15, %xmm8");
314	asm volatile("sha1msg2 (%rax), %xmm0");
315	asm volatile("sha1msg2 (%r8), %xmm0");
316	asm volatile("sha1msg2 (0x12345678), %xmm0");
317	asm volatile("sha1msg2 (%rax), %xmm3");
318	asm volatile("sha1msg2 (%rcx,%rax,1), %xmm0");
319	asm volatile("sha1msg2 0x12345678(,%rax,1), %xmm0");
320	asm volatile("sha1msg2 (%rax,%rcx,1), %xmm0");
321	asm volatile("sha1msg2 (%rax,%rcx,8), %xmm0");
322	asm volatile("sha1msg2 0x12(%rax), %xmm0");
323	asm volatile("sha1msg2 0x12(%rbp), %xmm0");
324	asm volatile("sha1msg2 0x12(%rcx,%rax,1), %xmm0");
325	asm volatile("sha1msg2 0x12(%rbp,%rax,1), %xmm0");
326	asm volatile("sha1msg2 0x12(%rax,%rcx,1), %xmm0");
327	asm volatile("sha1msg2 0x12(%rax,%rcx,8), %xmm0");
328	asm volatile("sha1msg2 0x12345678(%rax), %xmm0");
329	asm volatile("sha1msg2 0x12345678(%rbp), %xmm0");
330	asm volatile("sha1msg2 0x12345678(%rcx,%rax,1), %xmm0");
331	asm volatile("sha1msg2 0x12345678(%rbp,%rax,1), %xmm0");
332	asm volatile("sha1msg2 0x12345678(%rax,%rcx,1), %xmm0");
333	asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm0");
334	asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm15");
335
336	/* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */
337	/* Note sha256rnds2 has an implicit operand 'xmm0' */
338
339	asm volatile("sha256rnds2 %xmm4, %xmm1");
340	asm volatile("sha256rnds2 %xmm7, %xmm2");
341	asm volatile("sha256rnds2 %xmm8, %xmm1");
342	asm volatile("sha256rnds2 %xmm7, %xmm8");
343	asm volatile("sha256rnds2 %xmm15, %xmm8");
344	asm volatile("sha256rnds2 (%rax), %xmm1");
345	asm volatile("sha256rnds2 (%r8), %xmm1");
346	asm volatile("sha256rnds2 (0x12345678), %xmm1");
347	asm volatile("sha256rnds2 (%rax), %xmm3");
348	asm volatile("sha256rnds2 (%rcx,%rax,1), %xmm1");
349	asm volatile("sha256rnds2 0x12345678(,%rax,1), %xmm1");
350	asm volatile("sha256rnds2 (%rax,%rcx,1), %xmm1");
351	asm volatile("sha256rnds2 (%rax,%rcx,8), %xmm1");
352	asm volatile("sha256rnds2 0x12(%rax), %xmm1");
353	asm volatile("sha256rnds2 0x12(%rbp), %xmm1");
354	asm volatile("sha256rnds2 0x12(%rcx,%rax,1), %xmm1");
355	asm volatile("sha256rnds2 0x12(%rbp,%rax,1), %xmm1");
356	asm volatile("sha256rnds2 0x12(%rax,%rcx,1), %xmm1");
357	asm volatile("sha256rnds2 0x12(%rax,%rcx,8), %xmm1");
358	asm volatile("sha256rnds2 0x12345678(%rax), %xmm1");
359	asm volatile("sha256rnds2 0x12345678(%rbp), %xmm1");
360	asm volatile("sha256rnds2 0x12345678(%rcx,%rax,1), %xmm1");
361	asm volatile("sha256rnds2 0x12345678(%rbp,%rax,1), %xmm1");
362	asm volatile("sha256rnds2 0x12345678(%rax,%rcx,1), %xmm1");
363	asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm1");
364	asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm15");
365
366	/* sha256msg1 xmm2/m128, xmm1 */
367
368	asm volatile("sha256msg1 %xmm1, %xmm0");
369	asm volatile("sha256msg1 %xmm7, %xmm2");
370	asm volatile("sha256msg1 %xmm8, %xmm0");
371	asm volatile("sha256msg1 %xmm7, %xmm8");
372	asm volatile("sha256msg1 %xmm15, %xmm8");
373	asm volatile("sha256msg1 (%rax), %xmm0");
374	asm volatile("sha256msg1 (%r8), %xmm0");
375	asm volatile("sha256msg1 (0x12345678), %xmm0");
376	asm volatile("sha256msg1 (%rax), %xmm3");
377	asm volatile("sha256msg1 (%rcx,%rax,1), %xmm0");
378	asm volatile("sha256msg1 0x12345678(,%rax,1), %xmm0");
379	asm volatile("sha256msg1 (%rax,%rcx,1), %xmm0");
380	asm volatile("sha256msg1 (%rax,%rcx,8), %xmm0");
381	asm volatile("sha256msg1 0x12(%rax), %xmm0");
382	asm volatile("sha256msg1 0x12(%rbp), %xmm0");
383	asm volatile("sha256msg1 0x12(%rcx,%rax,1), %xmm0");
384	asm volatile("sha256msg1 0x12(%rbp,%rax,1), %xmm0");
385	asm volatile("sha256msg1 0x12(%rax,%rcx,1), %xmm0");
386	asm volatile("sha256msg1 0x12(%rax,%rcx,8), %xmm0");
387	asm volatile("sha256msg1 0x12345678(%rax), %xmm0");
388	asm volatile("sha256msg1 0x12345678(%rbp), %xmm0");
389	asm volatile("sha256msg1 0x12345678(%rcx,%rax,1), %xmm0");
390	asm volatile("sha256msg1 0x12345678(%rbp,%rax,1), %xmm0");
391	asm volatile("sha256msg1 0x12345678(%rax,%rcx,1), %xmm0");
392	asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm0");
393	asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm15");
394
395	/* sha256msg2 xmm2/m128, xmm1 */
396
397	asm volatile("sha256msg2 %xmm1, %xmm0");
398	asm volatile("sha256msg2 %xmm7, %xmm2");
399	asm volatile("sha256msg2 %xmm8, %xmm0");
400	asm volatile("sha256msg2 %xmm7, %xmm8");
401	asm volatile("sha256msg2 %xmm15, %xmm8");
402	asm volatile("sha256msg2 (%rax), %xmm0");
403	asm volatile("sha256msg2 (%r8), %xmm0");
404	asm volatile("sha256msg2 (0x12345678), %xmm0");
405	asm volatile("sha256msg2 (%rax), %xmm3");
406	asm volatile("sha256msg2 (%rcx,%rax,1), %xmm0");
407	asm volatile("sha256msg2 0x12345678(,%rax,1), %xmm0");
408	asm volatile("sha256msg2 (%rax,%rcx,1), %xmm0");
409	asm volatile("sha256msg2 (%rax,%rcx,8), %xmm0");
410	asm volatile("sha256msg2 0x12(%rax), %xmm0");
411	asm volatile("sha256msg2 0x12(%rbp), %xmm0");
412	asm volatile("sha256msg2 0x12(%rcx,%rax,1), %xmm0");
413	asm volatile("sha256msg2 0x12(%rbp,%rax,1), %xmm0");
414	asm volatile("sha256msg2 0x12(%rax,%rcx,1), %xmm0");
415	asm volatile("sha256msg2 0x12(%rax,%rcx,8), %xmm0");
416	asm volatile("sha256msg2 0x12345678(%rax), %xmm0");
417	asm volatile("sha256msg2 0x12345678(%rbp), %xmm0");
418	asm volatile("sha256msg2 0x12345678(%rcx,%rax,1), %xmm0");
419	asm volatile("sha256msg2 0x12345678(%rbp,%rax,1), %xmm0");
420	asm volatile("sha256msg2 0x12345678(%rax,%rcx,1), %xmm0");
421	asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm0");
422	asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm15");
423
424	/* clflushopt m8 */
425
426	asm volatile("clflushopt (%rax)");
427	asm volatile("clflushopt (%r8)");
428	asm volatile("clflushopt (0x12345678)");
429	asm volatile("clflushopt 0x12345678(%rax,%rcx,8)");
430	asm volatile("clflushopt 0x12345678(%r8,%rcx,8)");
431	/* Also check instructions in the same group encoding as clflushopt */
432	asm volatile("clflush (%rax)");
433	asm volatile("clflush (%r8)");
434	asm volatile("sfence");
435
436	/* clwb m8 */
437
438	asm volatile("clwb (%rax)");
439	asm volatile("clwb (%r8)");
440	asm volatile("clwb (0x12345678)");
441	asm volatile("clwb 0x12345678(%rax,%rcx,8)");
442	asm volatile("clwb 0x12345678(%r8,%rcx,8)");
443	/* Also check instructions in the same group encoding as clwb */
444	asm volatile("xsaveopt (%rax)");
445	asm volatile("xsaveopt (%r8)");
446	asm volatile("mfence");
447
448	/* xsavec mem */
449
450	asm volatile("xsavec (%rax)");
451	asm volatile("xsavec (%r8)");
452	asm volatile("xsavec (0x12345678)");
453	asm volatile("xsavec 0x12345678(%rax,%rcx,8)");
454	asm volatile("xsavec 0x12345678(%r8,%rcx,8)");
455
456	/* xsaves mem */
457
458	asm volatile("xsaves (%rax)");
459	asm volatile("xsaves (%r8)");
460	asm volatile("xsaves (0x12345678)");
461	asm volatile("xsaves 0x12345678(%rax,%rcx,8)");
462	asm volatile("xsaves 0x12345678(%r8,%rcx,8)");
463
464	/* xrstors mem */
465
466	asm volatile("xrstors (%rax)");
467	asm volatile("xrstors (%r8)");
468	asm volatile("xrstors (0x12345678)");
469	asm volatile("xrstors 0x12345678(%rax,%rcx,8)");
470	asm volatile("xrstors 0x12345678(%r8,%rcx,8)");
471
472#else  /* #ifdef __x86_64__ */
473
474	/* bndmk m32, bnd */
475
476	asm volatile("bndmk (%eax), %bnd0");
477	asm volatile("bndmk (0x12345678), %bnd0");
478	asm volatile("bndmk (%eax), %bnd3");
479	asm volatile("bndmk (%ecx,%eax,1), %bnd0");
480	asm volatile("bndmk 0x12345678(,%eax,1), %bnd0");
481	asm volatile("bndmk (%eax,%ecx,1), %bnd0");
482	asm volatile("bndmk (%eax,%ecx,8), %bnd0");
483	asm volatile("bndmk 0x12(%eax), %bnd0");
484	asm volatile("bndmk 0x12(%ebp), %bnd0");
485	asm volatile("bndmk 0x12(%ecx,%eax,1), %bnd0");
486	asm volatile("bndmk 0x12(%ebp,%eax,1), %bnd0");
487	asm volatile("bndmk 0x12(%eax,%ecx,1), %bnd0");
488	asm volatile("bndmk 0x12(%eax,%ecx,8), %bnd0");
489	asm volatile("bndmk 0x12345678(%eax), %bnd0");
490	asm volatile("bndmk 0x12345678(%ebp), %bnd0");
491	asm volatile("bndmk 0x12345678(%ecx,%eax,1), %bnd0");
492	asm volatile("bndmk 0x12345678(%ebp,%eax,1), %bnd0");
493	asm volatile("bndmk 0x12345678(%eax,%ecx,1), %bnd0");
494	asm volatile("bndmk 0x12345678(%eax,%ecx,8), %bnd0");
495
496	/* bndcl r/m32, bnd */
497
498	asm volatile("bndcl (%eax), %bnd0");
499	asm volatile("bndcl (0x12345678), %bnd0");
500	asm volatile("bndcl (%eax), %bnd3");
501	asm volatile("bndcl (%ecx,%eax,1), %bnd0");
502	asm volatile("bndcl 0x12345678(,%eax,1), %bnd0");
503	asm volatile("bndcl (%eax,%ecx,1), %bnd0");
504	asm volatile("bndcl (%eax,%ecx,8), %bnd0");
505	asm volatile("bndcl 0x12(%eax), %bnd0");
506	asm volatile("bndcl 0x12(%ebp), %bnd0");
507	asm volatile("bndcl 0x12(%ecx,%eax,1), %bnd0");
508	asm volatile("bndcl 0x12(%ebp,%eax,1), %bnd0");
509	asm volatile("bndcl 0x12(%eax,%ecx,1), %bnd0");
510	asm volatile("bndcl 0x12(%eax,%ecx,8), %bnd0");
511	asm volatile("bndcl 0x12345678(%eax), %bnd0");
512	asm volatile("bndcl 0x12345678(%ebp), %bnd0");
513	asm volatile("bndcl 0x12345678(%ecx,%eax,1), %bnd0");
514	asm volatile("bndcl 0x12345678(%ebp,%eax,1), %bnd0");
515	asm volatile("bndcl 0x12345678(%eax,%ecx,1), %bnd0");
516	asm volatile("bndcl 0x12345678(%eax,%ecx,8), %bnd0");
517	asm volatile("bndcl %eax, %bnd0");
518
519	/* bndcu r/m32, bnd */
520
521	asm volatile("bndcu (%eax), %bnd0");
522	asm volatile("bndcu (0x12345678), %bnd0");
523	asm volatile("bndcu (%eax), %bnd3");
524	asm volatile("bndcu (%ecx,%eax,1), %bnd0");
525	asm volatile("bndcu 0x12345678(,%eax,1), %bnd0");
526	asm volatile("bndcu (%eax,%ecx,1), %bnd0");
527	asm volatile("bndcu (%eax,%ecx,8), %bnd0");
528	asm volatile("bndcu 0x12(%eax), %bnd0");
529	asm volatile("bndcu 0x12(%ebp), %bnd0");
530	asm volatile("bndcu 0x12(%ecx,%eax,1), %bnd0");
531	asm volatile("bndcu 0x12(%ebp,%eax,1), %bnd0");
532	asm volatile("bndcu 0x12(%eax,%ecx,1), %bnd0");
533	asm volatile("bndcu 0x12(%eax,%ecx,8), %bnd0");
534	asm volatile("bndcu 0x12345678(%eax), %bnd0");
535	asm volatile("bndcu 0x12345678(%ebp), %bnd0");
536	asm volatile("bndcu 0x12345678(%ecx,%eax,1), %bnd0");
537	asm volatile("bndcu 0x12345678(%ebp,%eax,1), %bnd0");
538	asm volatile("bndcu 0x12345678(%eax,%ecx,1), %bnd0");
539	asm volatile("bndcu 0x12345678(%eax,%ecx,8), %bnd0");
540	asm volatile("bndcu %eax, %bnd0");
541
542	/* bndcn r/m32, bnd */
543
544	asm volatile("bndcn (%eax), %bnd0");
545	asm volatile("bndcn (0x12345678), %bnd0");
546	asm volatile("bndcn (%eax), %bnd3");
547	asm volatile("bndcn (%ecx,%eax,1), %bnd0");
548	asm volatile("bndcn 0x12345678(,%eax,1), %bnd0");
549	asm volatile("bndcn (%eax,%ecx,1), %bnd0");
550	asm volatile("bndcn (%eax,%ecx,8), %bnd0");
551	asm volatile("bndcn 0x12(%eax), %bnd0");
552	asm volatile("bndcn 0x12(%ebp), %bnd0");
553	asm volatile("bndcn 0x12(%ecx,%eax,1), %bnd0");
554	asm volatile("bndcn 0x12(%ebp,%eax,1), %bnd0");
555	asm volatile("bndcn 0x12(%eax,%ecx,1), %bnd0");
556	asm volatile("bndcn 0x12(%eax,%ecx,8), %bnd0");
557	asm volatile("bndcn 0x12345678(%eax), %bnd0");
558	asm volatile("bndcn 0x12345678(%ebp), %bnd0");
559	asm volatile("bndcn 0x12345678(%ecx,%eax,1), %bnd0");
560	asm volatile("bndcn 0x12345678(%ebp,%eax,1), %bnd0");
561	asm volatile("bndcn 0x12345678(%eax,%ecx,1), %bnd0");
562	asm volatile("bndcn 0x12345678(%eax,%ecx,8), %bnd0");
563	asm volatile("bndcn %eax, %bnd0");
564
565	/* bndmov m64, bnd */
566
567	asm volatile("bndmov (%eax), %bnd0");
568	asm volatile("bndmov (0x12345678), %bnd0");
569	asm volatile("bndmov (%eax), %bnd3");
570	asm volatile("bndmov (%ecx,%eax,1), %bnd0");
571	asm volatile("bndmov 0x12345678(,%eax,1), %bnd0");
572	asm volatile("bndmov (%eax,%ecx,1), %bnd0");
573	asm volatile("bndmov (%eax,%ecx,8), %bnd0");
574	asm volatile("bndmov 0x12(%eax), %bnd0");
575	asm volatile("bndmov 0x12(%ebp), %bnd0");
576	asm volatile("bndmov 0x12(%ecx,%eax,1), %bnd0");
577	asm volatile("bndmov 0x12(%ebp,%eax,1), %bnd0");
578	asm volatile("bndmov 0x12(%eax,%ecx,1), %bnd0");
579	asm volatile("bndmov 0x12(%eax,%ecx,8), %bnd0");
580	asm volatile("bndmov 0x12345678(%eax), %bnd0");
581	asm volatile("bndmov 0x12345678(%ebp), %bnd0");
582	asm volatile("bndmov 0x12345678(%ecx,%eax,1), %bnd0");
583	asm volatile("bndmov 0x12345678(%ebp,%eax,1), %bnd0");
584	asm volatile("bndmov 0x12345678(%eax,%ecx,1), %bnd0");
585	asm volatile("bndmov 0x12345678(%eax,%ecx,8), %bnd0");
586
587	/* bndmov bnd, m64 */
588
589	asm volatile("bndmov %bnd0, (%eax)");
590	asm volatile("bndmov %bnd0, (0x12345678)");
591	asm volatile("bndmov %bnd3, (%eax)");
592	asm volatile("bndmov %bnd0, (%ecx,%eax,1)");
593	asm volatile("bndmov %bnd0, 0x12345678(,%eax,1)");
594	asm volatile("bndmov %bnd0, (%eax,%ecx,1)");
595	asm volatile("bndmov %bnd0, (%eax,%ecx,8)");
596	asm volatile("bndmov %bnd0, 0x12(%eax)");
597	asm volatile("bndmov %bnd0, 0x12(%ebp)");
598	asm volatile("bndmov %bnd0, 0x12(%ecx,%eax,1)");
599	asm volatile("bndmov %bnd0, 0x12(%ebp,%eax,1)");
600	asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,1)");
601	asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,8)");
602	asm volatile("bndmov %bnd0, 0x12345678(%eax)");
603	asm volatile("bndmov %bnd0, 0x12345678(%ebp)");
604	asm volatile("bndmov %bnd0, 0x12345678(%ecx,%eax,1)");
605	asm volatile("bndmov %bnd0, 0x12345678(%ebp,%eax,1)");
606	asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,1)");
607	asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,8)");
608
609	/* bndmov bnd2, bnd1 */
610
611	asm volatile("bndmov %bnd0, %bnd1");
612	asm volatile("bndmov %bnd1, %bnd0");
613
614	/* bndldx mib, bnd */
615
616	asm volatile("bndldx (%eax), %bnd0");
617	asm volatile("bndldx (0x12345678), %bnd0");
618	asm volatile("bndldx (%eax), %bnd3");
619	asm volatile("bndldx (%ecx,%eax,1), %bnd0");
620	asm volatile("bndldx 0x12345678(,%eax,1), %bnd0");
621	asm volatile("bndldx (%eax,%ecx,1), %bnd0");
622	asm volatile("bndldx 0x12(%eax), %bnd0");
623	asm volatile("bndldx 0x12(%ebp), %bnd0");
624	asm volatile("bndldx 0x12(%ecx,%eax,1), %bnd0");
625	asm volatile("bndldx 0x12(%ebp,%eax,1), %bnd0");
626	asm volatile("bndldx 0x12(%eax,%ecx,1), %bnd0");
627	asm volatile("bndldx 0x12345678(%eax), %bnd0");
628	asm volatile("bndldx 0x12345678(%ebp), %bnd0");
629	asm volatile("bndldx 0x12345678(%ecx,%eax,1), %bnd0");
630	asm volatile("bndldx 0x12345678(%ebp,%eax,1), %bnd0");
631	asm volatile("bndldx 0x12345678(%eax,%ecx,1), %bnd0");
632
633	/* bndstx bnd, mib */
634
635	asm volatile("bndstx %bnd0, (%eax)");
636	asm volatile("bndstx %bnd0, (0x12345678)");
637	asm volatile("bndstx %bnd3, (%eax)");
638	asm volatile("bndstx %bnd0, (%ecx,%eax,1)");
639	asm volatile("bndstx %bnd0, 0x12345678(,%eax,1)");
640	asm volatile("bndstx %bnd0, (%eax,%ecx,1)");
641	asm volatile("bndstx %bnd0, 0x12(%eax)");
642	asm volatile("bndstx %bnd0, 0x12(%ebp)");
643	asm volatile("bndstx %bnd0, 0x12(%ecx,%eax,1)");
644	asm volatile("bndstx %bnd0, 0x12(%ebp,%eax,1)");
645	asm volatile("bndstx %bnd0, 0x12(%eax,%ecx,1)");
646	asm volatile("bndstx %bnd0, 0x12345678(%eax)");
647	asm volatile("bndstx %bnd0, 0x12345678(%ebp)");
648	asm volatile("bndstx %bnd0, 0x12345678(%ecx,%eax,1)");
649	asm volatile("bndstx %bnd0, 0x12345678(%ebp,%eax,1)");
650	asm volatile("bndstx %bnd0, 0x12345678(%eax,%ecx,1)");
651
652	/* bnd prefix on call, ret, jmp and all jcc */
653
654	asm volatile("bnd call label1");  /* Expecting: call unconditional 0xfffffffc */
655	asm volatile("bnd call *(%eax)"); /* Expecting: call indirect      0 */
656	asm volatile("bnd ret");          /* Expecting: ret  indirect      0 */
657	asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0xfffffffc */
658	asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0xfffffffc */
659	asm volatile("bnd jmp *(%ecx)");  /* Expecting: jmp  indirect      0 */
660	asm volatile("bnd jne label1");   /* Expecting: jcc  conditional   0xfffffffc */
661
662	/* sha1rnds4 imm8, xmm2/m128, xmm1 */
663
664	asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0");
665	asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2");
666	asm volatile("sha1rnds4 $0x91, (%eax), %xmm0");
667	asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0");
668	asm volatile("sha1rnds4 $0x91, (%eax), %xmm3");
669	asm volatile("sha1rnds4 $0x91, (%ecx,%eax,1), %xmm0");
670	asm volatile("sha1rnds4 $0x91, 0x12345678(,%eax,1), %xmm0");
671	asm volatile("sha1rnds4 $0x91, (%eax,%ecx,1), %xmm0");
672	asm volatile("sha1rnds4 $0x91, (%eax,%ecx,8), %xmm0");
673	asm volatile("sha1rnds4 $0x91, 0x12(%eax), %xmm0");
674	asm volatile("sha1rnds4 $0x91, 0x12(%ebp), %xmm0");
675	asm volatile("sha1rnds4 $0x91, 0x12(%ecx,%eax,1), %xmm0");
676	asm volatile("sha1rnds4 $0x91, 0x12(%ebp,%eax,1), %xmm0");
677	asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,1), %xmm0");
678	asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,8), %xmm0");
679	asm volatile("sha1rnds4 $0x91, 0x12345678(%eax), %xmm0");
680	asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp), %xmm0");
681	asm volatile("sha1rnds4 $0x91, 0x12345678(%ecx,%eax,1), %xmm0");
682	asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp,%eax,1), %xmm0");
683	asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,1), %xmm0");
684	asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,8), %xmm0");
685
686	/* sha1nexte xmm2/m128, xmm1 */
687
688	asm volatile("sha1nexte %xmm1, %xmm0");
689	asm volatile("sha1nexte %xmm7, %xmm2");
690	asm volatile("sha1nexte (%eax), %xmm0");
691	asm volatile("sha1nexte (0x12345678), %xmm0");
692	asm volatile("sha1nexte (%eax), %xmm3");
693	asm volatile("sha1nexte (%ecx,%eax,1), %xmm0");
694	asm volatile("sha1nexte 0x12345678(,%eax,1), %xmm0");
695	asm volatile("sha1nexte (%eax,%ecx,1), %xmm0");
696	asm volatile("sha1nexte (%eax,%ecx,8), %xmm0");
697	asm volatile("sha1nexte 0x12(%eax), %xmm0");
698	asm volatile("sha1nexte 0x12(%ebp), %xmm0");
699	asm volatile("sha1nexte 0x12(%ecx,%eax,1), %xmm0");
700	asm volatile("sha1nexte 0x12(%ebp,%eax,1), %xmm0");
701	asm volatile("sha1nexte 0x12(%eax,%ecx,1), %xmm0");
702	asm volatile("sha1nexte 0x12(%eax,%ecx,8), %xmm0");
703	asm volatile("sha1nexte 0x12345678(%eax), %xmm0");
704	asm volatile("sha1nexte 0x12345678(%ebp), %xmm0");
705	asm volatile("sha1nexte 0x12345678(%ecx,%eax,1), %xmm0");
706	asm volatile("sha1nexte 0x12345678(%ebp,%eax,1), %xmm0");
707	asm volatile("sha1nexte 0x12345678(%eax,%ecx,1), %xmm0");
708	asm volatile("sha1nexte 0x12345678(%eax,%ecx,8), %xmm0");
709
710	/* sha1msg1 xmm2/m128, xmm1 */
711
712	asm volatile("sha1msg1 %xmm1, %xmm0");
713	asm volatile("sha1msg1 %xmm7, %xmm2");
714	asm volatile("sha1msg1 (%eax), %xmm0");
715	asm volatile("sha1msg1 (0x12345678), %xmm0");
716	asm volatile("sha1msg1 (%eax), %xmm3");
717	asm volatile("sha1msg1 (%ecx,%eax,1), %xmm0");
718	asm volatile("sha1msg1 0x12345678(,%eax,1), %xmm0");
719	asm volatile("sha1msg1 (%eax,%ecx,1), %xmm0");
720	asm volatile("sha1msg1 (%eax,%ecx,8), %xmm0");
721	asm volatile("sha1msg1 0x12(%eax), %xmm0");
722	asm volatile("sha1msg1 0x12(%ebp), %xmm0");
723	asm volatile("sha1msg1 0x12(%ecx,%eax,1), %xmm0");
724	asm volatile("sha1msg1 0x12(%ebp,%eax,1), %xmm0");
725	asm volatile("sha1msg1 0x12(%eax,%ecx,1), %xmm0");
726	asm volatile("sha1msg1 0x12(%eax,%ecx,8), %xmm0");
727	asm volatile("sha1msg1 0x12345678(%eax), %xmm0");
728	asm volatile("sha1msg1 0x12345678(%ebp), %xmm0");
729	asm volatile("sha1msg1 0x12345678(%ecx,%eax,1), %xmm0");
730	asm volatile("sha1msg1 0x12345678(%ebp,%eax,1), %xmm0");
731	asm volatile("sha1msg1 0x12345678(%eax,%ecx,1), %xmm0");
732	asm volatile("sha1msg1 0x12345678(%eax,%ecx,8), %xmm0");
733
734	/* sha1msg2 xmm2/m128, xmm1 */
735
736	asm volatile("sha1msg2 %xmm1, %xmm0");
737	asm volatile("sha1msg2 %xmm7, %xmm2");
738	asm volatile("sha1msg2 (%eax), %xmm0");
739	asm volatile("sha1msg2 (0x12345678), %xmm0");
740	asm volatile("sha1msg2 (%eax), %xmm3");
741	asm volatile("sha1msg2 (%ecx,%eax,1), %xmm0");
742	asm volatile("sha1msg2 0x12345678(,%eax,1), %xmm0");
743	asm volatile("sha1msg2 (%eax,%ecx,1), %xmm0");
744	asm volatile("sha1msg2 (%eax,%ecx,8), %xmm0");
745	asm volatile("sha1msg2 0x12(%eax), %xmm0");
746	asm volatile("sha1msg2 0x12(%ebp), %xmm0");
747	asm volatile("sha1msg2 0x12(%ecx,%eax,1), %xmm0");
748	asm volatile("sha1msg2 0x12(%ebp,%eax,1), %xmm0");
749	asm volatile("sha1msg2 0x12(%eax,%ecx,1), %xmm0");
750	asm volatile("sha1msg2 0x12(%eax,%ecx,8), %xmm0");
751	asm volatile("sha1msg2 0x12345678(%eax), %xmm0");
752	asm volatile("sha1msg2 0x12345678(%ebp), %xmm0");
753	asm volatile("sha1msg2 0x12345678(%ecx,%eax,1), %xmm0");
754	asm volatile("sha1msg2 0x12345678(%ebp,%eax,1), %xmm0");
755	asm volatile("sha1msg2 0x12345678(%eax,%ecx,1), %xmm0");
756	asm volatile("sha1msg2 0x12345678(%eax,%ecx,8), %xmm0");
757
758	/* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */
759	/* Note sha256rnds2 has an implicit operand 'xmm0' */
760
761	asm volatile("sha256rnds2 %xmm4, %xmm1");
762	asm volatile("sha256rnds2 %xmm7, %xmm2");
763	asm volatile("sha256rnds2 (%eax), %xmm1");
764	asm volatile("sha256rnds2 (0x12345678), %xmm1");
765	asm volatile("sha256rnds2 (%eax), %xmm3");
766	asm volatile("sha256rnds2 (%ecx,%eax,1), %xmm1");
767	asm volatile("sha256rnds2 0x12345678(,%eax,1), %xmm1");
768	asm volatile("sha256rnds2 (%eax,%ecx,1), %xmm1");
769	asm volatile("sha256rnds2 (%eax,%ecx,8), %xmm1");
770	asm volatile("sha256rnds2 0x12(%eax), %xmm1");
771	asm volatile("sha256rnds2 0x12(%ebp), %xmm1");
772	asm volatile("sha256rnds2 0x12(%ecx,%eax,1), %xmm1");
773	asm volatile("sha256rnds2 0x12(%ebp,%eax,1), %xmm1");
774	asm volatile("sha256rnds2 0x12(%eax,%ecx,1), %xmm1");
775	asm volatile("sha256rnds2 0x12(%eax,%ecx,8), %xmm1");
776	asm volatile("sha256rnds2 0x12345678(%eax), %xmm1");
777	asm volatile("sha256rnds2 0x12345678(%ebp), %xmm1");
778	asm volatile("sha256rnds2 0x12345678(%ecx,%eax,1), %xmm1");
779	asm volatile("sha256rnds2 0x12345678(%ebp,%eax,1), %xmm1");
780	asm volatile("sha256rnds2 0x12345678(%eax,%ecx,1), %xmm1");
781	asm volatile("sha256rnds2 0x12345678(%eax,%ecx,8), %xmm1");
782
783	/* sha256msg1 xmm2/m128, xmm1 */
784
785	asm volatile("sha256msg1 %xmm1, %xmm0");
786	asm volatile("sha256msg1 %xmm7, %xmm2");
787	asm volatile("sha256msg1 (%eax), %xmm0");
788	asm volatile("sha256msg1 (0x12345678), %xmm0");
789	asm volatile("sha256msg1 (%eax), %xmm3");
790	asm volatile("sha256msg1 (%ecx,%eax,1), %xmm0");
791	asm volatile("sha256msg1 0x12345678(,%eax,1), %xmm0");
792	asm volatile("sha256msg1 (%eax,%ecx,1), %xmm0");
793	asm volatile("sha256msg1 (%eax,%ecx,8), %xmm0");
794	asm volatile("sha256msg1 0x12(%eax), %xmm0");
795	asm volatile("sha256msg1 0x12(%ebp), %xmm0");
796	asm volatile("sha256msg1 0x12(%ecx,%eax,1), %xmm0");
797	asm volatile("sha256msg1 0x12(%ebp,%eax,1), %xmm0");
798	asm volatile("sha256msg1 0x12(%eax,%ecx,1), %xmm0");
799	asm volatile("sha256msg1 0x12(%eax,%ecx,8), %xmm0");
800	asm volatile("sha256msg1 0x12345678(%eax), %xmm0");
801	asm volatile("sha256msg1 0x12345678(%ebp), %xmm0");
802	asm volatile("sha256msg1 0x12345678(%ecx,%eax,1), %xmm0");
803	asm volatile("sha256msg1 0x12345678(%ebp,%eax,1), %xmm0");
804	asm volatile("sha256msg1 0x12345678(%eax,%ecx,1), %xmm0");
805	asm volatile("sha256msg1 0x12345678(%eax,%ecx,8), %xmm0");
806
807	/* sha256msg2 xmm2/m128, xmm1 */
808
809	asm volatile("sha256msg2 %xmm1, %xmm0");
810	asm volatile("sha256msg2 %xmm7, %xmm2");
811	asm volatile("sha256msg2 (%eax), %xmm0");
812	asm volatile("sha256msg2 (0x12345678), %xmm0");
813	asm volatile("sha256msg2 (%eax), %xmm3");
814	asm volatile("sha256msg2 (%ecx,%eax,1), %xmm0");
815	asm volatile("sha256msg2 0x12345678(,%eax,1), %xmm0");
816	asm volatile("sha256msg2 (%eax,%ecx,1), %xmm0");
817	asm volatile("sha256msg2 (%eax,%ecx,8), %xmm0");
818	asm volatile("sha256msg2 0x12(%eax), %xmm0");
819	asm volatile("sha256msg2 0x12(%ebp), %xmm0");
820	asm volatile("sha256msg2 0x12(%ecx,%eax,1), %xmm0");
821	asm volatile("sha256msg2 0x12(%ebp,%eax,1), %xmm0");
822	asm volatile("sha256msg2 0x12(%eax,%ecx,1), %xmm0");
823	asm volatile("sha256msg2 0x12(%eax,%ecx,8), %xmm0");
824	asm volatile("sha256msg2 0x12345678(%eax), %xmm0");
825	asm volatile("sha256msg2 0x12345678(%ebp), %xmm0");
826	asm volatile("sha256msg2 0x12345678(%ecx,%eax,1), %xmm0");
827	asm volatile("sha256msg2 0x12345678(%ebp,%eax,1), %xmm0");
828	asm volatile("sha256msg2 0x12345678(%eax,%ecx,1), %xmm0");
829	asm volatile("sha256msg2 0x12345678(%eax,%ecx,8), %xmm0");
830
831	/* clflushopt m8 */
832
833	asm volatile("clflushopt (%eax)");
834	asm volatile("clflushopt (0x12345678)");
835	asm volatile("clflushopt 0x12345678(%eax,%ecx,8)");
836	/* Also check instructions in the same group encoding as clflushopt */
837	asm volatile("clflush (%eax)");
838	asm volatile("sfence");
839
840	/* clwb m8 */
841
842	asm volatile("clwb (%eax)");
843	asm volatile("clwb (0x12345678)");
844	asm volatile("clwb 0x12345678(%eax,%ecx,8)");
845	/* Also check instructions in the same group encoding as clwb */
846	asm volatile("xsaveopt (%eax)");
847	asm volatile("mfence");
848
849	/* xsavec mem */
850
851	asm volatile("xsavec (%eax)");
852	asm volatile("xsavec (0x12345678)");
853	asm volatile("xsavec 0x12345678(%eax,%ecx,8)");
854
855	/* xsaves mem */
856
857	asm volatile("xsaves (%eax)");
858	asm volatile("xsaves (0x12345678)");
859	asm volatile("xsaves 0x12345678(%eax,%ecx,8)");
860
861	/* xrstors mem */
862
863	asm volatile("xrstors (%eax)");
864	asm volatile("xrstors (0x12345678)");
865	asm volatile("xrstors 0x12345678(%eax,%ecx,8)");
866
867#endif /* #ifndef __x86_64__ */
868
869	/* pcommit */
870
871	asm volatile("pcommit");
872
873	/* Following line is a marker for the awk script - do not change */
874	asm volatile("rdtsc"); /* Stop here */
875
876	return 0;
877}
878