-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
Ulrich Drepper
committed
Feb 9, 2001
1 parent
f8b23b3
commit 6b58cbc
Showing
5 changed files
with
303 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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*/ | ||
"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -61,4 +61,4 @@ ENTRY (__sigsetjmp) | |
.L1: | ||
.long C_SYMBOL_NAME(__sigjmp_save) | ||
#endif | ||
END (__setjmp) | ||
END (__sigsetjmp) |