2001-02-08  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/alpha/strrchr.S: Little optimization.
	Patch by Richard Henderson <rth@redhat.com>.

	* sysdeps/alpha/alphaev67/strrchr.S: New file.
	Contributed by Rick Gorton <rick.gorton@alpha-processor.com>..

2001-02-08  kaz Kojima  <kkojima@rr.iij4u.or.jp>

	* sysdeps/sh/sh3/setjmp.S (__sigsetjmp): Correct function name
	in the assembler end directive.

	pointer in FILE structure before calling _IO_init.
	correctly.  For numbers ending in all zeros eat the zeros even before
This commit is contained in:
Ulrich Drepper 2001-02-09 05:33:59 +00:00
parent f8b23b32ad
commit 6b58cbc02d
5 changed files with 303 additions and 4 deletions

View File

@ -1,3 +1,16 @@
2001-02-08 Ulrich Drepper <drepper@redhat.com>
* sysdeps/alpha/strrchr.S: Little optimization.
Patch by Richard Henderson <rth@redhat.com>.
* sysdeps/alpha/alphaev67/strrchr.S: New file.
Contributed by Rick Gorton <rick.gorton@alpha-processor.com>..
2001-02-08 kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/sh/sh3/setjmp.S (__sigsetjmp): Correct function name
in the assembler end directive.
2001-02-08 Andreas Jaeger <aj@suse.de>
* manual/stdio.texi (Closing Streams): Fix typos.
@ -9,7 +22,7 @@
Reported by Claus-Justus Heine <heine@instmath.rwth-aachen.de>.
* stdlib/strfmon.c [USE_IN_LIBIO]: Define lock variable and store
point in FILE structure before calling _IO_init.
pointer in FILE structure before calling _IO_init.
* stdlib/Makefile: Add -D_IO_MTSAFE_IO to CFLAGS for strfmon and
strfmon_l if necessary.
Reported by Jury Gerold <gjury@grips.com>.
@ -36,7 +49,7 @@
* stdlib/strtod.c: Never stop prematurely reading digits before the
decimal point is found. Compute exponent limit for negative exponents
correctly. For numbers ending in all zeros eat the zeroes even before
correctly. For numbers ending in all zeros eat the zeros even before
the decimal point if the exponent is negative [PR libc/2072].
* stdlib/Makefile (tests): Add bug-strtod.
* stdlib/bug-strtod.c: New file.

View File

@ -0,0 +1,169 @@
/* Special .init and .fini section support for SH. Linuxthread version.
Copyright (C) 2000, 2001 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.
In addition to the permissions in the GNU Library General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file with other
programs, and to distribute those programs without any restriction
coming from the use of this file. (The Library General Public
License restrictions do apply in other respects; for example, they
cover modification of the file, and distribution when not linked
into another program.)
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, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This file is compiled into assembly code which is then munged by a sed
script into two files: crti.s and crtn.s.
* crti.s puts a function prologue at the beginning of the
.init and .fini sections and defines global symbols for
those addresses, so they can be called as functions.
* crtn.s puts the corresponding function epilogues
in the .init and .fini sections. */
__asm__ ("
#include \"defs.h\"
#define SHARED
/*@HEADER_ENDS*/
/*@TESTS_BEGIN*/
/*@TESTS_END*/
/*@_init_PROLOG_BEGINS*/
.section .init
.align 5
.global _init
.type _init,@function
_init:
mov.l r12,@-r15
mov.l r14,@-r15
sts.l pr,@-r15
#ifdef SHARED
mova .L22,r0
mov.l .L22,r12
add r0,r12
mova .L24,r0
mov.l .L24,r1
add r0,r1
jsr @r1
nop
mova .L23,r0
mov.l .L23,r1
add r0,r1
#else
mov.l .L24,r1
jsr @r1
nop
mov.l .L23,r1
#endif
jsr @r1
mov r15,r14
bra 1f
nop
.align 2
#ifdef SHARED
.L22:
.long _GLOBAL_OFFSET_TABLE_
.L23:
.long __gmon_start__@PLT
.L24:
.long __pthread_initialize_minimal@PLT
#else
.L23:
.long __gmon_start__
.L24:
.long __pthread_initialize_minimal
#endif
.data
.global __fpscr_values
__fpscr_values:
.long 0
.long 0x80000
.previous
1:
ALIGN
END_INIT
/*@_init_PROLOG_ENDS*/
/*@_init_EPILOG_BEGINS*/
.section .init
mov r14,r15
lds.l @r15+,pr
mov.l @r15+,r14
rts
mov.l @r15+,r12
END_INIT
.section .text
.align 5
.weak __gmon_start__
.type __gmon_start__,@function
__gmon_start__:
mov.l r14,@-r15
mov r15,r14
mov r14,r15
rts
mov.l @r15+,r14
/*@_init_EPILOG_ENDS*/
/*@_fini_PROLOG_BEGINS*/
.section .fini
.align 5
.global _fini
.type _fini,@function
_fini:
mov.l r12,@-r15
mov.l r14,@-r15
sts.l pr,@-r15
#ifdef SHARED
mova .L27,r0
mov.l .L27,r12
add r0,r12
#endif
mov r15,r14
ALIGN
END_FINI
#ifdef SHARED
bra 1f
nop
.align 2
.L27:
.long _GLOBAL_OFFSET_TABLE_
#endif
1:
/*@_fini_PROLOG_ENDS*/
/*@_fini_EPILOG_BEGINS*/
.section .fini
mov r14,r15
lds.l @r15+,pr
mov.l @r15+,r14
rts
mov.l @r15+,r12
END_FINI
/*@_fini_EPILOG_ENDS*/
/*@TRAILER_BEGINS*/
");

View File

@ -0,0 +1,117 @@
/* Copyright (C) 2000 Free Software Foundation, Inc.
EV67 optimized by Rick Gorton <rick.gorton@alpha-processor.com>.
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. */
/* Return the address of the last occurrence of a given character
within a null-terminated string, or null if it is not found. */
#include <sysdep.h>
.arch ev6
.set noreorder
.set noat
ENTRY(strrchr)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
and a1, 0xff, t2 # E : 00000000000000ch
insbl a1, 1, t4 # U : 000000000000ch00
insbl a1, 2, t5 # U : 0000000000ch0000
ldq_u t0, 0(a0) # L : load first quadword Latency=3
mov zero, t6 # E : t6 is last match aligned addr
or t2, t4, a1 # E : 000000000000chch
sll t5, 8, t3 # U : 00000000ch000000
mov zero, t8 # E : t8 is last match byte compare mask
andnot a0, 7, v0 # E : align source addr
or t5, t3, t3 # E : 00000000chch0000
sll a1, 32, t2 # U : 0000chch00000000
sll a1, 48, t4 # U : chch000000000000
or t4, a1, a1 # E : chch00000000chch
or t2, t3, t2 # E : 0000chchchch0000
or a1, t2, a1 # E : chchchchchchchch
lda t5, -1 # E : build garbage mask
cmpbge zero, t0, t1 # E : bits set iff byte == zero
mskqh t5, a0, t4 # E : Complete garbage mask
xor t0, a1, t2 # E : make bytes == c zero
cmpbge zero, t4, t4 # E : bits set iff byte is garbage
cmpbge zero, t2, t3 # E : bits set iff byte == c
andnot t1, t4, t1 # E : clear garbage from null test
andnot t3, t4, t3 # E : clear garbage from char test
bne t1, $eos # U : did we already hit the terminator?
/* Character search main loop */
$loop:
ldq t0, 8(v0) # L : load next quadword
cmovne t3, v0, t6 # E : save previous comparisons match
nop # : Latency=2, extra map slot (keep nop with cmov)
nop
cmovne t3, t3, t8 # E : Latency=2, extra map slot
nop # : keep with cmovne
addq v0, 8, v0 # E :
xor t0, a1, t2 # E :
cmpbge zero, t0, t1 # E : bits set iff byte == zero
cmpbge zero, t2, t3 # E : bits set iff byte == c
beq t1, $loop # U : if we havnt seen a null, loop
nop
/* Mask out character matches after terminator */
$eos:
negq t1, t4 # E : isolate first null byte match
and t1, t4, t4 # E :
subq t4, 1, t5 # E : build a mask of the bytes upto...
or t4, t5, t4 # E : ... and including the null
and t3, t4, t3 # E : mask out char matches after null
cmovne t3, t3, t8 # E : save it, if match found Latency=2, extra map slot
nop # : Keep with cmovne
nop
cmovne t3, v0, t6 # E :
nop # : Keep with cmovne
/* Locate the address of the last matched character */
ctlz t8, t2 # U0 : Latency=3 (0x40 for t8=0)
nop
cmoveq t8, 0x3f, t2 # E : Compensate for case when no match is seen
nop # E : hide the cmov latency (2) behind ctlz latency
lda t5, 0x3f($31) # E :
subq t5, t2, t5 # E : Normalize leading zero count
addq t6, t5, v0 # E : and add to quadword address
ret # L0 : Latency=3
nop
nop
END(strrchr)
weak_alias (strrchr, rindex)

View File

@ -39,7 +39,7 @@ ENTRY(strrchr)
.prologue 0
#endif
zapnot a1, 1, a1 # e0 : zero extend our test character
and a1, 0xff, a1 # e0 : zero extend our test character
mov zero, t6 # .. e1 : t6 is last match aligned addr
sll a1, 8, t5 # e0 : replicate our test character
mov zero, t7 # .. e1 : t7 is last match byte compare mask

View File

@ -61,4 +61,4 @@ ENTRY (__sigsetjmp)
.L1:
.long C_SYMBOL_NAME(__sigjmp_save)
#endif
END (__setjmp)
END (__sigsetjmp)