From 3bc426e156c6952a1b7e32435c308aaab76616a1 Mon Sep 17 00:00:00 2001 From: Wainer dos Santos Moschetta Date: Tue, 11 Apr 2017 14:18:34 -0300 Subject: powerpc: refactor strcasecmp, strcmp, and strncmp IFUNC. Clean up the IFUNC implementations for powerpc in order to remove unneeded macro definitions. Tested on ppc64le with and without --disable-multi-arch flag. * sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S: Define the implementation-specific function name and remove unneeded macros definition. * sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S: Likewise. * sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S Likewise. * sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S: Likewise. * sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S: Likewise. * sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S: Likewise. * sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S: Likewise. * sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S: Likewise. * sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S: Likewise. * sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S: Likewise. * sysdeps/powerpc/powerpc64/power4/strncmp.S: Set a default function name if not defined and pass as parameter to macros accordingly. * sysdeps/powerpc/powerpc64/power7/strcmp.S: Likewise. * sysdeps/powerpc/powerpc64/power7/strncmp.S: Likewise. * sysdeps/powerpc/powerpc64/power8/strcmp.S: Likewise. * sysdeps/powerpc/powerpc64/power8/strncmp.S: Likewise. * sysdeps/powerpc/powerpc64/power9/strcmp.S: Likewise. * sysdeps/powerpc/powerpc64/power9/strncmp.S: Likewise. * sysdeps/powerpc/powerpc64/strcmp.S: Likewise. * sysdeps/powerpc/powerpc64/strncmp.S: Likewise. --- .../powerpc/powerpc64/multiarch/strcasecmp_l-power7.S | 15 +-------------- sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S | 16 +--------------- sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S | 16 +--------------- sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S | 16 +--------------- sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S | 18 ++---------------- sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S | 16 +--------------- sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S | 17 +---------------- sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S | 17 +---------------- sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S | 17 +---------------- sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S | 16 +--------------- sysdeps/powerpc/powerpc64/power4/strncmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/power7/strcmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/power7/strncmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/power8/strcmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/power8/strncmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/power9/strcmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/power9/strncmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/strcmp.S | 8 ++++++-- sysdeps/powerpc/powerpc64/strncmp.S | 8 ++++++-- 19 files changed, 65 insertions(+), 171 deletions(-) (limited to 'sysdeps/powerpc') diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S index f30a311..da4c405 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S @@ -18,20 +18,7 @@ #include -#undef ENTRY -#define ENTRY(name) \ - .section ".text"; \ - ENTRY_2(__strcasecmp_l_power7) \ - .align ALIGNARG(2); \ - BODY_LABEL(__strcasecmp_l_power7): \ - cfi_startproc; \ - LOCALENTRY(__strcasecmp_l_power7) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strcasecmp_l_power7) \ - END_2(__strcasecmp_l_power7) +#define __strcasecmp __strcasecmp_l_power7 #undef weak_alias #define weak_alias(name, alias) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S index b34bd45..82d1b63 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S @@ -18,21 +18,7 @@ #include -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .section ".text"; \ - ENTRY_2(__strcmp_power7) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strcmp_power7): \ - cfi_startproc; \ - LOCALENTRY(__strcmp_power7) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strcmp_power7) \ - END_2(__strcmp_power7) +#define STRCMP __strcmp_power7 #undef libc_hidden_builtin_def #define libc_hidden_builtin_def(name) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S index b3aeb6c..b2464a8 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S @@ -18,21 +18,7 @@ #include -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .section ".text"; \ - ENTRY_2(__strcmp_power8) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strcmp_power8): \ - cfi_startproc; \ - LOCALENTRY(__strcmp_power8) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strcmp_power8) \ - END_2(__strcmp_power8) +#define STRCMP __strcmp_power8 #undef libc_hidden_builtin_def #define libc_hidden_builtin_def(name) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S index 11dc688..48ea05d 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S @@ -18,21 +18,7 @@ #include -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .section ".text"; \ - ENTRY_2(__strcmp_power9) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strcmp_power9): \ - cfi_startproc; \ - LOCALENTRY(__strcmp_power9) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strcmp_power9) \ - END_2(__strcmp_power9) +#define STRCMP __strcmp_power9 #undef libc_hidden_builtin_def #define libc_hidden_builtin_def(name) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S index 3cff326..085e747 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S @@ -19,25 +19,11 @@ #include #if defined SHARED && IS_IN (libc) -# undef EALIGN -# define EALIGN(name, alignt, words) \ - .section ".text"; \ - ENTRY_2(__strcmp_ppc) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strcmp_ppc): \ - cfi_startproc; \ - LOCALENTRY(__strcmp_ppc) - -# undef END -# define END(name) \ - cfi_endproc; \ - TRACEBACK(__strcmp_ppc) \ - END_2(__strcmp_ppc) +# define STRCMP __strcmp_ppc # undef libc_hidden_builtin_def # define libc_hidden_builtin_def(name) \ .globl __GI_strcmp; __GI_strcmp = __strcmp_ppc -#endif +#endif /* SHARED && IS_IN */ #include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S index fa25d8e..01729a3 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S @@ -17,21 +17,7 @@ #include -#undef EALIGN -#define EALIGN(name,alignt,words) \ - .section ".text"; \ - ENTRY_2(__strncmp_power4) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strncmp_power4): \ - cfi_startproc; \ - LOCALENTRY(__strncmp_power4) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strncmp_power4) \ - END_2(__strncmp_power4) +#define STRNCMP __strncmp_power4 #undef libc_hidden_builtin_def #define libc_hidden_builtin_def(name) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S index 3aad277..a069d4b 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S @@ -17,22 +17,7 @@ #include -#undef EALIGN -#define EALIGN(name,alignt,words) \ - .section ".text"; \ - ENTRY_2(__strncmp_power7) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strncmp_power7): \ - cfi_startproc; \ - LOCALENTRY(__strncmp_power7) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strncmp_power7) \ - END_2(__strncmp_power7) - +#define STRNCMP __strncmp_power7 #undef libc_hidden_builtin_def #define libc_hidden_builtin_def(name) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S index 496d19e..3cbcaad 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S @@ -17,22 +17,7 @@ #include -#undef EALIGN -#define EALIGN(name,alignt,words) \ - .section ".text"; \ - ENTRY_2(__strncmp_power8) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strncmp_power8): \ - cfi_startproc; \ - LOCALENTRY(__strncmp_power8) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strncmp_power8) \ - END_2(__strncmp_power8) - +#define STRNCMP __strncmp_power8 #undef libc_hidden_builtin_def #define libc_hidden_builtin_def(name) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S index bd09285..6d0deaa 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S @@ -17,22 +17,7 @@ #include -#undef EALIGN -#define EALIGN(name,alignt,words) \ - .section ".text"; \ - ENTRY_2(__strncmp_power9) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strncmp_power9): \ - cfi_startproc; \ - LOCALENTRY(__strncmp_power9) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strncmp_power9) \ - END_2(__strncmp_power9) - +#define STRNCMP __strncmp_power9 #undef libc_hidden_builtin_def #define libc_hidden_builtin_def(name) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S index 2e7885b..e4b93ae 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S @@ -18,21 +18,7 @@ #include #if defined SHARED && IS_IN (libc) -#undef EALIGN -#define EALIGN(name,alignt,words) \ - .section ".text"; \ - ENTRY_2(__strncmp_ppc) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - BODY_LABEL(__strncmp_ppc): \ - cfi_startproc; \ - LOCALENTRY(__strncmp_ppc) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strncmp_ppc) \ - END_2(__strncmp_ppc) +# define STRNCMP __strncmp_ppc # undef libc_hidden_builtin_def # define libc_hidden_builtin_def(name) \ diff --git a/sysdeps/powerpc/powerpc64/power4/strncmp.S b/sysdeps/powerpc/powerpc64/power4/strncmp.S index e8a0970..2b0c00d 100644 --- a/sysdeps/powerpc/powerpc64/power4/strncmp.S +++ b/sysdeps/powerpc/powerpc64/power4/strncmp.S @@ -18,11 +18,15 @@ #include +#ifndef STRNCMP +# define STRNCMP strncmp +#endif + /* See strlen.s for comments on how the end-of-string testing works. */ /* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ -EALIGN (strncmp, 4, 0) +EALIGN (STRNCMP, 4, 0) CALL_MCOUNT 3 #define rTMP2 r0 @@ -217,5 +221,5 @@ L(u4): sub rRTN, rWORD1, rWORD2 L(ux): li rRTN, 0 blr -END (strncmp) +END (STRNCMP) libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc64/power7/strcmp.S b/sysdeps/powerpc/powerpc64/power7/strcmp.S index e468103..14e14f4 100644 --- a/sysdeps/powerpc/powerpc64/power7/strcmp.S +++ b/sysdeps/powerpc/powerpc64/power7/strcmp.S @@ -23,10 +23,14 @@ #include +#ifndef STRCMP +# define STRCMP strcmp +#endif + /* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ .machine power7 -EALIGN (strcmp, 4, 0) +EALIGN (STRCMP, 4, 0) CALL_MCOUNT 2 or r9, r3, r4 @@ -160,5 +164,5 @@ L(diffOfNULL): extsw r3, r10 /* sign extend result */ blr /* return */ -END (strcmp) +END (STRCMP) libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc64/power7/strncmp.S b/sysdeps/powerpc/powerpc64/power7/strncmp.S index 6a03da5..d53b31b 100644 --- a/sysdeps/powerpc/powerpc64/power7/strncmp.S +++ b/sysdeps/powerpc/powerpc64/power7/strncmp.S @@ -18,13 +18,17 @@ #include +#ifndef STRNCMP +# define STRNCMP strncmp +#endif + /* See strlen.s for comments on how the end-of-string testing works. */ /* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ -EALIGN (strncmp,5,0) +EALIGN (STRNCMP,5,0) CALL_MCOUNT 3 #define rTMP2 r0 @@ -219,5 +223,5 @@ L(u4): sub rRTN,rWORD1,rWORD2 L(ux): li rRTN,0 blr -END (strncmp) +END (STRNCMP) libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc64/power8/strcmp.S b/sysdeps/powerpc/powerpc64/power8/strcmp.S index d46bff8..770484f 100644 --- a/sysdeps/powerpc/powerpc64/power8/strcmp.S +++ b/sysdeps/powerpc/powerpc64/power8/strcmp.S @@ -18,6 +18,10 @@ #include +#ifndef STRCMP +# define STRCMP strcmp +#endif + /* Implements the function size_t [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) @@ -27,7 +31,7 @@ 64K as default, the page cross handling assumes minimum page size of 4k. */ -EALIGN (strcmp, 4, 0) +EALIGN (STRCMP, 4, 0) li r0,0 /* Check if [s1]+16 or [s2]+16 will cross a 4K page boundary using @@ -239,5 +243,5 @@ L(pagecross_retdiff): L(pagecross_nullfound): li r3,0 b L(pagecross_retdiff) -END (strcmp) +END (STRCMP) libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc64/power8/strncmp.S b/sysdeps/powerpc/powerpc64/power8/strncmp.S index b93a16e..3d8df90 100644 --- a/sysdeps/powerpc/powerpc64/power8/strncmp.S +++ b/sysdeps/powerpc/powerpc64/power8/strncmp.S @@ -18,6 +18,10 @@ #include +#ifndef STRNCMP +# define STRNCMP strncmp +#endif + /* Implements the function int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t [r5] n) @@ -28,7 +32,7 @@ 4k. */ .machine power7 -EALIGN (strncmp, 4, 0) +EALIGN (STRNCMP, 4, 0) /* Check if size is 0. */ mr. r10,r5 beq cr0,L(ret0) @@ -319,5 +323,5 @@ L(byte_ne_4): extsw r10,r9 mr r9,r8 b L(size_reached_1) -END(strncmp) +END(STRNCMP) libc_hidden_builtin_def(strncmp) diff --git a/sysdeps/powerpc/powerpc64/power9/strcmp.S b/sysdeps/powerpc/powerpc64/power9/strcmp.S index 17ec8c2..2dc4f6c 100644 --- a/sysdeps/powerpc/powerpc64/power9/strcmp.S +++ b/sysdeps/powerpc/powerpc64/power9/strcmp.S @@ -18,6 +18,10 @@ #ifdef __LITTLE_ENDIAN__ #include +#ifndef STRCMP +# define STRCMP strcmp +#endif + /* Implements the function int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) @@ -62,7 +66,7 @@ allows it. */ .machine power7 -EALIGN (strcmp, 4, 0) +EALIGN (STRCMP, 4, 0) li r0, 0 /* Check if [s1]+16 or [s2]+16 will cross a 4K page boundary using @@ -257,7 +261,7 @@ L(pagecross_retdiff): L(pagecross_nullfound): li r3, 0 b L(pagecross_retdiff) -END (strcmp) +END (STRCMP) libc_hidden_builtin_def (strcmp) #else #include diff --git a/sysdeps/powerpc/powerpc64/power9/strncmp.S b/sysdeps/powerpc/powerpc64/power9/strncmp.S index 14d016a..c946a5c 100644 --- a/sysdeps/powerpc/powerpc64/power9/strncmp.S +++ b/sysdeps/powerpc/powerpc64/power9/strncmp.S @@ -26,6 +26,10 @@ code paths depending of data alignment for first 32 bytes and uses vectorised loops after that. */ +#ifndef STRNCMP +# define STRNCMP strncmp +#endif + /* TODO: Change this to actual instructions when minimum binutils is upgraded to 2.27. Macros are defined below for these newer instructions in order to maintain compatibility. */ @@ -64,7 +68,7 @@ /* TODO: change this to .machine power9 when minimum binutils is upgraded to 2.27. */ .machine power7 -EALIGN (strncmp, 4, 0) +EALIGN (STRNCMP, 4, 0) /* Check if size is 0. */ cmpdi cr0, r5, 0 beq cr0, L(ret0) @@ -368,7 +372,7 @@ L(byte_ne_2): L(byte_ne_3): extsw r7, r7 b L(byte_ne_1) -END(strncmp) +END(STRNCMP) libc_hidden_builtin_def(strncmp) #else #include diff --git a/sysdeps/powerpc/powerpc64/strcmp.S b/sysdeps/powerpc/powerpc64/strcmp.S index 3cadcca..ab5f8c2 100644 --- a/sysdeps/powerpc/powerpc64/strcmp.S +++ b/sysdeps/powerpc/powerpc64/strcmp.S @@ -22,7 +22,11 @@ /* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ -EALIGN (strcmp, 4, 0) +#ifndef STRCMP +# define STRCMP strcmp +#endif + +EALIGN (STRCMP, 4, 0) CALL_MCOUNT 2 #define rTMP2 r0 @@ -172,5 +176,5 @@ L(u3): sub rRTN, rWORD1, rWORD2 L(u4): lbz rWORD1, -1(rSTR1) sub rRTN, rWORD1, rWORD2 blr -END (strcmp) +END (STRCMP) libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc64/strncmp.S b/sysdeps/powerpc/powerpc64/strncmp.S index d560e4f..0765998 100644 --- a/sysdeps/powerpc/powerpc64/strncmp.S +++ b/sysdeps/powerpc/powerpc64/strncmp.S @@ -22,7 +22,11 @@ /* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ -EALIGN (strncmp, 4, 0) +#ifndef STRNCMP +# define STRNCMP strncmp +#endif + +EALIGN (STRNCMP, 4, 0) CALL_MCOUNT 3 #define rTMP2 r0 @@ -202,5 +206,5 @@ L(u1): L(u2): lbzu rWORD1, -1(rSTR1) L(u3): sub rRTN, rWORD1, rWORD2 blr -END (strncmp) +END (STRNCMP) libc_hidden_builtin_def (strncmp) -- cgit v1.1