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 * 32-bit AVX-512 VNNI instruction disassembly.
18 *
19 * The support for VNNI instructions in gas is not present in the commonly used
20 * versions of gas in illumos (it's not present in 2.26.1 or older). Support is
21 * present in at least 2.30 (though maybe earlier). Rather than have the test
22 * suite force a version upgrade, we instead encode each instruction as the
23 * corresponding series of .byte expressions. Each .byte line follows a group of
24 * commented out assembly instructions and has a one to one mapping between
25 * them.
26 */
27
28.text
29.align 16
30.globl libdis_test
31.type libdis_test, @function
32libdis_test:
33	/*
34	 * vpdpbusd	%xmm0, %xmm1, %xmm2
35	 * vpdpbusd	%ymm3, %ymm4, %ymm5
36	 * vpdpbusd	%zmm6, %zmm7, %zmm0
37	 * vpdpbusd	%xmm1, %xmm2, %xmm3{%k1}
38	 * vpdpbusd	%xmm4, %xmm5, %xmm6{%k2}{z}
39	 * vpdpbusd	%ymm7, %ymm0, %ymm1{%k3}
40	 * vpdpbusd	%ymm2, %ymm3, %ymm4{%k4}{z}
41	 * vpdpbusd	%zmm5, %zmm6, %zmm7{%k5}
42	 * vpdpbusd	%zmm0, %zmm1, %zmm2{%k6}{z}
43	 * vpdpbusd	0x64(%eax), %zmm3, %zmm4
44	 * vpdpbusd	0x123456(%ebx, %ecx, 8), %zmm5, %zmm6
45	 */
46
47	.byte	0x62, 0xf2, 0x75, 0x08, 0x50, 0xd0
48	.byte	0x62, 0xf2, 0x5d, 0x28, 0x50, 0xeb
49	.byte	0x62, 0xf2, 0x45, 0x48, 0x50, 0xc6
50	.byte	0x62, 0xf2, 0x6d, 0x09, 0x50, 0xd9
51	.byte	0x62, 0xf2, 0x55, 0x8a, 0x50, 0xf4
52	.byte	0x62, 0xf2, 0x7d, 0x2b, 0x50, 0xcf
53	.byte	0x62, 0xf2, 0x65, 0xac, 0x50, 0xe2
54	.byte	0x62, 0xf2, 0x4d, 0x4d, 0x50, 0xfd
55	.byte	0x62, 0xf2, 0x75, 0xce, 0x50, 0xd0
56	.byte	0x62, 0xf2, 0x65, 0x48, 0x50, 0xa0, 0x64, 0x00, 0x00, 0x00
57	.byte	0x62, 0xf2, 0x55, 0x48, 0x50, 0xb4, 0xcb, 0x56, 0x34, 0x12, 0x00
58
59
60	/*
61	 * vpdpbusds	%xmm0, %xmm1, %xmm2
62	 * vpdpbusds	%ymm3, %ymm4, %ymm5
63	 * vpdpbusds	%zmm6, %zmm7, %zmm0
64	 * vpdpbusds	%xmm1, %xmm2, %xmm3{%k1}
65	 * vpdpbusds	%xmm4, %xmm5, %xmm6{%k2}{z}
66	 * vpdpbusds	%ymm7, %ymm0, %ymm1{%k3}
67	 * vpdpbusds	%ymm2, %ymm3, %ymm4{%k4}{z}
68	 * vpdpbusds	%zmm5, %zmm6, %zmm7{%k5}
69	 * vpdpbusds	%zmm0, %zmm1, %zmm2{%k6}{z}
70	 * vpdpbusds	0x64(%eax), %zmm3, %zmm4
71	 * vpdpbusds	0x123456(%ebx, %ecx, 8), %zmm5, %zmm6
72	 */
73
74	.byte	0x62, 0xf2, 0x75, 0x08, 0x51, 0xd0
75	.byte	0x62, 0xf2, 0x5d, 0x28, 0x51, 0xeb
76	.byte	0x62, 0xf2, 0x45, 0x48, 0x51, 0xc6
77	.byte	0x62, 0xf2, 0x6d, 0x09, 0x51, 0xd9
78	.byte	0x62, 0xf2, 0x55, 0x8a, 0x51, 0xf4
79	.byte	0x62, 0xf2, 0x7d, 0x2b, 0x51, 0xcf
80	.byte	0x62, 0xf2, 0x65, 0xac, 0x51, 0xe2
81	.byte	0x62, 0xf2, 0x4d, 0x4d, 0x51, 0xfd
82	.byte	0x62, 0xf2, 0x75, 0xce, 0x51, 0xd0
83	.byte	0x62, 0xf2, 0x65, 0x48, 0x51, 0xa0, 0x64, 0x00, 0x00, 0x00
84	.byte	0x62, 0xf2, 0x55, 0x48, 0x51, 0xb4, 0xcb, 0x56, 0x34, 0x12, 0x00
85
86	/*
87	 * vpdpwssd	%xmm0, %xmm1, %xmm2
88	 * vpdpwssd	%ymm3, %ymm4, %ymm5
89	 * vpdpwssd	%zmm6, %zmm7, %zmm0
90	 * vpdpwssd	%xmm1, %xmm2, %xmm3{%k1}
91	 * vpdpwssd	%xmm4, %xmm5, %xmm6{%k2}{z}
92	 * vpdpwssd	%ymm7, %ymm0, %ymm1{%k3}
93	 * vpdpwssd	%ymm2, %ymm3, %ymm4{%k4}{z}
94	 * vpdpwssd	%zmm5, %zmm6, %zmm7{%k5}
95	 * vpdpwssd	%zmm0, %zmm1, %zmm2{%k6}{z}
96	 * vpdpwssd	0x64(%eax), %zmm3, %zmm4
97	 * vpdpwssd	0x123456(%ebx, %ecx, 8), %zmm5, %zmm6
98	 */
99
100	.byte	0x62, 0xf2, 0x75, 0x08, 0x52, 0xd0
101	.byte	0x62, 0xf2, 0x5d, 0x28, 0x52, 0xeb
102	.byte	0x62, 0xf2, 0x45, 0x48, 0x52, 0xc6
103	.byte	0x62, 0xf2, 0x6d, 0x09, 0x52, 0xd9
104	.byte	0x62, 0xf2, 0x55, 0x8a, 0x52, 0xf4
105	.byte	0x62, 0xf2, 0x7d, 0x2b, 0x52, 0xcf
106	.byte	0x62, 0xf2, 0x65, 0xac, 0x52, 0xe2
107	.byte	0x62, 0xf2, 0x4d, 0x4d, 0x52, 0xfd
108	.byte	0x62, 0xf2, 0x75, 0xce, 0x52, 0xd0
109	.byte	0x62, 0xf2, 0x65, 0x48, 0x52, 0xa0, 0x64, 0x00, 0x00, 0x00
110	.byte	0x62, 0xf2, 0x55, 0x48, 0x52, 0xb4, 0xcb, 0x56, 0x34, 0x12, 0x00
111
112	/*
113	 * vpdpwssds	%xmm0, %xmm1, %xmm2
114	 * vpdpwssds	%ymm3, %ymm4, %ymm5
115	 * vpdpwssds	%zmm6, %zmm7, %zmm0
116	 * vpdpwssds	%xmm1, %xmm2, %xmm3{%k1}
117	 * vpdpwssds	%xmm4, %xmm5, %xmm6{%k2}{z}
118	 * vpdpwssds	%ymm7, %ymm0, %ymm1{%k3}
119	 * vpdpwssds	%ymm2, %ymm3, %ymm4{%k4}{z}
120	 * vpdpwssds	%zmm5, %zmm6, %zmm7{%k5}
121	 * vpdpwssds	%zmm0, %zmm1, %zmm2{%k6}{z}
122	 * vpdpwssds	0x64(%eax), %zmm3, %zmm4
123	 * vpdpwssds	0x123456(%ebx, %ecx, 8), %zmm5, %zmm6
124	 */
125
126	.byte	0x62, 0xf2, 0x75, 0x08, 0x53, 0xd0
127	.byte	0x62, 0xf2, 0x5d, 0x28, 0x53, 0xeb
128	.byte	0x62, 0xf2, 0x45, 0x48, 0x53, 0xc6
129	.byte	0x62, 0xf2, 0x6d, 0x09, 0x53, 0xd9
130	.byte	0x62, 0xf2, 0x55, 0x8a, 0x53, 0xf4
131	.byte	0x62, 0xf2, 0x7d, 0x2b, 0x53, 0xcf
132	.byte	0x62, 0xf2, 0x65, 0xac, 0x53, 0xe2
133	.byte	0x62, 0xf2, 0x4d, 0x4d, 0x53, 0xfd
134	.byte	0x62, 0xf2, 0x75, 0xce, 0x53, 0xd0
135	.byte	0x62, 0xf2, 0x65, 0x48, 0x53, 0xa0, 0x64, 0x00, 0x00, 0x00
136	.byte	0x62, 0xf2, 0x55, 0x48, 0x53, 0xb4, 0xcb, 0x56, 0x34, 0x12, 0x00
137.size libdis_test, [.-libdis_test]
138