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 test for AVX512 instructions
18 */
19
20.text
21.align 16
22.globl libdis_test
23.type libdis_test, @function
24libdis_test:
25	/* bound is not AVX512, but shares the 0x62 opcode on 32-bit. */
26	bound		%eax, (%ebx)
27
28	vmovaps		%xmm0, %xmm1
29	vmovaps		%xmm2, %xmm3
30	vmovaps		%xmm4, %xmm5
31	vmovaps		%xmm6, %xmm7
32
33	vmovaps		%ymm0, %ymm1
34	vmovaps		%ymm2, %ymm3
35	vmovaps		%ymm4, %ymm5
36	vmovaps		%ymm6, %ymm7
37
38	vmovaps		%zmm0, %zmm1
39	vmovaps		%zmm2, %zmm3
40	vmovaps		%zmm4, %zmm5
41	vmovaps		%zmm6, %zmm7
42
43	vmovaps		%zmm4, 0x8(%esp)
44	vmovaps		0x8(%esp), %zmm3
45	vmovaps		%zmm1, %zmm7{%k1}{z}
46	vmovaps		%zmm6, %zmm4{%k7}
47	vmovaps		%zmm2, %zmm3
48
49	vmovaps		%xmm7, %xmm2{%k3}{z}
50	vmovaps		%ymm1, %ymm3{%k5}
51
52	vmovapd		%zmm2, %zmm7
53
54	vmovups		%zmm7, 0x20(%ebp)
55	vmovups		0x8(%esp), %zmm7
56	vmovups		(%eax), %zmm3
57
58	vmovupd		(%esp), %zmm1{%k2}
59	vmovupd		%zmm6, (%esp)
60
61	/* Test offset handling for both disp8*N and full. */
62	vmovaps		%zmm5, (%esp)
63	vmovaps		%zmm5, 0x20(%esp)
64	vmovaps		%zmm4, 0x40(%esp)
65	vmovaps		%zmm4, 0x60(%esp)
66	vmovaps		%zmm4, 0x80(%esp)
67	vmovaps		%zmm4, -0x80(%esp)
68	vmovaps		%zmm4, -0x20(%esp)
69
70	vmovaps		(%esp), %zmm5
71	vmovaps		0x20(%esp), %zmm5
72	vmovaps		0x40(%esp), %zmm5
73	vmovaps		0x60(%esp), %zmm5
74	vmovaps		0x80(%esp), %zmm5
75	vmovaps		-0x80(%esp), %zmm5
76	vmovaps		-0x20(%esp), %zmm5
77
78	vmovdqa32	%zmm6, 0x100(%esp)
79	vmovdqa32	%ymm6, 0x100(%esp)
80	vmovdqa32	%xmm6, 0x100(%esp)
81	vmovdqa32	(%eax), %zmm6
82	vmovdqa32	(%eax), %ymm6
83	vmovdqa32	(%eax), %xmm6
84
85	vmovdqa64	%zmm6, 0x100(%esp)
86	vmovdqa64	%ymm6, 0x100(%esp)
87	vmovdqa64	%xmm6, 0x100(%esp)
88	vmovdqa64	0x800(%esp), %zmm6
89	vmovdqa64	0x800(%esp), %ymm6
90	vmovdqa64	0x800(%esp), %xmm6
91
92	vmovdqu8	%zmm0, (%esp)
93	vmovdqu16	%zmm0, (%esp)
94	vmovdqu32	%zmm0, (%esp)
95	vmovdqu64	%zmm0, (%esp)
96	vmovdqu8	(%esp), %zmm0
97	vmovdqu16	(%esp), %zmm0
98	vmovdqu32	(%esp), %zmm0
99	vmovdqu64	(%esp), %zmm0
100
101	vandnpd	%xmm0, %xmm1, %xmm2{%k1}{z}
102	vandnpd	(%eax), %xmm3, %xmm4{%k1}{z}
103	vandnpd	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
104	vandnpd	%ymm0, %ymm1, %ymm2{%k1}
105	vandnpd	(%ebx), %ymm3, %ymm4{%k1}
106	vandnpd	0x42(%edx), %ymm5, %ymm6{%k1}
107	vandnpd	%zmm0, %zmm1, %zmm2
108	vandnpd	(%ebx), %zmm3, %zmm4
109	vandnpd	0x42(%edx), %zmm5, %zmm6
110
111	vandnps	%xmm0, %xmm1, %xmm2{%k1}{z}
112	vandnps	(%eax), %xmm3, %xmm4{%k1}{z}
113	vandnps	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
114	vandnps	%ymm0, %ymm1, %ymm2{%k1}
115	vandnps	(%ebx), %ymm3, %ymm4{%k1}
116	vandnps	0x42(%edx), %ymm5, %ymm6{%k1}
117	vandnps	%zmm0, %zmm1, %zmm2
118	vandnps	(%ebx), %zmm3, %zmm4
119	vandnps	0x42(%edx), %zmm5, %zmm6
120
121	vandpd	%xmm0, %xmm1, %xmm2{%k1}{z}
122	vandpd	(%eax), %xmm3, %xmm4{%k1}{z}
123	vandpd	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
124	vandpd	%ymm0, %ymm1, %ymm2{%k1}
125	vandpd	(%ebx), %ymm3, %ymm4{%k1}
126	vandpd	0x42(%edx), %ymm5, %ymm6{%k1}
127	vandpd	%zmm0, %zmm1, %zmm2
128	vandpd	(%ebx), %zmm3, %zmm4
129	vandpd	0x42(%edx), %zmm5, %zmm6
130
131	vandps	%xmm0, %xmm1, %xmm2{%k1}{z}
132	vandps	(%eax), %xmm3, %xmm4{%k1}{z}
133	vandps	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
134	vandps	%ymm0, %ymm1, %ymm2{%k1}
135	vandps	(%ebx), %ymm3, %ymm4{%k1}
136	vandps	0x42(%edx), %ymm5, %ymm6{%k1}
137	vandps	%zmm0, %zmm1, %zmm2
138	vandps	(%ebx), %zmm3, %zmm4
139	vandps	0x42(%edx), %zmm5, %zmm6
140
141	vpandd	%xmm0, %xmm1, %xmm2
142	vpandd	(%eax), %xmm3, %xmm4
143	vpandd	0x42(%ecx), %xmm5, %xmm6
144	vpandd	%ymm0, %ymm1, %ymm2
145	vpandd	(%ebx), %ymm3, %ymm4
146	vpandd	0x42(%edx), %ymm5, %ymm6
147	vpandd	%zmm0, %zmm1, %zmm2
148	vpandd	(%ebx), %zmm3, %zmm4
149	vpandd	0x42(%edx), %zmm5, %zmm6
150
151	vpandq	%xmm0, %xmm1, %xmm2
152	vpandq	(%eax), %xmm3, %xmm4
153	vpandq	0x42(%ecx), %xmm5, %xmm6
154	vpandq	%ymm0, %ymm1, %ymm2
155	vpandq	(%ebx), %ymm3, %ymm4
156	vpandq	0x42(%edx), %ymm5, %ymm6
157	vpandq	%zmm0, %zmm1, %zmm2
158	vpandq	(%ebx), %zmm3, %zmm4
159	vpandq	0x42(%edx), %zmm5, %zmm6
160
161	vpandnd	%xmm0, %xmm1, %xmm2
162	vpandnd	(%eax), %xmm3, %xmm4
163	vpandnd	0x42(%ecx), %xmm5, %xmm6
164	vpandnd	%ymm0, %ymm1, %ymm2
165	vpandnd	(%ebx), %ymm3, %ymm4
166	vpandnd	0x42(%edx), %ymm5, %ymm6
167	vpandnd	%zmm0, %zmm1, %zmm2
168	vpandnd	(%ebx), %zmm3, %zmm4
169	vpandnd	0x42(%edx), %zmm5, %zmm6
170
171	vpandnq	%xmm0, %xmm1, %xmm2
172	vpandnq	(%eax), %xmm3, %xmm4
173	vpandnq	0x42(%ecx), %xmm5, %xmm6
174	vpandnq	%ymm0, %ymm1, %ymm2
175	vpandnq	(%ebx), %ymm3, %ymm4
176	vpandnq	0x42(%edx), %ymm5, %ymm6
177	vpandnq	%zmm0, %zmm1, %zmm2
178	vpandnq	(%ebx), %zmm3, %zmm4
179	vpandnq	0x42(%edx), %zmm5, %zmm6
180
181	vorpd	%xmm0, %xmm1, %xmm2{%k1}{z}
182	vorpd	(%eax), %xmm3, %xmm4{%k1}{z}
183	vorpd	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
184	vorpd	%ymm0, %ymm1, %ymm2{%k1}
185	vorpd	(%ebx), %ymm3, %ymm4{%k1}
186	vorpd	0x42(%edx), %ymm5, %ymm6{%k1}
187	vorpd	%zmm0, %zmm1, %zmm2
188	vorpd	(%eax), %zmm3, %zmm4
189	vorpd	0x42(%ecx), %zmm5, %zmm6
190
191	vorps	%xmm0, %xmm1, %xmm2{%k1}{z}
192	vorps	(%eax), %xmm3, %xmm4{%k1}{z}
193	vorps	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
194	vorps	%ymm0, %ymm1, %ymm2{%k1}
195	vorps	(%ebx), %ymm3, %ymm4{%k1}
196	vorps	0x42(%edx), %ymm5, %ymm6{%k1}
197	vorps	%zmm0, %zmm1, %zmm2
198	vorps	(%eax), %zmm3, %zmm4
199	vorps	0x42(%ecx), %zmm5, %zmm6
200
201	vpord	%xmm0, %xmm1, %xmm2
202	vpord	(%eax), %xmm3, %xmm4
203	vpord	0x42(%ecx), %xmm5, %xmm6
204	vpord	%ymm0, %ymm1, %ymm2
205	vpord	(%ebx), %ymm3, %ymm4
206	vpord	0x42(%edx), %ymm5, %ymm6
207	vpord	%zmm0, %zmm1, %zmm2
208	vpord	(%eax), %zmm3, %zmm4
209	vpord	0x42(%ecx), %zmm5, %zmm6
210
211	vporq	%xmm0, %xmm1, %xmm2
212	vporq	(%eax), %xmm3, %xmm4
213	vporq	0x42(%ecx), %xmm5, %xmm6
214	vporq	%ymm0, %ymm1, %ymm2
215	vporq	(%ebx), %ymm3, %ymm4
216	vporq	0x42(%edx), %ymm5, %ymm6
217	vporq	%zmm0, %zmm1, %zmm2
218	vporq	(%eax), %zmm3, %zmm4
219	vporq	0x42(%ecx), %zmm5, %zmm6
220
221	vpxord	%xmm0, %xmm1, %xmm2
222	vpxord	(%eax), %xmm3, %xmm4
223	vpxord	0x42(%ecx), %xmm5, %xmm6
224	vpxord	%ymm0, %ymm1, %ymm2
225	vpxord	(%ebx), %ymm3, %ymm4
226	vpxord	0x42(%edx), %ymm5, %ymm6
227	vpxord	%zmm0, %zmm1, %zmm2
228	vpxord	(%eax), %zmm3, %zmm4
229	vpxord	0x42(%ecx), %zmm5, %zmm6
230
231	vpxorq	%xmm0, %xmm1, %xmm2
232	vpxorq	(%eax), %xmm3, %xmm4
233	vpxorq	0x42(%ecx), %xmm5, %xmm6
234	vpxorq	%ymm0, %ymm1, %ymm2
235	vpxorq	(%ebx), %ymm3, %ymm4
236	vpxorq	0x42(%edx), %ymm5, %ymm6
237	vpxorq	%zmm0, %zmm1, %zmm2
238	vpxorq	(%eax), %zmm3, %zmm4
239	vpxorq	0x42(%ecx), %zmm5, %zmm6
240
241	vxorpd	%xmm0, %xmm1, %xmm2{%k1}{z}
242	vxorpd	(%eax), %xmm3, %xmm4{%k1}{z}
243	vxorpd	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
244	vxorpd	%ymm0, %ymm1, %ymm2{%k1}
245	vxorpd	(%ebx), %ymm3, %ymm4{%k1}
246	vxorpd	0x42(%edx), %ymm5, %ymm6{%k1}
247	vxorpd	%zmm0, %zmm1, %zmm2
248	vxorpd	(%ebx), %zmm3, %zmm4
249	vxorpd	0x42(%edx), %zmm5, %zmm6
250
251	vxorps	%xmm0, %xmm1, %xmm2{%k1}{z}
252	vxorps	(%eax), %xmm3, %xmm4{%k1}{z}
253	vxorps	0x42(%ecx), %xmm5, %xmm6{%k1}{z}
254	vxorps	%ymm0, %ymm1, %ymm2{%k1}
255	vxorps	(%ebx), %ymm3, %ymm4{%k1}
256	vxorps	0x42(%edx), %ymm5, %ymm6{%k1}
257	vxorps	%zmm0, %zmm1, %zmm2
258	vxorps	(%ebx), %zmm3, %zmm4
259	vxorps	0x42(%edx), %zmm5, %zmm6
260.size libdis_test, [.-libdis_test]
261