[PATCH 3/3] AArch64: additional mathvec build system cleanups.
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Wed Jun 17 18:45:00 GMT 2026
On 16/06/26 05:40, Pierre Blanchard wrote:
> Rely on a single list of ISAs and precisions for
> source, tests and benchmarks.
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> OK for master? If so please commit for me as I don't have commit rights.
> Thanks,
> Pierre
> 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
Change to new scheme:
libmvec-data-routines = \
v_log_data \
...
v_powf_data \
# libmvec-data-routines
It makes adding/removing entries diff a bit less verbose.
The rest looks ok, thanks.
> +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
More information about the Libc-alpha
mailing list