7233174ede5bb4670d11b36df38b1991eb79204c
[platform/upstream/glibc.git] / sysdeps / x86_64 / fpu / Makefile
1 ifeq ($(subdir),mathvec)
2 libmvec-double-func-list = \
3   2_core \
4   4_core \
5   4_core_avx \
6   8_core
7 libmvec-float-func-list = \
8   f4_core \
9   f8_core \
10   f8_core_avx \
11   f16_core
12 libmvec-support += \
13   svml_d_exp_data \
14   svml_d_log_data \
15   svml_d_pow_data \
16   svml_d_trig_data \
17   svml_s_expf_data \
18   svml_s_logf_data \
19   svml_s_powf_data \
20   svml_s_trig_data \
21   $(foreach l,$(libmvec-double-func-list), \
22     $(addprefix svml_d_,$(addsuffix $(l),$(libmvec-funcs)))) \
23   $(foreach l,$(libmvec-float-func-list), \
24     $(addprefix svml_s_,$(addsuffix $(l),$(libmvec-funcs))))
25 endif
26
27 # Do not run libmvec tests if multiarch not enabled.
28 ifneq ($(multi-arch),no)
29 # Variables for libmvec tests.
30 ifeq ($(subdir)$(build-mathvec),mathyes)
31 libmvec-tests += double-vlen2 double-vlen4 double-vlen4-avx2 \
32                  float-vlen4 float-vlen8 float-vlen8-avx2 \
33                  double-vlen8 float-vlen16
34 tests += \
35   $(libmvec-abi-func-tests) \
36   $(libmvec-abi-func-avx-tests) \
37   $(libmvec-abi-func-avx2-tests) \
38   $(libmvec-abi-func-avx512f-tests)
39
40 double-vlen2-funcs = $(libmvec-funcs)
41 double-vlen4-funcs = $(libmvec-funcs)
42 double-vlen4-avx2-funcs = $(libmvec-funcs)
43 double-vlen8-funcs = $(libmvec-funcs)
44 float-vlen4-funcs = $(libmvec-funcs)
45 float-vlen8-funcs = $(libmvec-funcs)
46 float-vlen8-avx2-funcs = $(libmvec-funcs)
47 float-vlen16-funcs = $(libmvec-funcs)
48
49 double-vlen4-arch-ext-cflags = -mavx
50 double-vlen4-arch-ext2-cflags = -mavx2
51 double-vlen8-arch-ext-cflags = -mavx512f
52
53 float-vlen8-arch-ext-cflags = -mavx
54 float-vlen8-arch-ext2-cflags = -mavx2
55 float-vlen16-arch-ext-cflags = -mavx512f
56
57 libmvec-abi-test-cflags = \
58   $(libm-test-fast-math-cflags) \
59   -fno-inline -fopenmp -Wno-unknown-pragmas
60
61 CFLAGS-test-double-vlen4-avx2-wrappers.c = $(double-vlen4-arch-ext2-cflags)
62
63 CFLAGS-test-float-vlen8-avx2-wrappers.c = $(float-vlen8-arch-ext2-cflags)
64 endif
65
66 ifeq ($(subdir)$(config-cflags-mprefer-vector-width),mathyes)
67 # When compiled with -O3 -march=skylake, GCC 8 and 9 optimize some loops
68 # in branred.c with 256-bit vector instructions, which leads to store
69 # forward stall:
70 #
71 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90579
72 #
73 # Limit vector width to 128 bits to work around this issue.  It improves
74 # performance of sin and cos by more than 40% on Skylake.
75 CFLAGS-branred.c = -mprefer-vector-width=128
76 endif
77
78 ifeq ($(subdir)$(build-mathvec),benchtestsyes)
79 double-vlen4-arch-ext-cflags = -mavx
80 double-vlen4-arch-ext2-cflags = -mavx2
81 double-vlen8-arch-ext-cflags = -mavx512f
82
83 float-vlen8-arch-ext-cflags = -mavx
84 float-vlen8-arch-ext2-cflags = -mavx2
85 float-vlen16-arch-ext-cflags = -mavx512f
86
87 bench-libmvec := $(bench-libmvec-double) $(bench-libmvec-float)
88
89 ifeq (${STATIC-BENCHTESTS},yes)
90 libmvec-benchtests = $(common-objpfx)mathvec/libmvec.a $(common-objpfx)math/libm.a
91 else
92 libmvec-benchtests = $(libmvec) $(libm)
93 endif
94
95 $(addprefix $(objpfx)bench-,$(bench-libmvec-double)): $(libmvec-benchtests)
96 $(addprefix $(objpfx)bench-,$(bench-libmvec-float)): $(libmvec-benchtests)
97 bench-libmvec-deps = $(..)sysdeps/x86_64/fpu/bench-libmvec-skeleton.c bench-timing.h Makefile
98
99 $(objpfx)bench-float-%.c: $(bench-libmvec-deps)
100         { if [ -n "$($*-INCLUDE)" ]; then \
101           cat $($*-INCLUDE); \
102         fi; \
103         $(PYTHON) $(..)sysdeps/x86_64/fpu/scripts/bench_libmvec.py $(basename $(@F)); } > $@-tmp
104         mv -f $@-tmp $@
105
106 $(objpfx)bench-double-%.c: $(bench-libmvec-deps)
107         { if [ -n "$($*-INCLUDE)" ]; then \
108           cat $($*-INCLUDE); \
109         fi; \
110         $(PYTHON) $(..)sysdeps/x86_64/fpu/scripts/bench_libmvec.py $(basename $(@F)); } > $@-tmp
111         mv -f $@-tmp $@
112 endif
113 endif