]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/x86_64/fpu/Makefile
x86-64: Compile branred.c with -mprefer-vector-width=128 [BZ #24603]
[thirdparty/glibc.git] / sysdeps / x86_64 / fpu / Makefile
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
24
25 libmvec-static-only-routines = svml_finite_alias
26 endif
27
28 # Variables for libmvec tests.
29 ifeq ($(subdir),math)
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
66
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)
71
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)
76
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)
81
82 $(objpfx)test-double-libmvec-alias-main: \
83 $(objpfx)test-double-libmvec-alias-mod.os \
84 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
85
86 $(objpfx)test-double-libmvec-alias-avx-main: \
87 $(objpfx)test-double-libmvec-alias-avx-mod.os \
88 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
89
90 $(objpfx)test-double-libmvec-alias-avx2-main: \
91 $(objpfx)test-double-libmvec-alias-avx2-mod.os \
92 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
93
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)
98
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)
103
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)
108
109 $(objpfx)test-float-libmvec-alias-main: \
110 $(objpfx)test-float-libmvec-alias-mod.os \
111 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
112
113 $(objpfx)test-float-libmvec-alias-avx-main: \
114 $(objpfx)test-float-libmvec-alias-avx-mod.os \
115 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
116
117 $(objpfx)test-float-libmvec-alias-avx2-main: \
118 $(objpfx)test-float-libmvec-alias-avx2-mod.os \
119 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
120
121 $(objpfx)test-double-libmvec-sincos: \
122 $(objpfx)test-double-libmvec-sincos.o \
123 $(objpfx)test-double-libmvec-sincos-main.o $(libmvec)
124
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)
128
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)
132
133 $(objpfx)test-float-libmvec-sincosf: \
134 $(objpfx)test-float-libmvec-sincosf.o \
135 $(objpfx)test-float-libmvec-sincosf-main.o $(libmvec)
136
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)
140
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)
144
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
161
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)
166
167 $(objpfx)test-double-libmvec-alias-avx512-main: \
168 $(objpfx)test-double-libmvec-alias-avx512-mod.os \
169 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
170
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)
175
176 $(objpfx)test-float-libmvec-alias-avx512-main: \
177 $(objpfx)test-float-libmvec-alias-avx512-mod.os \
178 $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec)
179
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)
183
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)
187 endif
188
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
197
198 double-vlen4-arch-ext-cflags = -mavx
199 double-vlen4-arch-ext2-cflags = -mavx2
200 double-vlen8-arch-ext-cflags = -mavx512f
201
202 float-vlen8-arch-ext-cflags = -mavx
203 float-vlen8-arch-ext2-cflags = -mavx2
204 float-vlen16-arch-ext-cflags = -mavx512f
205
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
208
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
213
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
218
219 CFLAGS-test-double-vlen4-avx2-wrappers.c = $(double-vlen4-arch-ext2-cflags)
220
221 CFLAGS-test-float-vlen8-avx2-wrappers.c = $(float-vlen8-arch-ext2-cflags)
222
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)
230
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)
238 endif
239 endif
240
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
244 # forward stall:
245 #
246 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90579
247 #
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
251 endif