powerpc: refactor strcasecmp, strcmp, and strncmp IFUNC.
authorWainer dos Santos Moschetta <wainersm@linux.vnet.ibm.com>
Tue, 11 Apr 2017 17:18:34 +0000 (14:18 -0300)
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Tue, 11 Apr 2017 20:13:54 +0000 (17:13 -0300)
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.

20 files changed:
ChangeLog
sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S
sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S
sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S
sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S
sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S
sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S
sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S
sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S
sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S
sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S
sysdeps/powerpc/powerpc64/power4/strncmp.S
sysdeps/powerpc/powerpc64/power7/strcmp.S
sysdeps/powerpc/powerpc64/power7/strncmp.S
sysdeps/powerpc/powerpc64/power8/strcmp.S
sysdeps/powerpc/powerpc64/power8/strncmp.S
sysdeps/powerpc/powerpc64/power9/strcmp.S
sysdeps/powerpc/powerpc64/power9/strncmp.S
sysdeps/powerpc/powerpc64/strcmp.S
sysdeps/powerpc/powerpc64/strncmp.S

index d4bbc56..0dc5c07 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,28 @@
 2017-04-11  Wainer dos Santos Moschetta  <wainersm@linux.vnet.ibm.com>
 
+       * 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.
+
        * sysdeps/powerpc/powerpc64/multiarch/stpcpy-power8.S: Define the
        implementation-specific function name and remove unneeded macros
        definition.
index f30a311..da4c405 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index b34bd45..82d1b63 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index b3aeb6c..b2464a8 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index 11dc688..48ea05d 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index 3cff326..085e747 100644 (file)
 #include <sysdep.h>
 
 #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 <sysdeps/powerpc/powerpc64/strcmp.S>
index fa25d8e..01729a3 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index 3aad277..a069d4b 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index 496d19e..3cbcaad 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index bd09285..6d0deaa 100644 (file)
 
 #include <sysdep.h>
 
-#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)
index 2e7885b..e4b93ae 100644 (file)
 #include <sysdep.h>
 
 #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)                         \
index e8a0970..2b0c00d 100644 (file)
 
 #include <sysdep.h>
 
+#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)
index e468103..14e14f4 100644 (file)
 
 #include <sysdep.h>
 
+#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)
index 6a03da5..d53b31b 100644 (file)
 
 #include <sysdep.h>
 
+#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)
index d46bff8..770484f 100644 (file)
 
 #include <sysdep.h>
 
+#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)
index b93a16e..3d8df90 100644 (file)
 
 #include <sysdep.h>
 
+#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)
index 17ec8c2..2dc4f6c 100644 (file)
 #ifdef __LITTLE_ENDIAN__
 #include <sysdep.h>
 
+#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 <sysdeps/powerpc/powerpc64/power8/strcmp.S>
index 14d016a..c946a5c 100644 (file)
    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 <sysdeps/powerpc/powerpc64/power8/strncmp.S>
index 3cadcca..ab5f8c2 100644 (file)
 
 /* 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)
index d560e4f..0765998 100644 (file)
 
 /* 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)