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:
parent
4f0a1cea34
commit
fd484e057d
@ -1,3 +1,8 @@
|
||||
2015-08-26 Stefan Liebler <stli@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/s390/multiarch/ifunc-resolve.h (s390_vx_libc_ifunc,
|
||||
s390_vx_libc_ifunc2): New macro function.
|
||||
|
||||
2015-08-26 Stefan Liebler <stli@linux.vnet.ibm.com>
|
||||
|
||||
* config.h.in (HAVE_S390_VX_ASM_SUPPORT): New macro undefine.
|
||||
|
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user