xref: /freebsd/sys/contrib/openzfs/config/toolchain-simd.m4 (revision eda14cbc264d6969b02f2b1994cef11148e914f1)
1*eda14cbcSMatt Macydnl #
2*eda14cbcSMatt Macydnl # Checks if host toolchain supports SIMD instructions
3*eda14cbcSMatt Macydnl #
4*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [
5*eda14cbcSMatt Macy	case "$host_cpu" in
6*eda14cbcSMatt Macy		amd64 | x86_64 | x86 | i686)
7*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
8*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
9*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
10*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3
11*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1
12*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
13*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
14*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
15*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
16*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
17*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
18*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
19*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
20*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
21*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
22*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
23*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
24*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
25*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
26*eda14cbcSMatt Macy			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE
27*eda14cbcSMatt Macy			;;
28*eda14cbcSMatt Macy	esac
29*eda14cbcSMatt Macy])
30*eda14cbcSMatt Macy
31*eda14cbcSMatt Macydnl #
32*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE
33*eda14cbcSMatt Macydnl #
34*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE], [
35*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports SSE])
36*eda14cbcSMatt Macy
37*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([[
38*eda14cbcSMatt Macy		void main()
39*eda14cbcSMatt Macy		{
40*eda14cbcSMatt Macy			__asm__ __volatile__("xorps %xmm0, %xmm1");
41*eda14cbcSMatt Macy		}
42*eda14cbcSMatt Macy	]])], [
43*eda14cbcSMatt Macy		AC_DEFINE([HAVE_SSE], 1, [Define if host toolchain supports SSE])
44*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
45*eda14cbcSMatt Macy	], [
46*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
47*eda14cbcSMatt Macy	])
48*eda14cbcSMatt Macy])
49*eda14cbcSMatt Macy
50*eda14cbcSMatt Macydnl #
51*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2
52*eda14cbcSMatt Macydnl #
53*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2], [
54*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports SSE2])
55*eda14cbcSMatt Macy
56*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([[
57*eda14cbcSMatt Macy		void main()
58*eda14cbcSMatt Macy		{
59*eda14cbcSMatt Macy			__asm__ __volatile__("pxor %xmm0, %xmm1");
60*eda14cbcSMatt Macy		}
61*eda14cbcSMatt Macy	]])], [
62*eda14cbcSMatt Macy		AC_DEFINE([HAVE_SSE2], 1, [Define if host toolchain supports SSE2])
63*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
64*eda14cbcSMatt Macy	], [
65*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
66*eda14cbcSMatt Macy	])
67*eda14cbcSMatt Macy])
68*eda14cbcSMatt Macy
69*eda14cbcSMatt Macydnl #
70*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3
71*eda14cbcSMatt Macydnl #
72*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3], [
73*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports SSE3])
74*eda14cbcSMatt Macy
75*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([[
76*eda14cbcSMatt Macy		void main()
77*eda14cbcSMatt Macy		{
78*eda14cbcSMatt Macy			char v[16];
79*eda14cbcSMatt Macy			__asm__ __volatile__("lddqu %0,%%xmm0" :: "m"(v[0]));
80*eda14cbcSMatt Macy		}
81*eda14cbcSMatt Macy	]])], [
82*eda14cbcSMatt Macy		AC_DEFINE([HAVE_SSE3], 1, [Define if host toolchain supports SSE3])
83*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
84*eda14cbcSMatt Macy	], [
85*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
86*eda14cbcSMatt Macy	])
87*eda14cbcSMatt Macy])
88*eda14cbcSMatt Macy
89*eda14cbcSMatt Macydnl #
90*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3
91*eda14cbcSMatt Macydnl #
92*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3], [
93*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports SSSE3])
94*eda14cbcSMatt Macy
95*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([[
96*eda14cbcSMatt Macy		void main()
97*eda14cbcSMatt Macy		{
98*eda14cbcSMatt Macy			__asm__ __volatile__("pshufb %xmm0,%xmm1");
99*eda14cbcSMatt Macy		}
100*eda14cbcSMatt Macy	]])], [
101*eda14cbcSMatt Macy		AC_DEFINE([HAVE_SSSE3], 1, [Define if host toolchain supports SSSE3])
102*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
103*eda14cbcSMatt Macy	], [
104*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
105*eda14cbcSMatt Macy	])
106*eda14cbcSMatt Macy])
107*eda14cbcSMatt Macy
108*eda14cbcSMatt Macydnl #
109*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1
110*eda14cbcSMatt Macydnl #
111*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1], [
112*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports SSE4.1])
113*eda14cbcSMatt Macy
114*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([[
115*eda14cbcSMatt Macy		void main()
116*eda14cbcSMatt Macy		{
117*eda14cbcSMatt Macy			__asm__ __volatile__("pmaxsb %xmm0,%xmm1");
118*eda14cbcSMatt Macy		}
119*eda14cbcSMatt Macy	]])], [
120*eda14cbcSMatt Macy		AC_DEFINE([HAVE_SSE4_1], 1, [Define if host toolchain supports SSE4.1])
121*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
122*eda14cbcSMatt Macy	], [
123*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
124*eda14cbcSMatt Macy	])
125*eda14cbcSMatt Macy])
126*eda14cbcSMatt Macy
127*eda14cbcSMatt Macydnl #
128*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2
129*eda14cbcSMatt Macydnl #
130*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2], [
131*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports SSE4.2])
132*eda14cbcSMatt Macy
133*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([[
134*eda14cbcSMatt Macy		void main()
135*eda14cbcSMatt Macy		{
136*eda14cbcSMatt Macy			__asm__ __volatile__("pcmpgtq %xmm0, %xmm1");
137*eda14cbcSMatt Macy		}
138*eda14cbcSMatt Macy	]])], [
139*eda14cbcSMatt Macy		AC_DEFINE([HAVE_SSE4_2], 1, [Define if host toolchain supports SSE4.2])
140*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
141*eda14cbcSMatt Macy	], [
142*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
143*eda14cbcSMatt Macy	])
144*eda14cbcSMatt Macy])
145*eda14cbcSMatt Macy
146*eda14cbcSMatt Macydnl #
147*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX
148*eda14cbcSMatt Macydnl #
149*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX], [
150*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX])
151*eda14cbcSMatt Macy
152*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([[
153*eda14cbcSMatt Macy		void main()
154*eda14cbcSMatt Macy		{
155*eda14cbcSMatt Macy			char v[32];
156*eda14cbcSMatt Macy			__asm__ __volatile__("vmovdqa %0,%%ymm0" :: "m"(v[0]));
157*eda14cbcSMatt Macy		}
158*eda14cbcSMatt Macy	]])], [
159*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
160*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX], 1, [Define if host toolchain supports AVX])
161*eda14cbcSMatt Macy	], [
162*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
163*eda14cbcSMatt Macy	])
164*eda14cbcSMatt Macy])
165*eda14cbcSMatt Macy
166*eda14cbcSMatt Macydnl #
167*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2
168*eda14cbcSMatt Macydnl #
169*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2], [
170*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX2])
171*eda14cbcSMatt Macy
172*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
173*eda14cbcSMatt Macy	[
174*eda14cbcSMatt Macy		void main()
175*eda14cbcSMatt Macy		{
176*eda14cbcSMatt Macy			__asm__ __volatile__("vpshufb %ymm0,%ymm1,%ymm2");
177*eda14cbcSMatt Macy		}
178*eda14cbcSMatt Macy	]])], [
179*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
180*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX2], 1, [Define if host toolchain supports AVX2])
181*eda14cbcSMatt Macy	], [
182*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
183*eda14cbcSMatt Macy	])
184*eda14cbcSMatt Macy])
185*eda14cbcSMatt Macy
186*eda14cbcSMatt Macydnl #
187*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F
188*eda14cbcSMatt Macydnl #
189*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F], [
190*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512F])
191*eda14cbcSMatt Macy
192*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
193*eda14cbcSMatt Macy	[
194*eda14cbcSMatt Macy		void main()
195*eda14cbcSMatt Macy		{
196*eda14cbcSMatt Macy			__asm__ __volatile__("vpandd %zmm0,%zmm1,%zmm2");
197*eda14cbcSMatt Macy		}
198*eda14cbcSMatt Macy	]])], [
199*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
200*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512F], 1, [Define if host toolchain supports AVX512F])
201*eda14cbcSMatt Macy	], [
202*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
203*eda14cbcSMatt Macy	])
204*eda14cbcSMatt Macy])
205*eda14cbcSMatt Macy
206*eda14cbcSMatt Macydnl #
207*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD
208*eda14cbcSMatt Macydnl #
209*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD], [
210*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512CD])
211*eda14cbcSMatt Macy
212*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
213*eda14cbcSMatt Macy	[
214*eda14cbcSMatt Macy		void main()
215*eda14cbcSMatt Macy		{
216*eda14cbcSMatt Macy			__asm__ __volatile__("vplzcntd %zmm0,%zmm1");
217*eda14cbcSMatt Macy		}
218*eda14cbcSMatt Macy	]])], [
219*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
220*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512CD], 1, [Define if host toolchain supports AVX512CD])
221*eda14cbcSMatt Macy	], [
222*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
223*eda14cbcSMatt Macy	])
224*eda14cbcSMatt Macy])
225*eda14cbcSMatt Macy
226*eda14cbcSMatt Macydnl #
227*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ
228*eda14cbcSMatt Macydnl #
229*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ], [
230*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512DQ])
231*eda14cbcSMatt Macy
232*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
233*eda14cbcSMatt Macy	[
234*eda14cbcSMatt Macy		void main()
235*eda14cbcSMatt Macy		{
236*eda14cbcSMatt Macy			__asm__ __volatile__("vandpd %zmm0,%zmm1,%zmm2");
237*eda14cbcSMatt Macy		}
238*eda14cbcSMatt Macy	]])], [
239*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
240*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512DQ], 1, [Define if host toolchain supports AVX512DQ])
241*eda14cbcSMatt Macy	], [
242*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
243*eda14cbcSMatt Macy	])
244*eda14cbcSMatt Macy])
245*eda14cbcSMatt Macy
246*eda14cbcSMatt Macydnl #
247*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW
248*eda14cbcSMatt Macydnl #
249*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW], [
250*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512BW])
251*eda14cbcSMatt Macy
252*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
253*eda14cbcSMatt Macy	[
254*eda14cbcSMatt Macy		void main()
255*eda14cbcSMatt Macy		{
256*eda14cbcSMatt Macy			__asm__ __volatile__("vpshufb %zmm0,%zmm1,%zmm2");
257*eda14cbcSMatt Macy		}
258*eda14cbcSMatt Macy	]])], [
259*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
260*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512BW], 1, [Define if host toolchain supports AVX512BW])
261*eda14cbcSMatt Macy	], [
262*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
263*eda14cbcSMatt Macy	])
264*eda14cbcSMatt Macy])
265*eda14cbcSMatt Macy
266*eda14cbcSMatt Macydnl #
267*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA
268*eda14cbcSMatt Macydnl #
269*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA], [
270*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512IFMA])
271*eda14cbcSMatt Macy
272*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
273*eda14cbcSMatt Macy	[
274*eda14cbcSMatt Macy		void main()
275*eda14cbcSMatt Macy		{
276*eda14cbcSMatt Macy			__asm__ __volatile__("vpmadd52luq %zmm0,%zmm1,%zmm2");
277*eda14cbcSMatt Macy		}
278*eda14cbcSMatt Macy	]])], [
279*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
280*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512IFMA], 1, [Define if host toolchain supports AVX512IFMA])
281*eda14cbcSMatt Macy	], [
282*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
283*eda14cbcSMatt Macy	])
284*eda14cbcSMatt Macy])
285*eda14cbcSMatt Macy
286*eda14cbcSMatt Macydnl #
287*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI
288*eda14cbcSMatt Macydnl #
289*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI], [
290*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512VBMI])
291*eda14cbcSMatt Macy
292*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
293*eda14cbcSMatt Macy	[
294*eda14cbcSMatt Macy		void main()
295*eda14cbcSMatt Macy		{
296*eda14cbcSMatt Macy			__asm__ __volatile__("vpermb %zmm0,%zmm1,%zmm2");
297*eda14cbcSMatt Macy		}
298*eda14cbcSMatt Macy	]])], [
299*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
300*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512VBMI], 1, [Define if host toolchain supports AVX512VBMI])
301*eda14cbcSMatt Macy	], [
302*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
303*eda14cbcSMatt Macy	])
304*eda14cbcSMatt Macy])
305*eda14cbcSMatt Macy
306*eda14cbcSMatt Macydnl #
307*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF
308*eda14cbcSMatt Macydnl #
309*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF], [
310*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512PF])
311*eda14cbcSMatt Macy
312*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
313*eda14cbcSMatt Macy	[
314*eda14cbcSMatt Macy		void main()
315*eda14cbcSMatt Macy		{
316*eda14cbcSMatt Macy			__asm__ __volatile__("vgatherpf0dps (%rsi,%zmm0,4){%k1}");
317*eda14cbcSMatt Macy		}
318*eda14cbcSMatt Macy	]])], [
319*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
320*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512PF], 1, [Define if host toolchain supports AVX512PF])
321*eda14cbcSMatt Macy	], [
322*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
323*eda14cbcSMatt Macy	])
324*eda14cbcSMatt Macy])
325*eda14cbcSMatt Macy
326*eda14cbcSMatt Macydnl #
327*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER
328*eda14cbcSMatt Macydnl #
329*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER], [
330*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512ER])
331*eda14cbcSMatt Macy
332*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
333*eda14cbcSMatt Macy	[
334*eda14cbcSMatt Macy		void main()
335*eda14cbcSMatt Macy		{
336*eda14cbcSMatt Macy			__asm__ __volatile__("vexp2pd %zmm0,%zmm1");
337*eda14cbcSMatt Macy		}
338*eda14cbcSMatt Macy	]])], [
339*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
340*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512ER], 1, [Define if host toolchain supports AVX512ER])
341*eda14cbcSMatt Macy	], [
342*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
343*eda14cbcSMatt Macy	])
344*eda14cbcSMatt Macy])
345*eda14cbcSMatt Macy
346*eda14cbcSMatt Macydnl #
347*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL
348*eda14cbcSMatt Macydnl #
349*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL], [
350*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AVX512VL])
351*eda14cbcSMatt Macy
352*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
353*eda14cbcSMatt Macy	[
354*eda14cbcSMatt Macy		void main()
355*eda14cbcSMatt Macy		{
356*eda14cbcSMatt Macy			__asm__ __volatile__("vpabsq %zmm0,%zmm1");
357*eda14cbcSMatt Macy		}
358*eda14cbcSMatt Macy	]])], [
359*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
360*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AVX512VL], 1, [Define if host toolchain supports AVX512VL])
361*eda14cbcSMatt Macy	], [
362*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
363*eda14cbcSMatt Macy	])
364*eda14cbcSMatt Macy])
365*eda14cbcSMatt Macy
366*eda14cbcSMatt Macydnl #
367*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES
368*eda14cbcSMatt Macydnl #
369*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AES], [
370*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports AES])
371*eda14cbcSMatt Macy
372*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
373*eda14cbcSMatt Macy	[
374*eda14cbcSMatt Macy		void main()
375*eda14cbcSMatt Macy		{
376*eda14cbcSMatt Macy			__asm__ __volatile__("aesenc %xmm0, %xmm1");
377*eda14cbcSMatt Macy		}
378*eda14cbcSMatt Macy	]])], [
379*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
380*eda14cbcSMatt Macy		AC_DEFINE([HAVE_AES], 1, [Define if host toolchain supports AES])
381*eda14cbcSMatt Macy	], [
382*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
383*eda14cbcSMatt Macy	])
384*eda14cbcSMatt Macy])
385*eda14cbcSMatt Macy
386*eda14cbcSMatt Macydnl #
387*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ
388*eda14cbcSMatt Macydnl #
389*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_PCLMULQDQ], [
390*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports PCLMULQDQ])
391*eda14cbcSMatt Macy
392*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
393*eda14cbcSMatt Macy	[
394*eda14cbcSMatt Macy		void main()
395*eda14cbcSMatt Macy		{
396*eda14cbcSMatt Macy			__asm__ __volatile__("pclmulqdq %0, %%xmm0, %%xmm1" :: "i"(0));
397*eda14cbcSMatt Macy		}
398*eda14cbcSMatt Macy	]])], [
399*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
400*eda14cbcSMatt Macy		AC_DEFINE([HAVE_PCLMULQDQ], 1, [Define if host toolchain supports PCLMULQDQ])
401*eda14cbcSMatt Macy	], [
402*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
403*eda14cbcSMatt Macy	])
404*eda14cbcSMatt Macy])
405*eda14cbcSMatt Macy
406*eda14cbcSMatt Macydnl #
407*eda14cbcSMatt Macydnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE
408*eda14cbcSMatt Macydnl #
409*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_MOVBE], [
410*eda14cbcSMatt Macy	AC_MSG_CHECKING([whether host toolchain supports MOVBE])
411*eda14cbcSMatt Macy
412*eda14cbcSMatt Macy	AC_LINK_IFELSE([AC_LANG_SOURCE([
413*eda14cbcSMatt Macy	[
414*eda14cbcSMatt Macy		void main()
415*eda14cbcSMatt Macy		{
416*eda14cbcSMatt Macy			__asm__ __volatile__("movbe 0(%eax), %eax");
417*eda14cbcSMatt Macy		}
418*eda14cbcSMatt Macy	]])], [
419*eda14cbcSMatt Macy		AC_MSG_RESULT([yes])
420*eda14cbcSMatt Macy		AC_DEFINE([HAVE_MOVBE], 1, [Define if host toolchain supports MOVBE])
421*eda14cbcSMatt Macy	], [
422*eda14cbcSMatt Macy		AC_MSG_RESULT([no])
423*eda14cbcSMatt Macy	])
424*eda14cbcSMatt Macy])
425