]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
x86-64: Implement libmathvec IFUNC selectors in C
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 4 Aug 2017 20:03:44 +0000 (13:03 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 4 Aug 2017 20:03:58 +0000 (13:03 -0700)
* sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines)
Add svml_d_cos2_core-sse2, svml_d_cos4_core-sse,
svml_d_cos8_core-avx2, svml_d_exp2_core-sse2,
svml_d_exp4_core-sse, svml_d_exp8_core-avx2,
svml_d_log2_core-sse2, svml_d_log4_core-sse,
svml_d_log8_core-avx2, svml_d_pow2_core-sse2,
svml_d_pow4_core-sse, svml_d_pow8_core-avx2
svml_d_sin2_core-sse2, svml_d_sin4_core-sse,
svml_d_sin8_core-avx2, svml_d_sincos2_core-sse2,
svml_d_sincos4_core-sse, svml_d_sincos8_core-avx2,
svml_s_cosf16_core-avx2, svml_s_cosf4_core-sse2,
svml_s_cosf8_core-sse, svml_s_expf16_core-avx2,
svml_s_expf4_core-sse2, svml_s_expf8_core-sse,
svml_s_logf16_core-avx2, svml_s_logf4_core-sse2,
svml_s_logf8_core-sse, svml_s_powf16_core-avx2,
svml_s_powf4_core-sse2, svml_s_powf8_core-sse,
svml_s_sincosf16_core-avx2, svml_s_sincosf4_core-sse2,
svml_s_sincosf8_core-sse, svml_s_sinf16_core-avx2,
svml_s_sinf4_core-sse2 and svml_s_sinf8_core-sse.
* sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx2.h: New file.
* sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx512.h: Likewise.
* sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-sse4_1.h: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf16_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_expf16_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_expf4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_expf8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_logf16_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_logf4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_logf8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_powf16_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_powf4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_powf8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf16_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf16_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf4_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf8_core.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN2v_cos): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN4v_cos): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN8v_cos): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN2v_exp): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN4v_exp): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN8v_exp): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_log2_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN2v_log): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_log4_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN4v_log): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_log8_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN8v_log): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN2vv_pow): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN4vv_pow): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN8vv_pow): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN2v_sin): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN4v_sin): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN8v_sin): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN2vvv_sincos): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN4vvv_sincos): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN8vvv_sincos): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf16_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf16_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN16v_cosf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf4_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN4v_cosf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_cosf8_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN8v_cosf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_expf16_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_expf16_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN16v_expf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_expf4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_expf4_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN4v_expf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_expf8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_expf8_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN8v_expf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_logf16_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_logf16_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN16v_logf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_logf4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_logf4_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN4v_logf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_logf8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_logf8_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN8v_logf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_powf16_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_powf16_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN16vv_powf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_powf4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_powf4_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN4vv_powf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_powf8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_powf8_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN8vv_powf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf16_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf16_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN16vvv_sincosf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf4_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN4vvv_sincosf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sincosf8_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN8vvv_sincosf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf16_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf16_core-avx2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVeN16v_sinf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf4_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf4_core-sse2.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVbN4v_sinf): Removed.
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf8_core.S:  Renamed to
...
* sysdeps/x86_64/fpu/multiarch/svml_d_sinf8_core-sse.S: This.
Don't include <sysdep.h> nor <init-arch.h>.
(_ZGVdN8v_sinf): Removed.

77 files changed:
ChangeLog
sysdeps/x86_64/fpu/multiarch/Makefile
sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx2.h [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx512.h [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-sse4_1.h [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S with 63% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S with 68% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S with 64% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_log2_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_log4_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_log8_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S with 64% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S with 64% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S with 68% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S with 63% similarity]
sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S with 64% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S with 64% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S with 63% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.S with 63% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.S with 65% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core-avx2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S with 64% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core-sse2.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S with 67% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.c [new file with mode: 0644]
sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core-sse.S [moved from sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S with 66% similarity]
sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.c [new file with mode: 0644]

index 421a0e05948a1d1ba5f1b462346a3235ae9625bc..268436266c1df1c51c0459ca5b9659d8c2d338cb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,244 @@
+2017-08-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines)
+       Add svml_d_cos2_core-sse2, svml_d_cos4_core-sse,
+       svml_d_cos8_core-avx2, svml_d_exp2_core-sse2,
+       svml_d_exp4_core-sse, svml_d_exp8_core-avx2,
+       svml_d_log2_core-sse2, svml_d_log4_core-sse,
+       svml_d_log8_core-avx2, svml_d_pow2_core-sse2,
+       svml_d_pow4_core-sse, svml_d_pow8_core-avx2
+       svml_d_sin2_core-sse2, svml_d_sin4_core-sse,
+       svml_d_sin8_core-avx2, svml_d_sincos2_core-sse2,
+       svml_d_sincos4_core-sse, svml_d_sincos8_core-avx2,
+       svml_s_cosf16_core-avx2, svml_s_cosf4_core-sse2,
+       svml_s_cosf8_core-sse, svml_s_expf16_core-avx2,
+       svml_s_expf4_core-sse2, svml_s_expf8_core-sse,
+       svml_s_logf16_core-avx2, svml_s_logf4_core-sse2,
+       svml_s_logf8_core-sse, svml_s_powf16_core-avx2,
+       svml_s_powf4_core-sse2, svml_s_powf8_core-sse,
+       svml_s_sincosf16_core-avx2, svml_s_sincosf4_core-sse2,
+       svml_s_sincosf8_core-sse, svml_s_sinf16_core-avx2,
+       svml_s_sinf4_core-sse2 and svml_s_sinf8_core-sse.
+       * sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx2.h: New file.
+       * sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx512.h: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-sse4_1.h: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf16_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf16_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf16_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf16_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf16_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf16_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf4_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf8_core.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN2v_cos): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN4v_cos): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN8v_cos): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN2v_exp): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN4v_exp): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN8v_exp): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log2_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN2v_log): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log4_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN4v_log): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_log8_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN8v_log): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN2vv_pow): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN4vv_pow): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN8vv_pow): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN2v_sin): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN4v_sin): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN8v_sin): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN2vvv_sincos): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN4vvv_sincos): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN8vvv_sincos): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf16_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf16_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN16v_cosf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf4_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN4v_cosf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_cosf8_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN8v_cosf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf16_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf16_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN16v_expf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf4_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN4v_expf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_expf8_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN8v_expf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf16_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf16_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN16v_logf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf4_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN4v_logf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_logf8_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN8v_logf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf16_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf16_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN16vv_powf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf4_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN4vv_powf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_powf8_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN8vv_powf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf16_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf16_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN16vvv_sincosf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf4_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN4vvv_sincosf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sincosf8_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN8vvv_sincosf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf16_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf16_core-avx2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVeN16v_sinf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf4_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf4_core-sse2.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVbN4v_sinf): Removed.
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf8_core.S:  Renamed to
+       ...
+       * sysdeps/x86_64/fpu/multiarch/svml_d_sinf8_core-sse.S: This.
+       Don't include <sysdep.h> nor <init-arch.h>.
+       (_ZGVdN8v_sinf): Removed.
+
 2017-08-04  H.J. Lu  <hongjiu.lu@intel.com>
 
        * sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
index 86ddde358bc14a093169b8929b8b84a67f4ccd83..f9ceb09a4ec894a1adc2ae3569988ebb669c92db 100644 (file)
@@ -70,5 +70,35 @@ libmvec-sysdep_routines += svml_d_cos2_core_sse4 svml_d_cos4_core_avx2 \
                           svml_d_pow4_core_avx2 svml_d_pow8_core_avx512 \
                           svml_s_powf4_core_sse4 svml_s_powf8_core_avx2 \
                           svml_s_powf16_core_avx512 svml_s_sincosf4_core_sse4 \
-                          svml_s_sincosf8_core_avx2 svml_s_sincosf16_core_avx512
+                          svml_s_sincosf8_core_avx2 \
+                          svml_s_sincosf16_core_avx512 \
+                          svml_d_cos2_core-sse2 svml_d_cos4_core-sse \
+                          svml_d_cos8_core-avx2 svml_d_exp2_core-sse2 \
+                          svml_d_exp4_core-sse svml_d_exp8_core-avx2 \
+                          svml_d_log2_core-sse2 svml_d_log4_core-sse \
+                          svml_d_log8_core-avx2 svml_d_pow2_core-sse2 \
+                          svml_d_pow4_core-sse svml_d_pow8_core-avx2 \
+                          svml_d_sin2_core-sse2 svml_d_sin4_core-sse \
+                          svml_d_sin8_core-avx2 \
+                          svml_d_sincos2_core-sse2 \
+                          svml_d_sincos4_core-sse \
+                          svml_d_sincos8_core-avx2 \
+                          svml_s_cosf16_core-avx2 \
+                          svml_s_cosf4_core-sse2 \
+                          svml_s_cosf8_core-sse \
+                          svml_s_expf16_core-avx2 \
+                          svml_s_expf4_core-sse2 \
+                          svml_s_expf8_core-sse \
+                          svml_s_logf16_core-avx2 \
+                          svml_s_logf4_core-sse2 \
+                          svml_s_logf8_core-sse \
+                          svml_s_powf16_core-avx2 \
+                          svml_s_powf4_core-sse2 \
+                          svml_s_powf8_core-sse \
+                          svml_s_sincosf16_core-avx2 \
+                          svml_s_sincosf4_core-sse2 \
+                          svml_s_sincosf8_core-sse \
+                          svml_s_sinf16_core-avx2 \
+                          svml_s_sinf4_core-sse2 \
+                          svml_s_sinf8_core-sse
 endif
diff --git a/sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx2.h b/sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx2.h
new file mode 100644 (file)
index 0000000..a43d4c5
--- /dev/null
@@ -0,0 +1,38 @@
+/* Common definition for libmathvec ifunc selections optimized with
+   AVX2.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <init-arch.h>
+
+#undef PASTER2
+#define PASTER2(x,y)   x##_##y
+
+extern void REDIRECT_NAME (void);
+extern __typeof (REDIRECT_NAME) OPTIMIZE (sse_wrapper) attribute_hidden;
+extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden;
+
+static inline void *
+IFUNC_SELECTOR (void)
+{
+  const struct cpu_features* cpu_features = __get_cpu_features ();
+
+  if (CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable))
+    return OPTIMIZE (avx2);
+
+  return OPTIMIZE (sse_wrapper);
+}
diff --git a/sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx512.h b/sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx512.h
new file mode 100644 (file)
index 0000000..1857e1f
--- /dev/null
@@ -0,0 +1,42 @@
+/* Common definition for libmathvec ifunc selections optimized with
+   AVX512.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <init-arch.h>
+
+#undef PASTER2
+#define PASTER2(x,y)   x##_##y
+
+extern void REDIRECT_NAME (void);
+extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2_wrapper) attribute_hidden;
+extern __typeof (REDIRECT_NAME) OPTIMIZE (knl) attribute_hidden;
+extern __typeof (REDIRECT_NAME) OPTIMIZE (skx) attribute_hidden;
+
+static inline void *
+IFUNC_SELECTOR (void)
+{
+  const struct cpu_features* cpu_features = __get_cpu_features ();
+
+  if (CPU_FEATURES_ARCH_P (cpu_features, AVX512DQ_Usable))
+    return OPTIMIZE (skx);
+
+  if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable))
+    return OPTIMIZE (knl);
+
+  return OPTIMIZE (avx2_wrapper);
+}
diff --git a/sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-sse4_1.h b/sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-sse4_1.h
new file mode 100644 (file)
index 0000000..fcd0e68
--- /dev/null
@@ -0,0 +1,38 @@
+/* Common definition for libmathvec ifunc selections optimized with
+   SSE4.1.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <init-arch.h>
+
+#undef PASTER2
+#define PASTER2(x,y)   x##_##y
+
+extern void REDIRECT_NAME (void);
+extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
+extern __typeof (REDIRECT_NAME) OPTIMIZE (sse4) attribute_hidden;
+
+static inline void *
+IFUNC_SELECTOR (void)
+{
+  const struct cpu_features* cpu_features = __get_cpu_features ();
+
+  if (CPU_FEATURES_CPU_P (cpu_features, SSE4_1))
+    return OPTIMIZE (sse4);
+
+  return OPTIMIZE (sse2);
+}
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core-sse2.S
index b20949244271ddab20e58a553a4dc500e968fa35..82601e7ad5c9f49b7c38130c87b95fb2a76def5f 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized cos, vector length is 2.
+/* SSE2 version of vectorized cos, vector length is 2.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN2v_cos)
-        .type   _ZGVbN2v_cos, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN2v_cos_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN2v_cos_sse2(%rip), %rax
-        ret
-END (_ZGVbN2v_cos)
-libmvec_hidden_def (_ZGVbN2v_cos)
-
 #define _ZGVbN2v_cos _ZGVbN2v_cos_sse2
 #include "../svml_d_cos2_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.c
new file mode 100644 (file)
index 0000000..f5645c7
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized cos, vector length is 2.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN2v_cos
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN2v_cos, __GI__ZGVbN2v_cos, __redirect__ZGVbN2v_cos)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core-sse.S
index ff382e9c6c953d013f3541214e8139066dcde450..cd928f2fab9e461a4d1f715bcf498487bfb80892 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized cos, vector length is 4.
+/* SSE version of vectorized cos, vector length is 4.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN4v_cos)
-        .type   _ZGVdN4v_cos, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN4v_cos_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN4v_cos_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN4v_cos)
-libmvec_hidden_def (_ZGVdN4v_cos)
-
 #define _ZGVdN4v_cos _ZGVdN4v_cos_sse_wrapper
 #include "../svml_d_cos4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.c
new file mode 100644 (file)
index 0000000..7b29e25
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized cos, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN4v_cos
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN4v_cos, __GI__ZGVdN4v_cos, __redirect__ZGVdN4v_cos)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 63%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core-avx2.S
index 46d35a25d2b289c8303311f07a92ffcf5fad0830..b4c8ae271113181f9cc74e98233ca2ef8f0f86c3 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized cos, vector length is 8.
+/* AVX2 version of vectorized cos, vector length is 8.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN8v_cos)
-        .type   _ZGVeN8v_cos, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-1:      leaq    _ZGVeN8v_cos_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_cos_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_cos_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN8v_cos)
-
 #define _ZGVeN8v_cos _ZGVeN8v_cos_avx2_wrapper
 #include "../svml_d_cos8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.c
new file mode 100644 (file)
index 0000000..6d30baa
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized cos, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN8v_cos
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN8v_cos, __GI__ZGVeN8v_cos, __redirect__ZGVeN8v_cos)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 68%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core-sse2.S
index 5a17e11a0fb3dee2750d56f1259274d9f65916d4..a66b82ccb8debe485f40de81c0ea062200db9f93 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized exp.
+/* SSE2 version of vectorized exp.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN2v_exp)
-        .type   _ZGVbN2v_exp, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN2v_exp_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN2v_exp_sse2(%rip), %rax
-        ret
-END (_ZGVbN2v_exp)
-libmvec_hidden_def (_ZGVbN2v_exp)
-
 #define _ZGVbN2v_exp _ZGVbN2v_exp_sse2
 #include "../svml_d_exp2_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.c
new file mode 100644 (file)
index 0000000..e24758d
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized exp, vector length is 2.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN2v_exp
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN2v_exp, __GI__ZGVbN2v_exp, __redirect__ZGVbN2v_exp)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core-sse.S
index b994a794cdd23239800f5ad6a0ce017681cffde9..613fae19abfeb4d38b6f22b6e17652d49f206c26 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized exp.
+/* SSE version of vectorized exp.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN4v_exp)
-        .type   _ZGVdN4v_exp, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN4v_exp_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN4v_exp_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN4v_exp)
-libmvec_hidden_def (_ZGVdN4v_exp)
-
 #define _ZGVdN4v_exp _ZGVdN4v_exp_sse_wrapper
 #include "../svml_d_exp4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.c
new file mode 100644 (file)
index 0000000..d3a9d87
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized exp, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN4v_exp
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN4v_exp, __GI__ZGVdN4v_exp, __redirect__ZGVdN4v_exp)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 64%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core-avx2.S
index 6189080fcc1089380206a25d6122611e7b462cff..9b95236fb872c312ad3031b85427130b8f2a82d9 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized exp.
+/* AVX2 version of vectorized exp.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN8v_exp)
-        .type   _ZGVeN8v_exp, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN8v_exp_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_exp_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_exp_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN8v_exp)
-
 #define _ZGVeN8v_exp _ZGVeN8v_exp_avx2_wrapper
 #include "../svml_d_exp8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.c
new file mode 100644 (file)
index 0000000..cf8cd50
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized exp, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN8v_exp
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN8v_exp, __GI__ZGVeN8v_exp, __redirect__ZGVeN8v_exp)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_log2_core-sse2.S
index 5097add6b50fc6c2b1541af06b40bbf0178d6533..a8bffccc56de6fbe502a3cac79713b8b4b21f634 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized log.
+/* SSE2 version of vectorized log.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-        .text
-ENTRY (_ZGVbN2v_log)
-        .type   _ZGVbN2v_log, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN2v_log_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN2v_log_sse2(%rip), %rax
-        ret
-END (_ZGVbN2v_log)
-libmvec_hidden_def (_ZGVbN2v_log)
-
 #define _ZGVbN2v_log _ZGVbN2v_log_sse2
 #include "../svml_d_log2_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.c
new file mode 100644 (file)
index 0000000..2fcc08a
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized log, vector length is 2.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN2v_log
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN2v_log, __GI__ZGVbN2v_log, __redirect__ZGVbN2v_log)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_log4_core-sse.S
index 1e9a2f48a1eb4ab6f2bca2d575752b772bc50e8f..0760b041befe69e99e8dfeea3ce71019b099c7f9 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized log.
+/* SSE version of vectorized log.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN4v_log)
-        .type   _ZGVdN4v_log, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN4v_log_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN4v_log_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN4v_log)
-libmvec_hidden_def (_ZGVdN4v_log)
-
 #define _ZGVdN4v_log _ZGVdN4v_log_sse_wrapper
 #include "../svml_d_log4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.c
new file mode 100644 (file)
index 0000000..1756978
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized log, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN4v_log
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN4v_log, __GI__ZGVdN4v_log, __redirect__ZGVdN4v_log)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 64%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_log8_core-avx2.S
index 43f572d36c3201b4eeb8864d5a4dcc244486f261..af3229f9a3bcfc2d17f3c0a48ae0ea49580b7465 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized log.
+/* AVX2 version of vectorized log.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN8v_log)
-        .type   _ZGVeN8v_log, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN8v_log_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_log_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_log_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN8v_log)
-
 #define _ZGVeN8v_log _ZGVeN8v_log_avx2_wrapper
 #include "../svml_d_log8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.c
new file mode 100644 (file)
index 0000000..1d9864c
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized log, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN8v_log
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN8v_log, __GI__ZGVeN8v_log, __redirect__ZGVeN8v_log)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core-sse2.S
index adb0872e568f0bd06da0409b4fd9e1a09bdb80d7..2e8d40b5f569bc7804e4b47e78db66c28d1e6998 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized pow.
+/* SSE2 version of vectorized pow.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN2vv_pow)
-        .type   _ZGVbN2vv_pow, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN2vv_pow_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN2vv_pow_sse2(%rip), %rax
-        ret
-END (_ZGVbN2vv_pow)
-libmvec_hidden_def (_ZGVbN2vv_pow)
-
 #define _ZGVbN2vv_pow _ZGVbN2vv_pow_sse2
 #include "../svml_d_pow2_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.c
new file mode 100644 (file)
index 0000000..bc72a77
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized pow, vector length is 2.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN2vv_pow
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN2vv_pow, __GI__ZGVbN2vv_pow,
+              __redirect__ZGVbN2vv_pow)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core-sse.S
index eea8af66384c37014033574a60bc79d7c97c92e1..7f17a7c8694fc71e208a67afd370f0468c9f5154 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized pow.
+/* SSE version of vectorized pow.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN4vv_pow)
-        .type   _ZGVdN4vv_pow, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN4vv_pow_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN4vv_pow_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN4vv_pow)
-libmvec_hidden_def (_ZGVdN4vv_pow)
-
 #define _ZGVdN4vv_pow _ZGVdN4vv_pow_sse_wrapper
 #include "../svml_d_pow4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.c
new file mode 100644 (file)
index 0000000..f4b4db0
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized pow, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN4vv_pow
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN4vv_pow, __GI__ZGVdN4vv_pow,
+              __redirect__ZGVdN4vv_pow)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 64%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core-avx2.S
index 68f12b2848b9f66cfd1b21c25dd7c3da93e771ed..02a4bdd6564a193a496b11866371840458cf2e34 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized pow.
+/* AVX2 version of vectorized pow.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN8vv_pow)
-        .type   _ZGVeN8vv_pow, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN8vv_pow_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN8vv_pow_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN8vv_pow_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN8vv_pow)
-
 #define _ZGVeN8vv_pow _ZGVeN8vv_pow_avx2_wrapper
 #include "../svml_d_pow8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.c
new file mode 100644 (file)
index 0000000..178f581
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized pow, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN8vv_pow
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN8vv_pow, __GI__ZGVeN8vv_pow,
+              __redirect__ZGVeN8vv_pow)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 68%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core-sse2.S
index e35654be8dc3bfed56f532ff6bc31456fa00f2e0..9b49c3cd33cf38dd55e0978f4e863b4159bedfb5 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sin.
+/* SSE2 version of vectorized sin.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN2v_sin)
-        .type   _ZGVbN2v_sin, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN2v_sin_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN2v_sin_sse2(%rip), %rax
-        ret
-END (_ZGVbN2v_sin)
-libmvec_hidden_def (_ZGVbN2v_sin)
-
 #define _ZGVbN2v_sin _ZGVbN2v_sin_sse2
 #include "../svml_d_sin2_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.c
new file mode 100644 (file)
index 0000000..a0995e7
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized sin, vector length is 2.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN2v_sin
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN2v_sin, __GI__ZGVbN2v_sin, __redirect__ZGVbN2v_sin)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core-sse.S
index f4482d3a11289b0a1bf8b7337eb1a610b2022ddc..0f27cef8d1b6104c3b90c5d43fcf3cd27d9a005c 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sin, vector length is 4.
+/* SSE version of vectorized sin, vector length is 4.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN4v_sin)
-        .type   _ZGVdN4v_sin, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN4v_sin_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN4v_sin_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN4v_sin)
-libmvec_hidden_def (_ZGVdN4v_sin)
-
 #define _ZGVdN4v_sin _ZGVdN4v_sin_sse_wrapper
 #include "../svml_d_sin4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.c
new file mode 100644 (file)
index 0000000..44ff161
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized sin, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN4v_sin
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN4v_sin, __GI__ZGVdN4v_sin, __redirect__ZGVdN4v_sin)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core-avx2.S
index 2b15889c7158a51b4b9dca6538b957d0ca58024c..89cabc3f86248096a0a4cf81b6d0191bb493c3c1 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sin.
+/* AVX2 version of vectorized sin.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
 #include <sysdep.h>
 #include <init-arch.h>
 
-       .text
-ENTRY (_ZGVeN8v_sin)
-        .type   _ZGVeN8v_sin, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN8v_sin_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_sin_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN8v_sin_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN8v_sin)
-
 #define _ZGVeN8v_sin _ZGVeN8v_sin_avx2_wrapper
 #include "../svml_d_sin8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.c
new file mode 100644 (file)
index 0000000..0391268
--- /dev/null
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized sin, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN8v_sin
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN8v_sin, __GI__ZGVeN8v_sin, __redirect__ZGVeN8v_sin)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core-sse2.S
index 13279e3fb7293f0de3aa26b5522438979bd8c68a..7c15800ddbfafe6825ad2583e45432edbaa277fb 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sincos.
+/* SSE2 version of vectorized sincos.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN2vvv_sincos)
-        .type   _ZGVbN2vvv_sincos, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN2vvv_sincos_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN2vvv_sincos_sse2(%rip), %rax
-        ret
-END (_ZGVbN2vvv_sincos)
-libmvec_hidden_def (_ZGVbN2vvv_sincos)
-
 #define _ZGVbN2vvv_sincos _ZGVbN2vvv_sincos_sse2
 #include "../svml_d_sincos2_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.c
new file mode 100644 (file)
index 0000000..5902894
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sincos, vector length is 2.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN2vvv_sincos
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN2vvv_sincos, __GI__ZGVbN2vvv_sincos,
+              __redirect__ZGVbN2vvv_sincos)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core-sse.S
index 8aacb8e76a83c29ec16a2f075d892818370d1b32..739efc30a037dee0ca5b0cb5449dadd3b4d55aee 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sincos.
+/* SSE version of vectorized sincos.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN4vvv_sincos)
-        .type   _ZGVdN4vvv_sincos, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN4vvv_sincos_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN4vvv_sincos_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN4vvv_sincos)
-libmvec_hidden_def (_ZGVdN4vvv_sincos)
-
 #define _ZGVdN4vvv_sincos _ZGVdN4vvv_sincos_sse_wrapper
 #include "../svml_d_sincos4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.c
new file mode 100644 (file)
index 0000000..d55aa6f
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sincos, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN4vvv_sincos
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN4vvv_sincos, __GI__ZGVdN4vvv_sincos,
+              __redirect__ZGVdN4vvv_sincos)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 63%
rename from sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core-avx2.S
index 3c0abc379eb0cbebeabf737f8b454de798cca7df..026d93ce8c6998296eb1675e8599efcd9fd0b060 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sincos.
+/* AVX2 version of vectorized sincos.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN8vvv_sincos)
-        .type   _ZGVeN8vvv_sincos, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN8vvv_sincos_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN8vvv_sincos_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN8vvv_sincos_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN8vvv_sincos)
-
 #define _ZGVeN8vvv_sincos _ZGVeN8vvv_sincos_avx2_wrapper
 #include "../svml_d_sincos8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.c
new file mode 100644 (file)
index 0000000..f78146f
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sincos, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN8vvv_sincos
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN8vvv_sincos, __GI__ZGVeN8vvv_sincos,
+              __redirect__ZGVeN8vvv_sincos)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 64%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core-avx2.S
index cd67665972c0f1ab1e9ae3ce422cb3bb305d2551..f9c00239cb289ea15f9ce4452d25a1d4aea08aca 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized cosf.
+/* AVX2 version of vectorized cosf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN16v_cosf)
-        .type   _ZGVeN16v_cosf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN16v_cosf_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_cosf_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_cosf_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN16v_cosf)
-
 #define _ZGVeN16v_cosf _ZGVeN16v_cosf_avx2_wrapper
 #include "../svml_s_cosf16_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.c
new file mode 100644 (file)
index 0000000..186c012
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized cosf, vector length is 16.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN16v_cosf
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN16v_cosf, __GI__ZGVeN16v_cosf,
+              __redirect__ZGVeN16v_cosf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core-sse2.S
index d73d7c7e3fe32fa1a2df47d8921090c315145e70..6a4ba6a8e2893395681d8884b2ec260827799b7e 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized cosf, vector length is 4.
+/* SSE2 version of vectorized cosf, vector length is 4.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN4v_cosf)
-        .type   _ZGVbN4v_cosf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN4v_cosf_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN4v_cosf_sse2(%rip), %rax
-        ret
-END (_ZGVbN4v_cosf)
-libmvec_hidden_def (_ZGVbN4v_cosf)
-
 #define _ZGVbN4v_cosf _ZGVbN4v_cosf_sse2
 #include "../svml_s_cosf4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.c
new file mode 100644 (file)
index 0000000..8eb5e03
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized cosf, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN4v_cosf
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN4v_cosf, __GI__ZGVbN4v_cosf,
+              __redirect__ZGVbN4v_cosf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core-sse.S
index f7530c138a9ec30fdf80bb7a276b44f11aad17d3..3a4741bb97fe87a53440e65be693915cd50d2d8e 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized cosf, vector length is 8.
+/* SSE version of vectorized cosf, vector length is 8.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN8v_cosf)
-        .type   _ZGVdN8v_cosf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN8v_cosf_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN8v_cosf_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN8v_cosf)
-libmvec_hidden_def (_ZGVdN8v_cosf)
-
 #define _ZGVdN8v_cosf _ZGVdN8v_cosf_sse_wrapper
 #include "../svml_s_cosf8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.c
new file mode 100644 (file)
index 0000000..13d2e9d
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized cosf, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN8v_cosf
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN8v_cosf, __GI__ZGVdN8v_cosf,
+              __redirect__ZGVdN8v_cosf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core-avx2.S
index 3998f616aa8cad4f9b8dc542d6d95981345491c6..9ff196e55c16553b3225c3d6694e3057576d7770 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized expf.
+/* AVX2 version of vectorized expf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
 #include <sysdep.h>
 #include <init-arch.h>
 
-       .text
-ENTRY (_ZGVeN16v_expf)
-        .type   _ZGVeN16v_expf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN16v_expf_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_expf_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_expf_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN16v_expf)
-
 #define _ZGVeN16v_expf _ZGVeN16v_expf_avx2_wrapper
 #include "../svml_s_expf16_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.c
new file mode 100644 (file)
index 0000000..42566ac
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized expf, vector length is 16.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN16v_expf
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN16v_expf, __GI__ZGVeN16v_expf,
+              __redirect__ZGVeN16v_expf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core-sse2.S
index 8051720ec27d1973d74623a825e36c46abdba29f..393e420b11a3a06426c025e166a53e5e3b610527 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized expf.
+/* SSE2 version of vectorized expf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN4v_expf)
-        .type   _ZGVbN4v_expf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN4v_expf_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN4v_expf_sse2(%rip), %rax
-        ret
-END (_ZGVbN4v_expf)
-libmvec_hidden_def (_ZGVbN4v_expf)
-
 #define _ZGVbN4v_expf _ZGVbN4v_expf_sse2
 #include "../svml_s_expf4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.c
new file mode 100644 (file)
index 0000000..5218e3d
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized expf, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN4v_expf
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN4v_expf, __GI__ZGVbN4v_expf,
+              __redirect__ZGVbN4v_expf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core-sse.S
index 6ffb1fd78483ece420d1287122dc08f12fe987fc..a75b601bb2fd1c9e8b44a8da6ba78d53839db13f 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized expf.
+/* SSE version of vectorized expf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN8v_expf)
-        .type   _ZGVdN8v_expf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN8v_expf_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN8v_expf_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN8v_expf)
-libmvec_hidden_def (_ZGVdN8v_expf)
-
 #define _ZGVdN8v_expf _ZGVdN8v_expf_sse_wrapper
 #include "../svml_s_expf8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.c
new file mode 100644 (file)
index 0000000..6badac4
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized expf, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN8v_expf
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN8v_expf, __GI__ZGVdN8v_expf,
+              __redirect__ZGVdN8v_expf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 64%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core-avx2.S
index 8ab03195c6c5a19452c5e72a7e3e3ab87574a9d7..2a87049fa8302c89dab7c192324122b1d6557923 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized logf.
+/* AVX2 version of vectorized logf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN16v_logf)
-        .type   _ZGVeN16v_logf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN16v_logf_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_logf_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_logf_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN16v_logf)
-
 #define _ZGVeN16v_logf _ZGVeN16v_logf_avx2_wrapper
 #include "../svml_s_logf16_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.c
new file mode 100644 (file)
index 0000000..81c5653
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized logf, vector length is 16.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN16v_logf
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN16v_logf, __GI__ZGVeN16v_logf,
+              __redirect__ZGVeN16v_logf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core-sse2.S
index 4e0e36d5bd43c7684ed1276d8b8ee55f38e02e2d..f6ef828563a9ff723e9efe72609a7c73d8c4b9c4 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized logf.
+/* SSE2 version of vectorized logf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN4v_logf)
-        .type   _ZGVbN4v_logf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN4v_logf_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN4v_logf_sse2(%rip), %rax
-        ret
-END (_ZGVbN4v_logf)
-libmvec_hidden_def (_ZGVbN4v_logf)
-
 #define _ZGVbN4v_logf _ZGVbN4v_logf_sse2
 #include "../svml_s_logf4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.c
new file mode 100644 (file)
index 0000000..a32855e
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized logf, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN4v_logf
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN4v_logf, __GI__ZGVbN4v_logf,
+              __redirect__ZGVbN4v_logf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core-sse.S
index f4b82de3d4023abd0ce1c3c56c2c8c3bf837d50b..e5a46ef17a944822e41c3a87193faf7e04c3d84d 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized logf.
+/* SSE version of vectorized logf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN8v_logf)
-        .type   _ZGVdN8v_logf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN8v_logf_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN8v_logf_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN8v_logf)
-libmvec_hidden_def (_ZGVdN8v_logf)
-
 #define _ZGVdN8v_logf _ZGVdN8v_logf_sse_wrapper
 #include "../svml_s_logf8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.c
new file mode 100644 (file)
index 0000000..b4efa7a
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized logf, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN8v_logf
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN8v_logf, __GI__ZGVdN8v_logf,
+              __redirect__ZGVdN8v_logf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 63%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core-avx2.S
index 6d10c7576f59c841ada0536a3bcd8b5b74024085..ec6ec70f53f9c66301d33f273433f7b7a96556fe 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized powf.
+/* AVX2 version of vectorized powf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN16vv_powf)
-        .type   _ZGVeN16vv_powf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN16vv_powf_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN16vv_powf_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN16vv_powf_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN16vv_powf)
-
 #define _ZGVeN16vv_powf _ZGVeN16vv_powf_avx2_wrapper
 #include "../svml_s_powf16_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.c
new file mode 100644 (file)
index 0000000..25c706a
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized powf, vector length is 16.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN16vv_powf
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN16vv_powf, __GI__ZGVeN16vv_powf,
+              __redirect__ZGVeN16vv_powf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core-sse2.S
index 785b54988234dacbbbc1e3c9eb76c555c865adb7..30b77b665d2b8173a839754907c090916feaac32 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized powf.
+/* SSE2 version of vectorized powf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN4vv_powf)
-        .type   _ZGVbN4vv_powf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN4vv_powf_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN4vv_powf_sse2(%rip), %rax
-        ret
-END (_ZGVbN4vv_powf)
-libmvec_hidden_def (_ZGVbN4vv_powf)
-
 #define _ZGVbN4vv_powf _ZGVbN4vv_powf_sse2
 #include "../svml_s_powf4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.c
new file mode 100644 (file)
index 0000000..4d9821c
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized powf, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN4vv_powf
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN4vv_powf, __GI__ZGVbN4vv_powf,
+              __redirect__ZGVbN4vv_powf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core-sse.S
index 1f6a07315e705bcd98c6e8a56421af6a78a7af7a..824042d36e364cdbf2db801d57c756b34542ea36 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized powf.
+/* SSE version of vectorized powf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN8vv_powf)
-        .type   _ZGVdN8vv_powf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN8vv_powf_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN8vv_powf_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN8vv_powf)
-libmvec_hidden_def (_ZGVdN8vv_powf)
-
 #define _ZGVdN8vv_powf _ZGVdN8vv_powf_sse_wrapper
 #include "../svml_s_powf8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.c
new file mode 100644 (file)
index 0000000..64ac764
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sinf, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN8vv_powf
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN8vv_powf, __GI__ZGVdN8vv_powf,
+              __redirect__ZGVdN8vv_powf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 63%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core-avx2.S
index 054546095273df33218b2436bab79109f55f856b..a145d2f296cc1d10b44b424ac9e608493714a26f 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sincosf.
+/* AVX2 version of vectorized sincosf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN16vvv_sincosf)
-        .type   _ZGVeN16vvv_sincosf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN16vvv_sincosf_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN16vvv_sincosf_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN16vvv_sincosf_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN16vvv_sincosf)
-
 #define _ZGVeN16vvv_sincosf _ZGVeN16vvv_sincosf_avx2_wrapper
 #include "../svml_s_sincosf16_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.c
new file mode 100644 (file)
index 0000000..ac66a4e
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sincosf, vector length is 16.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN16vvv_sincosf
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN16vvv_sincosf, __GI__ZGVeN16vvv_sincosf,
+              __redirect__ZGVeN16vvv_sincosf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core-sse2.S
index a249be33d1c9f1574cc690f5491088b55658a379..dc25091fbc5575e506cb46f96455c8c36f80374f 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sincosf.
+/* SSE2 version of vectorized sincosf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN4vvv_sincosf)
-        .type   _ZGVbN4vvv_sincosf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN4vvv_sincosf_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN4vvv_sincosf_sse2(%rip), %rax
-        ret
-END (_ZGVbN4vvv_sincosf)
-libmvec_hidden_def (_ZGVbN4vvv_sincosf)
-
 #define _ZGVbN4vvv_sincosf _ZGVbN4vvv_sincosf_sse2
 #include "../svml_s_sincosf4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.c
new file mode 100644 (file)
index 0000000..fc81d43
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sincosf, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN4vvv_sincosf
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN4vvv_sincosf, __GI__ZGVbN4vvv_sincosf,
+              __redirect__ZGVbN4vvv_sincosf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 65%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core-sse.S
index 320fd861a572933243440fa6c1c20cd950843597..2541297373e839a8c28c5f70b0e239f49c75e8a6 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sincosf.
+/* SSE version of vectorized sincosf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN8vvv_sincosf)
-        .type   _ZGVdN8vvv_sincosf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVdN8vvv_sincosf_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN8vvv_sincosf_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN8vvv_sincosf)
-libmvec_hidden_def (_ZGVdN8vvv_sincosf)
-
 #define _ZGVdN8vvv_sincosf _ZGVdN8vvv_sincosf_sse_wrapper
 #include "../svml_s_sincosf8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.c
new file mode 100644 (file)
index 0000000..cd57ff3
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sincosf, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN8vvv_sincosf
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN8vvv_sincosf, __GI__ZGVdN8vvv_sincosf,
+              __redirect__ZGVdN8vvv_sincosf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 64%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core-avx2.S
index 2c18dbce5354c5ad6b7bf8248979ca7da64240b5..f7d0c3f2ffdc25026f326f7960a0ebf5fd94c89d 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sinf.
+/* AVX2 version of vectorized sinf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVeN16v_sinf)
-        .type   _ZGVeN16v_sinf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVeN16v_sinf_skx(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512DQ_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_sinf_knl(%rip), %rax
-       HAS_ARCH_FEATURE (AVX512F_Usable)
-        jnz     2f
-        leaq    _ZGVeN16v_sinf_avx2_wrapper(%rip), %rax
-2:      ret
-END (_ZGVeN16v_sinf)
-
 #define _ZGVeN16v_sinf _ZGVeN16v_sinf_avx2_wrapper
 #include "../svml_s_sinf16_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.c
new file mode 100644 (file)
index 0000000..d2e15f0
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sinf, vector length is 16.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVeN16v_sinf
+#include "ifunc-mathvec-avx512.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN16v_sinf, __GI__ZGVeN16v_sinf,
+              __redirect__ZGVeN16v_sinf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 67%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core-sse2.S
index 35564738997f2abc31887696aed0c9e2864ef005..a9de6742023d480ea48efa468b7db01e023b3590 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sinf.
+/* SSE2 version of vectorized sinf.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVbN4v_sinf)
-        .type   _ZGVbN4v_sinf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-        leaq    _ZGVbN4v_sinf_sse4(%rip), %rax
-       HAS_CPU_FEATURE (SSE4_1)
-        jz      2f
-        ret
-2:      leaq    _ZGVbN4v_sinf_sse2(%rip), %rax
-        ret
-END (_ZGVbN4v_sinf)
-libmvec_hidden_def (_ZGVbN4v_sinf)
-
 #define _ZGVbN4v_sinf _ZGVbN4v_sinf_sse2
 #include "../svml_s_sinf4_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.c
new file mode 100644 (file)
index 0000000..466b798
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sinf, vector length is 4.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVbN4v_sinf
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN4v_sinf, __GI__ZGVbN4v_sinf,
+              __redirect__ZGVbN4v_sinf)
+  __attribute__ ((visibility ("hidden")));
+#endif
similarity index 66%
rename from sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S
rename to sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core-sse.S
index 674e88bd55827f18c8fb97d785dde279a9e77fc6..fbf6bd20ffb402f380efd6c6aa154350d77736d9 100644 (file)
@@ -1,4 +1,4 @@
-/* Multiple versions of vectorized sinf, vector length is 8.
+/* SSE version of vectorized sinf, vector length is 8.
    Copyright (C) 2014-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sysdep.h>
-#include <init-arch.h>
-
-       .text
-ENTRY (_ZGVdN8v_sinf)
-        .type   _ZGVdN8v_sinf, @gnu_indirect_function
-       LOAD_RTLD_GLOBAL_RO_RDX
-1:      leaq    _ZGVdN8v_sinf_avx2(%rip), %rax
-       HAS_ARCH_FEATURE (AVX2_Usable)
-        jz      2f
-        ret
-2:      leaq    _ZGVdN8v_sinf_sse_wrapper(%rip), %rax
-        ret
-END (_ZGVdN8v_sinf)
-libmvec_hidden_def (_ZGVdN8v_sinf)
-
 #define _ZGVdN8v_sinf _ZGVdN8v_sinf_sse_wrapper
 #include "../svml_s_sinf8_core.S"
diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.c
new file mode 100644 (file)
index 0000000..cb5c992
--- /dev/null
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized sinf, vector length is 8.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SYMBOL_NAME _ZGVdN8v_sinf
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN8v_sinf, __GI__ZGVdN8v_sinf,
+              __redirect__ZGVdN8v_sinf)
+  __attribute__ ((visibility ("hidden")));
+#endif