mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
S390: Ifunc resolver macro for vector instructions.
This patch introduces a s390 specific ifunc resolver macro for 32/64bit, which chooses <func>_vx with vector instructions if HWCAP_S390_VX flag in hwcaps is set or <func>_c if not. ChangeLog: * sysdeps/s390/multiarch/ifunc-resolve.h (s390_vx_libc_ifunc, s390_vx_libc_ifunc2): New macro function.
This commit is contained in:
committed by
Andreas Krebbel
parent
4f0a1cea34
commit
fd484e057d
@@ -73,3 +73,22 @@
|
||||
else \
|
||||
return &__##FUNC##_default; \
|
||||
}
|
||||
|
||||
#define s390_vx_libc_ifunc(FUNC) \
|
||||
s390_vx_libc_ifunc2(FUNC, FUNC)
|
||||
|
||||
#define s390_vx_libc_ifunc2(RESOLVERFUNC, FUNC) \
|
||||
/* Make the declarations of the optimized functions hidden in order
|
||||
to prevent GOT slots being generated for them. */ \
|
||||
extern __typeof (FUNC) RESOLVERFUNC##_vx attribute_hidden; \
|
||||
extern __typeof (FUNC) RESOLVERFUNC##_c attribute_hidden; \
|
||||
extern void *__resolve_##RESOLVERFUNC (unsigned long int) __asm__ (#FUNC); \
|
||||
\
|
||||
void *__resolve_##RESOLVERFUNC (unsigned long int dl_hwcap) \
|
||||
{ \
|
||||
if (dl_hwcap & HWCAP_S390_VX) \
|
||||
return &RESOLVERFUNC##_vx; \
|
||||
else \
|
||||
return &RESOLVERFUNC##_c; \
|
||||
} \
|
||||
__asm__ (".type " #FUNC ", %gnu_indirect_function");
|
||||
|
Reference in New Issue
Block a user