1998-07-30 12:38  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/ffs.c: Add ffsl entry point.
	* sysdeps/i386/i686/ffs.c: Likewise.
	* sysdeps/m68k/ffs.c: Likewise.
	* sysdeps/powerpc/ffs.c: Likewise.

	* sysdeps/i386/i486/bits/string.h: Add optimizations for ffs/ffsl
	on i686.

1998-07-30  Richard Henderson  <rth@cygnus.com>

	* elf/Makefile (ld-map): Move initialization below Makeconfig include.

	* sysdeps/libm-ieee754/k_standard.c (zero): Make non-const to
	work around gcc bug.

	* string/string.h (ffsl, ffsll): Prototype.
	* string/Version (GLIBC_2.1): Add them.
	* sysdeps/alpha/ffs.S: Schedule for EV5.  Add ffsl and ffsll
	entry points.
	* sysdeps/alpha/ffsll.S: New file.  Empty.
	* sysdeps/generic/ffs.c: Add ffsl and ffsll entry points.
	* sysdeps/generic/ffsll.c: New file.
	* string/Makefile (routines): Add ffsll.

1998-07-30 10:03  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/alpha/bits/time.h: Don't define CLK_TCK for
	strictly ISO C compliant programs.
	* sysdeps/unix/sysv/linux/mips/bits/time.h: Likewise.

1998-07-22  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* inet/protocols/rwhod.h: Correct typo in comment.

	* configure.in: Use better regex for gettext.
This commit is contained in:
Ulrich Drepper 1998-07-30 12:47:25 +00:00
parent ccd17b3265
commit bdd421cc6d
20 changed files with 208 additions and 55 deletions

View File

@ -1,3 +1,41 @@
1998-07-30 12:38 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/ffs.c: Add ffsl entry point.
* sysdeps/i386/i686/ffs.c: Likewise.
* sysdeps/m68k/ffs.c: Likewise.
* sysdeps/powerpc/ffs.c: Likewise.
* sysdeps/i386/i486/bits/string.h: Add optimizations for ffs/ffsl
on i686.
1998-07-30 Richard Henderson <rth@cygnus.com>
* elf/Makefile (ld-map): Move initialization below Makeconfig include.
* sysdeps/libm-ieee754/k_standard.c (zero): Make non-const to
work around gcc bug.
* string/string.h (ffsl, ffsll): Prototype.
* string/Version (GLIBC_2.1): Add them.
* sysdeps/alpha/ffs.S: Schedule for EV5. Add ffsl and ffsll
entry points.
* sysdeps/alpha/ffsll.S: New file. Empty.
* sysdeps/generic/ffs.c: Add ffsl and ffsll entry points.
* sysdeps/generic/ffsll.c: New file.
* string/Makefile (routines): Add ffsll.
1998-07-30 10:03 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/alpha/bits/time.h: Don't define CLK_TCK for
strictly ISO C compliant programs.
* sysdeps/unix/sysv/linux/mips/bits/time.h: Likewise.
1998-07-22 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* inet/protocols/rwhod.h: Correct typo in comment.
* configure.in: Use better regex for gettext.
1998-07-29 21:29 Ulrich Drepper <drepper@cygnus.com>
* elf/elf.h: Define more EM_* constants, ELFCLASSNUM, ELFDATANUM,

4
configure vendored
View File

@ -1388,10 +1388,10 @@ else
# Found it, now check the version.
echo $ac_n "checking version of $MSGFMT""... $ac_c" 1>&6
echo "configure:1391: checking version of $MSGFMT" >&5
ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.*\([0-9][0-9]*\.[0-9]*\).*$/\1/p'`
ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
0.[1-9][0-9] | [1-9].*)
0.[1-9][0-9].* | [1-9].*)
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;

View File

@ -459,8 +459,8 @@ AC_CHECK_PROG_VER(MAKE, make gmake, --version,
[3.75 | 3.76.[1-9]* | 3.7[789]* | 3.[89]*], critic_missing=t)
AC_CHECK_PROG_VER(MSGFMT, msgfmt gmsgfmt, --version,
[GNU gettext.*\([0-9][0-9]*\.[0-9]*\)],
[0.[1-9][0-9] | [1-9].*], MSGFMT=: aux_missing=t)
[GNU gettext.* \([0-9]*\.[0-9.]*\)],
[0.[1-9][0-9].* | [1-9].*], MSGFMT=: aux_missing=t)
AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
[GNU texinfo \([0-9][0-9.]*\)],
[3.1[1-9] | 3.[2-9][0-9]], MAKEINFO=: aux_missing=t)

View File

@ -35,9 +35,6 @@ elide-routines.os = $(dl-routines) dl-support enbl-secure
# ld.so uses those routines, plus some special stuff for being the program
# interpreter and operating independent of libc.
rtld-routines := rtld $(dl-routines) dl-sysdep dl-environ dl-minimal
ifeq ($(versioning),yes)
ld-map = $(common-objpfx)libc.map
endif
distribute = $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
dl-hash.h soinit.c sofini.c ldd.sh.in ldd.bash.in eval.c \
genrtldtbl.awk atomicity.h dl-procinfo.h ldsodefs.h \
@ -54,6 +51,10 @@ all: # Make this the default target; it will be defined in Rules.
include ../Makeconfig
ifeq ($(versioning),yes)
ld-map = $(common-objpfx)libc.map
endif
ifeq (yes,$(build-shared))
extra-objs = $(rtld-routines:=.os) soinit.os sofini.os eval.os interp.os
generated = librtld.os dl-allobjs.os ld.so trusted-dirs.h trusted-dirs.st

View File

@ -65,7 +65,7 @@ struct whod {
#define WHODVERSION 1
#define WHODTYPE_STATUS 1 /* host status */
/* We used to define _PATH_RWHOD here but it's now in <paths.h>. */
/* We used to define _PATH_RWHODIR here but it's now in <paths.h>. */
#include <paths.h>
#endif /* protocols/rwhod.h */

View File

@ -31,7 +31,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \
strncat strncmp strncpy \
strrchr strpbrk strsignal strspn strstr strtok \
strtok_r strxfrm memchr memcmp memmove memset \
mempcpy bcopy bzero ffs stpcpy stpncpy \
mempcpy bcopy bzero ffs ffsll stpcpy stpncpy \
strcasecmp strncase strcasecmp_l strncase_l \
memccpy memcpy wordcopy strsep strcasestr \
swab strfry memfrob memmem \

View File

@ -44,6 +44,9 @@ libc {
# functions used in other libraries
__strcasestr;
# f*
ffsl; ffsll;
# m*
mempcpy;

View File

@ -234,8 +234,17 @@ extern char *rindex __P ((__const char *__s, int __c));
/* Return the position of the first bit set in I, or 0 if none are set.
The least-significant bit is position 1, the most-significant 32. */
extern int __ffs __P ((int __i));
extern int ffs __P ((int __i));
extern int __ffs __P ((int __i)) __attribute__ ((const));
extern int ffs __P ((int __i)) __attribute__ ((const));
/* The following two functions are non-standard but necessary for non-32 bit
platforms. */
# ifdef __USE_GNU
extern int ffsl __P ((long int __l)) __attribute__ ((const));
# ifdef __GNUC__
extern int ffsll __P ((long long int __ll)) __attribute__ ((const));
# endif
# endif
/* Compare S1 and S2, ignoring case. */
extern int __strcasecmp __P ((__const char *__s1, __const char *__s2));

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
This file is part of the GNU C Library.
@ -25,49 +25,66 @@
.set noreorder
.set noat
ENTRY(__ffs)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
zap $16, 0xF0, $16
br $ffsl..ng
#else
.prologue 0
zap $16, 0xF0, $16
# FALLTHRU
#endif
END(__ffs)
.align 4
ENTRY(ffsl)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
$ffsl..ng:
#else
.prologue 0
#endif
not $16, $1 # e0 :
ldi $2, -1 # .. e1 :
cmpbge $1, $2, $3 # e0 : bit N == 1 for byte N == 0
clr $0 # .. e1 :
addq $3, 1, $4 # e0 :
bic $4, $3, $3 # e1 : bit N == 1 for first byte N != 0
and $3, 0xF0, $4 # e0 :
and $3, 0xCC, $5 # .. e1 :
and $3, 0xAA, $6 # e0 :
cmovne $4, 4, $0 # .. e1 :
cmovne $5, 2, $5 # e0 :
cmovne $6, 1, $6 # .. e1 :
addl $0, $5, $0 # e0 :
addl $0, $6, $0 # e1 : $0 == N
extbl $16, $0, $1 # e0 : $1 == byte N
ldi $2, 1 # .. e1 :
negq $1, $3 # e0 :
and $3, $1, $3 # e1 : bit N == least bit set of byte N
and $3, 0xF0, $4 # e0 :
and $3, 0xCC, $5 # .. e1 :
and $3, 0xAA, $6 # e0 :
cmovne $4, 5, $2 # .. e1 :
cmovne $5, 2, $5 # e0 :
cmovne $6, 1, $6 # .. e1 :
s8addl $0, $2, $0 # e0 : mult byte ofs by 8 and sum
addl $5, $6, $5 # .. e1 :
addl $0, $5, $0 # e0 :
nop # .. e1 :
cmoveq $16, 0, $0 # e0 : trap input == 0 case.
ret # .. e1 : 18
ldq_u zero, 0(sp) # on the 21064, this helps dual-issuing
addl a0, zero, a0 # the last insn and reduces the stall
negq a0, t0 # due to the srl instruction
and a0, t0, t0
clr v0
beq a0, $done
END(ffsl)
# now do binary search for first non-zero bit
zapnot t0, 0x03, t2
addq v0, 16, t3
cmoveq t2, t3, v0
zapnot t0, 0x05, t2
addq v0, 8, t3
cmoveq t2, t3, v0
srl t0, v0, t0
addq v0, 1, v0
and t0, 0x0f, t2
addq v0, 4, t3
cmoveq t2, t3, v0
and t0, 0x33, t2
addq v0, 2, t3
cmoveq t2, t3, v0
and t0, 0x55, t2
addq v0, 1, t3
cmoveq t2, t3, v0
$done: ret
END(__ffs)
weak_alias (__ffs, ffs)
weak_extern (ffsl)
weak_alias (ffsl, ffsll)

1
sysdeps/alpha/ffsll.S Normal file
View File

@ -0,0 +1 @@
/* This function is defined in ffs.S. */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Torbjorn Granlund (tege@sics.se).
@ -18,6 +18,7 @@
Boston, MA 02111-1307, USA. */
#include <limits.h>
#define ffsl __something_else
#include <string.h>
#undef ffs
@ -46,3 +47,8 @@ __ffs (i)
return table[x >> a] + a;
}
weak_alias (__ffs, ffs)
#if ULONG_MAX == UINT_MAX
#undef ffsl
weak_alias (__ffs, ffsl)
#endif

42
sysdeps/generic/ffsll.c Normal file
View File

@ -0,0 +1,42 @@
/* Copyright (C) 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Torbjorn Granlund (tege@sics.se).
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. */
#include <limits.h>
#define ffsl __something_else
#include <string.h>
#undef ffsll
/* Find the first bit set in I. */
int
ffsll (i)
long long int i;
{
unsigned long long int x = i & -i;
if (x <= 0xffffffff)
return ffs (i);
else
return 32 + ffs (i >> 32);
}
#if ULONG_MAX != UINT_MAX
#undef ffsl
weak_alias (ffsll, ffsl)
#endif

View File

@ -1,7 +1,7 @@
/* ffs -- find first set bit in a word, counted from least significant end.
For Intel 80x86, x>=3.
This file is part of the GNU C Library.
Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
Copyright (C) 1991, 92, 93, 94, 97, 98 Free Software Foundation, Inc.
Contributed by Torbjorn Granlund (tege@sics.se).
The GNU C Library is free software; you can redistribute it and/or
@ -19,6 +19,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define ffsl __something_else
#include <string.h>
#undef ffs
@ -41,6 +42,8 @@ __ffs (x)
return cnt;
}
weak_alias (__ffs, ffs)
#undef ffsl
weak_alias (__ffs, ffsl)
#else
#include <sysdeps/generic/ffs.c>

View File

@ -1567,6 +1567,25 @@ __strstr_g (__const char *__haystack, __const char *__needle)
#endif
/* Bit find functions. We define only the i686 version since for the other
processors gcc generates good code. */
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
# ifdef __i686__
# define _HAVE_STRING_ARCH_ffs 1
# define ffs(word) (__builtin_constant_p (word) \
? __builtin_ffs (word) \
: ({ int __cnt, __tmp; \
__asm__ __volatile__ \
("bsfl %2,%0\n\t" \
"cmovel %1,%0" \
: "=&r" (__cnt), "=r" (__tmp) \
: "rm" (word), "1" (-1)); \
__cnt + 1; }))
# define ffsl(word) ffs(word)
# endif /* i686 */
#endif /* BSD || X/Open */
#undef __STRING_INLINE
#endif /* use string inlines && GNU CC */

View File

@ -19,6 +19,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define ffsl __something_else
#include <string.h>
#undef ffs
@ -39,6 +40,8 @@ __ffs (x)
return cnt + 1;
}
weak_alias (__ffs, ffs)
#undef ffsl
weak_alias (__ffs, ffsl)
#else
#include <sysdeps/generic/ffs.c>

View File

@ -29,7 +29,10 @@ static char rcsid[] = "$NetBSD: k_standard.c,v 1.6 1995/05/10 20:46:35 jtc Exp $
#undef fflush
#endif /* !defined(_USE_WRITE) */
#ifdef __STDC__
/* XXX gcc versions until now don't delay the 0.0/0.0 division until
runtime but produce NaN at copile time. This is wrong since the
exceptions are not set correctly. */
#if 0 && defined __STDC__
static const double zero = 0.0; /* used as const */
#else
static double zero = 0.0; /* used as const */

View File

@ -1,7 +1,7 @@
/* ffs -- find first set bit in a word, counted from least significant end.
For mc68020, mc68030, mc68040.
This file is part of the GNU C Library.
Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
Copyright (C) 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
Contributed by Torbjorn Granlund (tege@sics.se).
The GNU C Library is free software; you can redistribute it and/or
@ -19,6 +19,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define ffsl __something_else
#include <string.h>
#undef ffs
@ -36,6 +37,8 @@ __ffs (x)
return 32 - cnt;
}
weak_alias (__ffs, ffs)
#undef ffsl
weak_alias (__ffs, ffsl)
#else

View File

@ -1,6 +1,6 @@
/* Find first set bit in a word, counted from least significant end.
For PowerPC.
Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
Copyright (C) 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
Contributed by Torbjorn Granlund (tege@sics.se).
The GNU C Library is free software; you can redistribute it and/or
@ -29,3 +29,4 @@ __ffs (int x)
return 32 - cnt;
}
weak_alias (__ffs, ffs)
weak_alais (__ffs, ffsl)

View File

@ -1,5 +1,5 @@
/* System-dependent timing definitions. Linux/Alpha version.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1998 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
@ -33,9 +33,11 @@
XSI-conformant systems. */
# define CLOCKS_PER_SEC 1000000
# ifndef __STRICT_ANSI__
/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
presents the real value for clock ticks per second for the system. */
# define CLK_TCK 1024
# define CLK_TCK 1024
# endif
# endif /* bits/time.h */
#endif /* !__need_timeval */

View File

@ -1,5 +1,5 @@
/* System-dependent timing definitions. Linux/MIPS version.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1998 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
@ -33,9 +33,11 @@
XSI-conformant systems. */
# define CLOCKS_PER_SEC 1000000
# ifndef __STRICT_ANSI__
/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
presents the real value for clock ticks per second for the system. */
# define CLK_TCK 100 /* XXX not correct for all systems. */
# define CLK_TCK 100 /* XXX not correct for all systems. */
# endif
# endif /* bits/time.h */
#endif