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