1# Generate libmvec.mk for libmvec ABI tests.
2
3# Copyright (C) 2021 Free Software Foundation, Inc.
4# This file is part of the GNU C Library.
5
6# The GNU C Library is free software; you can redistribute it and/or
7# modify it under the terms of the GNU Lesser General Public
8# License as published by the Free Software Foundation; either
9# version 2.1 of the License, or (at your option) any later version.
10
11# The GNU C Library is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14# Lesser General Public License for more details.
15
16# You should have received a copy of the GNU Lesser General Public
17# License along with the GNU C Library; if not, see
18# <https://www.gnu.org/licenses/>.
19
20-include $(common-objpfx)libmvec.mk
21postclean-generated += libmvec.mk
22
23# Define for both math and mathvec directories.
24libmvec-funcs = \
25  acos \
26  cos \
27  exp \
28  log \
29  pow \
30  sin \
31  sincos \
32
33# Define libmvec function for benchtests directory.
34libmvec-bench-funcs = \
35  cos \
36  exp \
37  log \
38  pow \
39  sin \
40
41bench-libmvec-double = \
42  $(addprefix double-vlen1-, $(libmvec-bench-funcs)) \
43  $(addprefix double-vlen2-, $(libmvec-bench-funcs)) \
44  $(addprefix double-vlen4-, $(libmvec-bench-funcs)) \
45  $(addprefix double-vlen4-avx2-, $(libmvec-bench-funcs)) \
46  $(addprefix double-vlen8-, $(libmvec-bench-funcs)) \
47
48bench-libmvec-float = \
49  $(addsuffix f, $(addprefix float-vlen1-, $(libmvec-bench-funcs))) \
50  $(addsuffix f, $(addprefix float-vlen4-, $(libmvec-bench-funcs))) \
51  $(addsuffix f, $(addprefix float-vlen8-, $(libmvec-bench-funcs))) \
52  $(addsuffix f, $(addprefix float-vlen8-avx2-, $(libmvec-bench-funcs))) \
53  $(addsuffix f, $(addprefix float-vlen16-, $(libmvec-bench-funcs))) \
54
55# The base libmvec ABI tests.
56libmvec-abi-func-tests = \
57  $(addprefix test-double-libmvec-,$(libmvec-funcs)) \
58  $(addsuffix f,$(addprefix test-float-libmvec-,$(libmvec-funcs)))
59
60# The AVX libmvec ABI tests.
61libmvec-abi-func-avx-tests = \
62  $(addsuffix -avx,$(libmvec-abi-func-tests))
63#
64# The AVX2 libmvec ABI tests.
65libmvec-abi-func-avx2-tests = \
66  $(addsuffix -avx2,$(libmvec-abi-func-tests))
67#
68# The AVX512F libmvec ABI tests.
69libmvec-abi-func-avx512f-tests = \
70  $(addsuffix -avx512f,$(libmvec-abi-func-tests))
71
72$(common-objpfx)libmvec.mk: $(common-objpfx)config.make
73	(echo "ifeq (\$$(subdir)\$$(build-mathvec),mathyes)"; \
74	 echo; \
75	 for i in "" "-avx" "-avx2" "-avx512f"; do \
76	   for t in $(libmvec-abi-func-tests); do \
77	     echo "\$$(objpfx)$$t$$i: \\"; \
78	     echo "  \$$(objpfx)$$t$$i.o \\"; \
79	     echo "  \$$(objpfx)test-libmvec$$i.o \$$(libmvec)"; \
80	     echo; \
81	   done; \
82	 done; \
83	 for t in $(libmvec-funcs); do \
84	   echo "CFLAGS-test-double-libmvec-$$t.c = \\"; \
85	   echo "  \$$(libmvec-abi-test-cflags)"; \
86	   echo "CFLAGS-test-double-libmvec-$$t-avx.c = \\"; \
87	   echo "  \$$(libmvec-abi-test-cflags) \\"; \
88	   echo "  \$$(double-vlen4-arch-ext-cflags)"; \
89	   echo "CFLAGS-test-double-libmvec-$$t-avx2.c = \\"; \
90	   echo "  \$$(libmvec-abi-test-cflags) \\"; \
91	   echo "  \$$(double-vlen4-arch-ext2-cflags)"; \
92	   echo "CFLAGS-test-double-libmvec-$$t-avx512f.c = \\"; \
93	   echo "  \$$(libmvec-abi-test-cflags) \\"; \
94	   echo "  \$$(double-vlen8-arch-ext-cflags)"; \
95	   echo; \
96	   echo "CFLAGS-test-float-libmvec-$${t}f.c = \\"; \
97	   echo "  \$$(libmvec-abi-test-cflags)"; \
98	   echo "CFLAGS-test-float-libmvec-$${t}f-avx.c = \\"; \
99	   echo "  \$$(libmvec-abi-test-cflags) \\"; \
100	   echo "  \$$(float-vlen8-arch-ext-cflags)"; \
101	   echo "CFLAGS-test-float-libmvec-$${t}f-avx2.c = \\"; \
102	   echo "  \$$(libmvec-abi-test-cflags) \\"; \
103	   echo "  \$$(float-vlen8-arch-ext2-cflags)"; \
104	   echo "CFLAGS-test-float-libmvec-$${t}f-avx512f.c = \\"; \
105	   echo "  \$$(libmvec-abi-test-cflags) \\"; \
106	   echo "  \$$(float-vlen16-arch-ext-cflags)"; \
107	   echo; \
108	 done; \
109	 echo "endif"; \
110	 echo "ifeq (\$$(subdir),benchtests)"; \
111	 for t in $(libmvec-bench-funcs); do \
112	   echo "CFLAGS-bench-double-vlen4-$$t.c = \\"; \
113	   echo "  \$$(double-vlen4-arch-ext-cflags)"; \
114	   echo "CFLAGS-bench-double-vlen4-avx2-$$t.c = \\"; \
115	   echo "  \$$(double-vlen4-arch-ext2-cflags)"; \
116	   echo "CFLAGS-bench-double-vlen8-$$t.c = \\"; \
117	   echo "  \$$(double-vlen8-arch-ext-cflags)"; \
118	   echo; \
119	   echo "CFLAGS-bench-float-vlen8-$${t}f.c = \\"; \
120	   echo "  \$$(float-vlen8-arch-ext-cflags)"; \
121	   echo "CFLAGS-bench-float-vlen8-avx2-$${t}f.c = \\"; \
122	   echo "  \$$(float-vlen8-arch-ext2-cflags)"; \
123	   echo "CFLAGS-bench-float-vlen16-$${t}f.c = \\"; \
124	   echo "  \$$(float-vlen16-arch-ext-cflags)"; \
125	   echo; \
126	 done; \
127	 echo "endif") > $@T
128	mv -f $@T $@
129