mirror of git://sourceware.org/git/glibc.git
* sysdeps/powerpc/stpcpy.S: Define & use symbolic register names.
Line up operands column with tabs. 2000-06-30 Greg McGary <greg@mcgary.org> * sysdeps/powerpc/stpcpy.S: Define & use symbolic register names. Line up operands column with tabs.
This commit is contained in:
parent
394679ebe7
commit
cb2eb74250
|
@ -1,3 +1,8 @@
|
||||||
|
2000-06-30 Greg McGary <greg@mcgary.org>
|
||||||
|
|
||||||
|
* sysdeps/powerpc/stpcpy.S: Define & use symbolic register names.
|
||||||
|
Line up operands column with tabs.
|
||||||
|
|
||||||
2000-06-30 Ulrich Drepper <drepper@redhat.com>
|
2000-06-30 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* elf/Makefile (LDFLAGS-origtest): Actually add it.
|
* elf/Makefile (LDFLAGS-origtest): Actually add it.
|
||||||
|
|
|
@ -21,79 +21,79 @@
|
||||||
|
|
||||||
/* See strlen.s for comments on how the end-of-string testing works. */
|
/* See strlen.s for comments on how the end-of-string testing works. */
|
||||||
|
|
||||||
EALIGN(__stpcpy,4,0)
|
|
||||||
/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */
|
/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */
|
||||||
|
|
||||||
/* General register assignments:
|
EALIGN (__stpcpy, 4, 0)
|
||||||
r0: temporary
|
|
||||||
r3: pointer to previous word in dest
|
|
||||||
r4: pointer to previous word in src
|
|
||||||
r6: current word from src
|
|
||||||
r7: 0xfefefeff
|
|
||||||
r8: 0x7f7f7f7f
|
|
||||||
r9: ~(word in src | 0x7f7f7f7f)
|
|
||||||
r10: alternate word from src. */
|
|
||||||
|
|
||||||
or r0,r4,r3
|
#define rTMP r0
|
||||||
clrlwi. r0,r0,30
|
#define rDEST r3 /* pointer to previous word in dest */
|
||||||
addi r3,r3,-4
|
#define rSRC r4 /* pointer to previous word in src */
|
||||||
|
#define rWORD r6 /* current word from src */
|
||||||
|
#define rFEFE r7 /* 0xfefefeff */
|
||||||
|
#define r7F7F r8 /* 0x7f7f7f7f */
|
||||||
|
#define rNEG r9 /* ~(word in src | 0x7f7f7f7f) */
|
||||||
|
#define rALT r10 /* alternate word from src */
|
||||||
|
|
||||||
|
or rTMP, rSRC, rDEST
|
||||||
|
clrlwi. rTMP, rTMP, 30
|
||||||
|
addi rDEST, rDEST, -4
|
||||||
bne L(unaligned)
|
bne L(unaligned)
|
||||||
|
|
||||||
lis r7,0xfeff
|
lis rFEFE, -0x101
|
||||||
lis r8,0x7f7f
|
lis r7F7F, 0x7f7f
|
||||||
lwz r6,0(r4)
|
lwz rWORD, 0(rSRC)
|
||||||
addi r7,r7,-0x101
|
addi rFEFE, rFEFE, -0x101
|
||||||
addi r8,r8,0x7f7f
|
addi r7F7F, r7F7F, 0x7f7f
|
||||||
b L(g2)
|
b L(g2)
|
||||||
|
|
||||||
L(g0): lwzu r10,4(r4)
|
L(g0): lwzu rALT, 4(rSRC)
|
||||||
stwu r6,4(r3)
|
stwu rWORD, 4(rDEST)
|
||||||
add r0,r7,r10
|
add rTMP, rFEFE, rALT
|
||||||
nor r9,r8,r10
|
nor rNEG, r7F7F, rALT
|
||||||
and. r0,r0,r9
|
and. rTMP, rTMP, rNEG
|
||||||
bne- L(g1)
|
bne- L(g1)
|
||||||
lwzu r6,4(r4)
|
lwzu rWORD, 4(rSRC)
|
||||||
stwu r10,4(r3)
|
stwu rALT, 4(rDEST)
|
||||||
L(g2): add r0,r7,r6
|
L(g2): add rTMP, rFEFE, rWORD
|
||||||
nor r9,r8,r6
|
nor rNEG, r7F7F, rWORD
|
||||||
and. r0,r0,r9
|
and. rTMP, rTMP, rNEG
|
||||||
beq+ L(g0)
|
beq+ L(g0)
|
||||||
|
|
||||||
mr r10,r6
|
mr rALT, rWORD
|
||||||
/* We've hit the end of the string. Do the rest byte-by-byte. */
|
/* We've hit the end of the string. Do the rest byte-by-byte. */
|
||||||
L(g1): rlwinm. r0,r10,8,24,31
|
L(g1): rlwinm. rTMP, rALT, 8, 24, 31
|
||||||
stbu r0,4(r3)
|
stbu rTMP, 4(rDEST)
|
||||||
beqlr-
|
beqlr-
|
||||||
rlwinm. r0,r10,16,24,31
|
rlwinm. rTMP, rALT, 16, 24, 31
|
||||||
stbu r0,1(r3)
|
stbu rTMP, 1(rDEST)
|
||||||
beqlr-
|
beqlr-
|
||||||
rlwinm. r0,r10,24,24,31
|
rlwinm. rTMP, rALT, 24, 24, 31
|
||||||
stbu r0,1(r3)
|
stbu rTMP, 1(rDEST)
|
||||||
beqlr-
|
beqlr-
|
||||||
stbu r10,1(r3)
|
stbu rALT, 1(rDEST)
|
||||||
blr
|
blr
|
||||||
|
|
||||||
/* Oh well. In this case, we just do a byte-by-byte copy. */
|
/* Oh well. In this case, we just do a byte-by-byte copy. */
|
||||||
.align 4
|
.align 4
|
||||||
nop
|
nop
|
||||||
L(unaligned):
|
L(unaligned):
|
||||||
lbz r6,0(r4)
|
lbz rWORD, 0(rSRC)
|
||||||
addi r3,r3,3
|
addi rDEST, rDEST, 3
|
||||||
cmpwi r6,0
|
cmpwi rWORD, 0
|
||||||
beq- L(u2)
|
beq- L(u2)
|
||||||
|
|
||||||
L(u0): lbzu r10,1(r4)
|
L(u0): lbzu rALT, 1(rSRC)
|
||||||
stbu r6,1(r3)
|
stbu rWORD, 1(rDEST)
|
||||||
cmpwi r10,0
|
cmpwi rALT, 0
|
||||||
beq- L(u1)
|
beq- L(u1)
|
||||||
nop /* Let 601 load start of loop. */
|
nop /* Let 601 load start of loop. */
|
||||||
lbzu r6,1(r4)
|
lbzu rWORD, 1(rSRC)
|
||||||
stbu r10,1(r3)
|
stbu rALT, 1(rDEST)
|
||||||
cmpwi r6,0
|
cmpwi rWORD, 0
|
||||||
bne+ L(u0)
|
bne+ L(u0)
|
||||||
L(u2): stbu r6,1(r3)
|
L(u2): stbu rWORD, 1(rDEST)
|
||||||
blr
|
blr
|
||||||
L(u1): stbu r10,1(r3)
|
L(u1): stbu rALT, 1(rDEST)
|
||||||
blr
|
blr
|
||||||
END (__stpcpy)
|
END (__stpcpy)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue