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 2024 Oxide Computer Company
14 */
15
16/*
17 * AVX-512 CD (Conflict Detection) instructions
18 */
19
20.text
21.align 16
22.globl libdis_test
23.type libdis_test, @function
24libdis_test:
25	vpconflictd	%xmm0, %xmm1
26	vpconflictd	%xmm2, %xmm3{%k1}
27	vpconflictd	%xmm4, %xmm5{%k2}{z}
28	vpconflictd	(%eax), %xmm6
29	vpconflictd	0x167(%eax), %xmm6{%k3}
30	vpconflictd	-0x23(%eax,%ebx,4), %xmm7{%k4}
31	vpconflictd	(%ecx){1to4}, %xmm5
32	vpconflictd	0x10(%edx){1to4}, %xmm3{%k5}
33	vpconflictd	0x88(%ecx){1to4}, %xmm3{%k5}{z}
34
35	vpconflictd	%ymm0, %ymm1
36	vpconflictd	%ymm2, %ymm3{%k1}
37	vpconflictd	%ymm4, %ymm5{%k2}{z}
38	vpconflictd	(%eax), %ymm6
39	vpconflictd	0x167(%eax), %ymm6{%k3}
40	vpconflictd	-0x23(%eax,%ebx,4), %ymm7{%k4}
41	vpconflictd	(%ecx){1to8}, %ymm5
42	vpconflictd	0x10(%edx){1to8}, %ymm3{%k5}
43	vpconflictd	0x88(%ecx){1to8}, %ymm3{%k5}{z}
44
45	vpconflictd	%zmm0, %zmm1
46	vpconflictd	%zmm2, %zmm3{%k1}
47	vpconflictd	%zmm4, %zmm5{%k2}{z}
48	vpconflictd	(%eax), %zmm6
49	vpconflictd	0x167(%eax), %zmm6{%k3}
50	vpconflictd	-0x23(%eax,%ebx,4), %zmm7{%k4}
51	vpconflictd	(%ecx){1to16}, %zmm5
52	vpconflictd	0x10(%edx){1to16}, %zmm3{%k5}
53	vpconflictd	0x88(%ecx){1to16}, %zmm3{%k5}{z}
54
55	vpconflictq	%xmm0, %xmm1
56	vpconflictq	%xmm2, %xmm3{%k1}
57	vpconflictq	%xmm4, %xmm5{%k2}{z}
58	vpconflictq	(%eax), %xmm6
59	vpconflictq	0x167(%eax), %xmm6{%k3}
60	vpconflictq	-0x23(%eax,%ebx,4), %xmm7{%k4}
61	vpconflictq	(%ecx){1to2}, %xmm5
62	vpconflictq	0x10(%edx){1to2}, %xmm3{%k5}
63	vpconflictq	0x88(%ecx){1to2}, %xmm3{%k5}{z}
64
65	vpconflictq	%ymm0, %ymm1
66	vpconflictq	%ymm2, %ymm3{%k1}
67	vpconflictq	%ymm4, %ymm5{%k2}{z}
68	vpconflictq	(%eax), %ymm6
69	vpconflictq	0x167(%eax), %ymm6{%k3}
70	vpconflictq	-0x23(%eax,%ebx,4), %ymm7{%k4}
71	vpconflictq	(%ecx){1to4}, %ymm5
72	vpconflictq	0x10(%edx){1to4}, %ymm3{%k5}
73	vpconflictq	0x88(%ecx){1to4}, %ymm3{%k5}{z}
74
75	vpconflictq	%zmm0, %zmm1
76	vpconflictq	%zmm2, %zmm3{%k1}
77	vpconflictq	%zmm4, %zmm5{%k2}{z}
78	vpconflictq	(%eax), %zmm6
79	vpconflictq	0x167(%eax), %zmm6{%k3}
80	vpconflictq	-0x23(%eax,%ebx,4), %zmm7{%k4}
81	vpconflictq	(%ecx){1to8}, %zmm5
82	vpconflictq	0x10(%edx){1to8}, %zmm3{%k5}
83	vpconflictq	0x88(%ecx){1to8}, %zmm3{%k5}{z}
84
85	vplzcntd	%xmm0, %xmm1
86	vplzcntd	%xmm2, %xmm3{%k1}
87	vplzcntd	%xmm4, %xmm5{%k2}{z}
88	vplzcntd	(%eax), %xmm6
89	vplzcntd	0x167(%eax), %xmm6{%k3}
90	vplzcntd	-0x23(%eax,%ebx,4), %xmm7{%k4}
91	vplzcntd	(%ecx){1to4}, %xmm5
92	vplzcntd	0x10(%edx){1to4}, %xmm3{%k5}
93	vplzcntd	0x88(%ecx){1to4}, %xmm3{%k5}{z}
94
95	vplzcntd	%ymm0, %ymm1
96	vplzcntd	%ymm2, %ymm3{%k1}
97	vplzcntd	%ymm4, %ymm5{%k2}{z}
98	vplzcntd	(%eax), %ymm6
99	vplzcntd	0x167(%eax), %ymm6{%k3}
100	vplzcntd	-0x23(%eax,%ebx,4), %ymm7{%k4}
101	vplzcntd	(%ecx){1to8}, %ymm5
102	vplzcntd	0x10(%edx){1to8}, %ymm3{%k5}
103	vplzcntd	0x88(%ecx){1to8}, %ymm3{%k5}{z}
104
105	vplzcntd	%zmm0, %zmm1
106	vplzcntd	%zmm2, %zmm3{%k1}
107	vplzcntd	%zmm4, %zmm5{%k2}{z}
108	vplzcntd	(%eax), %zmm6
109	vplzcntd	0x167(%eax), %zmm6{%k3}
110	vplzcntd	-0x23(%eax,%ebx,4), %zmm7{%k4}
111	vplzcntd	(%ecx){1to16}, %zmm5
112	vplzcntd	0x10(%edx){1to16}, %zmm3{%k5}
113	vplzcntd	0x88(%ecx){1to16}, %zmm3{%k5}{z}
114
115	vplzcntq	%xmm0, %xmm1
116	vplzcntq	%xmm2, %xmm3{%k1}
117	vplzcntq	%xmm4, %xmm5{%k2}{z}
118	vplzcntq	(%eax), %xmm6
119	vplzcntq	0x167(%eax), %xmm6{%k3}
120	vplzcntq	-0x23(%eax,%ebx,4), %xmm7{%k4}
121	vplzcntq	(%ecx){1to2}, %xmm5
122	vplzcntq	0x10(%edx){1to2}, %xmm3{%k5}
123	vplzcntq	0x88(%ecx){1to2}, %xmm3{%k5}{z}
124
125	vplzcntq	%ymm0, %ymm1
126	vplzcntq	%ymm2, %ymm3{%k1}
127	vplzcntq	%ymm4, %ymm5{%k2}{z}
128	vplzcntq	(%eax), %ymm6
129	vplzcntq	0x167(%eax), %ymm6{%k3}
130	vplzcntq	-0x23(%eax,%ebx,4), %ymm7{%k4}
131	vplzcntq	(%ecx){1to4}, %ymm5
132	vplzcntq	0x10(%edx){1to4}, %ymm3{%k5}
133	vplzcntq	0x88(%ecx){1to4}, %ymm3{%k5}{z}
134
135	vplzcntq	%zmm0, %zmm1
136	vplzcntq	%zmm2, %zmm3{%k1}
137	vplzcntq	%zmm4, %zmm5{%k2}{z}
138	vplzcntq	(%eax), %zmm6
139	vplzcntq	0x167(%eax), %zmm6{%k3}
140	vplzcntq	-0x23(%eax,%ebx,4), %zmm7{%k4}
141	vplzcntq	(%ecx){1to8}, %zmm5
142	vplzcntq	0x10(%edx){1to8}, %zmm3{%k5}
143	vplzcntq	0x88(%ecx){1to8}, %zmm3{%k5}{z}
144
145	vpbroadcastmb2q	%k1, %xmm1
146	vpbroadcastmb2q	%k2, %xmm4
147	vpbroadcastmb2q	%k3, %ymm2
148	vpbroadcastmb2q	%k4, %ymm5
149	vpbroadcastmb2q	%k5, %zmm3
150	vpbroadcastmb2q	%k6, %zmm6
151
152	vpbroadcastmw2d	%k1, %xmm1
153	vpbroadcastmw2d	%k2, %xmm4
154	vpbroadcastmw2d	%k3, %ymm2
155	vpbroadcastmw2d	%k4, %ymm5
156	vpbroadcastmw2d	%k5, %zmm3
157	vpbroadcastmw2d	%k6, %zmm6
158.size libdis_test, [.-libdis_test]
159