[glibc] AArch64: additional mathvec build system cleanups.

Adhemerval Zanella via Glibc-cvs <[email protected]> Tue, 23 Jun 2026 17:51:36 +0000 (GMT)
Newsgroups gmane.comp.lib.glibc.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=2cce7ec3c85d568db4727be17c67839de6ed5c4a

commit 2cce7ec3c85d568db4727be17c67839de6ed5c4a
Author: Pierre Blanchard <[email protected]>
Date:   Thu Jun 18 21:44:43 2026 +0000

    AArch64: additional mathvec build system cleanups.
    
    Rely on a single list of ISAs and precisions for
    source, tests and benchmarks.
    
    Reviewed-by: Adhemerval Zanella  <[email protected]>

Diff:
---
 sysdeps/aarch64/fpu/Makefile | 96 ++++++++++++++++++++++++--------------------
 1 file changed, 53 insertions(+), 43 deletions(-)

diff --git a/sysdeps/aarch64/fpu/Makefile b/sysdeps/aarch64/fpu/Makefile
index 40d6509c89..67952cc5f2 100644
--- a/sysdeps/aarch64/fpu/Makefile
+++ b/sysdeps/aarch64/fpu/Makefile
@@ -42,34 +42,40 @@ float-advsimd-funcs = $(libmvec-supported-funcs)
 double-advsimd-funcs = $(libmvec-supported-funcs)
 float-sve-funcs = $(libmvec-supported-funcs)
 double-sve-funcs = $(libmvec-supported-funcs)
+mathvec-types = float double
+mathvec-subdirs = advsimd sve
 
 ifeq ($(subdir),mathvec)
-generated-dirs += advsimd sve
-generated += advsimd/stamp sve/stamp
-before-compile += $(addprefix $(objpfx),advsimd/stamp sve/stamp)
+generated-dirs += $(mathvec-subdirs)
+generated += $(addsuffix /stamp,$(mathvec-subdirs))
+before-compile += $(addprefix $(objpfx),$(addsuffix /stamp,$(mathvec-subdirs)))
 
-$(objpfx)advsimd/stamp $(objpfx)sve/stamp:
+$(addprefix $(objpfx),$(addsuffix /stamp,$(mathvec-subdirs))):
 	$(make-target-directory)
 	touch $@
 
-sysd-rules-patterns += advsimd/%:advsimd/% sve/%:sve/%
-
-libmvec-support = $(addprefix advsimd/,$(addsuffix f,$(float-advsimd-funcs))) \
-                  $(addprefix advsimd/,$(double-advsimd-funcs)) \
-                  $(addprefix sve/,$(addsuffix f,$(float-sve-funcs))) \
-                  $(addprefix sve/,$(double-sve-funcs)) \
-                  v_log_data \
-                  v_exp_data \
-                  v_log2_data \
-                  v_log10_data \
-                  erf_data \
-                  erff_data \
-                  v_exp_tail_data \
-                  erfc_data \
-                  erfcf_data \
-                  v_pow_exp_data \
-                  v_pow_log_data \
-                  v_powf_data
+sysd-rules-patterns += $(foreach dir,$(mathvec-subdirs),$(dir)/%:$(dir)/%)
+
+define libmvec-routines-for
+$(addprefix $(1)/,$(addsuffix f,$(float-$(1)-funcs))) \
+$(addprefix $(1)/,$(double-$(1)-funcs))
+endef
+
+libmvec-vector-routines = $(foreach dir,$(mathvec-subdirs),\
+                           $(call libmvec-routines-for,$(dir)))
+libmvec-data-routines = v_log_data \
+                        v_exp_data \
+                        v_log2_data \
+                        v_log10_data \
+                        erf_data \
+                        erff_data \
+                        v_exp_tail_data \
+                        erfc_data \
+                        erfcf_data \
+                        v_pow_exp_data \
+                        v_pow_log_data \
+                        v_powf_data
+libmvec-support = $(libmvec-vector-routines) $(libmvec-data-routines)
 endif
 
 # Enable SVE for building libmvec.  Since CFLAGS may contain a -mcpu or -march,
@@ -78,21 +84,27 @@ endif
 
 sve-cflags = -mcpu=generic+sve -march=armv8-a+sve -mtune=neoverse-v1
 
+bench-script-advsimd = bench_libmvec_advsimd.py
+bench-script-sve = bench_libmvec_sve.py
+
+define bench-libmvec-for
+$(addprefix $(1)-$(2)-,$($(1)-$(2)-funcs))
+endef
+
 ifeq ($(build-mathvec),yes)
-bench-libmvec = $(addprefix float-advsimd-,$(float-advsimd-funcs)) \
-                $(addprefix double-advsimd-,$(double-advsimd-funcs)) \
-                $(addprefix float-sve-,$(float-sve-funcs)) \
-                $(addprefix double-sve-,$(double-sve-funcs))
+bench-libmvec = $(foreach type,$(mathvec-types),\
+                 $(foreach dir,$(mathvec-subdirs),\
+                 $(call bench-libmvec-for,$(type),$(dir))))
 endif
 
-$(objpfx)bench-float-advsimd-%.c:
-	$(PYTHON) $(..)sysdeps/aarch64/fpu/scripts/bench_libmvec_advsimd.py $(basename $(@F)) > $@
-$(objpfx)bench-double-advsimd-%.c:
-	$(PYTHON) $(..)sysdeps/aarch64/fpu/scripts/bench_libmvec_advsimd.py $(basename $(@F)) > $@
-$(objpfx)bench-float-sve-%.c:
-	$(PYTHON) $(..)sysdeps/aarch64/fpu/scripts/bench_libmvec_sve.py $(basename $(@F)) > $@
-$(objpfx)bench-double-sve-%.c:
-	$(PYTHON) $(..)sysdeps/aarch64/fpu/scripts/bench_libmvec_sve.py $(basename $(@F)) > $@
+define bench-libmvec-rule
+$(objpfx)bench-$(1)-$(2)-%.c:
+	$$(PYTHON) $$(..)sysdeps/aarch64/fpu/scripts/$$(bench-script-$(2)) $$(basename $$(@F)) > $$@
+endef
+
+$(foreach type,$(mathvec-types),\
+  $(foreach dir,$(mathvec-subdirs),\
+    $(eval $(call bench-libmvec-rule,$(type),$(dir)))))
 
 ifeq (${STATIC-BENCHTESTS},yes)
 libmvec-benchtests = $(common-objpfx)mathvec/libmvec.a $(common-objpfx)math/libm.a
@@ -103,19 +115,17 @@ endif
 $(addprefix $(objpfx)bench-,$(bench-libmvec)): $(libmvec-benchtests)
 
 ifeq ($(build-mathvec),yes)
-libmvec-tests += float-advsimd double-advsimd float-sve double-sve
+libmvec-tests += $(foreach type,$(mathvec-types),\
+                  $(foreach dir,$(mathvec-subdirs),$(type)-$(dir)))
 endif
 
-define sve-bench-float-cflags-template
-CFLAGS-bench-float-sve-$(1).c += $(sve-cflags)
-endef
-
-define sve-bench-double-cflags-template
-CFLAGS-bench-double-sve-$(1).c += $(sve-cflags)
+define sve-bench-cflags-template
+CFLAGS-bench-$(1)-sve-$(2).c += $(sve-cflags)
 endef
 
-$(foreach f,$(float-sve-funcs), $(eval $(call sve-bench-float-cflags-template,$(f))))
-$(foreach f,$(double-sve-funcs), $(eval $(call sve-bench-double-cflags-template,$(f))))
+$(foreach type,$(mathvec-types),\
+  $(foreach f,$($(type)-sve-funcs),\
+    $(eval $(call sve-bench-cflags-template,$(type),$(f)))))
 
 # Specialize CFLAGS used for building SVE sources.
 define sve-object-cflags-template