Remove powerpc32 bounded-pointers code.

This commit is contained in:
Joseph Myers 2013-02-28 21:23:47 +00:00
parent 365261c37f
commit b551088322
56 changed files with 331 additions and 482 deletions

163
ChangeLog
View File

@ -1,3 +1,166 @@
2013-02-28 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/powerpc/powerpc32/bp-asm.h: Remove file.
* sysdeps/powerpc/powerpc32/__longjmp-common.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__longjmp): Don't use BP_SYM and CHECK_BOUNDS_BOTH_WIDE_LIT.
* sysdeps/powerpc/powerpc32/a2/memcpy.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/add_n.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(__mpn_add_n): Don't use BP_SYM.
(__mpn_add_n) [__BOUNDED_POINTERS_]: Remove conditional code.
* sysdeps/powerpc/powerpc32/addmul_1.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(__mpn_addmul_1): Don't use BP_SYM.
(__mpn_addmul_1) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/powerpc/powerpc32/bsd-_setjmp.S: Don't include
<bp-sym.h>.
(_setjmp): Don't use BP_SYM.
(__novmx_setjmp): Likewise.
(__GI__setjmp): Likewise.
(__vmx_setjmp): Likewise.
* sysdeps/powerpc/powerpc32/bsd-setjmp.S: Don't include
<bp-sym.h>.
* sysdeps/powerpc/powerpc32/bzero.S: Don't include <bp-sym.h>.
(__bzero): Don't use BP_SYM.
(__bzero) [__BOUNDED_POINTERS__]: Remove conditional code.
(__bzero) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc32/cell/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__longjmp): Don't use BP_SYM and CHECK_BOUNDS_BOTH_WIDE_LIT.
* sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__sigsetjmp): Don't use BP_SYM and CHECK_BOUNDS_BOTH_WIDE_LIT.
* sysdeps/powerpc/powerpc32/lshift.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(__mpn_lshift): Don't use BP_SYM.
(__mpn_lshift) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/powerpc/powerpc32/memset.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(memset): Don't use BP_SYM.
(memset) [__BOUNDED_POINTERS__]: Remove conditional code.
(memset) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc32/mul_1.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(__mpn_mul_1): Don't use BP_SYM.
(__mpn_mul_1) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/powerpc/powerpc32/power4/memcmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power4/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power4/memset.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memset): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power4/strncmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strncmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power6/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power6/memset.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memset): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/memchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__memchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/memcmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/mempcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__mempcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/memrchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__memrchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/memset.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memset): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/rawmemchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__rawmemchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/strcasecmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__STRCMP): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/strchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/strchrnul.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__strchrnul): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/strlen.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strlen): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/strncmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strncmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/power7/strnlen.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__strnlen): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/rshift.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(__mpn_rshift): Don't use BP_SYM.
(__mpn_rshift) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/powerpc/powerpc32/setjmp-common.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__sigsetjmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/start.S: Don't include "bp-sym.h".
(L(start_addresses)): Don't use BP_SYM.
(_start): Likewise.
* sysdeps/powerpc/powerpc32/stpcpy.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(__stpcpy): Don't use BP_SYM and macros from bp-asm.h.
(__stpcpy) [__BOUNDED_POINTERS__]: Remove conditional code.
(__stpcpy) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc32/strchr.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strchr): Don't use BP_SYM.h and macros from bp-asm.h.
(strchr) [__BOUNDED_POINTERS__]: Remove conditional code.
(strchr) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc32/strcmp.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strcmp): Don't use BP_SYM and CHECK_BOUNDS_LOW. Remove GKM FIXME
comments.
(strcmp) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/powerpc/powerpc32/strcpy.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strcpy): Don't use BP_SYM and macros from bp-asm.h. Remove GKM
FIXME comments.
(strcpy) [__BOUNDED_POINTERS__]: Remove conditional code.
(strcpy) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc32/strlen.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strlen): Don't use BP_SYM and CHECK_BOUNDS_LOW. Remove GKM FIXME
comment.
* sysdeps/powerpc/powerpc32/strncmp.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strncmp): Don't use BP_SYM,
* sysdeps/powerpc/powerpc32/sub_n.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(__mpn_sub_n): Don't use BP_SYM.
(__mpn_sub_n) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/powerpc/powerpc32/submul_1.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(__mpn_submul_1): Don't use BP_SYM.
(__mpn_submul_1) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__brk): Don't use BP_SYM and DISCARD_BOUNDS.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__clone): Don't use BP_SYM and DISCARD_BOUNDS. Remove GKM FIXME
comment.
2013-02-28 Siddhesh Poyarekar <siddhesh@redhat.com> 2013-02-28 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/powerpc/powerpc32/power4/fpu/mpa.c (add_magnitudes): * sysdeps/powerpc/powerpc32/power4/fpu/mpa.c (add_magnitudes):

View File

@ -1,3 +1,31 @@
2013-02-28 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/powerpc/powerpc32/405/memcmp.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memcmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/memcpy.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/memset.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memset): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strcmp.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strcmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strcpy.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strlen.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strlen): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/405/strncmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strncmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc32/476/memset.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memset): Don't use BP_SYM.
2013-02-18 Siddhesh Poyarekar <siddhesh@redhat.com> 2013-02-18 Siddhesh Poyarekar <siddhesh@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist: * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* memcmp /* memcmp
@ -32,7 +30,7 @@
return src1 > src2, src1 < src2 or src1 = src2. return src1 > src2, src1 < src2 or src1 = src2.
If src1 = src2 and no null, repeat. */ If src1 = src2 and no null, repeat. */
EALIGN (BP_SYM (memcmp), 5, 0) EALIGN (memcmp, 5, 0)
srwi. r6,r5,5 srwi. r6,r5,5
beq L(preword2_count_loop) beq L(preword2_count_loop)
mtctr r6 mtctr r6
@ -125,6 +123,6 @@ L(st2):
blt cr5,L(l_r) blt cr5,L(l_r)
addi r3,r0,-1 addi r3,r0,-1
blr blr
END (BP_SYM (memcmp)) END (memcmp)
libc_hidden_builtin_def (memcmp) libc_hidden_builtin_def (memcmp)
weak_alias (memcmp,bcmp) weak_alias (memcmp,bcmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* memcpy /* memcpy
@ -33,7 +31,7 @@
If 32 or more bytes to copy we use 32 byte copy loop. If 32 or more bytes to copy we use 32 byte copy loop.
Finaly we copy 0-31 extra bytes. */ Finaly we copy 0-31 extra bytes. */
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
/* Check if bytes to copy are greater than 256 and if /* Check if bytes to copy are greater than 256 and if
source and destination are unaligned */ source and destination are unaligned */
cmpwi r5,0x0100 cmpwi r5,0x0100
@ -128,5 +126,5 @@ L(word4_count_loop_no_dcbt): /* Copy 32 bytes at a time */
L(end_memcpy): L(end_memcpy):
mr r3,r0 mr r3,r0
blr blr
END (BP_SYM (memcpy)) END (memcpy)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* memset /* memset
@ -37,7 +35,7 @@
If 16 or more words to set we use 16 word copy loop. If 16 or more words to set we use 16 word copy loop.
Finaly we set 0-15 extra bytes with string store. */ Finaly we set 0-15 extra bytes with string store. */
EALIGN (BP_SYM (memset), 5, 0) EALIGN (memset, 5, 0)
rlwinm r11,r4,0,24,31 rlwinm r11,r4,0,24,31
rlwimi r11,r4,8,16,23 rlwimi r11,r4,8,16,23
rlwimi r11,r11,16,0,15 rlwimi r11,r11,16,0,15
@ -150,5 +148,5 @@ L(postword2_count_loop):
mtxer r7 mtxer r7
stswx r8,0,r3 stswx r8,0,r3
b L(end_memset) b L(end_memset)
END (BP_SYM (memset)) END (memset)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* strcmp /* strcmp
@ -34,7 +32,7 @@
return src1 > src2, src1 < src2 or src1 = src2. return src1 > src2, src1 < src2 or src1 = src2.
If src1 = src2 and no null, repeat. */ If src1 = src2 and no null, repeat. */
EALIGN (BP_SYM(strcmp),5,0) EALIGN (strcmp,5,0)
neg r7,r3 neg r7,r3
clrlwi r7,r7,20 clrlwi r7,r7,20
neg r8,r4 neg r8,r4
@ -132,5 +130,5 @@ L(byte_loop):
cmpwi r5,0 cmpwi r5,0
beq L(end_strcmp) beq L(end_strcmp)
b L(byte_loop) b L(byte_loop)
END (BP_SYM (strcmp)) END (strcmp)
libc_hidden_builtin_def (strcmp) libc_hidden_builtin_def (strcmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* strcpy /* strcpy
@ -33,7 +31,7 @@
where in the last 8 bytes it is. Copy the appropriate bytes of the last where in the last 8 bytes it is. Copy the appropriate bytes of the last
8 according to the null position. */ 8 according to the null position. */
EALIGN (BP_SYM (strcpy), 5, 0) EALIGN (strcpy, 5, 0)
neg r7,r4 neg r7,r4
subi r4,r4,1 subi r4,r4,1
clrlwi. r8,r7,29 clrlwi. r8,r7,29
@ -105,5 +103,5 @@ L(last_bytes_copy_loop2):
L(end_strcpy): L(end_strcpy):
blr blr
END (BP_SYM (strcpy)) END (strcpy)
libc_hidden_builtin_def (strcpy) libc_hidden_builtin_def (strcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* strlen /* strlen
@ -31,7 +29,7 @@
the count and return the count value. We need to subtract one because the count and return the count value. We need to subtract one because
we don't count the null character as a byte. */ we don't count the null character as a byte. */
EALIGN (BP_SYM (strlen),5,0) EALIGN (strlen,5,0)
neg r7,r3 neg r7,r3
clrlwi. r8,r7,29 clrlwi. r8,r7,29
addi r4,0,0 addi r4,0,0
@ -73,5 +71,5 @@ L(byte_count_loop):
L(end_strlen): L(end_strlen):
addi r3,r4,-1 addi r3,r4,-1
blr blr
END (BP_SYM (strlen)) END (strlen)
libc_hidden_builtin_def (strlen) libc_hidden_builtin_def (strlen)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* strncmp /* strncmp
@ -39,7 +37,7 @@
return src1 > src2, src1 < src2 or src1 = src2. return src1 > src2, src1 < src2 or src1 = src2.
If src1 = src2 and no null, repeat. */ If src1 = src2 and no null, repeat. */
EALIGN (BP_SYM(strncmp),5,0) EALIGN (strncmp,5,0)
neg r7,r3 neg r7,r3
clrlwi r7,r7,20 clrlwi r7,r7,20
neg r8,r4 neg r8,r4
@ -126,5 +124,5 @@ L(end_strncmp):
L(st1): L(st1):
mfcr r3 mfcr r3
blr blr
END (BP_SYM (strncmp)) END (strncmp)
libc_hidden_builtin_def (strncmp) libc_hidden_builtin_def (strncmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* memset /* memset
@ -37,7 +35,7 @@
If 16 or more words to set we use 16 word copy loop. If 16 or more words to set we use 16 word copy loop.
Finaly we set 0-15 extra bytes with string store. */ Finaly we set 0-15 extra bytes with string store. */
EALIGN (BP_SYM (memset), 5, 0) EALIGN (memset, 5, 0)
rlwinm r11,r4,0,24,31 rlwinm r11,r4,0,24,31
rlwimi r11,r4,8,16,23 rlwimi r11,r4,8,16,23
rlwimi r11,r11,16,0,15 rlwimi r11,r11,16,0,15
@ -150,5 +148,5 @@ L(postword2_count_loop):
mtxer r7 mtxer r7
stswx r8,0,r3 stswx r8,0,r3
b L(end_memset) b L(end_memset)
END (BP_SYM (memset)) END (memset)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)

View File

@ -23,11 +23,8 @@
#else #else
# include <jmpbuf-offsets.h> # include <jmpbuf-offsets.h>
#endif #endif
#include <bp-sym.h>
#include <bp-asm.h>
ENTRY (BP_SYM (__longjmp)) ENTRY (__longjmp)
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#if defined PTR_DEMANGLE || defined CHECK_SP #if defined PTR_DEMANGLE || defined CHECK_SP
lwz r24,(JB_GPR1*4)(r3) lwz r24,(JB_GPR1*4)(r3)
@ -71,4 +68,4 @@ ENTRY (BP_SYM (__longjmp))
lwz r31,((JB_GPRS+17)*4)(r3) lwz r31,((JB_GPRS+17)*4)(r3)
mr r3,r4 mr r3,r4
blr blr
END (BP_SYM (__longjmp)) END (__longjmp)

View File

@ -18,14 +18,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
#define PREFETCH_AHEAD 4 /* no cache lines SRC prefetching ahead */ #define PREFETCH_AHEAD 4 /* no cache lines SRC prefetching ahead */
#define ZERO_AHEAD 2 /* no cache lines DST zeroing ahead */ #define ZERO_AHEAD 2 /* no cache lines DST zeroing ahead */
.machine a2 .machine a2
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r4 /* Prefetch ONE SRC cacheline */ dcbt 0,r4 /* Prefetch ONE SRC cacheline */
@ -525,5 +523,5 @@ L(endloop2_128):
b L(lessthancacheline) b L(lessthancacheline)
END (BP_SYM (memcpy)) END (memcpy)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* mp_limb_t mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, /* mp_limb_t mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr,
mp_size_t size) mp_size_t size)
@ -28,14 +26,8 @@
possible 2-unrolled inner loop will not be. Also, watch out for the possible 2-unrolled inner loop will not be. Also, watch out for the
alignment... */ alignment... */
EALIGN (BP_SYM (__mpn_add_n), 3, 0) EALIGN (__mpn_add_n, 3, 0)
#if __BOUNDED_POINTERS__
slwi r10,r6,2 /* convert limbs to bytes */
CHECK_BOUNDS_BOTH_WIDE (r3, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r4, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r5, r8, r9, r10)
#endif
/* Set up for loop below. */ /* Set up for loop below. */
mtcrf 0x01,r6 mtcrf 0x01,r6
srwi. r7,r6,1 srwi. r7,r6,1
@ -73,4 +65,4 @@ L(0): lwz r9,4(r4)
/* Return the carry. */ /* Return the carry. */
L(1): addze r3,r10 L(1): addze r3,r10
blr blr
END (BP_SYM (__mpn_add_n)) END (__mpn_add_n)

View File

@ -17,18 +17,11 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* mp_limb_t mpn_addmul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, /* mp_limb_t mpn_addmul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
mp_size_t s1_size, mp_limb_t s2_limb) mp_size_t s1_size, mp_limb_t s2_limb)
Calculate res+s1*s2 and put result back in res; return carry. */ Calculate res+s1*s2 and put result back in res; return carry. */
ENTRY (BP_SYM (__mpn_addmul_1)) ENTRY (__mpn_addmul_1)
#if __BOUNDED_POINTERS__
slwi r10,r5,2 /* convert limbs to bytes */
CHECK_BOUNDS_BOTH_WIDE (r3, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r4, r8, r9, r10)
#endif
mtctr r5 mtctr r5
lwz r0,0(r4) lwz r0,0(r4)
@ -52,4 +45,4 @@ L(0): lwzu r0,4(r4)
L(1): stw r8,4(r3) L(1): stw r8,4(r3)
addze r3,r10 addze r3,r10
blr blr
END (BP_SYM (__mpn_addmul_1)) END (__mpn_addmul_1)

View File

@ -1,112 +0,0 @@
/* Bounded-pointer definitions for PowerPC assembler.
Copyright (C) 2000-2013 Free Software Foundation, Inc.
Contributed by Greg McGary <greg@mcgary.org>
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in the GNU MP Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#if __BOUNDED_POINTERS__
/* Byte offsets of BP components. */
# define oVALUE 0
# define oLOW 4
# define oHIGH 8
/* Don't check bounds, just convert the BP register to its simple
pointer value. */
# define DISCARD_BOUNDS(rBP) \
lwz rBP, oVALUE(rBP)
/* Check low bound, with the side effect that the BP register is converted
its simple pointer value. Move the high bound into a register for
later use. */
# define CHECK_BOUNDS_LOW(rBP, rLOW, rHIGH) \
lwz rHIGH, oHIGH(rBP); \
lwz rLOW, oLOW(rBP); \
lwz rBP, oVALUE(rBP); \
twllt rBP, rLOW
/* Check the high bound, which is in a register, using the given
conditional trap instruction. */
# define CHECK_BOUNDS_HIGH(rVALUE, rHIGH, TWLcc) \
TWLcc rVALUE, rHIGH
/* Check the high bound, which is stored at the return-value's high
bound slot, using the given conditional trap instruction. */
# define CHECK_BOUNDS_HIGH_RTN(rVALUE, rHIGH, TWLcc) \
lwz rHIGH, oHIGH(rRTN); \
TWLcc rVALUE, rHIGH
/* Check both bounds, with the side effect that the BP register is
converted to its simple pointer value. */
# define CHECK_BOUNDS_BOTH(rBP, rLOW, rHIGH) \
CHECK_BOUNDS_LOW(rBP, rLOW, rHIGH); \
twlge rBP, rHIGH
/* Check bounds on a memory region of given length, with the side
effect that the BP register is converted to its simple pointer
value. */
# define CHECK_BOUNDS_BOTH_WIDE(rBP, rLOW, rHIGH, rLENGTH) \
CHECK_BOUNDS_LOW (rBP, rLOW, rHIGH); \
sub rHIGH, rHIGH, rLENGTH; \
twlgt rBP, rHIGH
# define CHECK_BOUNDS_BOTH_WIDE_LIT(rBP, rLOW, rHIGH, LENGTH) \
CHECK_BOUNDS_LOW (rBP, rLOW, rHIGH); \
subi rHIGH, rHIGH, LENGTH; \
twlgt rBP, rHIGH
/* Store a pointer value register into the return-value's pointer
value slot. */
# define STORE_RETURN_VALUE(rVALUE) \
stw rVALUE, oVALUE(rRTN)
/* Store a low and high bounds into the return-value's pointer bounds
slots. */
# define STORE_RETURN_BOUNDS(rLOW, rHIGH) \
stw rLOW, oLOW(rRTN); \
stw rHIGH, oHIGH(rRTN)
/* Stuff zero value/low/high into the BP addressed by rRTN. */
# define RETURN_NULL_BOUNDED_POINTER \
li r4, 0; \
STORE_RETURN_VALUE (r4); \
STORE_RETURN_BOUNDS (r4, r4)
#else
# define DISCARD_BOUNDS(rBP)
# define CHECK_BOUNDS_LOW(rBP, rLOW, rHIGH)
# define CHECK_BOUNDS_HIGH(rVALUE, rHIGH, TWLcc)
# define CHECK_BOUNDS_HIGH_RTN(rVALUE, rHIGH, TWLcc)
# define CHECK_BOUNDS_BOTH(rBP, rLOW, rHIGH)
# define CHECK_BOUNDS_BOTH_WIDE(rBP, rLOW, rHIGH, rLENGTH)
# define CHECK_BOUNDS_BOTH_WIDE_LIT(rBP, rLOW, rHIGH, LENGTH)
# define STORE_RETURN_VALUE(rVALUE)
# define STORE_RETURN_BOUNDS(rLOW, rHIGH)
# define RETURN_NULL_BOUNDED_POINTER li rRTN, 0
#endif

View File

@ -18,14 +18,13 @@
#include <shlib-compat.h> #include <shlib-compat.h>
#include <libc-symbols.h> #include <libc-symbols.h>
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#if defined NOT_IN_libc #if defined NOT_IN_libc
/* Build a non-versioned object for rtld-*. */ /* Build a non-versioned object for rtld-*. */
ENTRY (BP_SYM (_setjmp)) ENTRY (_setjmp)
li r4,0 /* Set second argument to 0. */ li r4,0 /* Set second argument to 0. */
b BP_SYM (__sigsetjmp@local) b __sigsetjmp@local
END (BP_SYM (_setjmp)) END (_setjmp)
libc_hidden_def (_setjmp) libc_hidden_def (_setjmp)
#else #else
/* Build a versioned object for libc. */ /* Build a versioned object for libc. */
@ -33,10 +32,10 @@ libc_hidden_def (_setjmp)
# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) # if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.0); symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.0);
ENTRY (BP_SYM (__novmx_setjmp)) ENTRY (__novmx_setjmp)
li r4,0 /* Set second argument to 0. */ li r4,0 /* Set second argument to 0. */
b BP_SYM (__novmx__sigsetjmp@local) b __novmx__sigsetjmp@local
END (BP_SYM (__novmx_setjmp)) END (__novmx_setjmp)
libc_hidden_def (__novmx_setjmp) libc_hidden_def (__novmx_setjmp)
# endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) */ # endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) */
@ -44,14 +43,14 @@ default_symbol_version (__vmx_setjmp,_setjmp,GLIBC_2.3.4)
/* __GI__setjmp prototype is needed for ntpl i.e. _setjmp is defined /* __GI__setjmp prototype is needed for ntpl i.e. _setjmp is defined
as a libc_hidden_proto & is used in sysdeps/generic/libc-start.c as a libc_hidden_proto & is used in sysdeps/generic/libc-start.c
if HAVE_CLEANUP_JMP_BUF is defined */ if HAVE_CLEANUP_JMP_BUF is defined */
ENTRY (BP_SYM (__GI__setjmp)) ENTRY (__GI__setjmp)
li r4,0 /* Set second argument to 0. */ li r4,0 /* Set second argument to 0. */
b BP_SYM (__vmx__sigsetjmp@local) b __vmx__sigsetjmp@local
END (BP_SYM (__GI__setjmp)) END (__GI__setjmp)
ENTRY (BP_SYM (__vmx_setjmp)) ENTRY (__vmx_setjmp)
li r4,0 /* Set second argument to 0. */ li r4,0 /* Set second argument to 0. */
b BP_SYM (__vmx__sigsetjmp@local) b __vmx__sigsetjmp@local
END (BP_SYM (__vmx_setjmp)) END (__vmx_setjmp)
libc_hidden_def (__vmx_setjmp) libc_hidden_def (__vmx_setjmp)
#endif /* !NOT_IN_libc */ #endif /* !NOT_IN_libc */

View File

@ -18,7 +18,6 @@
#include <shlib-compat.h> #include <shlib-compat.h>
#include <libc-symbols.h> #include <libc-symbols.h>
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) #if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)

View File

@ -17,20 +17,11 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
ENTRY (BP_SYM (__bzero)) ENTRY (__bzero)
#if __BOUNDED_POINTERS__
mr r6,r4
li r5,0
mr r4,r3
/* Tell memset that we don't want a return value. */
li r3,0
#else
mr r5,r4 mr r5,r4
li r4,0 li r4,0
#endif b memset@local
b BP_SYM (memset)@local END (__bzero)
END (BP_SYM (__bzero)) weak_alias (__bzero, bzero)
weak_alias (BP_SYM (__bzero), BP_SYM (bzero))

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
#define PREFETCH_AHEAD 6 /* no cache lines SRC prefetching ahead */ #define PREFETCH_AHEAD 6 /* no cache lines SRC prefetching ahead */
#define ZERO_AHEAD 4 /* no cache lines DST zeroing ahead */ #define ZERO_AHEAD 4 /* no cache lines DST zeroing ahead */
@ -41,7 +39,7 @@
.align 7 .align 7
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r4 /* Prefetch ONE SRC cacheline */ dcbt 0,r4 /* Prefetch ONE SRC cacheline */
@ -240,5 +238,5 @@ EALIGN (BP_SYM (memcpy), 5, 0)
stb r0,0(r6) stb r0,0(r6)
1: blr 1: blr
END (BP_SYM (memcpy)) END (memcpy)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -23,12 +23,9 @@
#else #else
# include <jmpbuf-offsets.h> # include <jmpbuf-offsets.h>
#endif #endif
#include <bp-sym.h>
#include <bp-asm.h>
.machine "altivec" .machine "altivec"
ENTRY (BP_SYM (__longjmp)) ENTRY (__longjmp)
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#ifndef __NO_VMX__ #ifndef __NO_VMX__
# ifdef PIC # ifdef PIC
mflr r6 mflr r6
@ -173,4 +170,4 @@ L(no_vmx):
lfd fp31,((JB_FPRS+17*2)*4)(r3) lfd fp31,((JB_FPRS+17*2)*4)(r3)
mr r3,r4 mr r3,r4
blr blr
END (BP_SYM (__longjmp)) END (__longjmp)

View File

@ -23,12 +23,9 @@
#else #else
# include <jmpbuf-offsets.h> # include <jmpbuf-offsets.h>
#endif #endif
#include <bp-sym.h>
#include <bp-asm.h>
.machine "altivec" .machine "altivec"
ENTRY (BP_SYM (__sigsetjmp)) ENTRY (__sigsetjmp)
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#ifdef PTR_MANGLE #ifdef PTR_MANGLE
mr r5,r1 mr r5,r1
@ -179,5 +176,5 @@ L(aligned_save_vmx):
stvx 31,0,r6 stvx 31,0,r6
L(no_vmx): L(no_vmx):
#endif #endif
b BP_SYM (__sigjmp_save@local) b __sigjmp_save@local
END (BP_SYM (__sigsetjmp)) END (__sigsetjmp)

View File

@ -17,19 +17,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* mp_limb_t mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t usize, /* mp_limb_t mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t usize,
unsigned int cnt) */ unsigned int cnt) */
EALIGN (BP_SYM (__mpn_lshift), 3, 0) EALIGN (__mpn_lshift, 3, 0)
#if __BOUNDED_POINTERS__
slwi r10,r5,2 /* convert limbs to bytes */
CHECK_BOUNDS_BOTH_WIDE (r3, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r4, r8, r9, r10)
#endif
mtctr r5 # copy size into CTR mtctr r5 # copy size into CTR
cmplwi cr0,r5,16 # is size < 16 cmplwi cr0,r5,16 # is size < 16
slwi r0,r5,2 slwi r0,r5,2
@ -129,4 +122,4 @@ L(n): lwzu r10,-4(r4); \
DO_LSHIFT(30) DO_LSHIFT(30)
DO_LSHIFT(31) DO_LSHIFT(31)
END (BP_SYM (__mpn_lshift)) END (__mpn_lshift)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
Returns 's'. Returns 's'.
@ -29,21 +27,14 @@
takes advantage of the dcbz instruction. */ takes advantage of the dcbz instruction. */
.section ".text" .section ".text"
EALIGN (BP_SYM (memset), 5, 1) EALIGN (memset, 5, 1)
#define rTMP r0 #define rTMP r0
#define rRTN r3 /* initial value of 1st argument */ #define rRTN r3 /* initial value of 1st argument */
#if __BOUNDED_POINTERS__ #define rMEMP0 r3 /* original value of 1st arg */
# define rMEMP0 r4 /* original value of 1st arg */ #define rCHR r4 /* char to set in each byte */
# define rCHR r5 /* char to set in each byte */ #define rLEN r5 /* length of region to set */
# define rLEN r6 /* length of region to set */ #define rMEMP r6 /* address at which we are storing */
# define rMEMP r10 /* address at which we are storing */
#else
# define rMEMP0 r3 /* original value of 1st arg */
# define rCHR r4 /* char to set in each byte */
# define rLEN r5 /* length of region to set */
# define rMEMP r6 /* address at which we are storing */
#endif
#define rALIGN r7 /* number of bytes we are setting now (when aligning) */ #define rALIGN r7 /* number of bytes we are setting now (when aligning) */
#define rMEMP2 r8 #define rMEMP2 r8
@ -55,15 +46,6 @@ EALIGN (BP_SYM (memset), 5, 1)
#define rCLS r8 /* Cache line size obtained from static. */ #define rCLS r8 /* Cache line size obtained from static. */
#define rCLM r9 /* Cache line size mask to check for cache alignment. */ #define rCLM r9 /* Cache line size mask to check for cache alignment. */
#if __BOUNDED_POINTERS__
cmplwi cr1, rRTN, 0
CHECK_BOUNDS_BOTH_WIDE (rMEMP0, rTMP, rTMP2, rLEN)
beq cr1, L(b0)
STORE_RETURN_VALUE (rMEMP0)
STORE_RETURN_BOUNDS (rTMP, rTMP2)
L(b0):
#endif
/* take care of case for size <= 4 */ /* take care of case for size <= 4 */
cmplwi cr1, rLEN, 4 cmplwi cr1, rLEN, 4
andi. rALIGN, rMEMP0, 3 andi. rALIGN, rMEMP0, 3
@ -321,5 +303,5 @@ L(handletail32):
clrrwi. rALIGN, rLEN, 5 clrrwi. rALIGN, rLEN, 5
b L(nondcbz) b L(nondcbz)
END (BP_SYM (memset)) END (memset)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)

View File

@ -17,19 +17,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* mp_limb_t mpn_mul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, /* mp_limb_t mpn_mul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
mp_size_t s1_size, mp_limb_t s2_limb) mp_size_t s1_size, mp_limb_t s2_limb)
Calculate s1*s2 and put result in res_ptr; return carry. */ Calculate s1*s2 and put result in res_ptr; return carry. */
ENTRY (BP_SYM (__mpn_mul_1)) ENTRY (__mpn_mul_1)
#if __BOUNDED_POINTERS__
slwi r10,r5,2 /* convert limbs to bytes */
CHECK_BOUNDS_BOTH_WIDE (r3, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r4, r8, r9, r10)
#endif
mtctr r5 mtctr r5
lwz r0,0(r4) lwz r0,0(r4)
@ -49,4 +42,4 @@ L(0): lwzu r0,4(r4)
L(1): stw r7,4(r3) L(1): stw r7,4(r3)
addze r3,r10 addze r3,r10
blr blr
END (BP_SYM (__mpn_mul_1)) END (__mpn_mul_1)

View File

@ -17,13 +17,11 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ /* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
.machine power4 .machine power4
EALIGN (BP_SYM(memcmp), 4, 0) EALIGN (memcmp, 4, 0)
CALL_MCOUNT CALL_MCOUNT
#define rTMP r0 #define rTMP r0
@ -979,7 +977,7 @@ L(dureturn25):
lwz r24,20(r1) lwz r24,20(r1)
lwz 1,0(1) lwz 1,0(1)
blr blr
END (BP_SYM (memcmp)) END (memcmp)
libc_hidden_builtin_def (memcmp) libc_hidden_builtin_def (memcmp)
weak_alias (memcmp, bcmp) weak_alias (memcmp, bcmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst'. Returns 'dst'.
@ -34,7 +32,7 @@
Each case has an optimized unrolled loop. */ Each case has an optimized unrolled loop. */
.machine power4 .machine power4
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT CALL_MCOUNT
stwu 1,-32(1) stwu 1,-32(1)
@ -420,6 +418,6 @@ EALIGN (BP_SYM (memcpy), 5, 0)
lwz 31,24(1) lwz 31,24(1)
addi 1,1,32 addi 1,1,32
blr blr
END (BP_SYM (memcpy)) END (memcpy)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
Returns 's'. Returns 's'.
@ -28,7 +26,7 @@
to 0, to take advantage of the dcbz instruction. */ to 0, to take advantage of the dcbz instruction. */
.machine power4 .machine power4
EALIGN (BP_SYM (memset), 5, 0) EALIGN (memset, 5, 0)
CALL_MCOUNT CALL_MCOUNT
#define rTMP r0 #define rTMP r0
@ -224,5 +222,5 @@ L(medium_28t):
stw rCHR, -4(rMEMP) stw rCHR, -4(rMEMP)
stw rCHR, -8(rMEMP) stw rCHR, -8(rMEMP)
blr blr
END (BP_SYM (memset)) END (memset)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)

View File

@ -17,14 +17,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* 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]) */ /* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
EALIGN (BP_SYM(strncmp), 4, 0) EALIGN (strncmp, 4, 0)
#define rTMP r0 #define rTMP r0
#define rRTN r3 #define rRTN r3
@ -171,5 +169,5 @@ L(u4): sub rRTN, rWORD1, rWORD2
L(ux): L(ux):
li rRTN, 0 li rRTN, 0
blr blr
END (BP_SYM (strncmp)) END (strncmp)
libc_hidden_builtin_def (strncmp) libc_hidden_builtin_def (strncmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst'. Returns 'dst'.
@ -34,7 +32,7 @@
Each case has an optimized unrolled loop. */ Each case has an optimized unrolled loop. */
.machine power6 .machine power6
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT CALL_MCOUNT
stwu 1,-32(1) stwu 1,-32(1)
@ -837,6 +835,6 @@ L(wdus_0):
lwz 31,24(1) lwz 31,24(1)
addi 1,1,32 addi 1,1,32
blr blr
END (BP_SYM (memcpy)) END (memcpy)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
Returns 's'. Returns 's'.
@ -28,7 +26,7 @@
to 0, to take advantage of the dcbz instruction. */ to 0, to take advantage of the dcbz instruction. */
.machine power6 .machine power6
EALIGN (BP_SYM (memset), 7, 0) EALIGN (memset, 7, 0)
CALL_MCOUNT CALL_MCOUNT
#define rTMP r0 #define rTMP r0
@ -537,5 +535,5 @@ L(medium_28t):
stw rCHR, -4(rMEMP) stw rCHR, -4(rMEMP)
stw rCHR, -8(rMEMP) stw rCHR, -8(rMEMP)
blr blr
END (BP_SYM (memset)) END (memset)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memchr (char *s [r3], int byte [r4], int size [r5]) */ /* int [r3] memchr (char *s [r3], int byte [r4], int size [r5]) */
.machine power7 .machine power7
ENTRY (BP_SYM (__memchr)) ENTRY (__memchr)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
clrrwi r8,r3,2 clrrwi r8,r3,2
@ -202,6 +200,6 @@ L(loop_small): /* loop_small has been unrolled. */
li r3,0 li r3,0
blr blr
END (BP_SYM (__memchr)) END (__memchr)
weak_alias (BP_SYM (__memchr), BP_SYM(memchr)) weak_alias (__memchr, memchr)
libc_hidden_builtin_def (memchr) libc_hidden_builtin_def (memchr)

View File

@ -17,15 +17,13 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memcmp (const char *s1 [r3], /* int [r3] memcmp (const char *s1 [r3],
const char *s2 [r4], const char *s2 [r4],
size_t size [r5]) */ size_t size [r5]) */
.machine power7 .machine power7
EALIGN (BP_SYM(memcmp),4,0) EALIGN (memcmp,4,0)
CALL_MCOUNT CALL_MCOUNT
#define rTMP r0 #define rTMP r0
@ -982,6 +980,6 @@ L(dureturn25):
lwz r24,20(r1) lwz r24,20(r1)
lwz 1,0(1) lwz 1,0(1)
blr blr
END (BP_SYM (memcmp)) END (memcmp)
libc_hidden_builtin_def (memcmp) libc_hidden_builtin_def (memcmp)
weak_alias (memcmp,bcmp) weak_alias (memcmp,bcmp)

View File

@ -18,14 +18,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst'. */ Returns 'dst'. */
.machine power7 .machine power7
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT CALL_MCOUNT
stwu 1,-32(1) stwu 1,-32(1)
@ -522,5 +520,5 @@ L(end_unaligned_loop):
addi 1,1,32 addi 1,1,32
blr blr
END (BP_SYM (memcpy)) END (memcpy)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -18,14 +18,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] __mempcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] __mempcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst' + 'len'. */ Returns 'dst' + 'len'. */
.machine power7 .machine power7
EALIGN (BP_SYM (__mempcpy), 5, 0) EALIGN (__mempcpy, 5, 0)
CALL_MCOUNT CALL_MCOUNT
stwu 1,-32(1) stwu 1,-32(1)
@ -464,7 +462,7 @@ L(end_unaligned_loop):
addi 1,1,32 addi 1,1,32
blr blr
END (BP_SYM (__mempcpy)) END (__mempcpy)
libc_hidden_def (BP_SYM (__mempcpy)) libc_hidden_def (__mempcpy)
weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy)) weak_alias (__mempcpy, mempcpy)
libc_hidden_builtin_def (mempcpy) libc_hidden_builtin_def (mempcpy)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5]) */ /* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5]) */
.machine power7 .machine power7
ENTRY (BP_SYM (__memrchr)) ENTRY (__memrchr)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
mr r7,r3 mr r7,r3
@ -172,6 +170,6 @@ L(loop_small):
ble L(null) ble L(null)
b L(loop_small) b L(loop_small)
END (BP_SYM (__memrchr)) END (__memrchr)
weak_alias (BP_SYM (__memrchr), BP_SYM(memrchr)) weak_alias (__memrchr, memrchr)
libc_hidden_builtin_def (memrchr) libc_hidden_builtin_def (memrchr)

View File

@ -18,14 +18,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
Returns 's'. */ Returns 's'. */
.machine power7 .machine power7
EALIGN (BP_SYM (memset), 5, 0) EALIGN (memset, 5, 0)
CALL_MCOUNT CALL_MCOUNT
.align 4 .align 4
@ -429,5 +427,5 @@ L(small):
stw 4,4(10) stw 4,4(10)
blr blr
END (BP_SYM (memset)) END (memset)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] rawmemchr (void *s [r3], int c [r4]) */ /* int [r3] rawmemchr (void *s [r3], int c [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM(__rawmemchr)) ENTRY (__rawmemchr)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
clrrwi r8,r3,2 /* Align the address to word boundary. */ clrrwi r8,r3,2 /* Align the address to word boundary. */
@ -96,6 +94,6 @@ L(done):
srwi r0,r0,3 /* Convert leading zeroes to bytes. */ srwi r0,r0,3 /* Convert leading zeroes to bytes. */
add r3,r8,r0 /* Return address of the matching char. */ add r3,r8,r0 /* Return address of the matching char. */
blr blr
END (BP_SYM (__rawmemchr)) END (__rawmemchr)
weak_alias (__rawmemchr,rawmemchr) weak_alias (__rawmemchr,rawmemchr)
libc_hidden_builtin_def (__rawmemchr) libc_hidden_builtin_def (__rawmemchr)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
#include <locale-defines.h> #include <locale-defines.h>
/* int [r3] strcasecmp (const char *s1 [r3], const char *s2 [r4] ) /* int [r3] strcasecmp (const char *s1 [r3], const char *s2 [r4] )
@ -33,7 +31,7 @@
# define STRCMP strcasecmp # define STRCMP strcasecmp
#endif #endif
ENTRY (BP_SYM (__STRCMP)) ENTRY (__STRCMP)
#define rRTN r3 /* Return value */ #define rRTN r3 /* Return value */
#define rSTR1 r5 /* 1st string */ #define rSTR1 r5 /* 1st string */
@ -125,7 +123,7 @@ L(loop):
bnelr bnelr
bne cr7,L(loop) bne cr7,L(loop)
blr blr
END (BP_SYM (__STRCMP)) END (__STRCMP)
weak_alias (BP_SYM (__STRCMP), BP_SYM (STRCMP)) weak_alias (__STRCMP, STRCMP)
libc_hidden_builtin_def (__STRCMP) libc_hidden_builtin_def (__STRCMP)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strchr (char *s [r3], int c [r4]) */ /* int [r3] strchr (char *s [r3], int c [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM(strchr)) ENTRY (strchr)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
clrrwi r8,r3,2 /* Align the address to word boundary. */ clrrwi r8,r3,2 /* Align the address to word boundary. */
@ -197,6 +195,6 @@ L(done_null):
srwi r0,r0,3 /* Convert leading zeros to bytes. */ srwi r0,r0,3 /* Convert leading zeros to bytes. */
add r3,r8,r0 /* Return address of the matching null byte. */ add r3,r8,r0 /* Return address of the matching null byte. */
blr blr
END (BP_SYM (strchr)) END (strchr)
weak_alias (BP_SYM (strchr), BP_SYM (index)) weak_alias (strchr, index)
libc_hidden_builtin_def (strchr) libc_hidden_builtin_def (strchr)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strchrnul (char *s [r3], int c [r4]) */ /* int [r3] strchrnul (char *s [r3], int c [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM(__strchrnul)) ENTRY (__strchrnul)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
clrrwi r8,r3,2 /* Align the address to word boundary. */ clrrwi r8,r3,2 /* Align the address to word boundary. */
@ -111,6 +109,6 @@ L(done):
srwi r0,r0,3 /* Convert leading zeros to bytes. */ srwi r0,r0,3 /* Convert leading zeros to bytes. */
add r3,r8,r0 /* Return address of matching c/null byte. */ add r3,r8,r0 /* Return address of matching c/null byte. */
blr blr
END (BP_SYM (__strchrnul)) END (__strchrnul)
weak_alias (__strchrnul,strchrnul) weak_alias (__strchrnul,strchrnul)
libc_hidden_builtin_def (__strchrnul) libc_hidden_builtin_def (__strchrnul)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strlen (char *s [r3]) */ /* int [r3] strlen (char *s [r3]) */
.machine power7 .machine power7
ENTRY (BP_SYM (strlen)) ENTRY (strlen)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
clrrwi r4,r3,2 /* Align the address to word boundary. */ clrrwi r4,r3,2 /* Align the address to word boundary. */
@ -93,5 +91,5 @@ L(done):
srwi r0,r0,3 /* Convert leading zeroes to bytes. */ srwi r0,r0,3 /* Convert leading zeroes to bytes. */
add r3,r5,r0 /* Compute final length. */ add r3,r5,r0 /* Compute final length. */
blr blr
END (BP_SYM (strlen)) END (strlen)
libc_hidden_builtin_def (strlen) libc_hidden_builtin_def (strlen)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
@ -26,7 +24,7 @@
const char *s2 [r4], const char *s2 [r4],
size_t size [r5]) */ size_t size [r5]) */
EALIGN (BP_SYM(strncmp),5,0) EALIGN (strncmp,5,0)
#define rTMP r0 #define rTMP r0
#define rRTN r3 #define rRTN r3
@ -175,5 +173,5 @@ L(u4): sub rRTN,rWORD1,rWORD2
L(ux): L(ux):
li rRTN,0 li rRTN,0
blr blr
END (BP_SYM (strncmp)) END (strncmp)
libc_hidden_builtin_def (strncmp) libc_hidden_builtin_def (strncmp)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strnlen (char *s [r3], int size [r4]) */ /* int [r3] strnlen (char *s [r3], int size [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM (__strnlen)) ENTRY (__strnlen)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
clrrwi r8,r3,2 /* Align the address to word boundary. */ clrrwi r8,r3,2 /* Align the address to word boundary. */
@ -166,6 +164,6 @@ L(loop_small):
cmplw r9,r7 cmplw r9,r7
bge L(end_max) bge L(end_max)
b L(loop_small) b L(loop_small)
END (BP_SYM (__strnlen)) END (__strnlen)
weak_alias (BP_SYM (__strnlen), BP_SYM(strnlen)) weak_alias (__strnlen, strnlen)
libc_hidden_builtin_def (strnlen) libc_hidden_builtin_def (strnlen)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* INPUT PARAMETERS /* INPUT PARAMETERS
res_ptr r3 res_ptr r3
@ -26,12 +24,7 @@
size r5 size r5
cnt r6 */ cnt r6 */
ENTRY (BP_SYM (__mpn_rshift)) ENTRY (__mpn_rshift)
#if __BOUNDED_POINTERS__
slwi r10,r5,2 /* convert limbs to bytes */
CHECK_BOUNDS_BOTH_WIDE (r3, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r4, r8, r9, r10)
#endif
mtctr r5 # copy size into CTR mtctr r5 # copy size into CTR
addi r7,r3,-4 # move adjusted res_ptr to free return reg addi r7,r3,-4 # move adjusted res_ptr to free return reg
subfic r8,r6,32 subfic r8,r6,32
@ -59,4 +52,4 @@ L(1): srw r0,r11,r6
L(2): srw r0,r10,r6 L(2): srw r0,r10,r6
stw r0,4(r7) stw r0,4(r7)
blr blr
END (BP_SYM (__mpn_rshift)) END (__mpn_rshift)

View File

@ -23,12 +23,9 @@
#else #else
# include <jmpbuf-offsets.h> # include <jmpbuf-offsets.h>
#endif #endif
#include <bp-sym.h>
#include <bp-asm.h>
ENTRY (BP_SYM (__sigsetjmp)) ENTRY (__sigsetjmp)
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#ifdef PTR_MANGLE #ifdef PTR_MANGLE
mr r5,r1 mr r5,r1
@ -67,6 +64,6 @@ ENTRY (BP_SYM (__sigsetjmp))
li r3,0 li r3,0
blr blr
#else #else
b BP_SYM (__sigjmp_save@local) b __sigjmp_save@local
#endif #endif
END (BP_SYM (__sigsetjmp)) END (__sigsetjmp)

View File

@ -34,7 +34,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include "bp-sym.h"
/* These are the various addresses we require. */ /* These are the various addresses we require. */
#ifdef PIC #ifdef PIC
@ -45,7 +44,7 @@
.align 2 .align 2
L(start_addresses): L(start_addresses):
.long _SDA_BASE_ .long _SDA_BASE_
.long BP_SYM (main) .long main
.long __libc_csu_init .long __libc_csu_init
.long __libc_csu_fini .long __libc_csu_fini
ASM_SIZE_DIRECTIVE(L(start_addresses)) ASM_SIZE_DIRECTIVE(L(start_addresses))
@ -78,7 +77,7 @@ ENTRY(_start)
lwzu r13,L(start_addresses)@l(r8) lwzu r13,L(start_addresses)@l(r8)
#endif #endif
/* and continue in libc-start, in glibc. */ /* and continue in libc-start, in glibc. */
b JUMPTARGET(BP_SYM (__libc_start_main)) b JUMPTARGET(__libc_start_main)
END(_start) END(_start)
/* Define a symbol for the first piece of initialized data. */ /* Define a symbol for the first piece of initialized data. */

View File

@ -17,35 +17,23 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */ /* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (__stpcpy), 4, 0) EALIGN (__stpcpy, 4, 0)
#define rTMP r0 #define rTMP r0
#define rRTN r3 #define rRTN r3
#if __BOUNDED_POINTERS__ #define rDEST r3 /* pointer to previous word in dest */
# define rDEST r4 /* pointer to previous word in dest */ #define rSRC r4 /* pointer to previous word in src */
# define rSRC r5 /* pointer to previous word in src */
# define rLOW r11
# define rHIGH r12
#else
# define rDEST r3 /* pointer to previous word in dest */
# define rSRC r4 /* pointer to previous word in src */
#endif
#define rWORD r6 /* current word from src */ #define rWORD r6 /* current word from src */
#define rFEFE r7 /* 0xfefefeff */ #define rFEFE r7 /* 0xfefefeff */
#define r7F7F r8 /* 0x7f7f7f7f */ #define r7F7F r8 /* 0x7f7f7f7f */
#define rNEG r9 /* ~(word in src | 0x7f7f7f7f) */ #define rNEG r9 /* ~(word in src | 0x7f7f7f7f) */
#define rALT r10 /* alternate word from src */ #define rALT r10 /* alternate word from src */
CHECK_BOUNDS_LOW (rSRC, rLOW, rHIGH)
CHECK_BOUNDS_LOW (rDEST, rLOW, rHIGH)
STORE_RETURN_BOUNDS (rLOW, rHIGH)
or rTMP, rSRC, rDEST or rTMP, rSRC, rDEST
clrlwi. rTMP, rTMP, 30 clrlwi. rTMP, rTMP, 30
@ -84,8 +72,6 @@ L(g1): rlwinm. rTMP, rALT, 8, 24, 31
stbu rTMP, 1(rDEST) stbu rTMP, 1(rDEST)
beqlr- beqlr-
stbu rALT, 1(rDEST) stbu rALT, 1(rDEST)
CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
STORE_RETURN_VALUE (rDEST)
blr blr
/* Oh well. In this case, we just do a byte-by-byte copy. */ /* Oh well. In this case, we just do a byte-by-byte copy. */
@ -107,15 +93,11 @@ L(u0): lbzu rALT, 1(rSRC)
cmpwi rWORD, 0 cmpwi rWORD, 0
bne+ L(u0) bne+ L(u0)
L(u2): stbu rWORD, 1(rDEST) L(u2): stbu rWORD, 1(rDEST)
CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
STORE_RETURN_VALUE (rDEST)
blr blr
L(u1): stbu rALT, 1(rDEST) L(u1): stbu rALT, 1(rDEST)
CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
STORE_RETURN_VALUE (rDEST)
blr blr
END (BP_SYM (__stpcpy)) END (__stpcpy)
weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy)) weak_alias (__stpcpy, stpcpy)
libc_hidden_def (__stpcpy) libc_hidden_def (__stpcpy)
libc_hidden_builtin_def (stpcpy) libc_hidden_builtin_def (stpcpy)

View File

@ -17,26 +17,18 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how this works. */ /* See strlen.s for comments on how this works. */
/* char * [r3] strchr (const char *s [r3] , int c [r4] ) */ /* char * [r3] strchr (const char *s [r3] , int c [r4] ) */
ENTRY (BP_SYM (strchr)) ENTRY (strchr)
#define rTMP1 r0 #define rTMP1 r0
#define rRTN r3 /* outgoing result */ #define rRTN r3 /* outgoing result */
#if __BOUNDED_POINTERS__ #define rSTR r8 /* current word pointer */
# define rSTR r4 #define rCHR r4 /* byte we're looking for, spread over the whole word */
# define rCHR r5 /* byte we're looking for, spread over the whole word */ #define rWORD r5 /* the current word */
# define rWORD r8 /* the current word */
#else
# define rSTR r8 /* current word pointer */
# define rCHR r4 /* byte we're looking for, spread over the whole word */
# define rWORD r5 /* the current word */
#endif
#define rCLZB rCHR /* leading zero byte count */ #define rCLZB rCHR /* leading zero byte count */
#define rFEFE r6 /* constant 0xfefefeff (-0x01010101) */ #define rFEFE r6 /* constant 0xfefefeff (-0x01010101) */
#define r7F7F r7 /* constant 0x7f7f7f7f */ #define r7F7F r7 /* constant 0x7f7f7f7f */
@ -45,8 +37,6 @@ ENTRY (BP_SYM (strchr))
#define rMASK r11 /* mask with the bits to ignore set to 0 */ #define rMASK r11 /* mask with the bits to ignore set to 0 */
#define rTMP3 r12 #define rTMP3 r12
CHECK_BOUNDS_LOW (rSTR, rTMP1, rTMP2)
STORE_RETURN_BOUNDS (rTMP1, rTMP2)
rlwimi rCHR, rCHR, 8, 16, 23 rlwimi rCHR, rCHR, 8, 16, 23
li rMASK, -1 li rMASK, -1
@ -90,7 +80,6 @@ L(loopentry):
L(missed): L(missed):
and. rTMP1, rTMP1, rTMP2 and. rTMP1, rTMP1, rTMP2
li rRTN, 0 li rRTN, 0
STORE_RETURN_VALUE (rSTR)
beqlr beqlr
/* It did happen. Decide which one was first... /* It did happen. Decide which one was first...
I'm not sure if this is actually faster than a sequence of I'm not sure if this is actually faster than a sequence of
@ -108,8 +97,6 @@ L(missed):
cntlzw rCLZB, rTMP2 cntlzw rCLZB, rTMP2
srwi rCLZB, rCLZB, 3 srwi rCLZB, rCLZB, 3
add rRTN, rSTR, rCLZB add rRTN, rSTR, rCLZB
CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, twlge)
STORE_RETURN_VALUE (rSTR)
blr blr
L(foundit): L(foundit):
@ -121,10 +108,8 @@ L(foundit):
subi rSTR, rSTR, 4 subi rSTR, rSTR, 4
srwi rCLZB, rCLZB, 3 srwi rCLZB, rCLZB, 3
add rRTN, rSTR, rCLZB add rRTN, rSTR, rCLZB
CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, twlge)
STORE_RETURN_VALUE (rSTR)
blr blr
END (BP_SYM (strchr)) END (strchr)
weak_alias (BP_SYM (strchr), BP_SYM (index)) weak_alias (strchr, index)
libc_hidden_builtin_def (strchr) libc_hidden_builtin_def (strchr)

View File

@ -17,23 +17,17 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ /* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */
EALIGN (BP_SYM (strcmp), 4, 0) EALIGN (strcmp, 4, 0)
#define rTMP r0 #define rTMP r0
#define rRTN r3 #define rRTN r3
#define rSTR1 r3 /* first string arg */ #define rSTR1 r3 /* first string arg */
#define rSTR2 r4 /* second string arg */ #define rSTR2 r4 /* second string arg */
#if __BOUNDED_POINTERS__
# define rHIGH1 r11
# define rHIGH2 r12
#endif
#define rWORD1 r5 /* current word in s1 */ #define rWORD1 r5 /* current word in s1 */
#define rWORD2 r6 /* current word in s2 */ #define rWORD2 r6 /* current word in s2 */
#define rFEFE r7 /* constant 0xfefefeff (-0x01010101) */ #define rFEFE r7 /* constant 0xfefefeff (-0x01010101) */
@ -41,8 +35,6 @@ EALIGN (BP_SYM (strcmp), 4, 0)
#define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */ #define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */
#define rBITDIF r10 /* bits that differ in s1 & s2 words */ #define rBITDIF r10 /* bits that differ in s1 & s2 words */
CHECK_BOUNDS_LOW (rSTR1, rTMP, rHIGH1)
CHECK_BOUNDS_LOW (rSTR2, rTMP, rHIGH2)
or rTMP, rSTR2, rSTR1 or rTMP, rSTR2, rSTR1
clrlwi. rTMP, rTMP, 30 clrlwi. rTMP, rTMP, 30
@ -82,7 +74,6 @@ L(endstring):
bgelr+ cr1 bgelr+ cr1
L(equal): L(equal):
li rRTN, 0 li rRTN, 0
/* GKM FIXME: check high bounds. */
blr blr
L(different): L(different):
@ -92,7 +83,6 @@ L(different):
bgelr+ bgelr+
L(highbit): L(highbit):
ori rRTN, rWORD2, 1 ori rRTN, rWORD2, 1
/* GKM FIXME: check high bounds. */
blr blr
@ -116,11 +106,9 @@ L(u1): cmpwi cr1, rWORD1, 0
cmpw rWORD1, rWORD2 cmpw rWORD1, rWORD2
bne+ cr1, L(u0) bne+ cr1, L(u0)
L(u3): sub rRTN, rWORD1, rWORD2 L(u3): sub rRTN, rWORD1, rWORD2
/* GKM FIXME: check high bounds. */
blr blr
L(u4): lbz rWORD1, -1(rSTR1) L(u4): lbz rWORD1, -1(rSTR1)
sub rRTN, rWORD1, rWORD2 sub rRTN, rWORD1, rWORD2
/* GKM FIXME: check high bounds. */
blr blr
END (BP_SYM (strcmp)) END (strcmp)
libc_hidden_builtin_def (strcmp) libc_hidden_builtin_def (strcmp)

View File

@ -17,43 +17,27 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */ /* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (strcpy), 4, 0) EALIGN (strcpy, 4, 0)
#define rTMP r0 #define rTMP r0
#define rRTN r3 /* incoming DEST arg preserved as result */ #define rRTN r3 /* incoming DEST arg preserved as result */
#if __BOUNDED_POINTERS__ #define rSRC r4 /* pointer to previous word in src */
# define rDEST r4 /* pointer to previous word in dest */ #define rDEST r5 /* pointer to previous word in dest */
# define rSRC r5 /* pointer to previous word in src */
# define rLOW r11
# define rHIGH r12
#else
# define rSRC r4 /* pointer to previous word in src */
# define rDEST r5 /* pointer to previous word in dest */
#endif
#define rWORD r6 /* current word from src */ #define rWORD r6 /* current word from src */
#define rFEFE r7 /* constant 0xfefefeff (-0x01010101) */ #define rFEFE r7 /* constant 0xfefefeff (-0x01010101) */
#define r7F7F r8 /* constant 0x7f7f7f7f */ #define r7F7F r8 /* constant 0x7f7f7f7f */
#define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */ #define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */
#define rALT r10 /* alternate word from src */ #define rALT r10 /* alternate word from src */
CHECK_BOUNDS_LOW (rSRC, rLOW, rHIGH)
CHECK_BOUNDS_LOW (rDEST, rLOW, rHIGH)
STORE_RETURN_BOUNDS (rLOW, rHIGH)
or rTMP, rSRC, rRTN or rTMP, rSRC, rRTN
clrlwi. rTMP, rTMP, 30 clrlwi. rTMP, rTMP, 30
#if __BOUNDED_POINTERS__
addi rDEST, rDEST, -4
#else
addi rDEST, rRTN, -4 addi rDEST, rRTN, -4
#endif
bne L(unaligned) bne L(unaligned)
lis rFEFE, -0x101 lis rFEFE, -0x101
@ -88,7 +72,6 @@ L(g1): rlwinm. rTMP, rALT, 8, 24, 31
stb rTMP, 6(rDEST) stb rTMP, 6(rDEST)
beqlr- beqlr-
stb rALT, 7(rDEST) stb rALT, 7(rDEST)
/* GKM FIXME: check high bound. */
blr blr
/* Oh well. In this case, we just do a byte-by-byte copy. */ /* Oh well. In this case, we just do a byte-by-byte copy. */
@ -110,11 +93,9 @@ L(u0): lbzu rALT, 1(rSRC)
cmpwi rWORD, 0 cmpwi rWORD, 0
bne+ L(u0) bne+ L(u0)
L(u2): stb rWORD, 1(rDEST) L(u2): stb rWORD, 1(rDEST)
/* GKM FIXME: check high bound. */
blr blr
L(u1): stb rALT, 1(rDEST) L(u1): stb rALT, 1(rDEST)
/* GKM FIXME: check high bound. */
blr blr
END (BP_SYM (strcpy)) END (strcpy)
libc_hidden_builtin_def (strcpy) libc_hidden_builtin_def (strcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* The algorithm here uses the following techniques: /* The algorithm here uses the following techniques:
@ -72,7 +70,7 @@
/* int [r3] strlen (char *s [r3]) */ /* int [r3] strlen (char *s [r3]) */
ENTRY (BP_SYM (strlen)) ENTRY (strlen)
#define rTMP1 r0 #define rTMP1 r0
#define rRTN r3 /* incoming STR arg, outgoing result */ #define rRTN r3 /* incoming STR arg, outgoing result */
@ -88,7 +86,6 @@ ENTRY (BP_SYM (strlen))
#define rTMP3 r11 #define rTMP3 r11
#define rTMP4 r12 #define rTMP4 r12
CHECK_BOUNDS_LOW (rRTN, rTMP1, rTMP2)
clrrwi rSTR, rRTN, 2 clrrwi rSTR, rRTN, 2
lis r7F7F, 0x7f7f lis r7F7F, 0x7f7f
@ -153,7 +150,6 @@ L(done0):
subf rTMP1, rRTN, rSTR subf rTMP1, rRTN, rSTR
srwi rTMP3, rTMP3, 3 srwi rTMP3, rTMP3, 3
add rRTN, rTMP1, rTMP3 add rRTN, rTMP1, rTMP3
/* GKM FIXME: check high bound. */
blr blr
END (BP_SYM (strlen)) END (strlen)
libc_hidden_builtin_def (strlen) libc_hidden_builtin_def (strlen)

View File

@ -17,14 +17,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* 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]) */ /* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
EALIGN (BP_SYM(strncmp), 4, 0) EALIGN (strncmp, 4, 0)
#define rTMP r0 #define rTMP r0
#define rRTN r3 #define rRTN r3
@ -156,5 +154,5 @@ L(u1):
L(u2): lbzu rWORD1, -1(rSTR1) L(u2): lbzu rWORD1, -1(rSTR1)
L(u3): sub rRTN, rWORD1, rWORD2 L(u3): sub rRTN, rWORD1, rWORD2
blr blr
END (BP_SYM (strncmp)) END (strncmp)
libc_hidden_builtin_def (strncmp) libc_hidden_builtin_def (strncmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* mp_limb_t mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, /* mp_limb_t mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr,
mp_size_t size) mp_size_t size)
@ -28,14 +26,7 @@
possible 2-unrolled inner loop will not be. Also, watch out for the possible 2-unrolled inner loop will not be. Also, watch out for the
alignment... */ alignment... */
EALIGN (BP_SYM (__mpn_sub_n), 3, 1) EALIGN (__mpn_sub_n, 3, 1)
#if __BOUNDED_POINTERS__
slwi r10,r6,2 /* convert limbs to bytes */
CHECK_BOUNDS_BOTH_WIDE (r3, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r4, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r5, r8, r9, r10)
#endif
/* Set up for loop below. */ /* Set up for loop below. */
mtcrf 0x01,r6 mtcrf 0x01,r6
@ -74,4 +65,4 @@ L(0):
L(1): subfe r3,r3,r3 L(1): subfe r3,r3,r3
neg r3,r3 neg r3,r3
blr blr
END (BP_SYM (__mpn_sub_n)) END (__mpn_sub_n)

View File

@ -17,19 +17,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* mp_limb_t mpn_submul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, /* mp_limb_t mpn_submul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
mp_size_t s1_size, mp_limb_t s2_limb) mp_size_t s1_size, mp_limb_t s2_limb)
Calculate res-s1*s2 and put result back in res; return carry. */ Calculate res-s1*s2 and put result back in res; return carry. */
ENTRY (BP_SYM (__mpn_submul_1)) ENTRY (__mpn_submul_1)
#if __BOUNDED_POINTERS__
slwi r10,r5,2 /* convert limbs to bytes */
CHECK_BOUNDS_BOTH_WIDE (r3, r8, r9, r10)
CHECK_BOUNDS_BOTH_WIDE (r4, r8, r9, r10)
#endif
mtctr r5 mtctr r5
lwz r0,0(r4) lwz r0,0(r4)
@ -55,4 +48,4 @@ L(0): lwzu r0,4(r4)
L(1): stw r8,4(r3) L(1): stw r8,4(r3)
addze r3,r10 addze r3,r10
blr blr
END (BP_SYM (__mpn_submul_1)) END (__mpn_submul_1)

View File

@ -19,13 +19,10 @@
#include <sysdep.h> #include <sysdep.h>
#define _ERRNO_H 1 #define _ERRNO_H 1
#include <bits/errno.h> #include <bits/errno.h>
#include <bp-sym.h>
#include <bp-asm.h>
.comm __curbrk,4,4 .comm __curbrk,4,4
.section ".text" .section ".text"
ENTRY (BP_SYM (__brk)) ENTRY (__brk)
DISCARD_BOUNDS (r3) /* the bounds are meaningless, so toss 'em */
mflr r0 mflr r0
stwu r1,-16(r1) stwu r1,-16(r1)
cfi_adjust_cfa_offset (16) cfi_adjust_cfa_offset (16)
@ -50,6 +47,6 @@ ENTRY (BP_SYM (__brk))
blelr+ blelr+
li r3,ENOMEM li r3,ENOMEM
b __syscall_error@local b __syscall_error@local
END (BP_SYM (__brk)) END (__brk)
weak_alias (BP_SYM (__brk), BP_SYM (brk)) weak_alias (__brk, brk)

View File

@ -20,8 +20,6 @@
#define _ERRNO_H 1 #define _ERRNO_H 1
#include <bits/errno.h> #include <bits/errno.h>
#include <kernel-features.h> #include <kernel-features.h>
#include <bp-sym.h>
#include <bp-asm.h>
#define CLONE_VM 0x00000100 #define CLONE_VM 0x00000100
#define CLONE_THREAD 0x00010000 #define CLONE_THREAD 0x00010000
@ -35,10 +33,7 @@
int flags [r5], void *arg [r6], void *parent_tid [r7], int flags [r5], void *arg [r6], void *parent_tid [r7],
void *tls [r8], void *child_tid [r9]); */ void *tls [r8], void *child_tid [r9]); */
ENTRY (BP_SYM (__clone)) ENTRY (__clone)
/* GKM FIXME: add bounds checks, where sensible. */
DISCARD_BOUNDS (r4)
DISCARD_BOUNDS (r6)
/* Check for child_stack == NULL || fn == NULL. */ /* Check for child_stack == NULL || fn == NULL. */
cmpwi cr0,r4,0 cmpwi cr0,r4,0
@ -124,6 +119,6 @@ L(badargs):
b __syscall_error@local b __syscall_error@local
cfi_startproc cfi_startproc
END (BP_SYM (__clone)) END (__clone)
weak_alias (BP_SYM (__clone), BP_SYM (clone)) weak_alias (__clone, clone)