diff options
Diffstat (limited to 'sysdeps/powerpc/powerpc64/power7')
29 files changed, 303 insertions, 206 deletions
diff --git a/sysdeps/powerpc/powerpc64/power7/Implies b/sysdeps/powerpc/powerpc64/power7/Implies deleted file mode 100644 index 9d68f39d22..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power6/fpu -powerpc/powerpc64/power6 diff --git a/sysdeps/powerpc/powerpc64/power7/add_n.S b/sysdeps/powerpc/powerpc64/power7/add_n.S index 2397d3abca..1306e5aa2f 100644 --- a/sysdeps/powerpc/powerpc64/power7/add_n.S +++ b/sysdeps/powerpc/powerpc64/power7/add_n.S @@ -1,6 +1,6 @@ /* PowerPC64 mpn_lshift -- mpn_add_n/mpn_sub_n -- mpn addition and subtraction. - Copyright (C) 2003-2016 Free Software Foundation, Inc. + Copyright (C) 2003-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -36,19 +36,19 @@ #define VP r5 #define N r6 -EALIGN(FUNC, 5, 0) +ENTRY_TOCLESS (FUNC, 5) #ifdef USE_AS_SUB - addic r0, r0, 0 + addic r0, r1, -1 #else - addic r0, r1, -1 + addic r0, r0, 0 #endif andi. r7, N, 1 beq L(bx0) ld r7, 0(UP) - ld r9, r0(VP) + ld r9, 0(VP) ADDSUBC r11, r9, r7 - std r11, r0(RP) + std r11, 0(RP) cmpldi N, N, 1 beq N, L(end) addi UP, UP, 8 diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/Implies b/sysdeps/powerpc/powerpc64/power7/fpu/Implies deleted file mode 100644 index 30fa17646e..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/fpu diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power7/fpu/multiarch/Implies deleted file mode 100644 index 410d289a6d..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S index 5366fd6d0b..78e3bdef80 100644 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S +++ b/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S @@ -1,5 +1,5 @@ /* finite(). PowerPC64/POWER7 version. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -27,7 +27,7 @@ .section ".text" .type __finite, @function .machine power7 -EALIGN (__finite, 4, 0) +ENTRY (__finite, 4) CALL_MCOUNT 0 lfd fp0,.LC0@toc(r2) ftdiv cr7,fp1,fp0 diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S index 89dfad1235..0fbb99d64d 100644 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S +++ b/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S @@ -1,5 +1,5 @@ /* isinf(). PowerPC64/POWER7 version. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -27,7 +27,7 @@ .section ".text" .type __isinf, @function .machine power7 -EALIGN (__isinf, 4, 0) +ENTRY (__isinf, 4) CALL_MCOUNT 0 lfd fp0,.LC0@toc(r2) ftdiv cr7,fp1,fp0 diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S index bb65c3a153..3f675d7e58 100644 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S +++ b/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S @@ -1,5 +1,5 @@ /* isnan(). PowerPC64/POWER7 version. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -27,7 +27,7 @@ .section ".text" .type __isnan, @function .machine power7 -EALIGN (__isnan, 4, 0) +ENTRY (__isnan, 4) CALL_MCOUNT 0 lfd fp0,.LC0@toc(r2) ftdiv cr7,fp1,fp0 diff --git a/sysdeps/powerpc/powerpc64/power7/memchr.S b/sysdeps/powerpc/powerpc64/power7/memchr.S index 03f0d7c2dd..9ab5ab2099 100644 --- a/sysdeps/powerpc/powerpc64/power7/memchr.S +++ b/sysdeps/powerpc/powerpc64/power7/memchr.S @@ -1,5 +1,5 @@ /* Optimized memchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -20,13 +20,27 @@ #include <sysdep.h> /* int [r3] memchr (char *s [r3], int byte [r4], int size [r5]) */ + +#ifndef MEMCHR +# define MEMCHR __memchr +#endif .machine power7 -ENTRY (__memchr) +ENTRY_TOCLESS (MEMCHR) CALL_MCOUNT 3 dcbt 0,r3 clrrdi r8,r3,3 insrdi r4,r4,8,48 - add r7,r3,r5 /* Calculate the last acceptable address. */ + + /* Calculate the last acceptable address and check for possible + addition overflow by using satured math: + r7 = r3 + r5 + r7 |= -(r7 < x) */ + add r7,r3,r5 + subfc r6,r3,r7 + subfe r9,r9,r9 + extsw r6,r9 + or r7,r7,r6 + insrdi r4,r4,16,32 cmpldi r5,32 li r9, -1 @@ -180,6 +194,6 @@ L(small_range): bne cr6,L(done) blr -END (__memchr) +END (MEMCHR) weak_alias (__memchr, memchr) libc_hidden_builtin_def (memchr) diff --git a/sysdeps/powerpc/powerpc64/power7/memcmp.S b/sysdeps/powerpc/powerpc64/power7/memcmp.S index 4be29008c7..91acdfbd92 100644 --- a/sysdeps/powerpc/powerpc64/power7/memcmp.S +++ b/sysdeps/powerpc/powerpc64/power7/memcmp.S @@ -1,5 +1,5 @@ /* Optimized memcmp implementation for POWER7/PowerPC64. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -21,9 +21,11 @@ /* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ - +#ifndef MEMCMP +# define MEMCMP memcmp +#endif .machine power7 -EALIGN (memcmp, 4, 0) +ENTRY_TOCLESS (MEMCMP, 4) CALL_MCOUNT 3 #define rRTN r3 @@ -82,17 +84,17 @@ EALIGN (memcmp, 4, 0) byte loop. */ blt cr1, L(bytealigned) std rWORD8, rWORD8SAVE(r1) - cfi_offset(rWORD8, rWORD8SAVE) std rWORD7, rWORD7SAVE(r1) - cfi_offset(rWORD7, rWORD7SAVE) std rOFF8, rOFF8SAVE(r1) - cfi_offset(rWORD7, rOFF8SAVE) std rOFF16, rOFF16SAVE(r1) - cfi_offset(rWORD7, rOFF16SAVE) std rOFF24, rOFF24SAVE(r1) - cfi_offset(rWORD7, rOFF24SAVE) std rOFF32, rOFF32SAVE(r1) - cfi_offset(rWORD7, rOFF32SAVE) + cfi_offset(rWORD8, rWORD8SAVE) + cfi_offset(rWORD7, rWORD7SAVE) + cfi_offset(rOFF8, rOFF8SAVE) + cfi_offset(rOFF16, rOFF16SAVE) + cfi_offset(rOFF24, rOFF24SAVE) + cfi_offset(rOFF32, rOFF32SAVE) li rOFF8,8 li rOFF16,16 @@ -601,18 +603,18 @@ L(unaligned): the actual start of rSTR2. */ clrrdi rSTR2, rSTR2, 3 std rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) /* Compute the left/right shift counts for the unaligned rSTR2, compensating for the logical (DW aligned) start of rSTR1. */ clrldi rSHL, rWORD8_SHIFT, 61 clrrdi rSTR1, rSTR1, 3 std rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) sldi rSHL, rSHL, 3 cmpld cr5, rWORD8_SHIFT, rSTR2 add rN, rN, r12 sldi rWORD6, r12, 3 std rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) + cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) + cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) cfi_offset(rWORD6_SHIFT, rWORD6SHIFTSAVE) subfic rSHR, rSHL, 64 srdi r0, rN, 5 /* Divide by 32 */ @@ -689,15 +691,15 @@ L(duPs4): .align 4 L(DWunaligned): std rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - cfi_offset(rWORD8_SHIFT, rWORD8SHIFTSAVE) clrrdi rSTR2, rSTR2, 3 std rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) srdi r0, rN, 5 /* Divide by 32 */ std rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) andi. r12, rN, 24 /* Get the DW remainder */ std rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) + cfi_offset(rWORD8_SHIFT, rWORD8SHIFTSAVE) + cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) + cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) cfi_offset(rWORD6_SHIFT, rWORD6SHIFTSAVE) sldi rSHL, rSHL, 3 LD rWORD6, 0, rSTR2 @@ -1054,6 +1056,6 @@ L(duzeroLength): li rRTN, 0 blr -END (memcmp) +END (MEMCMP) libc_hidden_builtin_def (memcmp) weak_alias (memcmp, bcmp) diff --git a/sysdeps/powerpc/powerpc64/power7/memcpy.S b/sysdeps/powerpc/powerpc64/power7/memcpy.S index 6bb5f13257..3d8629ca65 100644 --- a/sysdeps/powerpc/powerpc64/power7/memcpy.S +++ b/sysdeps/powerpc/powerpc64/power7/memcpy.S @@ -1,5 +1,5 @@ /* Optimized memcpy implementation for PowerPC64/POWER7. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -20,15 +20,19 @@ #include <sysdep.h> -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); +/* void * [r3] memcpy (void *dst [r3], void *src [r4], size_t len [r5]); Returns 'dst'. */ +#ifndef MEMCPY +# define MEMCPY memcpy +#endif + #define dst 11 /* Use r11 so r3 kept unchanged. */ #define src 4 #define cnt 5 .machine power7 -EALIGN (memcpy, 5, 0) +ENTRY_TOCLESS (MEMCPY, 5) CALL_MCOUNT 3 cmpldi cr1,cnt,31 @@ -87,63 +91,63 @@ L(aligned_copy): srdi 12,cnt,7 cmpdi 12,0 beq L(aligned_tail) - lxvd2x 6,0,src - lxvd2x 7,src,6 + lvx 6,0,src + lvx 7,src,6 mtctr 12 b L(aligned_128loop) .align 4 L(aligned_128head): /* for the 2nd + iteration of this loop. */ - lxvd2x 6,0,src - lxvd2x 7,src,6 + lvx 6,0,src + lvx 7,src,6 L(aligned_128loop): - lxvd2x 8,src,7 - lxvd2x 9,src,8 - stxvd2x 6,0,dst + lvx 8,src,7 + lvx 9,src,8 + stvx 6,0,dst addi src,src,64 - stxvd2x 7,dst,6 - stxvd2x 8,dst,7 - stxvd2x 9,dst,8 - lxvd2x 6,0,src - lxvd2x 7,src,6 + stvx 7,dst,6 + stvx 8,dst,7 + stvx 9,dst,8 + lvx 6,0,src + lvx 7,src,6 addi dst,dst,64 - lxvd2x 8,src,7 - lxvd2x 9,src,8 + lvx 8,src,7 + lvx 9,src,8 addi src,src,64 - stxvd2x 6,0,dst - stxvd2x 7,dst,6 - stxvd2x 8,dst,7 - stxvd2x 9,dst,8 + stvx 6,0,dst + stvx 7,dst,6 + stvx 8,dst,7 + stvx 9,dst,8 addi dst,dst,64 bdnz L(aligned_128head) L(aligned_tail): mtocrf 0x01,cnt bf 25,32f - lxvd2x 6,0,src - lxvd2x 7,src,6 - lxvd2x 8,src,7 - lxvd2x 9,src,8 + lvx 6,0,src + lvx 7,src,6 + lvx 8,src,7 + lvx 9,src,8 addi src,src,64 - stxvd2x 6,0,dst - stxvd2x 7,dst,6 - stxvd2x 8,dst,7 - stxvd2x 9,dst,8 + stvx 6,0,dst + stvx 7,dst,6 + stvx 8,dst,7 + stvx 9,dst,8 addi dst,dst,64 32: bf 26,16f - lxvd2x 6,0,src - lxvd2x 7,src,6 + lvx 6,0,src + lvx 7,src,6 addi src,src,32 - stxvd2x 6,0,dst - stxvd2x 7,dst,6 + stvx 6,0,dst + stvx 7,dst,6 addi dst,dst,32 16: bf 27,8f - lxvd2x 6,0,src + lvx 6,0,src addi src,src,16 - stxvd2x 6,0,dst + stvx 6,0,dst addi dst,dst,16 8: bf 28,4f @@ -422,5 +426,5 @@ L(end_unaligned_loop): /* Return original DST pointer. */ blr -END_GEN_TB (memcpy,TB_TOCLESS) +END_GEN_TB (MEMCPY,TB_TOCLESS) libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc64/power7/memmove.S b/sysdeps/powerpc/powerpc64/power7/memmove.S index e263ba9608..b7f3dc28d1 100644 --- a/sysdeps/powerpc/powerpc64/power7/memmove.S +++ b/sysdeps/powerpc/powerpc64/power7/memmove.S @@ -1,5 +1,5 @@ /* Optimized memmove implementation for PowerPC64/POWER7. - Copyright (C) 2014-2016 Free Software Foundation, Inc. + Copyright (C) 2014-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -27,8 +27,11 @@ If source and destiny overlaps, a optimized backwards memcpy is used instead. */ +#ifndef MEMMOVE +# define MEMMOVE memmove +#endif .machine power7 -EALIGN (memmove, 5, 0) +ENTRY_TOCLESS (MEMMOVE, 5) CALL_MCOUNT 3 L(_memmove): @@ -89,63 +92,63 @@ L(aligned_copy): srdi 12,r5,7 cmpdi 12,0 beq L(aligned_tail) - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 + lvx 6,0,r4 + lvx 7,r4,6 mtctr 12 b L(aligned_128loop) .align 4 L(aligned_128head): /* for the 2nd + iteration of this loop. */ - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 + lvx 6,0,r4 + lvx 7,r4,6 L(aligned_128loop): - lxvd2x 8,r4,7 - lxvd2x 9,r4,8 - stxvd2x 6,0,r11 + lvx 8,r4,7 + lvx 9,r4,8 + stvx 6,0,r11 addi r4,r4,64 - stxvd2x 7,r11,6 - stxvd2x 8,r11,7 - stxvd2x 9,r11,8 - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 + stvx 7,r11,6 + stvx 8,r11,7 + stvx 9,r11,8 + lvx 6,0,r4 + lvx 7,r4,6 addi r11,r11,64 - lxvd2x 8,r4,7 - lxvd2x 9,r4,8 + lvx 8,r4,7 + lvx 9,r4,8 addi r4,r4,64 - stxvd2x 6,0,r11 - stxvd2x 7,r11,6 - stxvd2x 8,r11,7 - stxvd2x 9,r11,8 + stvx 6,0,r11 + stvx 7,r11,6 + stvx 8,r11,7 + stvx 9,r11,8 addi r11,r11,64 bdnz L(aligned_128head) L(aligned_tail): mtocrf 0x01,r5 bf 25,32f - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 - lxvd2x 8,r4,7 - lxvd2x 9,r4,8 + lvx 6,0,r4 + lvx 7,r4,6 + lvx 8,r4,7 + lvx 9,r4,8 addi r4,r4,64 - stxvd2x 6,0,r11 - stxvd2x 7,r11,6 - stxvd2x 8,r11,7 - stxvd2x 9,r11,8 + stvx 6,0,r11 + stvx 7,r11,6 + stvx 8,r11,7 + stvx 9,r11,8 addi r11,r11,64 32: bf 26,16f - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 + lvx 6,0,r4 + lvx 7,r4,6 addi r4,r4,32 - stxvd2x 6,0,r11 - stxvd2x 7,r11,6 + stvx 6,0,r11 + stvx 7,r11,6 addi r11,r11,32 16: bf 27,8f - lxvd2x 6,0,r4 + lvx 6,0,r4 addi r4,r4,16 - stxvd2x 6,0,r11 + stvx 6,0,r11 addi r11,r11,16 8: bf 28,4f @@ -485,63 +488,63 @@ L(aligned_copy_bwd): srdi r12,r5,7 cmpdi r12,0 beq L(aligned_tail_bwd) - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 + lvx v6,r4,r6 + lvx v7,r4,r7 mtctr 12 b L(aligned_128loop_bwd) .align 4 L(aligned_128head_bwd): /* for the 2nd + iteration of this loop. */ - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 + lvx v6,r4,r6 + lvx v7,r4,r7 L(aligned_128loop_bwd): - lxvd2x v8,r4,r8 - lxvd2x v9,r4,r9 - stxvd2x v6,r11,r6 + lvx v8,r4,r8 + lvx v9,r4,r9 + stvx v6,r11,r6 subi r4,r4,64 - stxvd2x v7,r11,r7 - stxvd2x v8,r11,r8 - stxvd2x v9,r11,r9 - lxvd2x v6,r4,r6 - lxvd2x v7,r4,7 + stvx v7,r11,r7 + stvx v8,r11,r8 + stvx v9,r11,r9 + lvx v6,r4,r6 + lvx v7,r4,7 subi r11,r11,64 - lxvd2x v8,r4,r8 - lxvd2x v9,r4,r9 + lvx v8,r4,r8 + lvx v9,r4,r9 subi r4,r4,64 - stxvd2x v6,r11,r6 - stxvd2x v7,r11,r7 - stxvd2x v8,r11,r8 - stxvd2x v9,r11,r9 + stvx v6,r11,r6 + stvx v7,r11,r7 + stvx v8,r11,r8 + stvx v9,r11,r9 subi r11,r11,64 bdnz L(aligned_128head_bwd) L(aligned_tail_bwd): mtocrf 0x01,r5 bf 25,32f - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 - lxvd2x v8,r4,r8 - lxvd2x v9,r4,r9 + lvx v6,r4,r6 + lvx v7,r4,r7 + lvx v8,r4,r8 + lvx v9,r4,r9 subi r4,r4,64 - stxvd2x v6,r11,r6 - stxvd2x v7,r11,r7 - stxvd2x v8,r11,r8 - stxvd2x v9,r11,r9 + stvx v6,r11,r6 + stvx v7,r11,r7 + stvx v8,r11,r8 + stvx v9,r11,r9 subi r11,r11,64 32: bf 26,16f - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 + lvx v6,r4,r6 + lvx v7,r4,r7 subi r4,r4,32 - stxvd2x v6,r11,r6 - stxvd2x v7,r11,r7 + stvx v6,r11,r6 + stvx v7,r11,r7 subi r11,r11,32 16: bf 27,8f - lxvd2x v6,r4,r6 + lvx v6,r4,r6 subi r4,r4,16 - stxvd2x v6,r11,r6 + stvx v6,r11,r6 subi r11,r11,16 8: bf 28,4f @@ -816,14 +819,14 @@ L(end_unaligned_loop_bwd): stb r8,-7(r11) /* Return original DST pointer. */ blr -END_GEN_TB (memmove, TB_TOCLESS) +END_GEN_TB (MEMMOVE, TB_TOCLESS) libc_hidden_builtin_def (memmove) /* void bcopy(const void *src [r3], void *dest [r4], size_t n [r5]) Implemented in this file to avoid linker create a stub function call in the branch to '_memmove'. */ -ENTRY (__bcopy) +ENTRY_TOCLESS (__bcopy) mr r6,r3 mr r3,r4 mr r4,r6 diff --git a/sysdeps/powerpc/powerpc64/power7/mempcpy.S b/sysdeps/powerpc/powerpc64/power7/mempcpy.S index 98ed1f07f9..7f5a4745ef 100644 --- a/sysdeps/powerpc/powerpc64/power7/mempcpy.S +++ b/sysdeps/powerpc/powerpc64/power7/mempcpy.S @@ -1,5 +1,5 @@ /* Optimized mempcpy implementation for POWER7. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -20,11 +20,14 @@ #include <sysdep.h> -/* __ptr_t [r3] __mempcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); +/* void * [r3] __mempcpy (void *dst [r3], void *src [r4], size_t len [r5]); Returns 'dst' + 'len'. */ +#ifndef MEMPCPY +# define MEMPCPY __mempcpy +#endif .machine power7 -EALIGN (__mempcpy, 5, 0) +ENTRY_TOCLESS (MEMPCPY, 5) CALL_MCOUNT 3 cmpldi cr1,5,31 @@ -463,7 +466,7 @@ L(end_unaligned_loop): add 3,3,5 blr -END_GEN_TB (__mempcpy,TB_TOCLESS) +END_GEN_TB (MEMPCPY,TB_TOCLESS) libc_hidden_def (__mempcpy) weak_alias (__mempcpy, mempcpy) libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/powerpc/powerpc64/power7/memrchr.S b/sysdeps/powerpc/powerpc64/power7/memrchr.S index 042c46d804..583d513c4c 100644 --- a/sysdeps/powerpc/powerpc64/power7/memrchr.S +++ b/sysdeps/powerpc/powerpc64/power7/memrchr.S @@ -1,5 +1,5 @@ /* Optimized memrchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -20,8 +20,12 @@ #include <sysdep.h> /* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5]) */ + +#ifndef MEMRCHR +# define MEMRCHR __memrchr +#endif .machine power7 -ENTRY (__memrchr) +ENTRY_TOCLESS (MEMRCHR) CALL_MCOUNT 3 add r7,r3,r5 /* Calculate the last acceptable address. */ neg r0,r7 @@ -192,6 +196,6 @@ L(loop_small): bne L(loop_small) blr -END (__memrchr) +END (MEMRCHR) weak_alias (__memrchr, memrchr) libc_hidden_builtin_def (memrchr) diff --git a/sysdeps/powerpc/powerpc64/power7/memset.S b/sysdeps/powerpc/powerpc64/power7/memset.S index cf831861fe..acd0adfb78 100644 --- a/sysdeps/powerpc/powerpc64/power7/memset.S +++ b/sysdeps/powerpc/powerpc64/power7/memset.S @@ -1,5 +1,5 @@ /* Optimized memset implementation for PowerPC64/POWER7. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -19,11 +19,14 @@ #include <sysdep.h> -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); +/* void * [r3] memset (void *s [r3], int c [r4], size_t n [r5])); Returns 's'. */ +#ifndef MEMSET +# define MEMSET memset +#endif .machine power7 -EALIGN (memset, 5, 0) +ENTRY_TOCLESS (MEMSET, 5) CALL_MCOUNT 3 L(_memset): @@ -380,12 +383,12 @@ L(small): stw 4,4(10) blr -END_GEN_TB (memset,TB_TOCLESS) +END_GEN_TB (MEMSET,TB_TOCLESS) libc_hidden_builtin_def (memset) /* Copied from bzero.S to prevent the linker from inserting a stub between bzero and memset. */ -ENTRY (__bzero) +ENTRY_TOCLESS (__bzero) CALL_MCOUNT 3 mr r5,r4 li r4,0 diff --git a/sysdeps/powerpc/powerpc64/power7/multiarch/Implies b/sysdeps/powerpc/powerpc64/power7/multiarch/Implies deleted file mode 100644 index bf5d6171a5..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/multiarch diff --git a/sysdeps/powerpc/powerpc64/power7/rawmemchr.S b/sysdeps/powerpc/powerpc64/power7/rawmemchr.S index 32223d0baa..6ada0ebb30 100644 --- a/sysdeps/powerpc/powerpc64/power7/rawmemchr.S +++ b/sysdeps/powerpc/powerpc64/power7/rawmemchr.S @@ -1,5 +1,5 @@ /* Optimized rawmemchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -20,8 +20,12 @@ #include <sysdep.h> /* int [r3] rawmemchr (void *s [r3], int c [r4]) */ + +#ifndef RAWMEMCHR +# define RAWMEMCHR __rawmemchr +#endif .machine power7 -ENTRY (__rawmemchr) +ENTRY_TOCLESS (RAWMEMCHR) CALL_MCOUNT 2 dcbt 0,r3 clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ @@ -106,6 +110,6 @@ L(done): srdi r0,r0,3 /* Convert leading zeros to bytes. */ add r3,r8,r0 /* Return address of the matching char. */ blr -END (__rawmemchr) +END (RAWMEMCHR) weak_alias (__rawmemchr,rawmemchr) libc_hidden_builtin_def (__rawmemchr) diff --git a/sysdeps/powerpc/powerpc64/power7/stpncpy.S b/sysdeps/powerpc/powerpc64/power7/stpncpy.S index 54cfae9218..279ce83973 100644 --- a/sysdeps/powerpc/powerpc64/power7/stpncpy.S +++ b/sysdeps/powerpc/powerpc64/power7/stpncpy.S @@ -1,5 +1,5 @@ /* Optimized stpncpy implementation for PowerPC64/POWER7. - Copyright (C) 2014-2016 Free Software Foundation, Inc. + Copyright (C) 2014-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff --git a/sysdeps/powerpc/powerpc64/power7/strcasecmp.S b/sysdeps/powerpc/powerpc64/power7/strcasecmp.S index d1c29166a9..1d4bc61137 100644 --- a/sysdeps/powerpc/powerpc64/power7/strcasecmp.S +++ b/sysdeps/powerpc/powerpc64/power7/strcasecmp.S @@ -1,5 +1,5 @@ /* Optimized strcasecmp implementation for PowerPC64. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -24,17 +24,18 @@ or if defined USE_IN_EXTENDED_LOCALE_MODEL: int [r3] strcasecmp_l (const char *s1 [r3], const char *s2 [r4], - __locale_t loc [r5]) */ + locale_t loc [r5]) */ #ifndef STRCMP # define __STRCMP __strcasecmp # define STRCMP strcasecmp #endif -ENTRY (__STRCMP) #ifndef USE_IN_EXTENDED_LOCALE_MODEL +ENTRY (__STRCMP) CALL_MCOUNT 2 #else +ENTRY_TOCLESS (__STRCMP) CALL_MCOUNT 3 #endif diff --git a/sysdeps/powerpc/powerpc64/power7/strchr.S b/sysdeps/powerpc/powerpc64/power7/strchr.S index 1ad4bd3a2a..da648b2749 100644 --- a/sysdeps/powerpc/powerpc64/power7/strchr.S +++ b/sysdeps/powerpc/powerpc64/power7/strchr.S @@ -1,5 +1,5 @@ /* Optimized strchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -19,9 +19,13 @@ #include <sysdep.h> +#ifndef STRCHR +# define STRCHR strchr +#endif + /* int [r3] strchr (char *s [r3], int c [r4]) */ .machine power7 -ENTRY (strchr) +ENTRY_TOCLESS (STRCHR) CALL_MCOUNT 2 dcbt 0,r3 clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ @@ -221,6 +225,6 @@ L(done_null): srdi r0,r0,3 /* Convert leading zeros to bytes. */ add r3,r8,r0 /* Return address of the matching null byte. */ blr -END (strchr) +END (STRCHR) weak_alias (strchr, index) libc_hidden_builtin_def (strchr) diff --git a/sysdeps/powerpc/powerpc64/power7/strchrnul.S b/sysdeps/powerpc/powerpc64/power7/strchrnul.S index 020c0459b8..f137174701 100644 --- a/sysdeps/powerpc/powerpc64/power7/strchrnul.S +++ b/sysdeps/powerpc/powerpc64/power7/strchrnul.S @@ -1,5 +1,5 @@ /* Optimized strchrnul implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -19,9 +19,12 @@ #include <sysdep.h> +#ifndef STRCHRNUL +# define STRCHRNUL __strchrnul +#endif /* int [r3] strchrnul (char *s [r3], int c [r4]) */ .machine power7 -ENTRY (__strchrnul) +ENTRY_TOCLESS (STRCHRNUL) CALL_MCOUNT 2 dcbt 0,r3 clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ @@ -123,6 +126,6 @@ L(done): srdi r0,r0,3 /* Convert leading zeros to bytes. */ add r3,r8,r0 /* Return address of matching c/null byte. */ blr -END (__strchrnul) -weak_alias (__strchrnul,strchrnul) -libc_hidden_builtin_def (__strchrnul) +END (STRCHRNUL) +weak_alias (STRCHRNUL, strchrnul) +libc_hidden_builtin_def (STRCHRNUL) diff --git a/sysdeps/powerpc/powerpc64/power7/strcmp.S b/sysdeps/powerpc/powerpc64/power7/strcmp.S index 5bbae0d3b2..c3d5ec1090 100644 --- a/sysdeps/powerpc/powerpc64/power7/strcmp.S +++ b/sysdeps/powerpc/powerpc64/power7/strcmp.S @@ -1,5 +1,5 @@ /* Optimized strcmp implementation for Power7 using 'cmpb' instruction - Copyright (C) 2014-2016 Free Software Foundation, Inc. + Copyright (C) 2014-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -23,10 +23,14 @@ #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) +ENTRY_TOCLESS (STRCMP, 4) 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/strlen.S b/sysdeps/powerpc/powerpc64/power7/strlen.S index 4b2180f65f..9758089a15 100644 --- a/sysdeps/powerpc/powerpc64/power7/strlen.S +++ b/sysdeps/powerpc/powerpc64/power7/strlen.S @@ -1,5 +1,5 @@ /* Optimized strlen implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -20,8 +20,12 @@ #include <sysdep.h> /* int [r3] strlen (char *s [r3]) */ + +#ifndef STRLEN +# define STRLEN strlen +#endif .machine power7 -ENTRY (strlen) +ENTRY_TOCLESS (STRLEN) CALL_MCOUNT 1 dcbt 0,r3 clrrdi r4,r3,3 /* Align the address to doubleword boundary. */ @@ -99,5 +103,5 @@ L(done): srdi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ add r3,r5,r0 /* Compute final length. */ blr -END (strlen) +END (STRLEN) libc_hidden_builtin_def (strlen) diff --git a/sysdeps/powerpc/powerpc64/power7/strncmp.S b/sysdeps/powerpc/powerpc64/power7/strncmp.S index 0de9b97173..0c7429d19f 100644 --- a/sysdeps/powerpc/powerpc64/power7/strncmp.S +++ b/sysdeps/powerpc/powerpc64/power7/strncmp.S @@ -1,5 +1,5 @@ /* Optimized strcmp implementation for POWER7/PowerPC64. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,13 +18,17 @@ #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) +ENTRY_TOCLESS (STRNCMP, 5) 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/power7/strncpy.S b/sysdeps/powerpc/powerpc64/power7/strncpy.S index 1b4a3d9181..1965f82a2b 100644 --- a/sysdeps/powerpc/powerpc64/power7/strncpy.S +++ b/sysdeps/powerpc/powerpc64/power7/strncpy.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2014-2016 Free Software Foundation, Inc. +/* Copyright (C) 2014-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -40,17 +40,26 @@ memset. */ #ifdef USE_AS_STPNCPY -# define FUNC_NAME __stpncpy +# ifndef STPNCPY +# define FUNC_NAME __stpncpy +# else +# define FUNC_NAME STPNCPY +# endif #else -# define FUNC_NAME strncpy -#endif +# ifndef STRNCPY +# define FUNC_NAME strncpy +# else +# define FUNC_NAME STRNCPY +# endif +#endif /* !USE_AS_STPNCPY */ -#define FRAMESIZE (FRAME_MIN_SIZE+32) +#define FRAMESIZE (FRAME_MIN_SIZE+16) #ifndef MEMSET /* For builds with no IFUNC support, local calls should be made to internal GLIBC symbol (created by libc_hidden_builtin_def). */ # ifdef SHARED +# define MEMSET_is_local # define MEMSET __GI_memset # else # define MEMSET memset @@ -58,17 +67,20 @@ #endif .machine power7 -EALIGN(FUNC_NAME, 4, 0) +#ifdef MEMSET_is_local +ENTRY_TOCLESS (FUNC_NAME, 4) +#else +ENTRY (FUNC_NAME, 4) +#endif CALL_MCOUNT 3 - mflr r0 /* load link register LR to r0 */ or r10, r3, r4 /* to verify source and destination */ rldicl. r8, r10, 0, 61 /* is double word aligned .. ? */ std r19, -8(r1) /* save callers register , r19 */ std r18, -16(r1) /* save callers register , r18 */ - std r0, 16(r1) /* store the link register */ - stdu r1, -FRAMESIZE(r1) /* create the stack frame */ + cfi_offset(r19, -8) + cfi_offset(r18, -16) mr r9, r3 /* save r3 into r9 for use */ mr r18, r3 /* save r3 for retCode of strncpy */ @@ -211,11 +223,23 @@ L(zeroFill): cmpdi cr7, r8, 0 /* compare if length is zero */ beq cr7, L(update3return) + mflr r0 /* load link register LR to r0 */ + std r0, 16(r1) /* store the link register */ + stdu r1, -FRAMESIZE(r1) /* create the stack frame */ + cfi_adjust_cfa_offset(FRAMESIZE) + cfi_offset(lr, 16) mr r3, r19 /* fill buffer with */ li r4, 0 /* zero fill buffer */ mr r5, r8 /* how many bytes to fill buffer with */ bl MEMSET /* call optimized memset */ +#ifndef MEMSET_is_local nop +#endif + ld r0, FRAMESIZE+16(r1) /* read the saved link register */ + addi r1, r1, FRAMESIZE /* restore stack pointer */ + cfi_adjust_cfa_offset(-FRAMESIZE) + mtlr r0 + cfi_restore(lr) L(update3return): #ifdef USE_AS_STPNCPY @@ -226,11 +250,8 @@ L(hop2return): #ifndef USE_AS_STPNCPY mr r3, r18 /* set return value */ #endif - addi r1, r1, FRAMESIZE /* restore stack pointer */ - ld r0, 16(r1) /* read the saved link register */ ld r18, -16(r1) /* restore callers save register, r18 */ ld r19, -8(r1) /* restore callers save register, r19 */ - mtlr r0 /* branch to link register */ blr /* return */ .p2align 4 @@ -264,16 +285,13 @@ L(oneBYone): .p2align 4 L(done): - addi r1, r1, FRAMESIZE /* restore stack pointer */ #ifdef USE_AS_STPNCPY mr r3, r19 /* set the return value */ #else mr r3, r18 /* set the return value */ #endif - ld r0, 16(r1) /* read the saved link register */ ld r18, -16(r1) /* restore callers save register, r18 */ ld r19, -8(r1) /* restore callers save register, r19 */ - mtlr r0 /* branch to link register */ blr /* return */ L(update1): diff --git a/sysdeps/powerpc/powerpc64/power7/strnlen.S b/sysdeps/powerpc/powerpc64/power7/strnlen.S index 35b7749e0d..3097cac1fb 100644 --- a/sysdeps/powerpc/powerpc64/power7/strnlen.S +++ b/sysdeps/powerpc/powerpc64/power7/strnlen.S @@ -1,5 +1,5 @@ /* Optimized strnlen implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. Contributed by Luis Machado <luisgpm@br.ibm.com>. This file is part of the GNU C Library. @@ -19,9 +19,13 @@ #include <sysdep.h> +#ifndef STRNLEN +# define STRNLEN __strnlen +#endif + /* int [r3] strnlen (char *s [r3], int size [r4]) */ .machine power7 -ENTRY (__strnlen) +ENTRY_TOCLESS (STRNLEN) CALL_MCOUNT 2 dcbt 0,r3 clrrdi r8,r3,3 @@ -172,7 +176,7 @@ L(loop_small): mr r3,r4 blr -END (__strnlen) +END (STRNLEN) libc_hidden_def (__strnlen) weak_alias (__strnlen, strnlen) libc_hidden_def (strnlen) diff --git a/sysdeps/powerpc/powerpc64/power7/strrchr.S b/sysdeps/powerpc/powerpc64/power7/strrchr.S index 5193b07a7a..e47e3d4188 100644 --- a/sysdeps/powerpc/powerpc64/power7/strrchr.S +++ b/sysdeps/powerpc/powerpc64/power7/strrchr.S @@ -1,5 +1,5 @@ /* Optimized strrchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2014-2016 Free Software Foundation, Inc. + Copyright (C) 2014-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,8 +19,13 @@ #include <sysdep.h> /* int [r3] strrchr (char *s [r3], int c [r4]) */ + +#ifndef STRRCHR +# define STRRCHR strrchr +#endif + .machine power7 -ENTRY (strrchr) +ENTRY_TOCLESS (STRRCHR) CALL_MCOUNT 2 dcbt 0,r3 clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ @@ -250,6 +255,6 @@ L(done_null): srdi r0,r0,3 /* Convert trailing zeros to bytes. */ add r3,r8,r0 /* Return address of the matching null byte. */ blr -END (strrchr) +END (STRRCHR) weak_alias (strrchr, rindex) libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c b/sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c index 164c49a2c3..7559733c7c 100644 --- a/sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c +++ b/sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c @@ -1,5 +1,5 @@ /* Optimized strstr implementation for PowerPC64/POWER7. - Copyright (C) 2015-2016 Free Software Foundation, Inc. + Copyright (C) 2015-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff --git a/sysdeps/powerpc/powerpc64/power7/strstr.S b/sysdeps/powerpc/powerpc64/power7/strstr.S index fefac1c9e5..ac92f9c517 100644 --- a/sysdeps/powerpc/powerpc64/power7/strstr.S +++ b/sysdeps/powerpc/powerpc64/power7/strstr.S @@ -1,5 +1,5 @@ /* Optimized strstr implementation for PowerPC64/POWER7. - Copyright (C) 2015-2016 Free Software Foundation, Inc. + Copyright (C) 2015-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -25,11 +25,16 @@ #define ITERATIONS 64 +#ifndef STRSTR +# define STRSTR strstr +#endif + #ifndef STRLEN /* For builds with no IFUNC support, local calls should be made to internal GLIBC symbol (created by libc_hidden_builtin_def). */ # ifdef SHARED # define STRLEN __GI_strlen +# define STRLEN_is_local # else # define STRLEN strlen # endif @@ -40,6 +45,7 @@ GLIBC symbol (created by libc_hidden_builtin_def). */ # ifdef SHARED # define STRNLEN __GI_strnlen +# define STRNLEN_is_local # else # define STRNLEN __strnlen # endif @@ -48,6 +54,7 @@ #ifndef STRCHR # ifdef SHARED # define STRCHR __GI_strchr +# define STRCHR_is_local # else # define STRCHR strchr # endif @@ -55,18 +62,19 @@ #define FRAMESIZE (FRAME_MIN_SIZE+32) .machine power7 -EALIGN (strstr, 4, 0) +/* Can't be ENTRY_TOCLESS due to calling __strstr_ppc which uses r2. */ +ENTRY (STRSTR, 4) CALL_MCOUNT 2 mflr r0 /* Load link register LR to r0. */ std r31, -8(r1) /* Save callers register r31. */ - cfi_offset(r31, -8) std r30, -16(r1) /* Save callers register r30. */ - cfi_offset(r30, -16) std r29, -24(r1) /* Save callers register r29. */ - cfi_offset(r29, -24) std r28, -32(r1) /* Save callers register r28. */ - cfi_offset(r28, -32) std r0, 16(r1) /* Store the link register. */ + cfi_offset(r31, -8) + cfi_offset(r30, -16) + cfi_offset(r28, -32) + cfi_offset(r29, -24) cfi_offset(lr, 16) stdu r1, -FRAMESIZE(r1) /* Create the stack frame. */ cfi_adjust_cfa_offset(FRAMESIZE) @@ -82,7 +90,9 @@ EALIGN (strstr, 4, 0) mr r30, r4 mr r3, r4 bl STRLEN +#ifndef STRLEN_is_local nop +#endif cmpdi cr7, r3, 0 /* If search str is null. */ beq cr7, L(ret_r3) @@ -91,14 +101,18 @@ EALIGN (strstr, 4, 0) mr r4, r3 mr r3, r29 bl STRNLEN +#ifndef STRNLEN_is_local nop +#endif cmpd cr7, r3, r31 /* If len(r3) < len(r4). */ blt cr7, L(retnull) mr r3, r29 lbz r4, 0(r30) bl STRCHR +#ifndef STRCHR_is_local nop +#endif mr r11, r3 /* If first char of search str is not present. */ @@ -330,7 +344,9 @@ L(begin): beq cr7, L(default) lbz r4, 0(r30) bl STRCHR +#ifndef STRCHR_is_local nop +#endif /* If first char of search str is not present. */ cmpdi cr7, r3, 0 ble cr7, L(end) @@ -433,7 +449,9 @@ L(nextbyte): beq cr7, L(default) lbz r4, 0(r30) bl STRCHR +#ifndef STRCHR_is_local nop +#endif /* If first char of search str is not present. */ cmpdi cr7, r3, 0 ble cr7, L(end) @@ -513,5 +531,5 @@ L(end): ld r31, -8(r1) /* Restore callers save register r31. */ mtlr r0 /* Branch to link register. */ blr -END (strstr) +END (STRSTR) libc_hidden_builtin_def (strstr) diff --git a/sysdeps/powerpc/powerpc64/power7/sub_n.S b/sysdeps/powerpc/powerpc64/power7/sub_n.S index 262eee5486..283e0cac6c 100644 --- a/sysdeps/powerpc/powerpc64/power7/sub_n.S +++ b/sysdeps/powerpc/powerpc64/power7/sub_n.S @@ -1,6 +1,6 @@ /* PowerPC64 mpn_lshift -- mpn_add_n/mpn_sub_n -- mpn addition and subtraction. - Copyright (C) 2013-2016 Free Software Foundation, Inc. + Copyright (C) 2013-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or |