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/unix/sysv/linux/Dist | 1 + sysdeps/unix/sysv/linux/Makefile | 6 ++- sysdeps/unix/sysv/linux/i386/sysdep.h | 76 ++++++++++++++++++++++------------- sysdeps/unix/sysv/linux/local_lim.h | 17 ++------ sysdeps/unix/sysv/linux/nfs/nfs.h | 1 + sysdeps/unix/sysv/linux/sys/param.h | 31 +++++++++----- 6 files changed, 80 insertions(+), 52 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/nfs/nfs.h (limited to 'sysdeps/unix/sysv/linux') diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index db5ff9596a..d6124bd2ba 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -1,2 +1,3 @@ sys/socketcall.h sys/timex.h +nfs/nfs.h diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 6e1dd8ccb2..fcacc53993 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -20,7 +20,11 @@ sysdep_routines := $(sysdep_routines) ipc endif ifeq ($(subdir), socket) -headers += sys/socketcall.h +headers += sys/socketcall.h +endif + +ifeq ($(subdir), sunrpc) +headers += nfs/nfs.h endif config-LDFLAGS = -Wl,-dynamic-linker=/lib/ld-gnu.so.1 diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index 7fe4d414e3..a40ca86e40 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -93,43 +93,61 @@ Cambridge, MA 02139, USA. */ (2 * movl is less expensive than pushl + popl). Second unlike for the other registers we don't save the content of - %ecx and %edx when we have than 1 and 2 registers resp. */ + %ecx and %edx when we have than 1 and 2 registers resp. + + The code below might look a bit long but we have to take care for + the pipelined processors (i586 and up). Here the `pushl' and `popl' + instructions are marked as NP (not pairable) but the exception is + two consecutive of these instruction. This gives no penalty on + i386 and i486 processors though. */ #undef DO_CALL #define DO_CALL(args) \ + PUSHARGS_##args \ DOARGS_##args \ - int $0x80; \ - UNDOARGS_##args + int $0x80 \ + POPARGS_##args +#define PUSHARGS_0 /* No arguments to push. */ #define DOARGS_0 /* No arguments to frob. */ -#define UNDOARGS_0 /* No arguments to unfrob. */ -#define _DOARGS_0(n) /* No arguments to frob. */ -#define _UNDOARGS_0 /* No arguments to unfrob. */ - -#define DOARGS_1 movl %ebx, %edx; movl 4(%esp), %ebx; DOARGS_0 -#define UNDOARGS_1 UNDOARGS_0; movl %edx, %ebx -#define _DOARGS_1(n) pushl %ebx; movl n+4(%esp), %ebx; _DOARGS_0 (n) -#define _UNDOARGS_1 _UNDOARGS_0; popl %ebx - -#define DOARGS_2 movl 8(%esp), %ecx; DOARGS_1 -#define UNDOARGS_2 UNDOARGS_1 +#define POPARGS_0 /* No arguments to pop. */ +#define _PUSHARGS_0 /* No arguments to push. */ +#define _DOARGS_0(n) /* No arguments to frob. */ +#define _POPARGS_0 /* No arguments to pop. */ + +#define PUSHARGS_1 movl %ebx, %edx; PUSHARGS_0 +#define DOARGS_1 _DOARGS_1 (4) +#define POPARGS_1 POPARGS_0; movl %edx, %ebx +#define _PUSHARGS_1 pushl %ebx; _PUSHARGS_0 +#define _DOARGS_1(n) movl n(%esp), %ebx; _DOARGS_0(n-4) +#define _POPARGS_1 _POPARGS_0; popl %ebx + +#define PUSHARGS_2 PUSHARGS_1 +#define DOARGS_2 _DOARGS_2 (8) +#define POPARGS_2 POPARGS_1 +#define _PUSHARGS_2 _PUSHARGS_1 #define _DOARGS_2(n) movl n(%esp), %ecx; _DOARGS_1 (n-4) -#define _UNDOARGS_2 _UNDOARGS_1 +#define _POPARGS_2 _POPARGS_1 -#define DOARGS_3 _DOARGS_3 (12) -#define UNDOARGS_3 _UNDOARGS_3 +#define PUSHARGS_3 _PUSHARGS_2 +#define DOARGS_3 _DOARGS_3 (16) +#define POPARGS_3 _POPARGS_3 +#define _PUSHARGS_3 _PUSHARGS_2 #define _DOARGS_3(n) movl n(%esp), %edx; _DOARGS_2 (n-4) -#define _UNDOARGS_3 _UNDOARGS_2 - -#define DOARGS_4 _DOARGS_4 (16) -#define UNDOARGS_4 _UNDOARGS_4 -#define _DOARGS_4(n) pushl %esi; movl n+4(%esp), %esi; _DOARGS_3 (n) -#define _UNDOARGS_4 _UNDOARGS_3; popl %esi - -#define DOARGS_5 _DOARGS_5 (20) -#define UNDOARGS_5 _UNDOARGS_5 -#define _DOARGS_5(n) pushl %edi; movl n+4(%esp), %edi; _DOARGS_4 (n) -#define _UNDOARGS_5 _UNDOARGS_4; popl %edi - +#define _POPARGS_3 _POPARGS_2 + +#define PUSHARGS_4 _PUSHARGS_4 +#define DOARGS_4 _DOARGS_4 (24) +#define POPARGS_4 _POPARGS_4 +#define _PUSHARGS_4 pushl %esi; _PUSHARGS_3 +#define _DOARGS_4(n) movl n(%esp), %esi; _DOARGS_3 (n-4) +#define _POPARGS_4 _POPARGS_3; popl %esi + +#define PUSHARGS_5 _PUSHARGS_5 +#define DOARGS_5 _DOARGS_5 (32) +#define POPARGS_5 _POPARGS_5 +#define _PUSHARGS_5 pushl %edi; _PUSHARGS_4 +#define _DOARGS_5(n) movl n(%esp), %edi; _DOARGS_4 (n-4) +#define _POPARGS_5 _POPARGS_4; popl %edi #endif /* ASSEMBLER */ diff --git a/sysdeps/unix/sysv/linux/local_lim.h b/sysdeps/unix/sysv/linux/local_lim.h index bfc65bd6fd..a1c81d87d9 100644 --- a/sysdeps/unix/sysv/linux/local_lim.h +++ b/sysdeps/unix/sysv/linux/local_lim.h @@ -1,6 +1,6 @@ -/* Minimum guaranteed maximum values for system limits. Hurd version. +/* Minimum guaranteed maximum values for system limits. Linux version. -Copyright (C) 1993, 1994 Free Software Foundation, Inc. +Copyright (C) 1993, 1994, 1995 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,14 +18,5 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* Linux has a fixed limit of supplementary groups allocated with a - process. This value is determined by the size of the `groups' - member of the `task_struct' structure in . */ - -#define NGROUPS_MAX 32 - - -/* Maximum size of file names. Not all file system types support - this size but it is only a maximum value. */ - -#define NAME_MAX 255 +/* The kernel sources contain a file with all the needed information. */ +#include diff --git a/sysdeps/unix/sysv/linux/nfs/nfs.h b/sysdeps/unix/sysv/linux/nfs/nfs.h new file mode 100644 index 0000000000..61e4b656d7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nfs/nfs.h @@ -0,0 +1 @@ +#include diff --git a/sysdeps/unix/sysv/linux/sys/param.h b/sysdeps/unix/sysv/linux/sys/param.h index 652605e92a..a2d4984166 100644 --- a/sysdeps/unix/sysv/linux/sys/param.h +++ b/sysdeps/unix/sysv/linux/sys/param.h @@ -1,3 +1,21 @@ +/* Copyright (C) 1995 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 +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + #ifndef _SYS_PARAM_H #define _SYS_PARAM_H @@ -7,26 +25,21 @@ #include -/* Don't change it. H.J. */ -#ifdef OLD_LINUX -#undef MAXHOSTNAMELEN -#define MAXHOSTNAMELEN 8 /* max length of hostname */ -#endif #ifndef howmany -#define howmany(x, y) (((x)+((y)-1))/(y)) +# define howmany(x, y) (((x)+((y)-1))/(y)) #endif #ifndef roundup -#define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) +# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) #endif #define MAXPATHLEN PATH_MAX #define NOFILE OPEN_MAX /* Following the information of some of the kernel people I here assume - * that block size (i.e. the value of stat.st_blocks) for all filesystem - * is 512 bytes. If not tell me or HJ. -- Uli */ + that block size (i.e. the value of stat.st_blocks) for all filesystem + is 512 bytes. If not tell HJ, Roland, or me. -- drepper */ #define DEV_BSIZE 512 #endif -- cgit v1.2.3