Update.
1999-10-11 Ulrich Drepper <drepper@cygnus.com> * sysdeps/powerpc/Makefile [math] (libm-support): Remove t_sqrt. * sysdeps/powerpc/e_sqrt.c: Moved to... * sysdeps/powerpc/fpu/e_sqrt.c: ...here. * sysdeps/powerpc/e_sqrtf.c: Moved to... * sysdeps/powerpc/fpu/e_sqrtf.c: ...here. * sysdeps/powerpc/submul_1.S: Adjust asm syntax. * sysdeps/powerpc/sub_n.S: Likewise. * sysdeps/powerpc/strlen.S: Likewise. * sysdeps/powerpc/strcpy.S: Likewise. * sysdeps/powerpc/strcmp.S: Likewise. * sysdeps/powerpc/strchr.S: Likewise. * sysdeps/powerpc/stpcpy.S: Likewise. * sysdeps/powerpc/setjmp.S: Likewise. * sysdeps/powerpc/rshift.S: Likewise. * sysdeps/powerpc/ppc-mcount.S: Likewise. * sysdeps/powerpc/mul_1.S: Likewise. * sysdeps/powerpc/memset.S: Likewise. * sysdeps/powerpc/lshift.S: Likewise. * sysdeps/powerpc/dl-start.S: Likewise. * sysdeps/powerpc/bzero.S: Likewise. * sysdeps/powerpc/bsd-setjmp.S: Likewise. * sysdeps/powerpc/bsd-_setjmp.S: Likewise. * sysdeps/powerpc/addmul_1.S: Likewise. * sysdeps/powerpc/add_n.S: Likewise. * sysdeps/powerpc/__longjmp.S: Likewise. * sysdeps/powerpc/elf/start.S: Likewise. 1999-10-11 Cristian Gafton <gafton@redhat.com> * sysdeps/unix/sysv/linux/alpha/bits/sigaction.h: Declare
This commit is contained in:
parent
df08cc56eb
commit
217eb19b6f
39
ChangeLog
39
ChangeLog
@ -1,8 +1,39 @@
|
||||
1999-10-11 Cristian Gafton <gafton@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/alpha/bits/sigaction.h: Declare
|
||||
1999-10-11 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* sysdeps/powerpc/Makefile [math] (libm-support): Remove t_sqrt.
|
||||
|
||||
* sysdeps/powerpc/e_sqrt.c: Moved to...
|
||||
* sysdeps/powerpc/fpu/e_sqrt.c: ...here.
|
||||
* sysdeps/powerpc/e_sqrtf.c: Moved to...
|
||||
* sysdeps/powerpc/fpu/e_sqrtf.c: ...here.
|
||||
|
||||
* sysdeps/powerpc/submul_1.S: Adjust asm syntax.
|
||||
* sysdeps/powerpc/sub_n.S: Likewise.
|
||||
* sysdeps/powerpc/strlen.S: Likewise.
|
||||
* sysdeps/powerpc/strcpy.S: Likewise.
|
||||
* sysdeps/powerpc/strcmp.S: Likewise.
|
||||
* sysdeps/powerpc/strchr.S: Likewise.
|
||||
* sysdeps/powerpc/stpcpy.S: Likewise.
|
||||
* sysdeps/powerpc/setjmp.S: Likewise.
|
||||
* sysdeps/powerpc/rshift.S: Likewise.
|
||||
* sysdeps/powerpc/ppc-mcount.S: Likewise.
|
||||
* sysdeps/powerpc/mul_1.S: Likewise.
|
||||
* sysdeps/powerpc/memset.S: Likewise.
|
||||
* sysdeps/powerpc/lshift.S: Likewise.
|
||||
* sysdeps/powerpc/dl-start.S: Likewise.
|
||||
* sysdeps/powerpc/bzero.S: Likewise.
|
||||
* sysdeps/powerpc/bsd-setjmp.S: Likewise.
|
||||
* sysdeps/powerpc/bsd-_setjmp.S: Likewise.
|
||||
* sysdeps/powerpc/addmul_1.S: Likewise.
|
||||
* sysdeps/powerpc/add_n.S: Likewise.
|
||||
* sysdeps/powerpc/__longjmp.S: Likewise.
|
||||
* sysdeps/powerpc/elf/start.S: Likewise.
|
||||
|
||||
1999-10-11 Cristian Gafton <gafton@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/alpha/bits/sigaction.h: Declare
|
||||
SA_SIGINFO.
|
||||
|
||||
|
||||
1999-10-10 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* stdlib/atexit.c (initial): New variable. Use to initialize
|
||||
|
@ -1,5 +1,7 @@
|
||||
1999-10-11 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* thread_db.h: Fix comment for ti_type.
|
||||
|
||||
* td_thr_get_info.c: Initialize ti_type field.
|
||||
|
||||
* td_ta_thr_iter.c: Also report the manager thread.
|
||||
@ -20,7 +22,6 @@
|
||||
|
||||
* Makefile: New file.
|
||||
* proc_service.h: New file.
|
||||
* shlib-versions: New file.
|
||||
* td_init.c: New file.
|
||||
* td_log.c: New file.
|
||||
* td_ta_delete.c: New file.
|
||||
|
@ -266,7 +266,8 @@ typedef struct td_thrinfo
|
||||
int ti_ro_size; /* Unused. */
|
||||
td_thr_state_e ti_state; /* Thread state. */
|
||||
unsigned char ti_db_suspended; /* Nonzero if suspended by debugger. */
|
||||
td_thr_type_e ti_type; /* Unused. */
|
||||
td_thr_type_e ti_type; /* Type of the thread (system vs
|
||||
user thread). */
|
||||
intptr_t ti_pc; /* Unused. */
|
||||
intptr_t ti_sp; /* Unused. */
|
||||
short int ti_flags; /* Unused. */
|
||||
|
@ -1,5 +1,5 @@
|
||||
ifeq ($(subdir),math)
|
||||
libm-support += fenv_const fe_nomask t_sqrt
|
||||
libm-support += fenv_const fe_nomask
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),gmon)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* longjmp for PowerPC.
|
||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, 1999 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
|
||||
@ -23,48 +23,48 @@
|
||||
#include <bits/setjmp.h>
|
||||
|
||||
ENTRY (__longjmp)
|
||||
lwz %r1,(JB_GPR1*4)(%r3)
|
||||
lwz %r2,(JB_GPR2*4)(%r3)
|
||||
lwz %r0,(JB_LR*4)(%r3)
|
||||
lwz %r14,((JB_GPRS+0)*4)(%r3)
|
||||
lfd %f14,((JB_FPRS+0*2)*4)(%r3)
|
||||
lwz %r15,((JB_GPRS+1)*4)(%r3)
|
||||
lfd %f15,((JB_FPRS+1*2)*4)(%r3)
|
||||
lwz %r16,((JB_GPRS+2)*4)(%r3)
|
||||
lfd %f16,((JB_FPRS+2*2)*4)(%r3)
|
||||
lwz %r17,((JB_GPRS+3)*4)(%r3)
|
||||
lfd %f17,((JB_FPRS+3*2)*4)(%r3)
|
||||
lwz %r18,((JB_GPRS+4)*4)(%r3)
|
||||
lfd %f18,((JB_FPRS+4*2)*4)(%r3)
|
||||
lwz %r19,((JB_GPRS+5)*4)(%r3)
|
||||
lfd %f19,((JB_FPRS+5*2)*4)(%r3)
|
||||
lwz %r20,((JB_GPRS+6)*4)(%r3)
|
||||
lfd %f20,((JB_FPRS+6*2)*4)(%r3)
|
||||
mtlr %r0
|
||||
lwz %r21,((JB_GPRS+7)*4)(%r3)
|
||||
lfd %f21,((JB_FPRS+7*2)*4)(%r3)
|
||||
lwz %r22,((JB_GPRS+8)*4)(%r3)
|
||||
lfd %f22,((JB_FPRS+8*2)*4)(%r3)
|
||||
lwz %r0,(JB_CR*4)(%r3)
|
||||
lwz %r23,((JB_GPRS+9)*4)(%r3)
|
||||
lfd %f23,((JB_FPRS+9*2)*4)(%r3)
|
||||
lwz %r24,((JB_GPRS+10)*4)(%r3)
|
||||
lfd %f24,((JB_FPRS+10*2)*4)(%r3)
|
||||
lwz %r25,((JB_GPRS+11)*4)(%r3)
|
||||
lfd %f25,((JB_FPRS+11*2)*4)(%r3)
|
||||
mtcrf 0xFF,%r0
|
||||
lwz %r26,((JB_GPRS+12)*4)(%r3)
|
||||
lfd %f26,((JB_FPRS+12*2)*4)(%r3)
|
||||
lwz %r27,((JB_GPRS+13)*4)(%r3)
|
||||
lfd %f27,((JB_FPRS+13*2)*4)(%r3)
|
||||
lwz %r28,((JB_GPRS+14)*4)(%r3)
|
||||
lfd %f28,((JB_FPRS+14*2)*4)(%r3)
|
||||
lwz %r29,((JB_GPRS+15)*4)(%r3)
|
||||
lfd %f29,((JB_FPRS+15*2)*4)(%r3)
|
||||
lwz %r30,((JB_GPRS+16)*4)(%r3)
|
||||
lfd %f30,((JB_FPRS+16*2)*4)(%r3)
|
||||
lwz %r31,((JB_GPRS+17)*4)(%r3)
|
||||
lfd %f31,((JB_FPRS+17*2)*4)(%r3)
|
||||
mr %r3,%r4
|
||||
lwz r1,(JB_GPR1*4)(r3)
|
||||
lwz r2,(JB_GPR2*4)(r3)
|
||||
lwz r0,(JB_LR*4)(r3)
|
||||
lwz r14,((JB_GPRS+0)*4)(r3)
|
||||
lfd f14,((JB_FPRS+0*2)*4)(r3)
|
||||
lwz r15,((JB_GPRS+1)*4)(r3)
|
||||
lfd f15,((JB_FPRS+1*2)*4)(r3)
|
||||
lwz r16,((JB_GPRS+2)*4)(r3)
|
||||
lfd f16,((JB_FPRS+2*2)*4)(r3)
|
||||
lwz r17,((JB_GPRS+3)*4)(r3)
|
||||
lfd f17,((JB_FPRS+3*2)*4)(r3)
|
||||
lwz r18,((JB_GPRS+4)*4)(r3)
|
||||
lfd f18,((JB_FPRS+4*2)*4)(r3)
|
||||
lwz r19,((JB_GPRS+5)*4)(r3)
|
||||
lfd f19,((JB_FPRS+5*2)*4)(r3)
|
||||
lwz r20,((JB_GPRS+6)*4)(r3)
|
||||
lfd f20,((JB_FPRS+6*2)*4)(r3)
|
||||
mtlr r0
|
||||
lwz r21,((JB_GPRS+7)*4)(r3)
|
||||
lfd f21,((JB_FPRS+7*2)*4)(r3)
|
||||
lwz r22,((JB_GPRS+8)*4)(r3)
|
||||
lfd f22,((JB_FPRS+8*2)*4)(r3)
|
||||
lwz r0,(JB_CR*4)(r3)
|
||||
lwz r23,((JB_GPRS+9)*4)(r3)
|
||||
lfd f23,((JB_FPRS+9*2)*4)(r3)
|
||||
lwz r24,((JB_GPRS+10)*4)(r3)
|
||||
lfd f24,((JB_FPRS+10*2)*4)(r3)
|
||||
lwz r25,((JB_GPRS+11)*4)(r3)
|
||||
lfd f25,((JB_FPRS+11*2)*4)(r3)
|
||||
mtcrf 0xFF,r0
|
||||
lwz r26,((JB_GPRS+12)*4)(r3)
|
||||
lfd f26,((JB_FPRS+12*2)*4)(r3)
|
||||
lwz r27,((JB_GPRS+13)*4)(r3)
|
||||
lfd f27,((JB_FPRS+13*2)*4)(r3)
|
||||
lwz r28,((JB_GPRS+14)*4)(r3)
|
||||
lfd f28,((JB_FPRS+14*2)*4)(r3)
|
||||
lwz r29,((JB_GPRS+15)*4)(r3)
|
||||
lfd f29,((JB_FPRS+15*2)*4)(r3)
|
||||
lwz r30,((JB_GPRS+16)*4)(r3)
|
||||
lfd f30,((JB_FPRS+16*2)*4)(r3)
|
||||
lwz r31,((JB_GPRS+17)*4)(r3)
|
||||
lfd f31,((JB_FPRS+17*2)*4)(r3)
|
||||
mr r3,r4
|
||||
blr
|
||||
END (__longjmp)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Add two limb vectors of equal, non-zero length for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -29,40 +29,40 @@
|
||||
|
||||
EALIGN(__mpn_add_n,3,0)
|
||||
/* Set up for loop below. */
|
||||
mtcrf 0x01,%r6
|
||||
srwi. %r7,%r6,1
|
||||
li %r10,0
|
||||
mtctr %r7
|
||||
mtcrf 0x01,r6
|
||||
srwi. r7,r6,1
|
||||
li r10,0
|
||||
mtctr r7
|
||||
bt 31,2f
|
||||
|
||||
/* Clear the carry. */
|
||||
addic %r0,%r0,0
|
||||
addic r0,r0,0
|
||||
/* Adjust pointers for loop. */
|
||||
addi %r3,%r3,-4
|
||||
addi %r4,%r4,-4
|
||||
addi %r5,%r5,-4
|
||||
addi r3,r3,-4
|
||||
addi r4,r4,-4
|
||||
addi r5,r5,-4
|
||||
b 0f
|
||||
|
||||
2: lwz %r7,0(%r5)
|
||||
lwz %r6,0(%r4)
|
||||
addc %r6,%r6,%r7
|
||||
stw %r6,0(%r3)
|
||||
2: lwz r7,0(r5)
|
||||
lwz r6,0(r4)
|
||||
addc r6,r6,r7
|
||||
stw r6,0(r3)
|
||||
beq 1f
|
||||
|
||||
/* The loop. */
|
||||
|
||||
/* Align start of loop to an odd word boundary to guarantee that the
|
||||
last two words can be fetched in one access (for 601). */
|
||||
0: lwz %r9,4(%r4)
|
||||
lwz %r8,4(%r5)
|
||||
lwzu %r6,8(%r4)
|
||||
lwzu %r7,8(%r5)
|
||||
adde %r8,%r9,%r8
|
||||
stw %r8,4(%r3)
|
||||
adde %r6,%r6,%r7
|
||||
stwu %r6,8(%r3)
|
||||
0: lwz r9,4(r4)
|
||||
lwz r8,4(r5)
|
||||
lwzu r6,8(r4)
|
||||
lwzu r7,8(r5)
|
||||
adde r8,r9,r8
|
||||
stw r8,4(r3)
|
||||
adde r6,r6,r7
|
||||
stwu r6,8(r3)
|
||||
bdnz 0b
|
||||
/* Return the carry. */
|
||||
1: addze %r3,%r10
|
||||
1: addze r3,r10
|
||||
blr
|
||||
END(__mpn_add_n)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Multiply a limb vector by a single limb, for PowerPC.
|
||||
Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1995, 1997, 1999 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
|
||||
@ -23,27 +23,27 @@
|
||||
mp_size_t s1_size, mp_limb_t s2_limb)
|
||||
Calculate res+s1*s2 and put result back in res; return carry. */
|
||||
ENTRY(__mpn_addmul_1)
|
||||
mtctr %r5
|
||||
mtctr r5
|
||||
|
||||
lwz %r0,0(%r4)
|
||||
mullw %r7,%r0,%r6
|
||||
mulhwu %r10,%r0,%r6
|
||||
lwz %r9,0(%r3)
|
||||
addc %r8,%r7,%r9
|
||||
addi %r3,%r3,-4 /* adjust res_ptr */
|
||||
lwz r0,0(r4)
|
||||
mullw r7,r0,r6
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,0(r3)
|
||||
addc r8,r7,r9
|
||||
addi r3,r3,-4 /* adjust res_ptr */
|
||||
bdz 1f
|
||||
|
||||
0: lwzu %r0,4(%r4)
|
||||
stwu %r8,4(%r3)
|
||||
mullw %r8,%r0,%r6
|
||||
adde %r7,%r8,%r10
|
||||
mulhwu %r10,%r0,%r6
|
||||
lwz %r9,4(%r3)
|
||||
addze %r10,%r10
|
||||
addc %r8,%r7,%r9
|
||||
0: lwzu r0,4(r4)
|
||||
stwu r8,4(r3)
|
||||
mullw r8,r0,r6
|
||||
adde r7,r8,r10
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,4(r3)
|
||||
addze r10,r10
|
||||
addc r8,r7,r9
|
||||
bdnz 0b
|
||||
|
||||
1: stw %r8,4(%r3)
|
||||
addze %r3,%r10
|
||||
1: stw r8,4(r3)
|
||||
addze r3,r10
|
||||
blr
|
||||
END(__mpn_addmul_1)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. PowerPC version.
|
||||
Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 1997, 1999 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
|
||||
@ -24,6 +24,6 @@
|
||||
#include <sysdep.h>
|
||||
|
||||
ENTRY (_setjmp)
|
||||
li %r4,0 /* Set second argument to 0. */
|
||||
li r4,0 /* Set second argument to 0. */
|
||||
b JUMPTARGET(__sigsetjmp)
|
||||
END (_setjmp)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. PowerPC version.
|
||||
Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 1997, 1999 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
|
||||
@ -24,7 +24,7 @@
|
||||
#include <sysdep.h>
|
||||
|
||||
ENTRY (__setjmp)
|
||||
li %r4,1 /* Set second argument to 1. */
|
||||
li r4,1 /* Set second argument to 1. */
|
||||
b JUMPTARGET(__sigsetjmp)
|
||||
END (__setjmp)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Optimized bzero `implementation' for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -20,8 +20,8 @@
|
||||
#include <sysdep.h>
|
||||
|
||||
ENTRY(__bzero)
|
||||
mr %r5,%r4
|
||||
li %r4,0
|
||||
mr r5,r4
|
||||
li r4,0
|
||||
b memset@local
|
||||
END(__bzero)
|
||||
weak_alias (__bzero, bzero)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Machine-dependent ELF startup code. PowerPC version.
|
||||
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, 1998, 1999 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
|
||||
@ -30,12 +30,12 @@ ENTRY(_start)
|
||||
arguments for the program loader. */
|
||||
|
||||
/* Call _dl_start with one parameter pointing at argc */
|
||||
mr %r3,%r1
|
||||
mr r3,r1
|
||||
/* (we have to frob the stack pointer a bit to allow room for
|
||||
_dl_start to save the link register). */
|
||||
li %r4,0
|
||||
addi %r1,%r1,-16
|
||||
stw %r4,0(%r1)
|
||||
li r4,0
|
||||
addi r1,r1,-16
|
||||
stw r4,0(r1)
|
||||
bl _dl_start@local
|
||||
|
||||
/* Now, we do our main work of calling initialisation procedures.
|
||||
@ -46,50 +46,50 @@ ENTRY(_start)
|
||||
|
||||
/* Put our GOT pointer in r31, */
|
||||
bl _GLOBAL_OFFSET_TABLE_-4@local
|
||||
mflr %r31
|
||||
mflr r31
|
||||
/* the address of _start in r30, */
|
||||
mr %r30,%r3
|
||||
mr r30,r3
|
||||
/* &_dl_argc in 29, &_dl_argv in 27, and _dl_main_searchlist in 28. */
|
||||
lwz %r28,_dl_main_searchlist@got(%r31)
|
||||
lwz %r29,_dl_argc@got(%r31)
|
||||
lwz %r27,_dl_argv@got(%r31)
|
||||
lwz r28,_dl_main_searchlist@got(r31)
|
||||
lwz r29,_dl_argc@got(r31)
|
||||
lwz r27,_dl_argv@got(r31)
|
||||
0:
|
||||
/* Set initfunc = _dl_init_next(_dl_main_searchlist) */
|
||||
lwz %r3,0(%r28)
|
||||
lwz r3,0(r28)
|
||||
bl _dl_init_next@plt
|
||||
/* If initfunc is NULL, we exit the loop; otherwise, */
|
||||
cmpwi %r3,0
|
||||
cmpwi r3,0
|
||||
beq 1f
|
||||
/* call initfunc(_dl_argc, _dl_argv, _dl_argv+_dl_argc+1) */
|
||||
mtlr %r3
|
||||
lwz %r3,0(%r29)
|
||||
lwz %r4,0(%r27)
|
||||
slwi %r5,%r3,2
|
||||
add %r5,%r4,%r5
|
||||
addi %r5,%r5,4
|
||||
mtlr r3
|
||||
lwz r3,0(r29)
|
||||
lwz r4,0(r27)
|
||||
slwi r5,r3,2
|
||||
add r5,r4,r5
|
||||
addi r5,r5,4
|
||||
blrl
|
||||
/* and loop. */
|
||||
b 0b
|
||||
1:
|
||||
/* Now, to conform to the ELF ABI, we have to: */
|
||||
/* Pass argc (actually _dl_argc) in r3; */
|
||||
lwz %r3,0(%r29)
|
||||
lwz r3,0(r29)
|
||||
/* pass argv (actually _dl_argv) in r4; */
|
||||
lwz %r4,0(%r27)
|
||||
lwz r4,0(r27)
|
||||
/* pass envp (actually _dl_argv+_dl_argc+1) in r5; */
|
||||
slwi %r5,%r3,2
|
||||
add %r6,%r4,%r5
|
||||
addi %r5,%r6,4
|
||||
slwi r5,r3,2
|
||||
add r6,r4,r5
|
||||
addi r5,r6,4
|
||||
/* pass the auxilary vector in r6. This is passed to us just after _envp. */
|
||||
2: lwzu %r0,4(%r6)
|
||||
cmpwi %r0,0
|
||||
2: lwzu r0,4(r6)
|
||||
cmpwi r0,0
|
||||
bne 2b
|
||||
addi %r6,%r6,4
|
||||
addi r6,r6,4
|
||||
/* Pass a termination function pointer (in this case _dl_fini) in r7. */
|
||||
lwz %r7,_dl_fini@got(%r31)
|
||||
lwz r7,_dl_fini@got(r31)
|
||||
/* Now, call the start function in r30... */
|
||||
mtctr %r30
|
||||
lwz %r26,_dl_starting_up@got(%r31)
|
||||
mtctr r30
|
||||
lwz r26,_dl_starting_up@got(r31)
|
||||
/* Pass the stack pointer in r1 (so far so good), pointing to a NULL value.
|
||||
(This lets our startup code distinguish between a program linked statically,
|
||||
which linux will call with argc on top of the stack which will hopefully
|
||||
@ -98,14 +98,14 @@ ENTRY(_start)
|
||||
Take the opportunity to clear LR, so anyone who accidentally returns
|
||||
from _start gets SEGV. Also clear the next few words of the stack. */
|
||||
|
||||
li %r31,0
|
||||
stw %r31,0(%r1)
|
||||
mtlr %r31
|
||||
stw %r31,4(%r1)
|
||||
stw %r31,8(%r1)
|
||||
stw %r31,12(%r1)
|
||||
li r31,0
|
||||
stw r31,0(r1)
|
||||
mtlr r31
|
||||
stw r31,4(r1)
|
||||
stw r31,8(r1)
|
||||
stw r31,12(r1)
|
||||
/* Clear _dl_starting_up. */
|
||||
stw %r31,0(%r26)
|
||||
stw r31,0(r26)
|
||||
/* Go do it! */
|
||||
bctr
|
||||
END(_start)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Startup code for programs linked with GNU libc.
|
||||
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999 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
|
||||
@ -43,17 +43,17 @@ L(start_addresses):
|
||||
.section ".text"
|
||||
ENTRY(_start)
|
||||
/* Save the stack pointer, in case we're statically linked under Linux. */
|
||||
mr %r9,%r1
|
||||
mr r9,r1
|
||||
/* Set up an initial stack frame, and clear the LR. */
|
||||
clrrwi %r1,%r1,4
|
||||
li %r0,0
|
||||
stwu %r1,-16(%r1)
|
||||
mtlr %r0
|
||||
stw %r0,0(%r1)
|
||||
clrrwi r1,r1,4
|
||||
li r0,0
|
||||
stwu r1,-16(r1)
|
||||
mtlr r0
|
||||
stw r0,0(r1)
|
||||
/* Set r13 to point at the 'small data area', and put the address of
|
||||
start_addresses in r8... */
|
||||
lis %r8,L(start_addresses)@ha
|
||||
lwzu %r13,L(start_addresses)@l(%r8)
|
||||
lis r8,L(start_addresses)@ha
|
||||
lwzu r13,L(start_addresses)@l(r8)
|
||||
/* and continue in libc-start, in glibc. */
|
||||
b JUMPTARGET(__libc_start_main)
|
||||
END(_start)
|
||||
|
3
sysdeps/powerpc/fpu/Makefile
Normal file
3
sysdeps/powerpc/fpu/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
ifeq ($(subdir),math)
|
||||
libm-support += fenv_const fe_nomask t_sqrt
|
||||
endif
|
@ -1,5 +1,5 @@
|
||||
/* Shift a limb left, low level routine.
|
||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1999 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
|
||||
@ -23,68 +23,68 @@
|
||||
unsigned int cnt) */
|
||||
|
||||
EALIGN(__mpn_lshift,3,0)
|
||||
mtctr %r5 # copy size into CTR
|
||||
cmplwi %cr0,%r5,16 # is size < 16
|
||||
slwi %r0,%r5,2
|
||||
add %r7,%r3,%r0 # make r7 point at end of res
|
||||
add %r4,%r4,%r0 # make r4 point at end of s1
|
||||
lwzu %r11,-4(%r4) # load first s1 limb
|
||||
subfic %r8,%r6,32
|
||||
srw %r3,%r11,%r8 # compute function return value
|
||||
bge %cr0,L(big) # branch if size >= 16
|
||||
mtctr r5 # copy size into CTR
|
||||
cmplwi cr0,r5,16 # is size < 16
|
||||
slwi r0,r5,2
|
||||
add r7,r3,r0 # make r7 point at end of res
|
||||
add r4,r4,r0 # make r4 point at end of s1
|
||||
lwzu r11,-4(r4) # load first s1 limb
|
||||
subfic r8,r6,32
|
||||
srw r3,r11,r8 # compute function return value
|
||||
bge cr0,L(big) # branch if size >= 16
|
||||
|
||||
bdz L(end1)
|
||||
|
||||
0: lwzu %r10,-4(%r4)
|
||||
slw %r9,%r11,%r6
|
||||
srw %r12,%r10,%r8
|
||||
or %r9,%r9,%r12
|
||||
stwu %r9,-4(%r7)
|
||||
0: lwzu r10,-4(r4)
|
||||
slw r9,r11,r6
|
||||
srw r12,r10,r8
|
||||
or r9,r9,r12
|
||||
stwu r9,-4(r7)
|
||||
bdz L(end2)
|
||||
lwzu %r11,-4(%r4)
|
||||
slw %r9,%r10,%r6
|
||||
srw %r12,%r11,%r8
|
||||
or %r9,%r9,%r12
|
||||
stwu %r9,-4(%r7)
|
||||
lwzu r11,-4(r4)
|
||||
slw r9,r10,r6
|
||||
srw r12,r11,r8
|
||||
or r9,r9,r12
|
||||
stwu r9,-4(r7)
|
||||
bdnz 0b
|
||||
|
||||
L(end1):slw %r0,%r11,%r6
|
||||
stw %r0,-4(%r7)
|
||||
L(end1):slw r0,r11,r6
|
||||
stw r0,-4(r7)
|
||||
blr
|
||||
|
||||
|
||||
/* Guaranteed not to succeed. */
|
||||
L(boom): tweq %r0,%r0
|
||||
L(boom): tweq r0,r0
|
||||
|
||||
/* We imitate a case statement, by using (yuk!) fixed-length code chunks,
|
||||
of size 4*12 bytes. We have to do this (or something) to make this PIC. */
|
||||
L(big): mflr %r9
|
||||
bltl- %cr0,L(boom) # Never taken, only used to set LR.
|
||||
slwi %r10,%r6,4
|
||||
mflr %r12
|
||||
add %r10,%r12,%r10
|
||||
slwi %r8,%r6,5
|
||||
add %r10,%r8,%r10
|
||||
mtctr %r10
|
||||
addi %r5,%r5,-1
|
||||
mtlr %r9
|
||||
L(big): mflr r9
|
||||
bltl- cr0,L(boom) # Never taken, only used to set LR.
|
||||
slwi r10,r6,4
|
||||
mflr r12
|
||||
add r10,r12,r10
|
||||
slwi r8,r6,5
|
||||
add r10,r8,r10
|
||||
mtctr r10
|
||||
addi r5,r5,-1
|
||||
mtlr r9
|
||||
bctr
|
||||
|
||||
L(end2):slw %r0,%r10,%r6
|
||||
stw %r0,-4(%r7)
|
||||
L(end2):slw r0,r10,r6
|
||||
stw r0,-4(r7)
|
||||
blr
|
||||
|
||||
#define DO_LSHIFT(n) \
|
||||
mtctr %r5; \
|
||||
0: lwzu %r10,-4(%r4); \
|
||||
slwi %r9,%r11,n; \
|
||||
inslwi %r9,%r10,n,32-n; \
|
||||
stwu %r9,-4(%r7); \
|
||||
mtctr r5; \
|
||||
0: lwzu r10,-4(r4); \
|
||||
slwi r9,r11,n; \
|
||||
inslwi r9,r10,n,32-n; \
|
||||
stwu r9,-4(r7); \
|
||||
bdz- L(end2); \
|
||||
lwzu %r11,-4(%r4); \
|
||||
slwi %r9,%r10,n; \
|
||||
inslwi %r9,%r11,n,32-n; \
|
||||
stwu %r9,-4(%r7); \
|
||||
lwzu r11,-4(r4); \
|
||||
slwi r9,r10,n; \
|
||||
inslwi r9,r11,n,32-n; \
|
||||
stwu r9,-4(r7); \
|
||||
bdnz 0b; \
|
||||
b L(end1)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Optimized memset implementation for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -30,170 +30,170 @@ EALIGN(memset,5,1)
|
||||
r7: number of bytes we are setting now (when aligning) */
|
||||
|
||||
/* take care of case for size <= 4 */
|
||||
cmplwi %cr1,%r5,4
|
||||
andi. %r7,%r3,3
|
||||
mr %r6,%r3
|
||||
ble- %cr1,L(small)
|
||||
cmplwi cr1,r5,4
|
||||
andi. r7,r3,3
|
||||
mr r6,r3
|
||||
ble- cr1,L(small)
|
||||
/* align to word boundary */
|
||||
cmplwi %cr5,%r5,31
|
||||
rlwimi %r4,%r4,8,16,23
|
||||
cmplwi cr5,r5,31
|
||||
rlwimi r4,r4,8,16,23
|
||||
beq+ L(aligned) # 8th instruction from .align
|
||||
mtcrf 0x01,%r3
|
||||
subfic %r7,%r7,4
|
||||
add %r6,%r6,%r7
|
||||
sub %r5,%r5,%r7
|
||||
mtcrf 0x01,r3
|
||||
subfic r7,r7,4
|
||||
add r6,r6,r7
|
||||
sub r5,r5,r7
|
||||
bf+ 31,0f
|
||||
stb %r4,0(%r3)
|
||||
stb r4,0(r3)
|
||||
bt 30,L(aligned)
|
||||
0: sth %r4,-2(%r6) # 16th instruction from .align
|
||||
0: sth r4,-2(r6) # 16th instruction from .align
|
||||
/* take care of case for size < 31 */
|
||||
L(aligned):
|
||||
mtcrf 0x01,%r5
|
||||
rlwimi %r4,%r4,16,0,15
|
||||
ble %cr5,L(medium)
|
||||
mtcrf 0x01,r5
|
||||
rlwimi r4,r4,16,0,15
|
||||
ble cr5,L(medium)
|
||||
/* align to cache line boundary... */
|
||||
andi. %r7,%r6,0x1C
|
||||
subfic %r7,%r7,0x20
|
||||
andi. r7,r6,0x1C
|
||||
subfic r7,r7,0x20
|
||||
beq L(caligned)
|
||||
mtcrf 0x01,%r7
|
||||
add %r6,%r6,%r7
|
||||
sub %r5,%r5,%r7
|
||||
cmplwi %cr1,%r7,0x10
|
||||
mr %r8,%r6
|
||||
mtcrf 0x01,r7
|
||||
add r6,r6,r7
|
||||
sub r5,r5,r7
|
||||
cmplwi cr1,r7,0x10
|
||||
mr r8,r6
|
||||
bf 28,1f
|
||||
stw %r4,-4(%r8)
|
||||
stwu %r4,-8(%r8)
|
||||
1: blt %cr1,2f
|
||||
stw %r4,-4(%r8) # 32nd instruction from .align
|
||||
stw %r4,-8(%r8)
|
||||
stw %r4,-12(%r8)
|
||||
stwu %r4,-16(%r8)
|
||||
stw r4,-4(r8)
|
||||
stwu r4,-8(r8)
|
||||
1: blt cr1,2f
|
||||
stw r4,-4(r8) # 32nd instruction from .align
|
||||
stw r4,-8(r8)
|
||||
stw r4,-12(r8)
|
||||
stwu r4,-16(r8)
|
||||
2: bf 29,L(caligned)
|
||||
stw %r4,-4(%r8)
|
||||
stw r4,-4(r8)
|
||||
/* now aligned to a cache line. */
|
||||
L(caligned):
|
||||
cmplwi %cr1,%r4,0
|
||||
clrrwi. %r7,%r5,5
|
||||
mtcrf 0x01,%r5 # 40th instruction from .align
|
||||
beq %cr1,L(zloopstart) # special case for clearing memory using dcbz
|
||||
srwi %r0,%r7,5
|
||||
mtctr %r0
|
||||
cmplwi cr1,r4,0
|
||||
clrrwi. r7,r5,5
|
||||
mtcrf 0x01,r5 # 40th instruction from .align
|
||||
beq cr1,L(zloopstart) # special case for clearing memory using dcbz
|
||||
srwi r0,r7,5
|
||||
mtctr r0
|
||||
beq L(medium) # we may not actually get to do a full line
|
||||
clrlwi. %r5,%r5,27
|
||||
add %r6,%r6,%r7
|
||||
0: li %r8,-0x40
|
||||
clrlwi. r5,r5,27
|
||||
add r6,r6,r7
|
||||
0: li r8,-0x40
|
||||
bdz L(cloopdone) # 48th instruction from .align
|
||||
|
||||
3: dcbz %r8,%r6
|
||||
stw %r4,-4(%r6)
|
||||
stw %r4,-8(%r6)
|
||||
stw %r4,-12(%r6)
|
||||
stw %r4,-16(%r6)
|
||||
3: dcbz r8,r6
|
||||
stw r4,-4(r6)
|
||||
stw r4,-8(r6)
|
||||
stw r4,-12(r6)
|
||||
stw r4,-16(r6)
|
||||
nop # let 601 fetch last 4 instructions of loop
|
||||
stw %r4,-20(%r6)
|
||||
stw %r4,-24(%r6) # 56th instruction from .align
|
||||
stw r4,-20(r6)
|
||||
stw r4,-24(r6) # 56th instruction from .align
|
||||
nop # let 601 fetch first 8 instructions of loop
|
||||
stw %r4,-28(%r6)
|
||||
stwu %r4,-32(%r6)
|
||||
stw r4,-28(r6)
|
||||
stwu r4,-32(r6)
|
||||
bdnz 3b
|
||||
L(cloopdone):
|
||||
stw %r4,-4(%r6)
|
||||
stw %r4,-8(%r6)
|
||||
stw %r4,-12(%r6)
|
||||
stw %r4,-16(%r6) # 64th instruction from .align
|
||||
stw %r4,-20(%r6)
|
||||
cmplwi %cr1,%r5,16
|
||||
stw %r4,-24(%r6)
|
||||
stw %r4,-28(%r6)
|
||||
stwu %r4,-32(%r6)
|
||||
stw r4,-4(r6)
|
||||
stw r4,-8(r6)
|
||||
stw r4,-12(r6)
|
||||
stw r4,-16(r6) # 64th instruction from .align
|
||||
stw r4,-20(r6)
|
||||
cmplwi cr1,r5,16
|
||||
stw r4,-24(r6)
|
||||
stw r4,-28(r6)
|
||||
stwu r4,-32(r6)
|
||||
beqlr
|
||||
add %r6,%r6,%r7
|
||||
add r6,r6,r7
|
||||
b L(medium_tail2) # 72nd instruction from .align
|
||||
|
||||
.align 5
|
||||
nop
|
||||
/* Clear lines of memory in 128-byte chunks. */
|
||||
L(zloopstart):
|
||||
clrlwi %r5,%r5,27
|
||||
mtcrf 0x02,%r7
|
||||
srwi. %r0,%r7,7
|
||||
mtctr %r0
|
||||
li %r7,0x20
|
||||
li %r8,-0x40
|
||||
cmplwi %cr1,%r5,16 # 8
|
||||
clrlwi r5,r5,27
|
||||
mtcrf 0x02,r7
|
||||
srwi. r0,r7,7
|
||||
mtctr r0
|
||||
li r7,0x20
|
||||
li r8,-0x40
|
||||
cmplwi cr1,r5,16 # 8
|
||||
bf 26,0f
|
||||
dcbz 0,%r6
|
||||
addi %r6,%r6,0x20
|
||||
0: li %r9,-0x20
|
||||
dcbz 0,r6
|
||||
addi r6,r6,0x20
|
||||
0: li r9,-0x20
|
||||
bf 25,1f
|
||||
dcbz 0,%r6
|
||||
dcbz %r7,%r6
|
||||
addi %r6,%r6,0x40 # 16
|
||||
1: cmplwi %cr5,%r5,0
|
||||
dcbz 0,r6
|
||||
dcbz r7,r6
|
||||
addi r6,r6,0x40 # 16
|
||||
1: cmplwi cr5,r5,0
|
||||
beq L(medium)
|
||||
L(zloop):
|
||||
dcbz 0,%r6
|
||||
dcbz %r7,%r6
|
||||
addi %r6,%r6,0x80
|
||||
dcbz %r8,%r6
|
||||
dcbz %r9,%r6
|
||||
dcbz 0,r6
|
||||
dcbz r7,r6
|
||||
addi r6,r6,0x80
|
||||
dcbz r8,r6
|
||||
dcbz r9,r6
|
||||
bdnz L(zloop)
|
||||
beqlr %cr5
|
||||
beqlr cr5
|
||||
b L(medium_tail2)
|
||||
|
||||
.align 5
|
||||
L(small):
|
||||
/* Memset of 4 bytes or less. */
|
||||
cmplwi %cr5,%r5,1
|
||||
cmplwi %cr1,%r5,3
|
||||
bltlr %cr5
|
||||
stb %r4,0(%r6)
|
||||
beqlr %cr5
|
||||
cmplwi cr5,r5,1
|
||||
cmplwi cr1,r5,3
|
||||
bltlr cr5
|
||||
stb r4,0(r6)
|
||||
beqlr cr5
|
||||
nop
|
||||
stb %r4,1(%r6)
|
||||
bltlr %cr1
|
||||
stb %r4,2(%r6)
|
||||
beqlr %cr1
|
||||
stb r4,1(r6)
|
||||
bltlr cr1
|
||||
stb r4,2(r6)
|
||||
beqlr cr1
|
||||
nop
|
||||
stb %r4,3(%r6)
|
||||
stb r4,3(r6)
|
||||
blr
|
||||
|
||||
/* Memset of 0-31 bytes. */
|
||||
.align 5
|
||||
L(medium):
|
||||
cmplwi %cr1,%r5,16
|
||||
cmplwi cr1,r5,16
|
||||
L(medium_tail2):
|
||||
add %r6,%r6,%r5
|
||||
add r6,r6,r5
|
||||
L(medium_tail):
|
||||
bt- 31,L(medium_31t)
|
||||
bt- 30,L(medium_30t)
|
||||
L(medium_30f):
|
||||
bt- 29,L(medium_29t)
|
||||
L(medium_29f):
|
||||
bge- %cr1,L(medium_27t)
|
||||
bge- cr1,L(medium_27t)
|
||||
bflr- 28
|
||||
stw %r4,-4(%r6) # 8th instruction from .align
|
||||
stw %r4,-8(%r6)
|
||||
stw r4,-4(r6) # 8th instruction from .align
|
||||
stw r4,-8(r6)
|
||||
blr
|
||||
|
||||
L(medium_31t):
|
||||
stbu %r4,-1(%r6)
|
||||
stbu r4,-1(r6)
|
||||
bf- 30,L(medium_30f)
|
||||
L(medium_30t):
|
||||
sthu %r4,-2(%r6)
|
||||
sthu r4,-2(r6)
|
||||
bf- 29,L(medium_29f)
|
||||
L(medium_29t):
|
||||
stwu %r4,-4(%r6)
|
||||
blt- %cr1,L(medium_27f) # 16th instruction from .align
|
||||
stwu r4,-4(r6)
|
||||
blt- cr1,L(medium_27f) # 16th instruction from .align
|
||||
L(medium_27t):
|
||||
stw %r4,-4(%r6)
|
||||
stw %r4,-8(%r6)
|
||||
stw %r4,-12(%r6)
|
||||
stwu %r4,-16(%r6)
|
||||
stw r4,-4(r6)
|
||||
stw r4,-8(r6)
|
||||
stw r4,-12(r6)
|
||||
stwu r4,-16(r6)
|
||||
L(medium_27f):
|
||||
bflr- 28
|
||||
L(medium_28t):
|
||||
stw %r4,-4(%r6)
|
||||
stw %r4,-8(%r6)
|
||||
stw r4,-4(r6)
|
||||
stw r4,-8(r6)
|
||||
blr
|
||||
END(memset)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Multiply a limb vector by a limb, for PowerPC.
|
||||
Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1995, 1997, 1999 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
|
||||
@ -24,23 +24,23 @@
|
||||
Calculate s1*s2 and put result in res_ptr; return carry. */
|
||||
|
||||
ENTRY(__mpn_mul_1)
|
||||
mtctr %r5
|
||||
mtctr r5
|
||||
|
||||
lwz %r0,0(%r4)
|
||||
mullw %r7,%r0,%r6
|
||||
mulhwu %r10,%r0,%r6
|
||||
addi %r3,%r3,-4 # adjust res_ptr
|
||||
addic %r5,%r5,0 # clear cy with dummy insn
|
||||
lwz r0,0(r4)
|
||||
mullw r7,r0,r6
|
||||
mulhwu r10,r0,r6
|
||||
addi r3,r3,-4 # adjust res_ptr
|
||||
addic r5,r5,0 # clear cy with dummy insn
|
||||
bdz 1f
|
||||
|
||||
0: lwzu %r0,4(%r4)
|
||||
stwu %r7,4(%r3)
|
||||
mullw %r8,%r0,%r6
|
||||
adde %r7,%r8,%r10
|
||||
mulhwu %r10,%r0,%r6
|
||||
0: lwzu r0,4(r4)
|
||||
stwu r7,4(r3)
|
||||
mullw r8,r0,r6
|
||||
adde r7,r8,r10
|
||||
mulhwu r10,r0,r6
|
||||
bdnz 0b
|
||||
|
||||
1: stw %r7,4(%r3)
|
||||
addze %r3,%r10
|
||||
1: stw r7,4(r3)
|
||||
addze r3,r10
|
||||
blr
|
||||
END(__mpn_mul_1)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* PowerPC-specific implementation of profiling support.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -28,9 +28,9 @@
|
||||
with the address of a data word in r0 (that is different for every
|
||||
routine, initialised to 0, and otherwise unused). The caller has put
|
||||
the address the caller will return to in the usual place on the stack,
|
||||
4(%r1). _mcount is responsible for ensuring that when it returns no
|
||||
4(r1). _mcount is responsible for ensuring that when it returns no
|
||||
argument-passing registers are disturbed, and that the LR is set back
|
||||
to (what the caller sees as) 4(%r1).
|
||||
to (what the caller sees as) 4(r1).
|
||||
|
||||
This is intended so that the following code can be inserted at the
|
||||
front of any routine without changing the routine:
|
||||
@ -39,46 +39,46 @@
|
||||
.align 2
|
||||
0: .long 0
|
||||
.previous
|
||||
mflr %r0
|
||||
lis %r11,0b@ha
|
||||
stw %r0,4(%r1)
|
||||
addi %r0,%r11,0b@l
|
||||
mflr r0
|
||||
lis r11,0b@ha
|
||||
stw r0,4(r1)
|
||||
addi r0,r11,0b@l
|
||||
bl _mcount
|
||||
*/
|
||||
|
||||
ENTRY(_mcount)
|
||||
stwu %r1,-48(%r1)
|
||||
stwu r1,-48(r1)
|
||||
/* We need to save the parameter-passing registers. */
|
||||
stw %r3, 12(%r1)
|
||||
stw %r4, 16(%r1)
|
||||
stw %r5, 20(%r1)
|
||||
stw %r6, 24(%r1)
|
||||
mflr %r4
|
||||
lwz %r3, 52(%r1)
|
||||
mfcr %r5
|
||||
stw %r7, 28(%r1)
|
||||
stw %r8, 32(%r1)
|
||||
stw %r9, 36(%r1)
|
||||
stw %r10,40(%r1)
|
||||
stw %r4, 44(%r1)
|
||||
stw %r5, 8(%r1)
|
||||
stw r3, 12(r1)
|
||||
stw r4, 16(r1)
|
||||
stw r5, 20(r1)
|
||||
stw r6, 24(r1)
|
||||
mflr r4
|
||||
lwz r3, 52(r1)
|
||||
mfcr r5
|
||||
stw r7, 28(r1)
|
||||
stw r8, 32(r1)
|
||||
stw r9, 36(r1)
|
||||
stw r10,40(r1)
|
||||
stw r4, 44(r1)
|
||||
stw r5, 8(r1)
|
||||
bl JUMPTARGET(__mcount_internal)
|
||||
/* Restore the registers... */
|
||||
lwz %r6, 8(%r1)
|
||||
lwz %r0, 44(%r1)
|
||||
lwz %r3, 12(%r1)
|
||||
mtctr %r0
|
||||
lwz %r4, 16(%r1)
|
||||
mtcrf 0xff,%r6
|
||||
lwz %r5, 20(%r1)
|
||||
lwz %r6, 24(%r1)
|
||||
lwz %r0, 52(%r1)
|
||||
lwz %r7, 28(%r1)
|
||||
lwz %r8, 32(%r1)
|
||||
mtlr %r0
|
||||
lwz %r9, 36(%r1)
|
||||
lwz %r10,40(%r1)
|
||||
lwz r6, 8(r1)
|
||||
lwz r0, 44(r1)
|
||||
lwz r3, 12(r1)
|
||||
mtctr r0
|
||||
lwz r4, 16(r1)
|
||||
mtcrf 0xff,r6
|
||||
lwz r5, 20(r1)
|
||||
lwz r6, 24(r1)
|
||||
lwz r0, 52(r1)
|
||||
lwz r7, 28(r1)
|
||||
lwz r8, 32(r1)
|
||||
mtlr r0
|
||||
lwz r9, 36(r1)
|
||||
lwz r10,40(r1)
|
||||
/* ...unwind the stack frame, and return to your usual programming. */
|
||||
addi %r1,%r1,48
|
||||
addi r1,r1,48
|
||||
bctr
|
||||
END(_mcount)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Shift a limb right, low level routine.
|
||||
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1997, 1999 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
|
||||
@ -26,31 +26,31 @@
|
||||
cnt r6 */
|
||||
|
||||
ENTRY(__mpn_rshift)
|
||||
mtctr 5 # copy size into CTR
|
||||
addi 7,3,-4 # move adjusted res_ptr to free return reg
|
||||
subfic 8,6,32
|
||||
lwz 11,0(4) # load first s1 limb
|
||||
slw 3,11,8 # compute function return value
|
||||
mtctr r5 # copy size into CTR
|
||||
addi r7,r3,-4 # move adjusted res_ptr to free return reg
|
||||
subfic r8,r6,32
|
||||
lwz r11,0(r4) # load first s1 limb
|
||||
slw r3,r11,r8 # compute function return value
|
||||
bdz 1f
|
||||
|
||||
0: lwzu 10,4(4)
|
||||
srw 9,11,6
|
||||
slw 12,10,8
|
||||
or 9,9,12
|
||||
stwu 9,4(7)
|
||||
0: lwzu r10,4(r4)
|
||||
srw r9,r11,r6
|
||||
slw r12,r10,r8
|
||||
or r9,r9,r12
|
||||
stwu r9,4(r7)
|
||||
bdz 2f
|
||||
lwzu 11,4(4)
|
||||
srw 9,10,6
|
||||
slw 12,11,8
|
||||
or 9,9,12
|
||||
stwu 9,4(7)
|
||||
lwzu r11,4(r4)
|
||||
srw r9,r10,r6
|
||||
slw r12,r11,r8
|
||||
or r9,r9,r12
|
||||
stwu r9,4(r7)
|
||||
bdnz 0b
|
||||
|
||||
1: srw 0,11,6
|
||||
stw 0,4(7)
|
||||
1: srw r0,r11,r6
|
||||
stw r0,4(r7)
|
||||
blr
|
||||
|
||||
2: srw 0,10,6
|
||||
stw 0,4(7)
|
||||
2: srw r0,r10,r6
|
||||
stw r0,4(r7)
|
||||
blr
|
||||
END(__mpn_rshift)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* setjmp for PowerPC.
|
||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, 1999 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
|
||||
@ -23,47 +23,47 @@
|
||||
#include <bits/setjmp.h>
|
||||
|
||||
ENTRY (__sigsetjmp)
|
||||
stw %r1,(JB_GPR1*4)(3)
|
||||
mflr %r0
|
||||
stw %r2,(JB_GPR2*4)(3)
|
||||
stw %r14,((JB_GPRS+0)*4)(3)
|
||||
stfd %f14,((JB_FPRS+0*2)*4)(3)
|
||||
stw %r0,(JB_LR*4)(3)
|
||||
stw %r15,((JB_GPRS+1)*4)(3)
|
||||
stfd %f15,((JB_FPRS+1*2)*4)(3)
|
||||
mfcr %r0
|
||||
stw %r16,((JB_GPRS+2)*4)(3)
|
||||
stfd %f16,((JB_FPRS+2*2)*4)(3)
|
||||
stw %r0,(JB_CR*4)(3)
|
||||
stw %r17,((JB_GPRS+3)*4)(3)
|
||||
stfd %f17,((JB_FPRS+3*2)*4)(3)
|
||||
stw %r18,((JB_GPRS+4)*4)(3)
|
||||
stfd %f18,((JB_FPRS+4*2)*4)(3)
|
||||
stw %r19,((JB_GPRS+5)*4)(3)
|
||||
stfd %f19,((JB_FPRS+5*2)*4)(3)
|
||||
stw %r20,((JB_GPRS+6)*4)(3)
|
||||
stfd %f20,((JB_FPRS+6*2)*4)(3)
|
||||
stw %r21,((JB_GPRS+7)*4)(3)
|
||||
stfd %f21,((JB_FPRS+7*2)*4)(3)
|
||||
stw %r22,((JB_GPRS+8)*4)(3)
|
||||
stfd %f22,((JB_FPRS+8*2)*4)(3)
|
||||
stw %r23,((JB_GPRS+9)*4)(3)
|
||||
stfd %f23,((JB_FPRS+9*2)*4)(3)
|
||||
stw %r24,((JB_GPRS+10)*4)(3)
|
||||
stfd %f24,((JB_FPRS+10*2)*4)(3)
|
||||
stw %r25,((JB_GPRS+11)*4)(3)
|
||||
stfd %f25,((JB_FPRS+11*2)*4)(3)
|
||||
stw %r26,((JB_GPRS+12)*4)(3)
|
||||
stfd %f26,((JB_FPRS+12*2)*4)(3)
|
||||
stw %r27,((JB_GPRS+13)*4)(3)
|
||||
stfd %f27,((JB_FPRS+13*2)*4)(3)
|
||||
stw %r28,((JB_GPRS+14)*4)(3)
|
||||
stfd %f28,((JB_FPRS+14*2)*4)(3)
|
||||
stw %r29,((JB_GPRS+15)*4)(3)
|
||||
stfd %f29,((JB_FPRS+15*2)*4)(3)
|
||||
stw %r30,((JB_GPRS+16)*4)(3)
|
||||
stfd %f30,((JB_FPRS+16*2)*4)(3)
|
||||
stw %r31,((JB_GPRS+17)*4)(3)
|
||||
stfd %f31,((JB_FPRS+17*2)*4)(3)
|
||||
stw r1,(JB_GPR1*4)(3)
|
||||
mflr r0
|
||||
stw r2,(JB_GPR2*4)(3)
|
||||
stw r14,((JB_GPRS+0)*4)(3)
|
||||
stfd f14,((JB_FPRS+0*2)*4)(3)
|
||||
stw r0,(JB_LR*4)(3)
|
||||
stw r15,((JB_GPRS+1)*4)(3)
|
||||
stfd f15,((JB_FPRS+1*2)*4)(3)
|
||||
mfcr r0
|
||||
stw r16,((JB_GPRS+2)*4)(3)
|
||||
stfd f16,((JB_FPRS+2*2)*4)(3)
|
||||
stw r0,(JB_CR*4)(3)
|
||||
stw r17,((JB_GPRS+3)*4)(3)
|
||||
stfd f17,((JB_FPRS+3*2)*4)(3)
|
||||
stw r18,((JB_GPRS+4)*4)(3)
|
||||
stfd f18,((JB_FPRS+4*2)*4)(3)
|
||||
stw r19,((JB_GPRS+5)*4)(3)
|
||||
stfd f19,((JB_FPRS+5*2)*4)(3)
|
||||
stw r20,((JB_GPRS+6)*4)(3)
|
||||
stfd f20,((JB_FPRS+6*2)*4)(3)
|
||||
stw r21,((JB_GPRS+7)*4)(3)
|
||||
stfd f21,((JB_FPRS+7*2)*4)(3)
|
||||
stw r22,((JB_GPRS+8)*4)(3)
|
||||
stfd f22,((JB_FPRS+8*2)*4)(3)
|
||||
stw r23,((JB_GPRS+9)*4)(3)
|
||||
stfd f23,((JB_FPRS+9*2)*4)(3)
|
||||
stw r24,((JB_GPRS+10)*4)(3)
|
||||
stfd f24,((JB_FPRS+10*2)*4)(3)
|
||||
stw r25,((JB_GPRS+11)*4)(3)
|
||||
stfd f25,((JB_FPRS+11*2)*4)(3)
|
||||
stw r26,((JB_GPRS+12)*4)(3)
|
||||
stfd f26,((JB_FPRS+12*2)*4)(3)
|
||||
stw r27,((JB_GPRS+13)*4)(3)
|
||||
stfd f27,((JB_FPRS+13*2)*4)(3)
|
||||
stw r28,((JB_GPRS+14)*4)(3)
|
||||
stfd f28,((JB_FPRS+14*2)*4)(3)
|
||||
stw r29,((JB_GPRS+15)*4)(3)
|
||||
stfd f29,((JB_FPRS+15*2)*4)(3)
|
||||
stw r30,((JB_GPRS+16)*4)(3)
|
||||
stfd f30,((JB_FPRS+16*2)*4)(3)
|
||||
stw r31,((JB_GPRS+17)*4)(3)
|
||||
stfd f31,((JB_FPRS+17*2)*4)(3)
|
||||
b JUMPTARGET(__sigjmp_save)
|
||||
END (__sigsetjmp)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Optimized stpcpy implementation for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -34,66 +34,66 @@ EALIGN(__stpcpy,4,0)
|
||||
r9: ~(word in src | 0x7f7f7f7f)
|
||||
r10: alternate word from src. */
|
||||
|
||||
or %r0,%r4,%r3
|
||||
clrlwi. %r0,%r0,30
|
||||
addi %r3,%r3,-4
|
||||
or r0,r4,r3
|
||||
clrlwi. r0,r0,30
|
||||
addi r3,r3,-4
|
||||
bne L(unaligned)
|
||||
|
||||
lis %r7,0xfeff
|
||||
lis %r8,0x7f7f
|
||||
lwz %r6,0(%r4)
|
||||
addi %r7,%r7,-0x101
|
||||
addi %r8,%r8,0x7f7f
|
||||
lis r7,0xfeff
|
||||
lis r8,0x7f7f
|
||||
lwz r6,0(r4)
|
||||
addi r7,r7,-0x101
|
||||
addi r8,r8,0x7f7f
|
||||
b 2f
|
||||
|
||||
0: lwzu %r10,4(%r4)
|
||||
stwu %r6,4(%r3)
|
||||
add %r0,%r7,%r10
|
||||
nor %r9,%r8,%r10
|
||||
and. %r0,%r0,%r9
|
||||
0: lwzu r10,4(r4)
|
||||
stwu r6,4(r3)
|
||||
add r0,r7,r10
|
||||
nor r9,r8,r10
|
||||
and. r0,r0,r9
|
||||
bne- 1f
|
||||
lwzu %r6,4(%r4)
|
||||
stwu %r10,4(%r3)
|
||||
2: add %r0,%r7,%r6
|
||||
nor %r9,%r8,%r6
|
||||
and. %r0,%r0,%r9
|
||||
lwzu r6,4(r4)
|
||||
stwu r10,4(r3)
|
||||
2: add r0,r7,r6
|
||||
nor r9,r8,r6
|
||||
and. r0,r0,r9
|
||||
beq+ 0b
|
||||
|
||||
mr %r10,%r6
|
||||
mr r10,r6
|
||||
/* We've hit the end of the string. Do the rest byte-by-byte. */
|
||||
1: rlwinm. %r0,%r10,8,24,31
|
||||
stbu %r0,4(%r3)
|
||||
1: rlwinm. r0,r10,8,24,31
|
||||
stbu r0,4(r3)
|
||||
beqlr-
|
||||
rlwinm. %r0,%r10,16,24,31
|
||||
stbu %r0,1(%r3)
|
||||
rlwinm. r0,r10,16,24,31
|
||||
stbu r0,1(r3)
|
||||
beqlr-
|
||||
rlwinm. %r0,%r10,24,24,31
|
||||
stbu %r0,1(%r3)
|
||||
rlwinm. r0,r10,24,24,31
|
||||
stbu r0,1(r3)
|
||||
beqlr-
|
||||
stbu %r10,1(%r3)
|
||||
stbu r10,1(r3)
|
||||
blr
|
||||
|
||||
/* Oh well. In this case, we just do a byte-by-byte copy. */
|
||||
.align 4
|
||||
nop
|
||||
L(unaligned):
|
||||
lbz %r6,0(%r4)
|
||||
addi %r3,%r3,3
|
||||
cmpwi %r6,0
|
||||
lbz r6,0(r4)
|
||||
addi r3,r3,3
|
||||
cmpwi r6,0
|
||||
beq- 2f
|
||||
|
||||
0: lbzu %r10,1(%r4)
|
||||
stbu %r6,1(%r3)
|
||||
cmpwi %r10,0
|
||||
0: lbzu r10,1(r4)
|
||||
stbu r6,1(r3)
|
||||
cmpwi r10,0
|
||||
beq- 1f
|
||||
nop /* Let 601 load start of loop. */
|
||||
lbzu %r6,1(%r4)
|
||||
stbu %r10,1(%r3)
|
||||
cmpwi %r6,0
|
||||
lbzu r6,1(r4)
|
||||
stbu r10,1(r3)
|
||||
cmpwi r6,0
|
||||
bne+ 0b
|
||||
2: stbu %r6,1(%r3)
|
||||
2: stbu r6,1(r3)
|
||||
blr
|
||||
1: stbu %r10,1(%r3)
|
||||
1: stbu r10,1(r3)
|
||||
blr
|
||||
END(__stpcpy)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Optimized strchr implementation for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -35,76 +35,76 @@
|
||||
r11: a mask with the bits to ignore set to 0
|
||||
r12: a temporary */
|
||||
ENTRY(strchr)
|
||||
rlwimi %r4,%r4,8,16,23
|
||||
li %r11,-1
|
||||
rlwimi %r4,%r4,16,0,15
|
||||
lis %r6,0xfeff
|
||||
lis %r7,0x7f7f
|
||||
clrrwi %r8,%r3,2
|
||||
addi %r7,%r7,0x7f7f
|
||||
addi %r6,%r6,0xfffffeff
|
||||
rlwinm %r10,%r3,3,27,28
|
||||
rlwimi r4,r4,8,16,23
|
||||
li r11,-1
|
||||
rlwimi r4,r4,16,0,15
|
||||
lis r6,0xfeff
|
||||
lis r7,0x7f7f
|
||||
clrrwi r8,r3,2
|
||||
addi r7,r7,0x7f7f
|
||||
addi r6,r6,0xfffffeff
|
||||
rlwinm r10,r3,3,27,28
|
||||
/* Test the first (partial?) word. */
|
||||
lwz %r5,0(%r8)
|
||||
srw %r11,%r11,%r10
|
||||
orc %r5,%r5,%r11
|
||||
add %r0,%r6,%r5
|
||||
nor %r9,%r7,%r5
|
||||
and. %r0,%r0,%r9
|
||||
xor %r12,%r4,%r5
|
||||
orc %r12,%r12,%r11
|
||||
lwz r5,0(r8)
|
||||
srw r11,r11,r10
|
||||
orc r5,r5,r11
|
||||
add r0,r6,r5
|
||||
nor r9,r7,r5
|
||||
and. r0,r0,r9
|
||||
xor r12,r4,r5
|
||||
orc r12,r12,r11
|
||||
b L(loopentry)
|
||||
|
||||
/* The loop. */
|
||||
|
||||
L(loop):lwzu %r5,4(%r8)
|
||||
and. %r0,%r0,%r9
|
||||
L(loop):lwzu r5,4(r8)
|
||||
and. r0,r0,r9
|
||||
/* Test for 0. */
|
||||
add %r0,%r6,%r5
|
||||
nor %r9,%r7,%r5
|
||||
add r0,r6,r5
|
||||
nor r9,r7,r5
|
||||
bne L(foundit)
|
||||
and. %r0,%r0,%r9
|
||||
and. r0,r0,r9
|
||||
/* Start test for the bytes we're looking for. */
|
||||
xor %r12,%r4,%r5
|
||||
xor r12,r4,r5
|
||||
L(loopentry):
|
||||
add %r0,%r6,%r12
|
||||
nor %r9,%r7,%r12
|
||||
add r0,r6,r12
|
||||
nor r9,r7,r12
|
||||
beq L(loop)
|
||||
/* There is a zero byte in the word, but may also be a matching byte (either
|
||||
before or after the zero byte). In fact, we may be looking for a
|
||||
zero byte, in which case we return a match. We guess that this hasn't
|
||||
happened, though. */
|
||||
L(missed):
|
||||
and. %r0,%r0,%r9
|
||||
li %r3,0
|
||||
and. r0,r0,r9
|
||||
li r3,0
|
||||
beqlr
|
||||
/* It did happen. Decide which one was first...
|
||||
I'm not sure if this is actually faster than a sequence of
|
||||
rotates, compares, and branches (we use it anyway because it's shorter). */
|
||||
and %r6,%r7,%r5
|
||||
or %r11,%r7,%r5
|
||||
and %r0,%r7,%r12
|
||||
or %r10,%r7,%r12
|
||||
add %r6,%r6,%r7
|
||||
add %r0,%r0,%r7
|
||||
nor %r5,%r11,%r6
|
||||
nor %r9,%r10,%r0
|
||||
cmplw %r5,%r9
|
||||
and r6,r7,r5
|
||||
or r11,r7,r5
|
||||
and r0,r7,r12
|
||||
or r10,r7,r12
|
||||
add r6,r6,r7
|
||||
add r0,r0,r7
|
||||
nor r5,r11,r6
|
||||
nor r9,r10,r0
|
||||
cmplw r5,r9
|
||||
bgtlr
|
||||
cntlzw %r4,%r9
|
||||
srwi %r4,%r4,3
|
||||
add %r3,%r8,%r4
|
||||
cntlzw r4,r9
|
||||
srwi r4,r4,3
|
||||
add r3,r8,r4
|
||||
blr
|
||||
|
||||
L(foundit):
|
||||
and %r0,%r7,%r12
|
||||
or %r10,%r7,%r12
|
||||
add %r0,%r0,%r7
|
||||
nor %r9,%r10,%r0
|
||||
cntlzw %r4,%r9
|
||||
subi %r8,%r8,4
|
||||
srwi %r4,%r4,3
|
||||
add %r3,%r8,%r4
|
||||
and r0,r7,r12
|
||||
or r10,r7,r12
|
||||
add r0,r0,r7
|
||||
nor r9,r10,r0
|
||||
cntlzw r4,r9
|
||||
subi r8,r8,4
|
||||
srwi r4,r4,3
|
||||
add r3,r8,r4
|
||||
blr
|
||||
END(strchr)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Optimized strcmp implementation for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -38,78 +38,78 @@ EALIGN(strcmp,4,0)
|
||||
r10: low 2 bits of p2-p1
|
||||
r11: mask to orc with r5/r6 */
|
||||
|
||||
or %r0,%r4,%r3
|
||||
clrlwi. %r0,%r0,30
|
||||
lis %r7,0xfeff
|
||||
or r0,r4,r3
|
||||
clrlwi. r0,r0,30
|
||||
lis r7,0xfeff
|
||||
bne L(unaligned)
|
||||
|
||||
lwz %r5,0(%r3)
|
||||
lwz %r6,0(%r4)
|
||||
lis %r8,0x7f7f
|
||||
addi %r7,%r7,-0x101
|
||||
addi %r8,%r8,0x7f7f
|
||||
lwz r5,0(r3)
|
||||
lwz r6,0(r4)
|
||||
lis r8,0x7f7f
|
||||
addi r7,r7,-0x101
|
||||
addi r8,r8,0x7f7f
|
||||
b 1f
|
||||
|
||||
0: lwzu %r5,4(%r3)
|
||||
bne %cr1,L(different)
|
||||
lwzu %r6,4(%r4)
|
||||
1: add %r0,%r7,%r5
|
||||
nor %r9,%r8,%r5
|
||||
and. %r0,%r0,%r9
|
||||
cmpw %cr1,%r5,%r6
|
||||
0: lwzu r5,4(r3)
|
||||
bne cr1,L(different)
|
||||
lwzu r6,4(r4)
|
||||
1: add r0,r7,r5
|
||||
nor r9,r8,r5
|
||||
and. r0,r0,r9
|
||||
cmpw cr1,r5,r6
|
||||
beq+ 0b
|
||||
L(endstring):
|
||||
/* OK. We've hit the end of the string. We need to be careful that
|
||||
we don't compare two strings as different because of gunk beyond
|
||||
the end of the strings... */
|
||||
and %r0,%r8,%r5
|
||||
beq %cr1,L(equal)
|
||||
add %r0,%r0,%r8
|
||||
xor. %r10,%r5,%r6
|
||||
andc %r9,%r9,%r0
|
||||
and r0,r8,r5
|
||||
beq cr1,L(equal)
|
||||
add r0,r0,r8
|
||||
xor. r10,r5,r6
|
||||
andc r9,r9,r0
|
||||
blt- L(highbit)
|
||||
cntlzw %r10,%r10
|
||||
cntlzw %r9,%r9
|
||||
addi %r9,%r9,7
|
||||
cmpw %cr1,%r9,%r10
|
||||
sub %r3,%r5,%r6
|
||||
bgelr+ %cr1
|
||||
cntlzw r10,r10
|
||||
cntlzw r9,r9
|
||||
addi r9,r9,7
|
||||
cmpw cr1,r9,r10
|
||||
sub r3,r5,r6
|
||||
bgelr+ cr1
|
||||
L(equal):
|
||||
li %r3,0
|
||||
li r3,0
|
||||
blr
|
||||
|
||||
L(different):
|
||||
lwz %r5,-4(%r3)
|
||||
xor. %r10,%r5,%r6
|
||||
sub %r3,%r5,%r6
|
||||
lwz r5,-4(r3)
|
||||
xor. r10,r5,r6
|
||||
sub r3,r5,r6
|
||||
bgelr+
|
||||
L(highbit):
|
||||
ori %r3,%r6,1
|
||||
ori r3,r6,1
|
||||
blr
|
||||
|
||||
|
||||
/* Oh well. In this case, we just do a byte-by-byte comparison. */
|
||||
.align 4
|
||||
L(unaligned):
|
||||
lbz %r5,0(%r3)
|
||||
lbz %r6,0(%r4)
|
||||
lbz r5,0(r3)
|
||||
lbz r6,0(r4)
|
||||
b 1f
|
||||
|
||||
0: lbzu %r5,1(%r3)
|
||||
0: lbzu r5,1(r3)
|
||||
bne- 4f
|
||||
lbzu %r6,1(%r4)
|
||||
1: cmpwi %cr1,%r5,0
|
||||
beq- %cr1,3f
|
||||
cmpw %r5,%r6
|
||||
lbzu r6,1(r4)
|
||||
1: cmpwi cr1,r5,0
|
||||
beq- cr1,3f
|
||||
cmpw r5,r6
|
||||
bne- 3f
|
||||
lbzu %r5,1(%r3)
|
||||
lbzu %r6,1(%r4)
|
||||
cmpwi %cr1,%r5,0
|
||||
cmpw %r5,%r6
|
||||
bne+ %cr1,0b
|
||||
3: sub %r3,%r5,%r6
|
||||
lbzu r5,1(r3)
|
||||
lbzu r6,1(r4)
|
||||
cmpwi cr1,r5,0
|
||||
cmpw r5,r6
|
||||
bne+ cr1,0b
|
||||
3: sub r3,r5,r6
|
||||
blr
|
||||
4: lbz %r5,-1(%r3)
|
||||
sub %r3,%r5,%r6
|
||||
4: lbz r5,-1(r3)
|
||||
sub r3,r5,r6
|
||||
blr
|
||||
END(strcmp)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Optimized strcpy implementation for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -35,66 +35,66 @@ EALIGN(strcpy,4,0)
|
||||
r9: ~(word in src | 0x7f7f7f7f)
|
||||
r10: alternate word from src. */
|
||||
|
||||
or %r0,%r4,%r3
|
||||
clrlwi. %r0,%r0,30
|
||||
addi %r5,%r3,-4
|
||||
or r0,r4,r3
|
||||
clrlwi. r0,r0,30
|
||||
addi r5,r3,-4
|
||||
bne L(unaligned)
|
||||
|
||||
lis %r7,0xfeff
|
||||
lis %r8,0x7f7f
|
||||
lwz %r6,0(%r4)
|
||||
addi %r7,%r7,-0x101
|
||||
addi %r8,%r8,0x7f7f
|
||||
lis r7,0xfeff
|
||||
lis r8,0x7f7f
|
||||
lwz r6,0(r4)
|
||||
addi r7,r7,-0x101
|
||||
addi r8,r8,0x7f7f
|
||||
b 2f
|
||||
|
||||
0: lwzu %r10,4(%r4)
|
||||
stwu %r6,4(%r5)
|
||||
add %r0,%r7,%r10
|
||||
nor %r9,%r8,%r10
|
||||
and. %r0,%r0,%r9
|
||||
0: lwzu r10,4(r4)
|
||||
stwu r6,4(r5)
|
||||
add r0,r7,r10
|
||||
nor r9,r8,r10
|
||||
and. r0,r0,r9
|
||||
bne- 1f
|
||||
lwzu %r6,4(%r4)
|
||||
stwu %r10,4(%r5)
|
||||
2: add %r0,%r7,%r6
|
||||
nor %r9,%r8,%r6
|
||||
and. %r0,%r0,%r9
|
||||
lwzu r6,4(r4)
|
||||
stwu r10,4(r5)
|
||||
2: add r0,r7,r6
|
||||
nor r9,r8,r6
|
||||
and. r0,r0,r9
|
||||
beq+ 0b
|
||||
|
||||
mr %r10,%r6
|
||||
mr r10,r6
|
||||
/* We've hit the end of the string. Do the rest byte-by-byte. */
|
||||
1: rlwinm. %r0,%r10,8,24,31
|
||||
stb %r0,4(%r5)
|
||||
1: rlwinm. r0,r10,8,24,31
|
||||
stb r0,4(r5)
|
||||
beqlr-
|
||||
rlwinm. %r0,%r10,16,24,31
|
||||
stb %r0,5(%r5)
|
||||
rlwinm. r0,r10,16,24,31
|
||||
stb r0,5(r5)
|
||||
beqlr-
|
||||
rlwinm. %r0,%r10,24,24,31
|
||||
stb %r0,6(%r5)
|
||||
rlwinm. r0,r10,24,24,31
|
||||
stb r0,6(r5)
|
||||
beqlr-
|
||||
stb %r10,7(%r5)
|
||||
stb r10,7(r5)
|
||||
blr
|
||||
|
||||
/* Oh well. In this case, we just do a byte-by-byte copy. */
|
||||
.align 4
|
||||
nop
|
||||
L(unaligned):
|
||||
lbz %r6,0(%r4)
|
||||
addi %r5,%r3,-1
|
||||
cmpwi %r6,0
|
||||
lbz r6,0(r4)
|
||||
addi r5,r3,-1
|
||||
cmpwi r6,0
|
||||
beq- 2f
|
||||
|
||||
0: lbzu %r10,1(%r4)
|
||||
stbu %r6,1(%r5)
|
||||
cmpwi %r10,0
|
||||
0: lbzu r10,1(r4)
|
||||
stbu r6,1(r5)
|
||||
cmpwi r10,0
|
||||
beq- 1f
|
||||
nop /* Let 601 load start of loop. */
|
||||
lbzu %r6,1(%r4)
|
||||
stbu %r10,1(%r5)
|
||||
cmpwi %r6,0
|
||||
lbzu r6,1(r4)
|
||||
stbu r10,1(r5)
|
||||
cmpwi r6,0
|
||||
bne+ 0b
|
||||
2: stb %r6,1(%r5)
|
||||
2: stb r6,1(r5)
|
||||
blr
|
||||
1: stb %r10,1(%r5)
|
||||
1: stb r10,1(r5)
|
||||
blr
|
||||
|
||||
END(strcpy)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Optimized strlen implementation for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -77,68 +77,68 @@ ENTRY(strlen)
|
||||
start at a word boundary. r8 holds the 'current' word.
|
||||
r9-12 are temporaries. r0 is used as a temporary and for discarded
|
||||
results. */
|
||||
clrrwi %r4,%r3,2
|
||||
lis %r7,0x7f7f
|
||||
rlwinm %r5,%r3,3,27,28
|
||||
lwz %r8,0(%r4)
|
||||
li %r9,-1
|
||||
addi %r7,%r7,0x7f7f
|
||||
clrrwi r4,r3,2
|
||||
lis r7,0x7f7f
|
||||
rlwinm r5,r3,3,27,28
|
||||
lwz r8,0(r4)
|
||||
li r9,-1
|
||||
addi r7,r7,0x7f7f
|
||||
/* That's the setup done, now do the first pair of words.
|
||||
We make an exception and use method (2) on the first two words, to reduce
|
||||
overhead. */
|
||||
srw %r9,%r9,%r5
|
||||
and %r0,%r7,%r8
|
||||
or %r10,%r7,%r8
|
||||
add %r0,%r0,%r7
|
||||
nor %r0,%r10,%r0
|
||||
and. %r8,%r0,%r9
|
||||
mtcrf 0x01,%r3
|
||||
srw r9,r9,r5
|
||||
and r0,r7,r8
|
||||
or r10,r7,r8
|
||||
add r0,r0,r7
|
||||
nor r0,r10,r0
|
||||
and. r8,r0,r9
|
||||
mtcrf 0x01,r3
|
||||
bne L(done0)
|
||||
lis %r6,0xfeff
|
||||
addi %r6,%r6,-0x101
|
||||
lis r6,0xfeff
|
||||
addi r6,r6,-0x101
|
||||
/* Are we now aligned to a doubleword boundary? */
|
||||
bt 29,L(loop)
|
||||
|
||||
/* Handle second word of pair. */
|
||||
lwzu %r8,4(%r4)
|
||||
and %r0,%r7,%r8
|
||||
or %r10,%r7,%r8
|
||||
add %r0,%r0,%r7
|
||||
nor. %r8,%r10,%r0
|
||||
lwzu r8,4(r4)
|
||||
and r0,r7,r8
|
||||
or r10,r7,r8
|
||||
add r0,r0,r7
|
||||
nor. r8,r10,r0
|
||||
bne L(done0)
|
||||
|
||||
/* The loop. */
|
||||
|
||||
L(loop):
|
||||
lwz %r8,4(%r4)
|
||||
lwzu %r9,8(%r4)
|
||||
add %r0,%r6,%r8
|
||||
nor %r10,%r7,%r8
|
||||
and. %r0,%r0,%r10
|
||||
add %r11,%r6,%r9
|
||||
nor %r12,%r7,%r9
|
||||
lwz r8,4(r4)
|
||||
lwzu r9,8(r4)
|
||||
add r0,r6,r8
|
||||
nor r10,r7,r8
|
||||
and. r0,r0,r10
|
||||
add r11,r6,r9
|
||||
nor r12,r7,r9
|
||||
bne L(done1)
|
||||
and. %r0,%r11,%r12
|
||||
and. r0,r11,r12
|
||||
beq L(loop)
|
||||
|
||||
and %r0,%r7,%r9
|
||||
add %r0,%r0,%r7
|
||||
andc %r8,%r12,%r0
|
||||
and r0,r7,r9
|
||||
add r0,r0,r7
|
||||
andc r8,r12,r0
|
||||
b L(done0)
|
||||
|
||||
L(done1):
|
||||
and %r0,%r7,%r8
|
||||
subi %r4,%r4,4
|
||||
add %r0,%r0,%r7
|
||||
andc %r8,%r10,%r0
|
||||
and r0,r7,r8
|
||||
subi r4,r4,4
|
||||
add r0,r0,r7
|
||||
andc r8,r10,r0
|
||||
|
||||
/* When we get to here, r4 points to the first word in the string that
|
||||
contains a zero byte, and the most significant set bit in r8 is in that
|
||||
byte. */
|
||||
L(done0):
|
||||
cntlzw %r11,%r8
|
||||
subf %r0,%r3,%r4
|
||||
srwi %r11,%r11,3
|
||||
add %r3,%r0,%r11
|
||||
cntlzw r11,r8
|
||||
subf r0,r3,r4
|
||||
srwi r11,r11,3
|
||||
add r3,r0,r11
|
||||
blr
|
||||
END(strlen)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Subtract two limb vectors of equal, non-zero length for PowerPC.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1999 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
|
||||
@ -29,40 +29,40 @@
|
||||
|
||||
EALIGN(__mpn_sub_n,3,1)
|
||||
/* Set up for loop below. */
|
||||
mtcrf 0x01,%r6
|
||||
srwi. %r7,%r6,1
|
||||
mtctr %r7
|
||||
mtcrf 0x01,r6
|
||||
srwi. r7,r6,1
|
||||
mtctr r7
|
||||
bt 31,2f
|
||||
|
||||
/* Set the carry (clear the borrow). */
|
||||
subfc %r0,%r0,%r0
|
||||
subfc r0,r0,r0
|
||||
/* Adjust pointers for loop. */
|
||||
addi %r3,%r3,-4
|
||||
addi %r4,%r4,-4
|
||||
addi %r5,%r5,-4
|
||||
addi r3,r3,-4
|
||||
addi r4,r4,-4
|
||||
addi r5,r5,-4
|
||||
b 0f
|
||||
|
||||
2: lwz %r7,0(%r5)
|
||||
lwz %r6,0(%r4)
|
||||
subfc %r6,%r7,%r6
|
||||
stw %r6,0(%r3)
|
||||
2: lwz r7,0(r5)
|
||||
lwz r6,0(r4)
|
||||
subfc r6,r7,r6
|
||||
stw r6,0(r3)
|
||||
beq 1f
|
||||
|
||||
/* Align start of loop to an odd word boundary to guarantee that the
|
||||
last two words can be fetched in one access (for 601). This turns
|
||||
out to be important. */
|
||||
0:
|
||||
lwz %r9,4(%r4)
|
||||
lwz %r8,4(%r5)
|
||||
lwzu %r6,8(%r4)
|
||||
lwzu %r7,8(%r5)
|
||||
subfe %r8,%r8,%r9
|
||||
stw %r8,4(%r3)
|
||||
subfe %r6,%r7,%r6
|
||||
stwu %r6,8(%r3)
|
||||
lwz r9,4(r4)
|
||||
lwz r8,4(r5)
|
||||
lwzu r6,8(r4)
|
||||
lwzu r7,8(r5)
|
||||
subfe r8,r8,r9
|
||||
stw r8,4(r3)
|
||||
subfe r6,r7,r6
|
||||
stwu r6,8(r3)
|
||||
bdnz 0b
|
||||
/* Return the borrow. */
|
||||
1: subfe %r3,%r3,%r3
|
||||
neg %r3,%r3
|
||||
1: subfe r3,r3,r3
|
||||
neg r3,r3
|
||||
blr
|
||||
END(__mpn_sub_n)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Multiply a limb vector by a single limb, for PowerPC.
|
||||
Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1995, 1997, 1999 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
|
||||
@ -24,29 +24,29 @@
|
||||
Calculate res-s1*s2 and put result back in res; return carry. */
|
||||
|
||||
ENTRY(__mpn_submul_1)
|
||||
mtctr %r5
|
||||
mtctr r5
|
||||
|
||||
lwz %r0,0(%r4)
|
||||
mullw %r7,%r0,%r6
|
||||
mulhwu %r10,%r0,%r6
|
||||
lwz %r9,0(%r3)
|
||||
subf %r8,%r7,%r9
|
||||
addc %r7,%r7,%r8 # invert cy (r7 is junk)
|
||||
addi %r3,%r3,-4 # adjust res_ptr
|
||||
lwz r0,0(r4)
|
||||
mullw r7,r0,r6
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,0(r3)
|
||||
subf r8,r7,r9
|
||||
addc r7,r7,r8 # invert cy (r7 is junk)
|
||||
addi r3,r3,-4 # adjust res_ptr
|
||||
bdz 1f
|
||||
|
||||
0: lwzu %r0,4(%r4)
|
||||
stwu %r8,4(%r3)
|
||||
mullw %r8,%r0,%r6
|
||||
adde %r7,%r8,%r10
|
||||
mulhwu %r10,%r0,%r6
|
||||
lwz %r9,4(%r3)
|
||||
addze %r10,%r10
|
||||
subf %r8,%r7,%r9
|
||||
addc %r7,%r7,%r8 # invert cy (r7 is junk)
|
||||
0: lwzu r0,4(r4)
|
||||
stwu r8,4(r3)
|
||||
mullw r8,r0,r6
|
||||
adde r7,r8,r10
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,4(r3)
|
||||
addze r10,r10
|
||||
subf r8,r7,r9
|
||||
addc r7,r7,r8 # invert cy (r7 is junk)
|
||||
bdnz 0b
|
||||
|
||||
1: stw %r8,4(%r3)
|
||||
addze %r3,%r10
|
||||
1: stw r8,4(r3)
|
||||
addze r3,r10
|
||||
blr
|
||||
END(__mpn_submul_1)
|
||||
|
Loading…
Reference in New Issue
Block a user