From 8f5ca04bc7fd53741d80117df992995ace8f6d2d Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 16 Oct 1995 01:37:51 +0000 Subject: Sat Oct 14 02:52:36 1995 Ulrich Drepper * malloc/malloc.c (_malloc_internal): Performance fix. Move if statement out of loop. * stdio/_itoa.c, stdio/_itoa.h: Complete rewrite. Much faster implementation using GMP functions. Contributed by Torbjorn Granlund and Ulrich Drepper. * stdio/test_rdwr.c: Include . * sysdeps/i386/i586/Implies: New file. New highly optimized string functions for i[345]86. * sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files. * sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files. * sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files. * sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files. * sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files. * sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files. * sysdeps/i386/i586/strlen.S: New file. * sysdeps/i386/memchr.c: Removed. There is now an assembler version. * sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did not correspond to used values. * sysdeps/unix/sysv/linux/nfs/nfs.h: New file. Simply a wrapper around a kernel header file. * sysdeps/unix/sysv/linux/Dist: Add it. * sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers): Likewise. * sysdeps/unix/sysv/linux/local_lim.h: Rewrite. Instead of defining ourself we use a kernel header file. * sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system call handler for i586. * sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up. Sat Oct 14 02:52:36 1995 Ulrich Drepper * malloc/malloc.c (_malloc_internal): Performance fix. Move if statement out of loop. * stdio/_itoa.c, stdio/_itoa.h: Complete rewrite. Much faster implementation using GMP functions. Contributed by Torbjorn Granlund and Ulrich Drepper. * stdio/test_rdwr.c: Include . * sysdeps/i386/i586/Implies: New file. New highly optimized string functions for i[345]86. * sysdeps/i386/memchr.S, sysdeps/i386/memcmp.S: New files. * sysdeps/i386/stpcpy.S, sysdeps/i386/stpncpy.S: New files. * sysdeps/i386/strchr.S, sysdeps/i386/strcspn.S: New files. * sysdeps/i386/strpbrk.S, sysdeps/i386/strrchr.S: New files. * sysdeps/i386/strspn.S, sysdeps/i386/i486/strcat.S: New files. * sysdeps/i386/i486/strlen.S, sysdeps/i386/i586/strchr.S: New files. * sysdeps/i386/i586/strlen.S: New file. * sysdeps/i386/memchr.c: Removed. There is now an assembler version. * sysdeps/i386/i586/memcopy.h (WORD_COPY_BWD): Parameters did not correspond to used values. * sysdeps/unix/sysv/linux/nfs/nfs.h: New file. Simply a wrapper around a kernel header file. * sysdeps/unix/sysv/linux/Dist: Add it. * sysdeps/unix/sysv/linux/Makefile [$(subdir)=sunrpc] (headers): Likewise. * sysdeps/unix/sysv/linux/local_lim.h: Rewrite. Instead of defining ourself we use a kernel header file. * sysdeps/unix/sysv/linux/i386/sysdep.h (DO_CALL): Optimize system call handler for i586. * sysdeps/unix/sysv/linux/sys/param.h: Add copyright and clean up. --- sysdeps/sparc/add_n.S | 15 ++++++++++----- sysdeps/sparc/sparc8/addmul_1.S | 7 +++++++ sysdeps/sparc/sparc8/mul_1.S | 7 +++++++ sysdeps/sparc/sub_n.S | 15 ++++++++++----- 4 files changed, 34 insertions(+), 10 deletions(-) (limited to 'sysdeps/sparc') diff --git a/sysdeps/sparc/add_n.S b/sysdeps/sparc/add_n.S index 3be3e39b86..13704d32d2 100644 --- a/sysdeps/sparc/add_n.S +++ b/sysdeps/sparc/add_n.S @@ -1,7 +1,7 @@ ! sparc __mpn_add_n -- Add two limb vectors of the same length > 0 and store ! sum in a third limb vector. -! Copyright (C) 1992, 1994 Free Software Foundation, Inc. +! Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. ! This file is part of the GNU MP Library. @@ -39,20 +39,25 @@ C_SYMBOL_NAME(__mpn_add_n): sub %g0,%o3,%o3 andcc %o3,(16-1),%o3 be Lzero - nop + mov %o4,%g2 ! put first s1_limb in g2 too sll %o3,2,%o3 ! multiply by 4 sub %o0,%o3,%o0 ! adjust res_ptr sub %o1,%o3,%o1 ! adjust s1_ptr sub %o2,%o3,%o2 ! adjust s2_ptr - mov %o4,%g2 - +#if PIC + mov %o7,%g4 ! Save return address register + call 1f + add %o7,Lbase-1f,%g3 +1: mov %g4,%o7 ! Restore return address register +#else sethi %hi(Lbase),%g3 or %g3,%lo(Lbase),%g3 +#endif sll %o3,2,%o3 ! multiply by 4 jmp %g3+%o3 - mov %o5,%g3 + mov %o5,%g3 ! put first s2_limb in g3 too Loop: addxcc %g2,%g3,%o3 add %o1,64,%o1 diff --git a/sysdeps/sparc/sparc8/addmul_1.S b/sysdeps/sparc/sparc8/addmul_1.S index fbaacfda4f..d1de0c3649 100644 --- a/sysdeps/sparc/sparc8/addmul_1.S +++ b/sysdeps/sparc/sparc8/addmul_1.S @@ -37,8 +37,15 @@ C_SYMBOL_NAME(__mpn_addmul_1): sll %o2,4,%g1 and %g1,(4-1)<<4,%g1 +#if PIC + mov %o7,%g4 ! Save return address register + call 1f + add %o7,LL-1f,%g3 +1: mov %g4,%o7 ! Restore return address register +#else sethi %hi(LL),%g3 or %g3,%lo(LL),%g3 +#endif jmp %g3+%g1 nop LL: diff --git a/sysdeps/sparc/sparc8/mul_1.S b/sysdeps/sparc/sparc8/mul_1.S index 9c21768eb1..42717be33b 100644 --- a/sysdeps/sparc/sparc8/mul_1.S +++ b/sysdeps/sparc/sparc8/mul_1.S @@ -34,8 +34,15 @@ C_SYMBOL_NAME(__mpn_mul_1): sll %o2,4,%g1 and %g1,(4-1)<<4,%g1 +#if PIC + mov %o7,%g4 ! Save return address register + call 1f + add %o7,LL-1f,%g3 +1: mov %g4,%o7 ! Restore return address register +#else sethi %hi(LL),%g3 or %g3,%lo(LL),%g3 +#endif jmp %g3+%g1 ld [%o1+0],%o4 ! 1 LL: diff --git a/sysdeps/sparc/sub_n.S b/sysdeps/sparc/sub_n.S index 7a167b2ac1..6264344009 100644 --- a/sysdeps/sparc/sub_n.S +++ b/sysdeps/sparc/sub_n.S @@ -1,7 +1,7 @@ ! sparc __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and ! store difference in a third limb vector. -! Copyright (C) 1992, 1994 Free Software Foundation, Inc. +! Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. ! This file is part of the GNU MP Library. @@ -39,20 +39,25 @@ C_SYMBOL_NAME(__mpn_sub_n): sub %g0,%o3,%o3 andcc %o3,(16-1),%o3 be Lzero - nop + mov %o4,%g2 ! put first s1_limb in g2 too sll %o3,2,%o3 ! multiply by 4 sub %o0,%o3,%o0 ! adjust res_ptr sub %o1,%o3,%o1 ! adjust s1_ptr sub %o2,%o3,%o2 ! adjust s2_ptr - mov %o4,%g2 - +#if PIC + mov %o7,%g4 ! Save return address register + call 1f + add %o7,Lbase-1f,%g3 +1: mov %g4,%o7 ! Restore return address register +#else sethi %hi(Lbase),%g3 or %g3,%lo(Lbase),%g3 +#endif sll %o3,2,%o3 ! multiply by 4 jmp %g3+%o3 - mov %o5,%g3 + mov %o5,%g3 ! put first s2_limb in g3 too Loop: subxcc %g2,%g3,%o3 add %o1,64,%o1 -- cgit v1.2.3