Last time aarch64 libmvec was discussed, the OpenMP declare variant syntax support was not ready in gcc and there were open questions around how simd isa variants would be supported.
https://gcc.gnu.org/pipermail/gcc-patches/2019-October/532940.html The vector function ABI for aarch64 allows the declare variant syntax and that is the only way to declare vector math functions for a particular isa only. https://github.com/ARM-software/abi-aa/blob/main/vfabia64/vfabia64.rst#aarch64-variant-traits I would like to get feedback if there may be anything preventing declare variant simd support on aarch64 like float64x2_t simd_cos (float64x2_t); #pragma omp declare variant(simd_cos) \ match(construct={simd(simdlen(2), notinbranch)}, device={isa("simd")}) double cos (double); where isa("simd") means simd_cos can be used when auto vectorizing cos calls with advanced simd. Our hope is that this enables libmvec on aarch64 such that at least advanced simd variants of some math functions can be declared in math.h and implemented in libm, suitable for vectorization. (Using the vector ABI names of those functions.) Eventually we want to add isa("sve") support too, but that may require further work on how scalable vector length is represented. Please let me know if there are outstanding issues with this approach. thanks.