1 ifeq ($(subdir
),mathvec
)
2 libmvec-support
+= svml_d_cos2_core svml_d_cos4_core_avx \
3 svml_d_cos4_core svml_d_cos8_core \
4 svml_d_sin2_core svml_d_sin4_core_avx \
5 svml_d_sin4_core svml_d_sin8_core svml_d_trig_data \
6 svml_s_cosf4_core svml_s_cosf8_core_avx \
7 svml_s_cosf8_core svml_s_cosf16_core svml_s_trig_data \
8 svml_s_sinf4_core svml_s_sinf8_core_avx \
9 svml_s_sinf8_core svml_s_sinf16_core \
10 svml_d_sincos2_core svml_d_sincos4_core_avx \
11 svml_d_sincos4_core svml_d_sincos8_core \
12 svml_d_log2_core svml_d_log4_core_avx svml_d_log4_core \
13 svml_d_log8_core svml_d_log_data svml_s_logf4_core \
14 svml_s_logf8_core_avx svml_s_logf8_core svml_s_logf16_core \
15 svml_s_logf_data svml_d_exp2_core svml_d_exp4_core_avx \
16 svml_d_exp4_core svml_d_exp8_core svml_d_exp_data \
17 svml_s_expf4_core svml_s_expf8_core_avx svml_s_expf8_core \
18 svml_s_expf16_core svml_s_expf_data svml_d_pow2_core \
19 svml_d_pow4_core_avx svml_d_pow4_core svml_d_pow8_core \
20 svml_d_pow_data svml_s_powf4_core svml_s_powf8_core_avx \
21 svml_s_powf8_core svml_s_powf16_core svml_s_powf_data \
22 svml_s_sincosf4_core svml_s_sincosf8_core_avx \
23 svml_s_sincosf8_core svml_s_sincosf16_core svml_finite_alias
25 libmvec-static-only-routines
= svml_finite_alias
28 # Variables for libmvec tests.
30 ifeq ($(build-mathvec
),yes
)
31 libmvec-tests
+= double-vlen2 double-vlen4 double-vlen4-avx2 \
32 float-vlen4 float-vlen8 float-vlen8-avx2
33 tests
+= test-double-libmvec-alias test-double-libmvec-alias-avx \
34 test-double-libmvec-alias-avx2 test-double-libmvec-alias-main \
35 test-double-libmvec-alias-avx-main test-double-libmvec-alias-avx2-main \
36 test-float-libmvec-alias test-float-libmvec-alias-avx \
37 test-float-libmvec-alias-avx2 test-float-libmvec-alias-main \
38 test-float-libmvec-alias-avx-main test-float-libmvec-alias-avx2-main \
39 test-double-libmvec-sincos test-double-libmvec-sincos-avx \
40 test-double-libmvec-sincos-avx2 test-float-libmvec-sincosf \
41 test-float-libmvec-sincosf-avx test-float-libmvec-sincosf-avx2
42 modules-names
+= test-double-libmvec-alias-mod \
43 test-double-libmvec-alias-avx-mod \
44 test-double-libmvec-alias-avx2-mod \
45 test-float-libmvec-alias-mod \
46 test-float-libmvec-alias-avx-mod \
47 test-float-libmvec-alias-avx2-mod
48 modules-names-tests
+= test-double-libmvec-alias-mod \
49 test-double-libmvec-alias-avx-mod \
50 test-double-libmvec-alias-avx2-mod \
51 test-float-libmvec-alias-mod \
52 test-float-libmvec-alias-avx-mod \
53 test-float-libmvec-alias-avx2-mod
54 extra-test-objs
+= test-double-libmvec-sincos-avx-main.o \
55 test-double-libmvec-sincos-avx2-main.o \
56 test-double-libmvec-sincos-main.o \
57 test-float-libmvec-sincosf-avx-main.o \
58 test-float-libmvec-sincosf-avx2-main.o\
59 test-float-libmvec-sincosf-main.o
60 test-double-libmvec-alias-mod.so-no-z-defs
= yes
61 test-double-libmvec-alias-avx-mod.so-no-z-defs
= yes
62 test-double-libmvec-alias-avx2-mod.so-no-z-defs
= yes
63 test-float-libmvec-alias-mod.so-no-z-defs
= yes
64 test-float-libmvec-alias-avx-mod.so-no-z-defs
= yes
65 test-float-libmvec-alias-avx2-mod.so-no-z-defs
= yes
67 $(objpfx
)test-double-libmvec-alias
: \
68 $(objpfx
)test-double-libmvec-alias-mod.so
69 $(objpfx
)test-double-libmvec-alias-mod.so
: \
70 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
72 $(objpfx
)test-double-libmvec-alias-avx
: \
73 $(objpfx
)test-double-libmvec-alias-avx-mod.so
74 $(objpfx
)test-double-libmvec-alias-avx-mod.so
: \
75 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
77 $(objpfx
)test-double-libmvec-alias-avx2
: \
78 $(objpfx
)test-double-libmvec-alias-avx2-mod.so
79 $(objpfx
)test-double-libmvec-alias-avx2-mod.so
: \
80 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
82 $(objpfx
)test-double-libmvec-alias-main
: \
83 $(objpfx
)test-double-libmvec-alias-mod.os \
84 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
86 $(objpfx
)test-double-libmvec-alias-avx-main
: \
87 $(objpfx
)test-double-libmvec-alias-avx-mod.os \
88 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
90 $(objpfx
)test-double-libmvec-alias-avx2-main
: \
91 $(objpfx
)test-double-libmvec-alias-avx2-mod.os \
92 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
94 $(objpfx
)test-float-libmvec-alias
: \
95 $(objpfx
)test-float-libmvec-alias-mod.so
96 $(objpfx
)test-float-libmvec-alias-mod.so
: \
97 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
99 $(objpfx
)test-float-libmvec-alias-avx
: \
100 $(objpfx
)test-float-libmvec-alias-avx-mod.so
101 $(objpfx
)test-float-libmvec-alias-avx-mod.so
: \
102 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
104 $(objpfx
)test-float-libmvec-alias-avx2
: \
105 $(objpfx
)test-float-libmvec-alias-avx2-mod.so
106 $(objpfx
)test-float-libmvec-alias-avx2-mod.so
: \
107 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
109 $(objpfx
)test-float-libmvec-alias-main
: \
110 $(objpfx
)test-float-libmvec-alias-mod.os \
111 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
113 $(objpfx
)test-float-libmvec-alias-avx-main
: \
114 $(objpfx
)test-float-libmvec-alias-avx-mod.os \
115 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
117 $(objpfx
)test-float-libmvec-alias-avx2-main
: \
118 $(objpfx
)test-float-libmvec-alias-avx2-mod.os \
119 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
121 $(objpfx
)test-double-libmvec-sincos
: \
122 $(objpfx
)test-double-libmvec-sincos.o \
123 $(objpfx
)test-double-libmvec-sincos-main.o
$(libmvec
)
125 $(objpfx
)test-double-libmvec-sincos-avx
: \
126 $(objpfx
)test-double-libmvec-sincos-avx.o \
127 $(objpfx
)test-double-libmvec-sincos-avx-main.o
$(libmvec
)
129 $(objpfx
)test-double-libmvec-sincos-avx2
: \
130 $(objpfx
)test-double-libmvec-sincos-avx2.o \
131 $(objpfx
)test-double-libmvec-sincos-avx2-main.o
$(libmvec
)
133 $(objpfx
)test-float-libmvec-sincosf
: \
134 $(objpfx
)test-float-libmvec-sincosf.o \
135 $(objpfx
)test-float-libmvec-sincosf-main.o
$(libmvec
)
137 $(objpfx
)test-float-libmvec-sincosf-avx
: \
138 $(objpfx
)test-float-libmvec-sincosf-avx.o \
139 $(objpfx
)test-float-libmvec-sincosf-avx-main.o
$(libmvec
)
141 $(objpfx
)test-float-libmvec-sincosf-avx2
: \
142 $(objpfx
)test-float-libmvec-sincosf-avx2.o \
143 $(objpfx
)test-float-libmvec-sincosf-avx2-main.o
$(libmvec
)
145 ifeq (yes
,$(config-cflags-avx512
))
146 libmvec-tests
+= double-vlen8 float-vlen16
147 tests
+= test-double-libmvec-alias-avx512 \
148 test-float-libmvec-alias-avx512 \
149 test-double-libmvec-alias-avx512-main \
150 test-float-libmvec-alias-avx512-main \
151 test-double-libmvec-sincos-avx512 \
152 test-float-libmvec-sincosf-avx512
153 modules-names
+= test-double-libmvec-alias-avx512-mod \
154 test-float-libmvec-alias-avx512-mod
155 modules-names-tests
+= test-double-libmvec-alias-avx512-mod \
156 test-float-libmvec-alias-avx512-mod
157 extra-test-objs
+= test-double-libmvec-sincos-avx512-main.o \
158 test-float-libmvec-sincosf-avx512-main.o
159 test-double-libmvec-alias-avx512-mod.so-no-z-defs
= yes
160 test-float-libmvec-alias-avx512-mod.so-no-z-defs
= yes
162 $(objpfx
)test-double-libmvec-alias-avx512
: \
163 $(objpfx
)test-double-libmvec-alias-avx512-mod.so
164 $(objpfx
)test-double-libmvec-alias-avx512-mod.so
: \
165 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
167 $(objpfx
)test-double-libmvec-alias-avx512-main
: \
168 $(objpfx
)test-double-libmvec-alias-avx512-mod.os \
169 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
171 $(objpfx
)test-float-libmvec-alias-avx512
: \
172 $(objpfx
)test-float-libmvec-alias-avx512-mod.so
173 $(objpfx
)test-float-libmvec-alias-avx512-mod.so
: \
174 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
176 $(objpfx
)test-float-libmvec-alias-avx512-main
: \
177 $(objpfx
)test-float-libmvec-alias-avx512-mod.os \
178 $(objpfx
)..
/mathvec
/libmvec_nonshared.a
$(libmvec
)
180 $(objpfx
)test-double-libmvec-sincos-avx512
: \
181 $(objpfx
)test-double-libmvec-sincos-avx512.o \
182 $(objpfx
)test-double-libmvec-sincos-avx512-main.o
$(libmvec
)
184 $(objpfx
)test-float-libmvec-sincosf-avx512
: \
185 $(objpfx
)test-float-libmvec-sincosf-avx512.o \
186 $(objpfx
)test-float-libmvec-sincosf-avx512-main.o
$(libmvec
)
189 double-vlen2-funcs
= cos exp log pow sin sincos
190 double-vlen4-funcs
= cos exp log pow sin sincos
191 double-vlen4-avx2-funcs
= cos exp log pow sin sincos
192 double-vlen8-funcs
= cos exp log pow sin sincos
193 float-vlen4-funcs
= cos exp log pow sin sincos
194 float-vlen8-funcs
= cos exp log pow sin sincos
195 float-vlen8-avx2-funcs
= cos exp log pow sin sincos
196 float-vlen16-funcs
= cos exp log pow sin sincos
198 double-vlen4-arch-ext-cflags
= -mavx
199 double-vlen4-arch-ext2-cflags
= -mavx2
200 double-vlen8-arch-ext-cflags
= -mavx512f
202 float-vlen8-arch-ext-cflags
= -mavx
203 float-vlen8-arch-ext2-cflags
= -mavx2
204 float-vlen16-arch-ext-cflags
= -mavx512f
206 libmvec-sincos-cflags
= $(libm-test-fast-math-cflags
) -fno-inline
-fopenmp
-Wno-unknown-pragmas
207 libmvec-alias-cflags
= $(libmvec-sincos-cflags
) -ffloat-store
-ffinite-math-only
209 CFLAGS-test-double-libmvec-alias-mod.c
= $(libmvec-alias-cflags
)
210 CFLAGS-test-double-libmvec-alias-avx-mod.c
= $(double-vlen4-arch-ext-cflags
) $(libmvec-alias-cflags
) -DREQUIRE_AVX
211 CFLAGS-test-double-libmvec-alias-avx2-mod.c
= $(double-vlen4-arch-ext2-cflags
) $(libmvec-alias-cflags
) -DREQUIRE_AVX2
212 CFLAGS-test-double-libmvec-alias-avx512-mod.c
= $(double-vlen8-arch-ext-cflags
) $(libmvec-alias-cflags
) -DREQUIRE_AVX512F
214 CFLAGS-test-float-libmvec-alias-mod.c
= $(libmvec-alias-cflags
)
215 CFLAGS-test-float-libmvec-alias-avx-mod.c
= $(double-vlen4-arch-ext-cflags
) $(libmvec-alias-cflags
) -DREQUIRE_AVX
216 CFLAGS-test-float-libmvec-alias-avx2-mod.c
= $(double-vlen4-arch-ext2-cflags
) $(libmvec-alias-cflags
) -DREQUIRE_AVX2
217 CFLAGS-test-float-libmvec-alias-avx512-mod.c
= $(double-vlen8-arch-ext-cflags
) $(libmvec-alias-cflags
) -DREQUIRE_AVX512F
219 CFLAGS-test-double-vlen4-avx2-wrappers.c
= $(double-vlen4-arch-ext2-cflags
)
221 CFLAGS-test-float-vlen8-avx2-wrappers.c
= $(float-vlen8-arch-ext2-cflags
)
223 CFLAGS-test-double-libmvec-sincos-main.c
= $(libmvec-sincos-cflags
)
224 CFLAGS-test-double-libmvec-sincos-avx.c
= -DREQUIRE_AVX
225 CFLAGS-test-double-libmvec-sincos-avx-main.c
= $(libmvec-sincos-cflags
) $(double-vlen4-arch-ext-cflags
)
226 CFLAGS-test-double-libmvec-sincos-avx2.c
= -DREQUIRE_AVX2
227 CFLAGS-test-double-libmvec-sincos-avx2-main.c
= $(libmvec-sincos-cflags
) $(double-vlen4-arch-ext2-cflags
)
228 CFLAGS-test-double-libmvec-sincos-avx512.c
= -DREQUIRE_AVX512F
229 CFLAGS-test-double-libmvec-sincos-avx512-main.c
= $(libmvec-sincos-cflags
) $(double-vlen8-arch-ext-cflags
)
231 CFLAGS-test-float-libmvec-sincosf-main.c
= $(libmvec-sincos-cflags
)
232 CFLAGS-test-float-libmvec-sincosf-avx.c
= -DREQUIRE_AVX
233 CFLAGS-test-float-libmvec-sincosf-avx-main.c
= $(libmvec-sincos-cflags
) $(float-vlen8-arch-ext-cflags
)
234 CFLAGS-test-float-libmvec-sincosf-avx2.c
= -DREQUIRE_AVX2
235 CFLAGS-test-float-libmvec-sincosf-avx2-main.c
= $(libmvec-sincos-cflags
) $(float-vlen8-arch-ext2-cflags
)
236 CFLAGS-test-float-libmvec-sincosf-avx512.c
= -DREQUIRE_AVX512F
237 CFLAGS-test-float-libmvec-sincosf-avx512-main.c
= $(libmvec-sincos-cflags
) $(float-vlen16-arch-ext-cflags
)
241 ifeq ($(subdir
)$(config-cflags-mprefer-vector-width
),mathyes
)
242 # When compiled with -O3 -march=skylake, GCC 8 and 9 optimize some loops
243 # in branred.c with 256-bit vector instructions, which leads to store
246 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90579
248 # Limit vector width to 128 bits to work around this issue. It improves
249 # performance of sin and cos by more than 40% on Skylake.
250 CFLAGS-branred.c
= -mprefer-vector-width
=128