1/*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source.  A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12/*
13 * Copyright 2019 Joyent, Inc.
14 */
15
16/*
17 * Basic tests for AVX512 instructions
18 */
19
20.text
21.align 16
22.globl libdis_test
23.type libdis_test, @function
24libdis_test:
25	vmovaps		%xmm0, %xmm1
26	vmovaps		%xmm2, %xmm3
27	vmovaps		%xmm4, %xmm5
28	vmovaps		%xmm6, %xmm7
29	vmovaps		%xmm8, %xmm9
30	vmovaps		%xmm10, %xmm11
31	vmovaps		%xmm12, %xmm13
32	vmovaps		%xmm14, %xmm15
33	vmovaps		%xmm16, %xmm17
34	vmovaps		%xmm18, %xmm19
35	vmovaps		%xmm20, %xmm21
36	vmovaps		%xmm22, %xmm23
37	vmovaps		%xmm24, %xmm25
38	vmovaps		%xmm26, %xmm27
39	vmovaps		%xmm28, %xmm29
40	vmovaps		%xmm30, %xmm31
41
42	vmovaps		%ymm0, %ymm1
43	vmovaps		%ymm2, %ymm3
44	vmovaps		%ymm4, %ymm5
45	vmovaps		%ymm6, %ymm7
46	vmovaps		%ymm8, %ymm9
47	vmovaps		%ymm10, %ymm11
48	vmovaps		%ymm12, %ymm13
49	vmovaps		%ymm14, %ymm15
50	vmovaps		%ymm16, %ymm17
51	vmovaps		%ymm18, %ymm19
52	vmovaps		%ymm20, %ymm21
53	vmovaps		%ymm22, %ymm23
54	vmovaps		%ymm24, %ymm25
55	vmovaps		%ymm26, %ymm27
56	vmovaps		%ymm28, %ymm29
57	vmovaps		%ymm30, %ymm31
58
59	vmovaps		%zmm0, %zmm1
60	vmovaps		%zmm2, %zmm3
61	vmovaps		%zmm4, %zmm5
62	vmovaps		%zmm6, %zmm7
63	vmovaps		%zmm8, %zmm9
64	vmovaps		%zmm10, %zmm11
65	vmovaps		%zmm12, %zmm13
66	vmovaps		%zmm14, %zmm15
67	vmovaps		%zmm16, %zmm17
68	vmovaps		%zmm18, %zmm19
69	vmovaps		%zmm20, %zmm21
70	vmovaps		%zmm22, %zmm23
71	vmovaps		%zmm24, %zmm25
72	vmovaps		%zmm26, %zmm27
73	vmovaps		%zmm28, %zmm29
74	vmovaps		%zmm30, %zmm31
75
76	vmovaps		%zmm24, 0x8(%rsp)
77	vmovaps		0x8(%rsp), %zmm31
78	vmovaps		%zmm13, %zmm17{%k1}{z}
79	vmovaps		%zmm16, %zmm24{%k7}
80	vmovaps		%zmm28, %zmm29
81
82	vmovaps		%xmm16, %xmm25
83	vmovaps		%xmm7, %xmm20{%k3}{z}
84	vmovaps		%ymm1, %ymm16
85	vmovaps		%ymm19, %ymm30{%k5}
86
87	vmovapd		%zmm2, %zmm7
88	vmovapd		%xmm16, %xmm25
89	vmovapd		%ymm16, %ymm29
90
91	vmovups		%zmm7, 0x20(%rbp)
92	vmovups		0x8(%rsp), %zmm17
93	vmovups		(%rax), %zmm23
94	vmovups		%xmm16, %xmm25
95	vmovups		%ymm16, %ymm29
96
97	vmovupd		(%r10), %zmm31{%k2}
98	vmovupd		%zmm16, (%r11)
99	vmovupd		%xmm16, %xmm25
100	vmovupd		%ymm16, %ymm29
101
102	/* Test offset handling for both disp8*N and full. */
103	vmovaps		%zmm25, (%rsp)
104	vmovaps		%zmm25, 0x20(%rsp)
105	vmovaps		%zmm24, 0x40(%rsp)
106	vmovaps		%zmm24, 0x60(%rsp)
107	vmovaps		%zmm24, 0x80(%rsp)
108	vmovaps		%zmm24, -0x80(%rsp)
109	vmovaps		%zmm24, -0x20(%rsp)
110
111	vmovaps		%ymm24, 0x10(%rsp)
112	vmovaps		%ymm24, 0x20(%rsp)
113	vmovaps		%ymm24, 0x40(%rsp)
114
115	vmovaps		%xmm24, 0x8(%rsp)
116	vmovaps		%xmm24, 0x10(%rsp)
117	vmovaps		%xmm24, 0x20(%rsp)
118
119	vmovaps		(%rsp), %zmm25
120	vmovaps		0x20(%rsp), %zmm25
121	vmovaps		0x40(%rsp), %zmm25
122	vmovaps		0x60(%rsp), %zmm25
123	vmovaps		0x80(%rsp), %zmm25
124	vmovaps		-0x80(%rsp), %zmm25
125	vmovaps		-0x20(%rsp), %zmm25
126
127	vmovaps		0x10(%rsp), %ymm25
128	vmovaps		0x20(%rsp), %ymm25
129	vmovaps		0x40(%rsp), %ymm25
130
131	vmovaps		0x8(%rsp), %xmm25
132	vmovaps		0x10(%rsp), %xmm25
133	vmovaps		0x20(%rsp), %xmm25
134
135	vmovdqa32	%zmm6, 0x100(%rsp)
136	vmovdqa32	%ymm26, 0x100(%rsp)
137	vmovdqa32	%xmm16, 0x100(%rsp)
138	vmovdqa32	(%rcx), %zmm6
139	vmovdqa32	(%rcx), %ymm26
140	vmovdqa32	(%rcx), %xmm16
141
142	vmovdqa64	%zmm16, 0x100(%rsp)
143	vmovdqa64	%ymm26, 0x100(%rsp)
144	vmovdqa64	%xmm16, 0x100(%rsp)
145	vmovdqa64	0x800(%rsp), %zmm16
146	vmovdqa64	0x800(%rsp), %ymm26
147	vmovdqa64	0x800(%rsp), %xmm16
148
149	vmovdqu8	%zmm20, (%rsp)
150	vmovdqu16	%zmm20, (%rsp)
151	vmovdqu32	%zmm20, (%rsp)
152	vmovdqu64	%zmm20, (%rsp)
153	vmovdqu8	(%rsp), %zmm20
154	vmovdqu16	(%rsp), %zmm20
155	vmovdqu32	(%rsp), %zmm20
156	vmovdqu64	(%rsp), %zmm20
157
158	vandnpd	%xmm0, %xmm1, %xmm2{%k1}{z}
159	vandnpd	(%rax), %xmm3, %xmm4{%k1}{z}
160	vandnpd	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
161	vandnpd	%ymm0, %ymm1, %ymm2{%k1}{z}
162	vandnpd	(%rbx), %ymm3, %ymm4{%k1}{z}
163	vandnpd	0x42(%rdx), %ymm5, %ymm6{%k1}{z}
164	vandnpd	%zmm0, %zmm1, %zmm2
165	vandnpd	(%rbx), %zmm3, %zmm4
166	vandnpd	0x42(%rdx), %zmm5, %zmm6
167
168	vandnps	%xmm0, %xmm1, %xmm2{%k1}{z}
169	vandnps	(%rax), %xmm3, %xmm4{%k1}{z}
170	vandnps	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
171	vandnps	%ymm0, %ymm1, %ymm2{%k1}
172	vandnps	(%rbx), %ymm3, %ymm4{%k1}
173	vandnps	0x42(%rdx), %ymm5, %ymm6{%k1}
174	vandnps	%zmm0, %zmm1, %zmm2
175	vandnps	(%rbx), %zmm3, %zmm4
176	vandnps	0x42(%rdx), %zmm5, %zmm6
177
178	vandpd	%xmm0, %xmm1, %xmm2{%k1}{z}
179	vandpd	(%rax), %xmm3, %xmm4{%k1}{z}
180	vandpd	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
181	vandpd	%ymm0, %ymm1, %ymm2{%k1}
182	vandpd	(%rbx), %ymm3, %ymm4{%k1}
183	vandpd	0x42(%rdx), %ymm5, %ymm6{%k1}
184	vandpd	%zmm0, %zmm1, %zmm2
185	vandpd	(%rbx), %zmm3, %zmm4
186	vandpd	0x42(%rdx), %zmm5, %zmm6
187
188	vandps	%xmm0, %xmm1, %xmm2{%k1}{z}
189	vandps	(%rax), %xmm3, %xmm4{%k1}{z}
190	vandps	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
191	vandps	%ymm0, %ymm1, %ymm2{%k1}
192	vandps	(%rbx), %ymm3, %ymm4{%k1}
193	vandps	0x42(%rdx), %ymm5, %ymm6{%k1}
194	vandps	%zmm0, %zmm1, %zmm2
195	vandps	(%rbx), %zmm3, %zmm4
196	vandps	0x42(%rdx), %zmm5, %zmm6
197
198	vpandd	%xmm0, %xmm1, %xmm2
199	vpandd	(%rax), %xmm3, %xmm4
200	vpandd	0x42(%rcx), %xmm5, %xmm6
201	vpandd	%ymm0, %ymm1, %ymm2
202	vpandd	(%rbx), %ymm3, %ymm4
203	vpandd	0x42(%rdx), %ymm5, %ymm6
204	vpandd	%zmm0, %zmm1, %zmm2
205	vpandd	(%rbx), %zmm3, %zmm4
206	vpandd	0x42(%rdx), %zmm5, %zmm6
207
208	vpandq	%xmm0, %xmm1, %xmm2
209	vpandq	(%rax), %xmm3, %xmm4
210	vpandq	0x42(%rcx), %xmm5, %xmm6
211	vpandq	%ymm0, %ymm1, %ymm2
212	vpandq	(%rbx), %ymm3, %ymm4
213	vpandq	0x42(%rdx), %ymm5, %ymm6
214	vpandq	%zmm0, %zmm1, %zmm2
215	vpandq	(%rbx), %zmm3, %zmm4
216	vpandq	0x42(%rdx), %zmm5, %zmm6
217
218	vpandnd	%xmm0, %xmm1, %xmm2
219	vpandnd	(%rax), %xmm3, %xmm4
220	vpandnd	0x42(%rcx), %xmm5, %xmm6
221	vpandnd	%ymm0, %ymm1, %ymm2
222	vpandnd	(%rbx), %ymm3, %ymm4
223	vpandnd	0x42(%rdx), %ymm5, %ymm6
224	vpandnd	%zmm0, %zmm1, %zmm2
225	vpandnd	(%rbx), %zmm3, %zmm4
226	vpandnd	0x42(%rdx), %zmm5, %zmm6
227
228	vpandnq	%xmm0, %xmm1, %xmm2
229	vpandnq	(%rax), %xmm3, %xmm4
230	vpandnq	0x42(%rcx), %xmm5, %xmm6
231	vpandnq	%ymm0, %ymm1, %ymm2
232	vpandnq	(%rbx), %ymm3, %ymm4
233	vpandnq	0x42(%rdx), %ymm5, %ymm6
234	vpandnq	%zmm0, %zmm1, %zmm2
235	vpandnq	(%rbx), %zmm3, %zmm4
236	vpandnq	0x42(%rdx), %zmm5, %zmm6
237
238	vorpd	%xmm0, %xmm1, %xmm2{%k1}{z}
239	vorpd	(%rax), %xmm3, %xmm4{%k1}{z}
240	vorpd	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
241	vorpd	%ymm0, %ymm1, %ymm2{%k1}
242	vorpd	(%rbx), %ymm3, %ymm4{%k1}
243	vorpd	0x42(%rdx), %ymm5, %ymm6{%k1}
244	vorpd	%zmm0, %zmm1, %zmm2
245	vorpd	(%rax), %zmm3, %zmm4
246	vorpd	0x42(%rcx), %zmm5, %zmm6
247
248	vorps	%xmm0, %xmm1, %xmm2{%k1}{z}
249	vorps	(%rax), %xmm3, %xmm4{%k1}{z}
250	vorps	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
251	vorps	%ymm0, %ymm1, %ymm2{%k1}
252	vorps	(%rbx), %ymm3, %ymm4{%k1}
253	vorps	0x42(%rdx), %ymm5, %ymm6{%k1}
254	vorps	%zmm0, %zmm1, %zmm2
255	vorps	(%rax), %zmm3, %zmm4
256	vorps	0x42(%rcx), %zmm5, %zmm6
257
258	vpord	%xmm0, %xmm1, %xmm2
259	vpord	(%rax), %xmm3, %xmm4
260	vpord	0x42(%rcx), %xmm5, %xmm6
261	vpord	%ymm0, %ymm1, %ymm2
262	vpord	(%rbx), %ymm3, %ymm4
263	vpord	0x42(%rdx), %ymm5, %ymm6
264	vpord	%zmm0, %zmm1, %zmm2
265	vpord	(%rax), %zmm3, %zmm4
266	vpord	0x42(%rcx), %zmm5, %zmm6
267
268	vporq	%xmm0, %xmm1, %xmm2
269	vporq	(%rax), %xmm3, %xmm4
270	vporq	0x42(%rcx), %xmm5, %xmm6
271	vporq	%ymm0, %ymm1, %ymm2
272	vporq	(%rbx), %ymm3, %ymm4
273	vporq	0x42(%rdx), %ymm5, %ymm6
274	vporq	%zmm0, %zmm1, %zmm2
275	vporq	(%rax), %zmm3, %zmm4
276	vporq	0x42(%rcx), %zmm5, %zmm6
277
278	vpxord	%xmm0, %xmm1, %xmm2
279	vpxord	(%rax), %xmm3, %xmm4
280	vpxord	0x42(%rcx), %xmm5, %xmm6
281	vpxord	%ymm0, %ymm1, %ymm2
282	vpxord	(%rbx), %ymm3, %ymm4
283	vpxord	0x42(%rdx), %ymm5, %ymm6
284	vpxord	%zmm0, %zmm1, %zmm2
285	vpxord	(%rax), %zmm3, %zmm4
286	vpxord	0x42(%rcx), %zmm5, %zmm6
287
288	vpxorq	%xmm0, %xmm1, %xmm2
289	vpxorq	(%rax), %xmm3, %xmm4
290	vpxorq	0x42(%rcx), %xmm5, %xmm6
291	vpxorq	%ymm0, %ymm1, %ymm2
292	vpxorq	(%rbx), %ymm3, %ymm4
293	vpxorq	0x42(%rdx), %ymm5, %ymm6
294	vpxorq	%zmm0, %zmm1, %zmm2
295	vpxorq	(%rax), %zmm3, %zmm4
296	vpxorq	0x42(%rcx), %zmm5, %zmm6
297
298	vxorpd	%xmm0, %xmm1, %xmm2{%k1}{z}
299	vxorpd	(%rax), %xmm3, %xmm4{%k1}{z}
300	vxorpd	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
301	vxorpd	%ymm0, %ymm1, %ymm2{%k1}
302	vxorpd	(%rbx), %ymm3, %ymm4{%k1}
303	vxorpd	0x42(%rdx), %ymm5, %ymm6{%k1}
304	vxorpd	%zmm0, %zmm1, %zmm2
305	vxorpd	(%rbx), %zmm3, %zmm4
306	vxorpd	0x42(%rdx), %zmm5, %zmm6
307
308	vxorps	%xmm0, %xmm1, %xmm2{%k1}{z}
309	vxorps	(%rax), %xmm3, %xmm4{%k1}{z}
310	vxorps	0x42(%rcx), %xmm5, %xmm6{%k1}{z}
311	vxorps	%ymm0, %ymm1, %ymm2{%k1}
312	vxorps	(%rbx), %ymm3, %ymm4{%k1}
313	vxorps	0x42(%rdx), %ymm5, %ymm6{%k1}
314	vxorps	%zmm0, %zmm1, %zmm2
315	vxorps	(%rbx), %zmm3, %zmm4
316	vxorps	0x42(%rdx), %zmm5, %zmm6
317
318.size libdis_test, [.-libdis_test]
319