summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--sysdeps/sparc/sparc-ifunc.h152
2 files changed, 14 insertions, 142 deletions
diff --git a/ChangeLog b/ChangeLog
index 27d267c5ed..1b666c7ca4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2017-12-01 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/sparc/sparc-ifunc.h (SPARC_ASM_IFUNC_DFLT,
+ SPARC_ASM_IFUNC1, SPARC_ASM_IFUNC2, SET, SPARC_ASM_VIS2_IFUNC,
+ SPARC_ASM_VIS3_IFUNC, SPARC_ASM_VIS3_VIS2_IFUNC): Remove macros.
+
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.c: Fix build
due redirect macro.
diff --git a/sysdeps/sparc/sparc-ifunc.h b/sysdeps/sparc/sparc-ifunc.h
index 4a68cf1583..221cebdcd6 100644
--- a/sysdeps/sparc/sparc-ifunc.h
+++ b/sysdeps/sparc/sparc-ifunc.h
@@ -17,157 +17,25 @@
#include <sysdep.h>
-#ifdef __ASSEMBLER__
+#define INIT_ARCH()
-# ifdef SHARED
-
-# define SPARC_ASM_IFUNC_DFLT(name, dflt) \
-ENTRY (__##name) \
- .type __##name, @gnu_indirect_function; \
- SETUP_PIC_REG_LEAF(o3, o5); \
- sethi %gdop_hix22(dflt), %o1; \
- xor %o1, %gdop_lox10(dflt), %o1; \
- add %o3, %o1, %o1; \
- retl; \
- mov %o1, %o0; \
-END (__##name)
-
-# define SPARC_ASM_IFUNC1(name, m1, f1, dflt) \
-ENTRY (__##name) \
- .type __##name, @gnu_indirect_function; \
- SETUP_PIC_REG_LEAF(o3, o5); \
- set m1, %o1; \
- andcc %o0, %o1, %g0; \
- be 9f; \
- nop; \
- sethi %gdop_hix22(f1), %o1; \
- xor %o1, %gdop_lox10(f1), %o1; \
- ba 10f; \
- nop; \
-9: sethi %gdop_hix22(dflt), %o1; \
- xor %o1, %gdop_lox10(dflt), %o1; \
-10: add %o3, %o1, %o1; \
- retl; \
- mov %o1, %o0; \
-END (__##name)
-
-# define SPARC_ASM_IFUNC2(name, m1, f1, m2, f2, dflt) \
-ENTRY (__##name) \
- .type __##name, @gnu_indirect_function; \
- SETUP_PIC_REG_LEAF(o3, o5); \
- set m1, %o1; \
- andcc %o0, %o1, %g0; \
- be 8f; \
- nop; \
- sethi %gdop_hix22(f1), %o1; \
- xor %o1, %gdop_lox10(f1), %o1; \
- ba 10f; \
- nop; \
-8: set m2, %o1; \
- andcc %o0, %o1, %g0; \
- be 9f; \
- nop; \
- sethi %gdop_hix22(f2), %o1; \
- xor %o1, %gdop_lox10(f2), %o1; \
- ba 10f; \
- nop; \
-9: sethi %gdop_hix22(dflt), %o1; \
- xor %o1, %gdop_lox10(dflt), %o1; \
-10: add %o3, %o1, %o1; \
- retl; \
- mov %o1, %o0; \
-END (__##name)
-
-# else /* SHARED */
-
-# ifdef __arch64__
-# define SET(SYM, TMP, REG) setx SYM, TMP, REG
-# else
-# define SET(SYM, TMP, REG) set SYM, REG
-# endif
-
-# define SPARC_ASM_IFUNC_DFLT(name, dflt) \
-ENTRY (__##name) \
- .type __##name, @gnu_indirect_function; \
- SET(dflt, %g1, %o1); \
- retl; \
- mov %o1, %o0; \
-END (__##name)
-
-# define SPARC_ASM_IFUNC1(name, m1, f1, dflt) \
-ENTRY (__##name) \
- .type __##name, @gnu_indirect_function; \
- set m1, %o1; \
- andcc %o0, %o1, %g0; \
- be 9f; \
- nop; \
- SET(f1, %g1, %o1); \
- ba 10f; \
- nop; \
-9: SET(dflt, %g1, %o1); \
-10: retl; \
- mov %o1, %o0; \
-END (__##name)
-
-# define SPARC_ASM_IFUNC2(name, m1, f1, m2, f2, dflt) \
-ENTRY (__##name) \
- .type __##name, @gnu_indirect_function; \
- set m1, %o1; \
- andcc %o0, %o1, %g0; \
- be 8f; \
- nop; \
- SET(f1, %g1, %o1); \
- ba 10f; \
- nop; \
-8: set m2, %o1; \
- andcc %o0, %o1, %g0; \
- be 9f; \
- nop; \
- SET(f2, %g1, %o1); \
- ba 10f; \
- nop; \
-9: SET(dflt, %g1, %o1); \
-10: retl; \
- mov %o1, %o0; \
-END (__##name)
-
-# endif /* SHARED */
-
-#define SPARC_ASM_VIS2_IFUNC(name) \
- SPARC_ASM_IFUNC1(name, HWCAP_SPARC_VIS2, \
- __##name##_vis2, __##name##_generic)
-
-#define SPARC_ASM_VIS3_IFUNC(name) \
- SPARC_ASM_IFUNC1(name, HWCAP_SPARC_VIS3, \
- __##name##_vis3, __##name##_generic)
-
-#define SPARC_ASM_VIS3_VIS2_IFUNC(name) \
- SPARC_ASM_IFUNC2(name, HWCAP_SPARC_VIS3, \
- __##name##_vis3, \
- HWCAP_SPARC_VIS2, \
- __##name##_vis2, __##name##_generic)
-
-#else /* __ASSEMBLER__ */
-# define INIT_ARCH()
-
-# define sparc_libc_ifunc_redirected(redirected_name, name, expr) \
+#define sparc_libc_ifunc_redirected(redirected_name, name, expr) \
__ifunc (redirected_name, name, expr(hwcap), int hwcap, INIT_ARCH)
-# define sparc_libm_ifunc(name, expr) \
+#define sparc_libm_ifunc(name, expr) \
__ifunc (name, name, expr, int hwcap, libm_ifunc_init)
-# define sparc_libc_ifunc(name, expr) sparc_libm_ifunc (name, expr)
+#define sparc_libc_ifunc(name, expr) sparc_libm_ifunc (name, expr)
-# define sparc_libm_ifunc_redirected(redirected_name, name, expr) \
+#define sparc_libm_ifunc_redirected(redirected_name, name, expr) \
__ifunc (redirected_name, name, expr, int hwcap, libm_ifunc_init)
/* It essentially does libc_hidden_builtin_def (name) and redirect
the internal redirected symbol to ifunc implementation. */
-# if defined SHARED
-# define sparc_ifunc_redirected_hidden_def(redirect_name, name) \
+#if defined SHARED
+# define sparc_ifunc_redirected_hidden_def(redirect_name, name) \
__hidden_ver1 (name, __GI_##name, redirect_name) \
__attribute__ ((visibility ("hidden")));
-# else
-# define sparc_ifunc_redirected_hidden_def(redirect_name, name)
-# endif
-#endif /* __ASSEMBLER__ */
+#else
+# define sparc_ifunc_redirected_hidden_def(redirect_name, name)
+#endif