yann@1: # See http://sources.redhat.com/ml/crossgcc/2002-05/msg00132.html yann@1: # This patch is taken directly from the Montavista Hard Hat Linux 2.0 source RPMs, yann@1: # but has been rediffed against glibc-2.2.5 yann@1: yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/Dist glibc-2.2.5/sysdeps/powerpc/Dist yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/Dist Fri Jun 30 23:30:21 2000 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/Dist Thu Jul 10 11:43:17 2003 yann@1: @@ -1,9 +1,6 @@ yann@1: dl-machine.c yann@1: dl-start.S yann@1: ppc-mcount.S yann@1: -fe_nomask.c yann@1: -fprrest.S yann@1: -fprsave.S yann@1: gprsave1.S yann@1: gprsave0.S yann@1: gprrest1.S yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/Makefile glibc-2.2.5/sysdeps/powerpc/Makefile yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/Makefile Mon Nov 27 15:32:47 2000 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/Makefile Thu Jul 10 11:43:17 2003 yann@1: @@ -3,16 +3,12 @@ yann@1: +cflags += -mnew-mnemonics -Wa,-mppc -mpowerpc yann@1: asm-CPPFLAGS += -Wa,-mppc yann@1: yann@1: -ifeq ($(subdir),math) yann@1: -libm-support += fenv_const fe_nomask yann@1: -endif yann@1: - yann@1: ifeq ($(subdir),gmon) yann@1: sysdep_routines += ppc-mcount yann@1: endif yann@1: yann@1: ifeq ($(subdir),misc) yann@1: -sysdep_routines += gprsave0 gprrest0 gprsave1 gprrest1 fprsave fprrest yann@1: +sysdep_routines += gprsave0 gprrest0 gprsave1 gprrest1 yann@1: endif yann@1: yann@1: # On PPC, -fpic works until the GOT contains 2^15 bytes, and possibly yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/Versions glibc-2.2.5/sysdeps/powerpc/Versions yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/Versions Mon Feb 28 13:27:57 2000 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/Versions Thu Jul 10 11:43:17 2003 yann@1: @@ -1,8 +1,4 @@ yann@1: libm { yann@1: - GLIBC_2.1 { yann@1: - # symbols used in macros from sysdeps/powerpc/bits/fenv.h yann@1: - __fe_dfl_env; __fe_enabled_env; __fe_nonieee_env; __fe_nomask_env; yann@1: - } yann@1: GLIBC_2.2 { yann@1: # Special functions to save and restore registers used by the yann@1: # runtime libraries. yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/__longjmp.S glibc-2.2.5/sysdeps/powerpc/__longjmp.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/__longjmp.S Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/__longjmp.S Thu Jul 10 11:43:17 2003 yann@1: @@ -24,6 +24,8 @@ yann@1: #include yann@1: #include yann@1: yann@1: +/* The FPU loads have been removed from this file - see fpu/__longjmp.S */ yann@1: + yann@1: ENTRY (BP_SYM (__longjmp)) yann@1: CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE) yann@1: yann@1: @@ -31,44 +33,26 @@ yann@1: lwz r2,(JB_GPR2*4)(r3) yann@1: lwz r0,(JB_LR*4)(r3) yann@1: lwz r14,((JB_GPRS+0)*4)(r3) yann@1: - lfd fp14,((JB_FPRS+0*2)*4)(r3) yann@1: lwz r15,((JB_GPRS+1)*4)(r3) yann@1: - lfd fp15,((JB_FPRS+1*2)*4)(r3) yann@1: lwz r16,((JB_GPRS+2)*4)(r3) yann@1: - lfd fp16,((JB_FPRS+2*2)*4)(r3) yann@1: lwz r17,((JB_GPRS+3)*4)(r3) yann@1: - lfd fp17,((JB_FPRS+3*2)*4)(r3) yann@1: lwz r18,((JB_GPRS+4)*4)(r3) yann@1: - lfd fp18,((JB_FPRS+4*2)*4)(r3) yann@1: lwz r19,((JB_GPRS+5)*4)(r3) yann@1: - lfd fp19,((JB_FPRS+5*2)*4)(r3) yann@1: lwz r20,((JB_GPRS+6)*4)(r3) yann@1: - lfd fp20,((JB_FPRS+6*2)*4)(r3) yann@1: mtlr r0 yann@1: lwz r21,((JB_GPRS+7)*4)(r3) yann@1: - lfd fp21,((JB_FPRS+7*2)*4)(r3) yann@1: lwz r22,((JB_GPRS+8)*4)(r3) yann@1: - lfd fp22,((JB_FPRS+8*2)*4)(r3) yann@1: lwz r0,(JB_CR*4)(r3) yann@1: lwz r23,((JB_GPRS+9)*4)(r3) yann@1: - lfd fp23,((JB_FPRS+9*2)*4)(r3) yann@1: lwz r24,((JB_GPRS+10)*4)(r3) yann@1: - lfd fp24,((JB_FPRS+10*2)*4)(r3) yann@1: lwz r25,((JB_GPRS+11)*4)(r3) yann@1: - lfd fp25,((JB_FPRS+11*2)*4)(r3) yann@1: mtcrf 0xFF,r0 yann@1: lwz r26,((JB_GPRS+12)*4)(r3) yann@1: - lfd fp26,((JB_FPRS+12*2)*4)(r3) yann@1: lwz r27,((JB_GPRS+13)*4)(r3) yann@1: - lfd fp27,((JB_FPRS+13*2)*4)(r3) yann@1: lwz r28,((JB_GPRS+14)*4)(r3) yann@1: - lfd fp28,((JB_FPRS+14*2)*4)(r3) yann@1: lwz r29,((JB_GPRS+15)*4)(r3) yann@1: - lfd fp29,((JB_FPRS+15*2)*4)(r3) yann@1: lwz r30,((JB_GPRS+16)*4)(r3) yann@1: - lfd fp30,((JB_FPRS+16*2)*4)(r3) yann@1: lwz r31,((JB_GPRS+17)*4)(r3) yann@1: - lfd fp31,((JB_FPRS+17*2)*4)(r3) yann@1: mr r3,r4 yann@1: blr yann@1: END (BP_SYM (__longjmp)) yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/bits/setjmp.h glibc-2.2.5/sysdeps/powerpc/bits/setjmp.h yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/bits/setjmp.h Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/bits/setjmp.h Thu Jul 10 11:43:17 2003 yann@1: @@ -17,6 +17,7 @@ yann@1: 02111-1307 USA. */ yann@1: yann@1: /* Define the machine-dependent type `jmp_buf'. PowerPC version. */ yann@1: +/* For processors without floating point. */ yann@1: yann@1: #ifndef _SETJMP_H yann@1: # error "Never include directly; use instead." yann@1: @@ -33,12 +34,11 @@ yann@1: # define JB_LR 2 /* The address we will return to */ yann@1: # define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total */ yann@1: # define JB_CR 21 /* Condition code registers. */ yann@1: -# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total */ yann@1: -# define JB_SIZE (58*4) yann@1: +# define JB_SIZE (22*4) yann@1: #endif yann@1: yann@1: #ifndef _ASM yann@1: -typedef long int __jmp_buf[58]; yann@1: +typedef long int __jmp_buf[22]; yann@1: #endif yann@1: yann@1: /* Test if longjmp to JMPBUF would unwind the frame yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fclrexcpt.c glibc-2.2.5/sysdeps/powerpc/fclrexcpt.c yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fclrexcpt.c Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fclrexcpt.c Wed Dec 31 16:00:00 1969 yann@1: @@ -1,48 +0,0 @@ yann@1: -/* Clear given exceptions in current floating-point environment. yann@1: - Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc. yann@1: - This file is part of the GNU C Library. yann@1: - yann@1: - The GNU C Library is free software; you can redistribute it and/or yann@1: - modify it under the terms of the GNU Lesser General Public yann@1: - License as published by the Free Software Foundation; either yann@1: - version 2.1 of the License, or (at your option) any later version. yann@1: - yann@1: - The GNU C Library is distributed in the hope that it will be useful, yann@1: - but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: - Lesser General Public License for more details. yann@1: - yann@1: - You should have received a copy of the GNU Lesser General Public yann@1: - License along with the GNU C Library; if not, write to the Free yann@1: - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: - 02111-1307 USA. */ yann@1: - yann@1: -#include yann@1: - yann@1: -#undef feclearexcept yann@1: -int yann@1: -__feclearexcept (int excepts) yann@1: -{ yann@1: - fenv_union_t u; yann@1: - yann@1: - /* Get the current state. */ yann@1: - u.fenv = fegetenv_register (); yann@1: - yann@1: - /* Clear the relevant bits. */ yann@1: - u.l[1] = u.l[1] & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID) yann@1: - | (excepts & FPSCR_STICKY_BITS)); yann@1: - yann@1: - /* Put the new state in effect. */ yann@1: - fesetenv_register (u.fenv); yann@1: - yann@1: - /* Success. */ yann@1: - return 0; yann@1: -} yann@1: - yann@1: -#include yann@1: -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) yann@1: -strong_alias (__feclearexcept, __old_feclearexcept) yann@1: -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); yann@1: -#endif yann@1: - yann@1: -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fe_nomask.c glibc-2.2.5/sysdeps/powerpc/fe_nomask.c yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fe_nomask.c Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fe_nomask.c Wed Dec 31 16:00:00 1969 yann@1: @@ -1,32 +0,0 @@ yann@1: -/* Procedure definition for FE_NOMASK_ENV. yann@1: - Copyright (C) 1997 Free Software Foundation, Inc. yann@1: - This file is part of the GNU C Library. yann@1: - yann@1: - The GNU C Library is free software; you can redistribute it and/or yann@1: - modify it under the terms of the GNU Lesser General Public yann@1: - License as published by the Free Software Foundation; either yann@1: - version 2.1 of the License, or (at your option) any later version. yann@1: - yann@1: - The GNU C Library is distributed in the hope that it will be useful, yann@1: - but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: - Lesser General Public License for more details. yann@1: - yann@1: - You should have received a copy of the GNU Lesser General Public yann@1: - License along with the GNU C Library; if not, write to the Free yann@1: - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: - 02111-1307 USA. */ yann@1: - yann@1: -#include yann@1: -#include yann@1: - yann@1: -/* This is presently a stub, until it's decided how the kernels should yann@1: - support this. */ yann@1: - yann@1: -const fenv_t * yann@1: -__fe_nomask_env(void) yann@1: -{ yann@1: - __set_errno (ENOSYS); yann@1: - return FE_ENABLED_ENV; yann@1: -} yann@1: -stub_warning (__fe_nomask_env) yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fprrest.S glibc-2.2.5/sysdeps/powerpc/fprrest.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fprrest.S Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fprrest.S Wed Dec 31 16:00:00 1969 yann@1: @@ -1,94 +0,0 @@ yann@1: -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. yann@1: - This file is part of the GNU C Library. yann@1: - yann@1: - The GNU C Library is free software; you can redistribute it and/or yann@1: - modify it under the terms of the GNU Lesser General Public yann@1: - License as published by the Free Software Foundation; either yann@1: - version 2.1 of the License, or (at your option) any later version. yann@1: - yann@1: - The GNU C Library is distributed in the hope that it will be useful, yann@1: - but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: - Lesser General Public License for more details. yann@1: - yann@1: - You should have received a copy of the GNU Lesser General Public yann@1: - License along with the GNU C Library; if not, write to the Free yann@1: - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: - 02111-1307 USA. */ yann@1: - yann@1: -/* yann@1: - Floating Point Registers (FPRs) restore routine yann@1: -*/ yann@1: - yann@1: -#include yann@1: - yann@1: -ENTRY(_restfpr_all) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf14) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_14) yann@1: -C_TEXT(_restf14): yann@1: -C_TEXT(_restfpr_14): lfd fp14,-144(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf15) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_15) yann@1: -C_TEXT(_restf15): yann@1: -C_TEXT(_restfpr_15): lfd fp15,-136(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf16) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_16) yann@1: -C_TEXT(_restf16): yann@1: -C_TEXT(_restfpr_16): lfd fp16,-128(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf17) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_17) yann@1: -C_TEXT(_restf17): yann@1: -C_TEXT(_restfpr_17): lfd fp17,-120(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf18) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_18) yann@1: -C_TEXT(_restf18): yann@1: -C_TEXT(_restfpr_18): lfd fp18,-112(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf19) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_19) yann@1: -C_TEXT(_restf19): yann@1: -C_TEXT(_restfpr_19): lfd fp19,-104(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf20) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_20) yann@1: -C_TEXT(_restf20): yann@1: -C_TEXT(_restfpr_20): lfd fp20,-96(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf21) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_21) yann@1: -C_TEXT(_restf21): yann@1: -C_TEXT(_restfpr_21): lfd fp21,-88(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf22) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_22) yann@1: -C_TEXT(_restf22): yann@1: -C_TEXT(_restfpr_22): lfd fp22,-80(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf23) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_23) yann@1: -C_TEXT(_restf23): yann@1: -C_TEXT(_restfpr_23): lfd fp23,-72(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf24) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_24) yann@1: -C_TEXT(_restf24): yann@1: -C_TEXT(_restfpr_24): lfd fp24,-64(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf25) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_25) yann@1: -C_TEXT(_restf25): yann@1: -C_TEXT(_restfpr_25): lfd fp25,-56(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf26) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_26) yann@1: -C_TEXT(_restf26): yann@1: -C_TEXT(_restfpr_26): lfd fp26,-48(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf27) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_27) yann@1: -C_TEXT(_restf27): yann@1: -C_TEXT(_restfpr_27): lfd fp27,-40(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf28) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_28) yann@1: -C_TEXT(_restf28): yann@1: -C_TEXT(_restfpr_28): lfd fp28,-32(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restf29) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_29) yann@1: -C_TEXT(_restf29): yann@1: -C_TEXT(_restfpr_29): lwz r0,8(r1) #get return address from frame yann@1: - lfd fp29,-24(r1) #restore f29 yann@1: - mtlr r0 #move return address to LR yann@1: - lfd fp30,-16(r1) #restore f30 yann@1: - lfd fp31,-8(r1) #restore f31 yann@1: - blr #return yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fprsave.S glibc-2.2.5/sysdeps/powerpc/fprsave.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fprsave.S Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fprsave.S Wed Dec 31 16:00:00 1969 yann@1: @@ -1,93 +0,0 @@ yann@1: -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. yann@1: - This file is part of the GNU C Library. yann@1: - yann@1: - The GNU C Library is free software; you can redistribute it and/or yann@1: - modify it under the terms of the GNU Lesser General Public yann@1: - License as published by the Free Software Foundation; either yann@1: - version 2.1 of the License, or (at your option) any later version. yann@1: - yann@1: - The GNU C Library is distributed in the hope that it will be useful, yann@1: - but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: - Lesser General Public License for more details. yann@1: - yann@1: - You should have received a copy of the GNU Lesser General Public yann@1: - License along with the GNU C Library; if not, write to the Free yann@1: - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: - 02111-1307 USA. */ yann@1: - yann@1: -/* yann@1: - Floating Point Registers (FPRs) save routine yann@1: -*/ yann@1: - yann@1: -#include yann@1: - yann@1: -ENTRY(_savefpr_all) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef14) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_14) yann@1: -C_TEXT(_savef14): yann@1: -C_TEXT(_savefpr_14): stfd fp14,-144(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef15) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_15) yann@1: -C_TEXT(_savef15): yann@1: -C_TEXT(_savefpr_15): stfd fp15,-136(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef16) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_16) yann@1: -C_TEXT(_savef16): yann@1: -C_TEXT(_savefpr_16): stfd fp16,-128(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef17) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_17) yann@1: -C_TEXT(_savef17): yann@1: -C_TEXT(_savefpr_17): stfd fp17,-120(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef18) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_18) yann@1: -C_TEXT(_savef18): yann@1: -C_TEXT(_savefpr_18): stfd fp18,-112(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef19) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_19) yann@1: -C_TEXT(_savef19): yann@1: -C_TEXT(_savefpr_19): stfd fp19,-104(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef20) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_20) yann@1: -C_TEXT(_savef20): yann@1: -C_TEXT(_savefpr_20): stfd fp20,-96(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef21) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_21) yann@1: -C_TEXT(_savef21): yann@1: -C_TEXT(_savefpr_21): stfd fp21,-88(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef22) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_22) yann@1: -C_TEXT(_savef22): yann@1: -C_TEXT(_savefpr_22): stfd fp22,-80(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef23) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_23) yann@1: -C_TEXT(_savef23): yann@1: -C_TEXT(_savefpr_23): stfd fp23,-72(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef24) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_24) yann@1: -C_TEXT(_savef24): yann@1: -C_TEXT(_savefpr_24): stfd fp24,-64(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef25) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_25) yann@1: -C_TEXT(_savef25): yann@1: -C_TEXT(_savefpr_25): stfd fp25,-56(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef26) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_26) yann@1: -C_TEXT(_savef26): yann@1: -C_TEXT(_savefpr_26): stfd fp26,-48(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef27) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_27) yann@1: -C_TEXT(_savef27): yann@1: -C_TEXT(_savefpr_27): stfd fp27,-40(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef28) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_28) yann@1: -C_TEXT(_savef28): yann@1: -C_TEXT(_savefpr_28): stfd fp28,-32(r1) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savef29) yann@1: - ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_29) yann@1: -C_TEXT(_savef29): yann@1: -C_TEXT(_savefpr_29): stfd fp29,-24(r1) #save f29 yann@1: - stfd fp30,-16(r1) #save f30 yann@1: - stfd fp31,-8(r1) #save f31 yann@1: - stw r0,8(r1) #save LR in callers frame yann@1: - blr #return yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/Dist glibc-2.2.5/sysdeps/powerpc/fpu/Dist yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/Dist Wed Jan 26 17:48:02 2000 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/Dist Thu Jul 10 11:43:17 2003 yann@1: @@ -1,3 +1,6 @@ yann@1: +fe_nomask.c yann@1: +fprrest.S yann@1: +fprsave.S yann@1: fenv_const.c yann@1: fenv_libc.h yann@1: t_sqrt.c yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/Makefile glibc-2.2.5/sysdeps/powerpc/fpu/Makefile yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/Makefile Mon Oct 11 15:29:00 1999 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/Makefile Thu Jul 10 11:43:17 2003 yann@1: @@ -1,3 +1,7 @@ yann@1: ifeq ($(subdir),math) yann@1: libm-support += fenv_const fe_nomask t_sqrt yann@1: endif yann@1: + yann@1: +ifeq ($(subdir),misc) yann@1: +sysdep_routines += fprsave fprrest yann@1: +endif yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/Versions glibc-2.2.5/sysdeps/powerpc/fpu/Versions yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/Versions Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/Versions Thu Jul 10 11:43:17 2003 yann@1: @@ -0,0 +1,6 @@ yann@1: +libm { yann@1: + GLIBC_2.1 { yann@1: + # symbols used in macros from sysdeps/powerpc/bits/fenv.h yann@1: + __fe_dfl_env; __fe_enabled_env; __fe_nonieee_env; __fe_nomask_env; yann@1: + } yann@1: +} yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/__longjmp.S glibc-2.2.5/sysdeps/powerpc/fpu/__longjmp.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/__longjmp.S Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/__longjmp.S Thu Jul 10 11:43:17 2003 yann@1: @@ -0,0 +1,74 @@ yann@1: +/* longjmp for PowerPC. yann@1: + Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Library General Public License as yann@1: + published by the Free Software Foundation; either version 2 of the yann@1: + License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Library General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Library General Public yann@1: + License along with the GNU C Library; see the file COPYING.LIB. If not, yann@1: + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, yann@1: + Boston, MA 02111-1307, USA. */ yann@1: + yann@1: +#include yann@1: +#define _ASM yann@1: +#define _SETJMP_H yann@1: +#include yann@1: +#include yann@1: +#include yann@1: + yann@1: +ENTRY (BP_SYM (__longjmp)) yann@1: + CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE) yann@1: + yann@1: + lwz r1,(JB_GPR1*4)(r3) yann@1: + lwz r2,(JB_GPR2*4)(r3) yann@1: + lwz r0,(JB_LR*4)(r3) yann@1: + lwz r14,((JB_GPRS+0)*4)(r3) yann@1: + lfd fp14,((JB_FPRS+0*2)*4)(r3) yann@1: + lwz r15,((JB_GPRS+1)*4)(r3) yann@1: + lfd fp15,((JB_FPRS+1*2)*4)(r3) yann@1: + lwz r16,((JB_GPRS+2)*4)(r3) yann@1: + lfd fp16,((JB_FPRS+2*2)*4)(r3) yann@1: + lwz r17,((JB_GPRS+3)*4)(r3) yann@1: + lfd fp17,((JB_FPRS+3*2)*4)(r3) yann@1: + lwz r18,((JB_GPRS+4)*4)(r3) yann@1: + lfd fp18,((JB_FPRS+4*2)*4)(r3) yann@1: + lwz r19,((JB_GPRS+5)*4)(r3) yann@1: + lfd fp19,((JB_FPRS+5*2)*4)(r3) yann@1: + lwz r20,((JB_GPRS+6)*4)(r3) yann@1: + lfd fp20,((JB_FPRS+6*2)*4)(r3) yann@1: + mtlr r0 yann@1: + lwz r21,((JB_GPRS+7)*4)(r3) yann@1: + lfd fp21,((JB_FPRS+7*2)*4)(r3) yann@1: + lwz r22,((JB_GPRS+8)*4)(r3) yann@1: + lfd fp22,((JB_FPRS+8*2)*4)(r3) yann@1: + lwz r0,(JB_CR*4)(r3) yann@1: + lwz r23,((JB_GPRS+9)*4)(r3) yann@1: + lfd fp23,((JB_FPRS+9*2)*4)(r3) yann@1: + lwz r24,((JB_GPRS+10)*4)(r3) yann@1: + lfd fp24,((JB_FPRS+10*2)*4)(r3) yann@1: + lwz r25,((JB_GPRS+11)*4)(r3) yann@1: + lfd fp25,((JB_FPRS+11*2)*4)(r3) yann@1: + mtcrf 0xFF,r0 yann@1: + lwz r26,((JB_GPRS+12)*4)(r3) yann@1: + lfd fp26,((JB_FPRS+12*2)*4)(r3) yann@1: + lwz r27,((JB_GPRS+13)*4)(r3) yann@1: + lfd fp27,((JB_FPRS+13*2)*4)(r3) yann@1: + lwz r28,((JB_GPRS+14)*4)(r3) yann@1: + lfd fp28,((JB_FPRS+14*2)*4)(r3) yann@1: + lwz r29,((JB_GPRS+15)*4)(r3) yann@1: + lfd fp29,((JB_FPRS+15*2)*4)(r3) yann@1: + lwz r30,((JB_GPRS+16)*4)(r3) yann@1: + lfd fp30,((JB_FPRS+16*2)*4)(r3) yann@1: + lwz r31,((JB_GPRS+17)*4)(r3) yann@1: + lfd fp31,((JB_FPRS+17*2)*4)(r3) yann@1: + mr r3,r4 yann@1: + blr yann@1: +END (BP_SYM (__longjmp)) yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/bits/setjmp.h glibc-2.2.5/sysdeps/powerpc/fpu/bits/setjmp.h yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/bits/setjmp.h Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/bits/setjmp.h Thu Jul 10 11:43:17 2003 yann@1: @@ -0,0 +1,47 @@ yann@1: +/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Library General Public License as yann@1: + published by the Free Software Foundation; either version 2 of the yann@1: + License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Library General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Library General Public yann@1: + License along with the GNU C Library; see the file COPYING.LIB. If not, yann@1: + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, yann@1: + Boston, MA 02111-1307, USA. */ yann@1: + yann@1: +/* Define the machine-dependent type `jmp_buf'. PowerPC version. */ yann@1: + yann@1: +#ifndef _SETJMP_H yann@1: +# error "Never include directly; use instead." yann@1: +#endif yann@1: + yann@1: +/* The previous bits/setjmp.h had __jmp_buf defined as a structure. yann@1: + We use an array of 'long int' instead, to make writing the yann@1: + assembler easier. Naturally, user code should not depend on yann@1: + either representation. */ yann@1: + yann@1: +#if defined __USE_MISC || defined _ASM yann@1: +# define JB_GPR1 0 /* Also known as the stack pointer */ yann@1: +# define JB_GPR2 1 yann@1: +# define JB_LR 2 /* The address we will return to */ yann@1: +# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total */ yann@1: +# define JB_CR 21 /* Condition code registers. */ yann@1: +# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total */ yann@1: +# define JB_SIZE (58*4) yann@1: +#endif yann@1: + yann@1: +#ifndef _ASM yann@1: +typedef long int __jmp_buf[58]; yann@1: +#endif yann@1: + yann@1: +/* Test if longjmp to JMPBUF would unwind the frame yann@1: + containing a local variable at ADDRESS. */ yann@1: +#define _JMPBUF_UNWINDS(jmpbuf, address) \ yann@1: + ((void *) (address) < (void *) (jmpbuf)[JB_GPR1]) yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fclrexcpt.c glibc-2.2.5/sysdeps/powerpc/fpu/fclrexcpt.c yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/fclrexcpt.c Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/fclrexcpt.c Thu Jul 5 21:56:01 2001 yann@1: @@ -0,0 +1,48 @@ yann@1: +/* Clear given exceptions in current floating-point environment. yann@1: + Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Lesser General Public yann@1: + License as published by the Free Software Foundation; either yann@1: + version 2.1 of the License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Lesser General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Lesser General Public yann@1: + License along with the GNU C Library; if not, write to the Free yann@1: + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: + 02111-1307 USA. */ yann@1: + yann@1: +#include yann@1: + yann@1: +#undef feclearexcept yann@1: +int yann@1: +__feclearexcept (int excepts) yann@1: +{ yann@1: + fenv_union_t u; yann@1: + yann@1: + /* Get the current state. */ yann@1: + u.fenv = fegetenv_register (); yann@1: + yann@1: + /* Clear the relevant bits. */ yann@1: + u.l[1] = u.l[1] & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID) yann@1: + | (excepts & FPSCR_STICKY_BITS)); yann@1: + yann@1: + /* Put the new state in effect. */ yann@1: + fesetenv_register (u.fenv); yann@1: + yann@1: + /* Success. */ yann@1: + return 0; yann@1: +} yann@1: + yann@1: +#include yann@1: +#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) yann@1: +strong_alias (__feclearexcept, __old_feclearexcept) yann@1: +compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); yann@1: +#endif yann@1: + yann@1: +versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fe_nomask.c glibc-2.2.5/sysdeps/powerpc/fpu/fe_nomask.c yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/fe_nomask.c Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/fe_nomask.c Thu Jul 5 21:56:01 2001 yann@1: @@ -0,0 +1,32 @@ yann@1: +/* Procedure definition for FE_NOMASK_ENV. yann@1: + Copyright (C) 1997 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Lesser General Public yann@1: + License as published by the Free Software Foundation; either yann@1: + version 2.1 of the License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Lesser General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Lesser General Public yann@1: + License along with the GNU C Library; if not, write to the Free yann@1: + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: + 02111-1307 USA. */ yann@1: + yann@1: +#include yann@1: +#include yann@1: + yann@1: +/* This is presently a stub, until it's decided how the kernels should yann@1: + support this. */ yann@1: + yann@1: +const fenv_t * yann@1: +__fe_nomask_env(void) yann@1: +{ yann@1: + __set_errno (ENOSYS); yann@1: + return FE_ENABLED_ENV; yann@1: +} yann@1: +stub_warning (__fe_nomask_env) yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fprrest.S glibc-2.2.5/sysdeps/powerpc/fpu/fprrest.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/fprrest.S Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/fprrest.S Thu Jul 5 21:56:01 2001 yann@1: @@ -0,0 +1,94 @@ yann@1: +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Lesser General Public yann@1: + License as published by the Free Software Foundation; either yann@1: + version 2.1 of the License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Lesser General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Lesser General Public yann@1: + License along with the GNU C Library; if not, write to the Free yann@1: + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: + 02111-1307 USA. */ yann@1: + yann@1: +/* yann@1: + Floating Point Registers (FPRs) restore routine yann@1: +*/ yann@1: + yann@1: +#include yann@1: + yann@1: +ENTRY(_restfpr_all) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf14) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_14) yann@1: +C_TEXT(_restf14): yann@1: +C_TEXT(_restfpr_14): lfd fp14,-144(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf15) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_15) yann@1: +C_TEXT(_restf15): yann@1: +C_TEXT(_restfpr_15): lfd fp15,-136(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf16) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_16) yann@1: +C_TEXT(_restf16): yann@1: +C_TEXT(_restfpr_16): lfd fp16,-128(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf17) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_17) yann@1: +C_TEXT(_restf17): yann@1: +C_TEXT(_restfpr_17): lfd fp17,-120(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf18) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_18) yann@1: +C_TEXT(_restf18): yann@1: +C_TEXT(_restfpr_18): lfd fp18,-112(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf19) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_19) yann@1: +C_TEXT(_restf19): yann@1: +C_TEXT(_restfpr_19): lfd fp19,-104(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf20) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_20) yann@1: +C_TEXT(_restf20): yann@1: +C_TEXT(_restfpr_20): lfd fp20,-96(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf21) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_21) yann@1: +C_TEXT(_restf21): yann@1: +C_TEXT(_restfpr_21): lfd fp21,-88(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf22) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_22) yann@1: +C_TEXT(_restf22): yann@1: +C_TEXT(_restfpr_22): lfd fp22,-80(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf23) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_23) yann@1: +C_TEXT(_restf23): yann@1: +C_TEXT(_restfpr_23): lfd fp23,-72(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf24) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_24) yann@1: +C_TEXT(_restf24): yann@1: +C_TEXT(_restfpr_24): lfd fp24,-64(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf25) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_25) yann@1: +C_TEXT(_restf25): yann@1: +C_TEXT(_restfpr_25): lfd fp25,-56(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf26) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_26) yann@1: +C_TEXT(_restf26): yann@1: +C_TEXT(_restfpr_26): lfd fp26,-48(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf27) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_27) yann@1: +C_TEXT(_restf27): yann@1: +C_TEXT(_restfpr_27): lfd fp27,-40(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf28) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_28) yann@1: +C_TEXT(_restf28): yann@1: +C_TEXT(_restfpr_28): lfd fp28,-32(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restf29) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_restfpr_29) yann@1: +C_TEXT(_restf29): yann@1: +C_TEXT(_restfpr_29): lwz r0,8(r1) #get return address from frame yann@1: + lfd fp29,-24(r1) #restore f29 yann@1: + mtlr r0 #move return address to LR yann@1: + lfd fp30,-16(r1) #restore f30 yann@1: + lfd fp31,-8(r1) #restore f31 yann@1: + blr #return yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fprsave.S glibc-2.2.5/sysdeps/powerpc/fpu/fprsave.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/fprsave.S Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/fprsave.S Thu Jul 5 21:56:01 2001 yann@1: @@ -0,0 +1,93 @@ yann@1: +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Lesser General Public yann@1: + License as published by the Free Software Foundation; either yann@1: + version 2.1 of the License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Lesser General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Lesser General Public yann@1: + License along with the GNU C Library; if not, write to the Free yann@1: + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: + 02111-1307 USA. */ yann@1: + yann@1: +/* yann@1: + Floating Point Registers (FPRs) save routine yann@1: +*/ yann@1: + yann@1: +#include yann@1: + yann@1: +ENTRY(_savefpr_all) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef14) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_14) yann@1: +C_TEXT(_savef14): yann@1: +C_TEXT(_savefpr_14): stfd fp14,-144(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef15) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_15) yann@1: +C_TEXT(_savef15): yann@1: +C_TEXT(_savefpr_15): stfd fp15,-136(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef16) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_16) yann@1: +C_TEXT(_savef16): yann@1: +C_TEXT(_savefpr_16): stfd fp16,-128(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef17) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_17) yann@1: +C_TEXT(_savef17): yann@1: +C_TEXT(_savefpr_17): stfd fp17,-120(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef18) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_18) yann@1: +C_TEXT(_savef18): yann@1: +C_TEXT(_savefpr_18): stfd fp18,-112(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef19) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_19) yann@1: +C_TEXT(_savef19): yann@1: +C_TEXT(_savefpr_19): stfd fp19,-104(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef20) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_20) yann@1: +C_TEXT(_savef20): yann@1: +C_TEXT(_savefpr_20): stfd fp20,-96(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef21) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_21) yann@1: +C_TEXT(_savef21): yann@1: +C_TEXT(_savefpr_21): stfd fp21,-88(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef22) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_22) yann@1: +C_TEXT(_savef22): yann@1: +C_TEXT(_savefpr_22): stfd fp22,-80(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef23) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_23) yann@1: +C_TEXT(_savef23): yann@1: +C_TEXT(_savefpr_23): stfd fp23,-72(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef24) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_24) yann@1: +C_TEXT(_savef24): yann@1: +C_TEXT(_savefpr_24): stfd fp24,-64(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef25) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_25) yann@1: +C_TEXT(_savef25): yann@1: +C_TEXT(_savefpr_25): stfd fp25,-56(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef26) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_26) yann@1: +C_TEXT(_savef26): yann@1: +C_TEXT(_savefpr_26): stfd fp26,-48(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef27) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_27) yann@1: +C_TEXT(_savef27): yann@1: +C_TEXT(_savefpr_27): stfd fp27,-40(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef28) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_28) yann@1: +C_TEXT(_savef28): yann@1: +C_TEXT(_savefpr_28): stfd fp28,-32(r1) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savef29) yann@1: + ASM_GLOBAL_DIRECTIVE C_TEXT(_savefpr_29) yann@1: +C_TEXT(_savef29): yann@1: +C_TEXT(_savefpr_29): stfd fp29,-24(r1) #save f29 yann@1: + stfd fp30,-16(r1) #save f30 yann@1: + stfd fp31,-8(r1) #save f31 yann@1: + stw r0,8(r1) #save LR in callers frame yann@1: + blr #return yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/fpu_control.h glibc-2.2.5/sysdeps/powerpc/fpu/fpu_control.h yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/fpu_control.h Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/fpu_control.h Thu Jul 5 21:56:01 2001 yann@1: @@ -0,0 +1,67 @@ yann@1: +/* FPU control word definitions. PowerPC version. yann@1: + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Lesser General Public yann@1: + License as published by the Free Software Foundation; either yann@1: + version 2.1 of the License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Lesser General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Lesser General Public yann@1: + License along with the GNU C Library; if not, write to the Free yann@1: + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: + 02111-1307 USA. */ yann@1: + yann@1: +#ifndef _FPU_CONTROL_H yann@1: +#define _FPU_CONTROL_H yann@1: + yann@1: +/* rounding control */ yann@1: +#define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ yann@1: +#define _FPU_RC_DOWN 0x03 yann@1: +#define _FPU_RC_UP 0x02 yann@1: +#define _FPU_RC_ZERO 0x01 yann@1: + yann@1: +#define _FPU_MASK_NI 0x04 /* non-ieee mode */ yann@1: + yann@1: +/* masking of interrupts */ yann@1: +#define _FPU_MASK_ZM 0x10 /* zero divide */ yann@1: +#define _FPU_MASK_OM 0x40 /* overflow */ yann@1: +#define _FPU_MASK_UM 0x20 /* underflow */ yann@1: +#define _FPU_MASK_XM 0x08 /* inexact */ yann@1: +#define _FPU_MASK_IM 0x80 /* invalid operation */ yann@1: + yann@1: +#define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */ yann@1: + yann@1: +/* The fdlibm code requires no interrupts for exceptions. */ yann@1: +#define _FPU_DEFAULT 0x00000000 /* Default value. */ yann@1: + yann@1: +/* IEEE: same as above, but (some) exceptions; yann@1: + we leave the 'inexact' exception off. yann@1: + */ yann@1: +#define _FPU_IEEE 0x000000f0 yann@1: + yann@1: +/* Type of the control word. */ yann@1: +typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); yann@1: + yann@1: +/* Macros for accessing the hardware control word. */ yann@1: +#define _FPU_GETCW(cw) ( { \ yann@1: + union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \ yann@1: + __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0"); \ yann@1: + (cw)=tmp.cw[1]; \ yann@1: + tmp.cw[1]; } ) yann@1: +#define _FPU_SETCW(cw) { \ yann@1: + union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \ yann@1: + tmp.cw[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \ yann@1: + tmp.cw[1] = cw; \ yann@1: + __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \ yann@1: +} yann@1: + yann@1: +/* Default control word set at startup. */ yann@1: +extern fpu_control_t __fpu_control; yann@1: + yann@1: +#endif /* _FPU_CONTROL_H */ yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu/setjmp.S glibc-2.2.5/sysdeps/powerpc/fpu/setjmp.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu/setjmp.S Wed Dec 31 16:00:00 1969 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu/setjmp.S Thu Jul 10 11:43:44 2003 yann@1: @@ -0,0 +1,73 @@ yann@1: +/* setjmp for PowerPC. yann@1: + Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. yann@1: + This file is part of the GNU C Library. yann@1: + yann@1: + The GNU C Library is free software; you can redistribute it and/or yann@1: + modify it under the terms of the GNU Library General Public License as yann@1: + published by the Free Software Foundation; either version 2 of the yann@1: + License, or (at your option) any later version. yann@1: + yann@1: + The GNU C Library is distributed in the hope that it will be useful, yann@1: + but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: + Library General Public License for more details. yann@1: + yann@1: + You should have received a copy of the GNU Library General Public yann@1: + License along with the GNU C Library; see the file COPYING.LIB. If not, yann@1: + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, yann@1: + Boston, MA 02111-1307, USA. */ yann@1: + yann@1: +#include yann@1: +#define _ASM yann@1: +#define _SETJMP_H yann@1: +#include yann@1: +#include yann@1: +#include yann@1: + yann@1: +ENTRY (BP_SYM (__sigsetjmp)) yann@1: + CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE) yann@1: + yann@1: + stw r1,(JB_GPR1*4)(3) yann@1: + mflr r0 yann@1: + stw r2,(JB_GPR2*4)(3) yann@1: + stw r14,((JB_GPRS+0)*4)(3) yann@1: + stfd fp14,((JB_FPRS+0*2)*4)(3) yann@1: + stw r0,(JB_LR*4)(3) yann@1: + stw r15,((JB_GPRS+1)*4)(3) yann@1: + stfd fp15,((JB_FPRS+1*2)*4)(3) yann@1: + mfcr r0 yann@1: + stw r16,((JB_GPRS+2)*4)(3) yann@1: + stfd fp16,((JB_FPRS+2*2)*4)(3) yann@1: + stw r0,(JB_CR*4)(3) yann@1: + stw r17,((JB_GPRS+3)*4)(3) yann@1: + stfd fp17,((JB_FPRS+3*2)*4)(3) yann@1: + stw r18,((JB_GPRS+4)*4)(3) yann@1: + stfd fp18,((JB_FPRS+4*2)*4)(3) yann@1: + stw r19,((JB_GPRS+5)*4)(3) yann@1: + stfd fp19,((JB_FPRS+5*2)*4)(3) yann@1: + stw r20,((JB_GPRS+6)*4)(3) yann@1: + stfd fp20,((JB_FPRS+6*2)*4)(3) yann@1: + stw r21,((JB_GPRS+7)*4)(3) yann@1: + stfd fp21,((JB_FPRS+7*2)*4)(3) yann@1: + stw r22,((JB_GPRS+8)*4)(3) yann@1: + stfd fp22,((JB_FPRS+8*2)*4)(3) yann@1: + stw r23,((JB_GPRS+9)*4)(3) yann@1: + stfd fp23,((JB_FPRS+9*2)*4)(3) yann@1: + stw r24,((JB_GPRS+10)*4)(3) yann@1: + stfd fp24,((JB_FPRS+10*2)*4)(3) yann@1: + stw r25,((JB_GPRS+11)*4)(3) yann@1: + stfd fp25,((JB_FPRS+11*2)*4)(3) yann@1: + stw r26,((JB_GPRS+12)*4)(3) yann@1: + stfd fp26,((JB_FPRS+12*2)*4)(3) yann@1: + stw r27,((JB_GPRS+13)*4)(3) yann@1: + stfd fp27,((JB_FPRS+13*2)*4)(3) yann@1: + stw r28,((JB_GPRS+14)*4)(3) yann@1: + stfd fp28,((JB_FPRS+14*2)*4)(3) yann@1: + stw r29,((JB_GPRS+15)*4)(3) yann@1: + stfd fp29,((JB_FPRS+15*2)*4)(3) yann@1: + stw r30,((JB_GPRS+16)*4)(3) yann@1: + stfd fp30,((JB_FPRS+16*2)*4)(3) yann@1: + stw r31,((JB_GPRS+17)*4)(3) yann@1: + stfd fp31,((JB_FPRS+17*2)*4)(3) yann@1: + b JUMPTARGET (BP_SYM (__sigjmp_save)) yann@1: +END (BP_SYM (__sigsetjmp)) yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/fpu_control.h glibc-2.2.5/sysdeps/powerpc/fpu_control.h yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/fpu_control.h Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/fpu_control.h Wed Dec 31 16:00:00 1969 yann@1: @@ -1,67 +0,0 @@ yann@1: -/* FPU control word definitions. PowerPC version. yann@1: - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. yann@1: - This file is part of the GNU C Library. yann@1: - yann@1: - The GNU C Library is free software; you can redistribute it and/or yann@1: - modify it under the terms of the GNU Lesser General Public yann@1: - License as published by the Free Software Foundation; either yann@1: - version 2.1 of the License, or (at your option) any later version. yann@1: - yann@1: - The GNU C Library is distributed in the hope that it will be useful, yann@1: - but WITHOUT ANY WARRANTY; without even the implied warranty of yann@1: - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yann@1: - Lesser General Public License for more details. yann@1: - yann@1: - You should have received a copy of the GNU Lesser General Public yann@1: - License along with the GNU C Library; if not, write to the Free yann@1: - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA yann@1: - 02111-1307 USA. */ yann@1: - yann@1: -#ifndef _FPU_CONTROL_H yann@1: -#define _FPU_CONTROL_H yann@1: - yann@1: -/* rounding control */ yann@1: -#define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ yann@1: -#define _FPU_RC_DOWN 0x03 yann@1: -#define _FPU_RC_UP 0x02 yann@1: -#define _FPU_RC_ZERO 0x01 yann@1: - yann@1: -#define _FPU_MASK_NI 0x04 /* non-ieee mode */ yann@1: - yann@1: -/* masking of interrupts */ yann@1: -#define _FPU_MASK_ZM 0x10 /* zero divide */ yann@1: -#define _FPU_MASK_OM 0x40 /* overflow */ yann@1: -#define _FPU_MASK_UM 0x20 /* underflow */ yann@1: -#define _FPU_MASK_XM 0x08 /* inexact */ yann@1: -#define _FPU_MASK_IM 0x80 /* invalid operation */ yann@1: - yann@1: -#define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */ yann@1: - yann@1: -/* The fdlibm code requires no interrupts for exceptions. */ yann@1: -#define _FPU_DEFAULT 0x00000000 /* Default value. */ yann@1: - yann@1: -/* IEEE: same as above, but (some) exceptions; yann@1: - we leave the 'inexact' exception off. yann@1: - */ yann@1: -#define _FPU_IEEE 0x000000f0 yann@1: - yann@1: -/* Type of the control word. */ yann@1: -typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); yann@1: - yann@1: -/* Macros for accessing the hardware control word. */ yann@1: -#define _FPU_GETCW(cw) ( { \ yann@1: - union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \ yann@1: - __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0"); \ yann@1: - (cw)=tmp.cw[1]; \ yann@1: - tmp.cw[1]; } ) yann@1: -#define _FPU_SETCW(cw) { \ yann@1: - union { double d; fpu_control_t cw[2]; } tmp __attribute__ ((__aligned__(8))); \ yann@1: - tmp.cw[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \ yann@1: - tmp.cw[1] = cw; \ yann@1: - __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \ yann@1: -} yann@1: - yann@1: -/* Default control word set at startup. */ yann@1: -extern fpu_control_t __fpu_control; yann@1: - yann@1: -#endif /* _FPU_CONTROL_H */ yann@1: diff -Naur glibc-2.2.5.old/sysdeps/powerpc/setjmp.S glibc-2.2.5/sysdeps/powerpc/setjmp.S yann@1: --- glibc-2.2.5.old/sysdeps/powerpc/setjmp.S Thu Jul 5 21:56:01 2001 yann@1: +++ glibc-2.2.5/sysdeps/powerpc/setjmp.S Thu Jul 10 11:43:44 2003 yann@1: @@ -24,6 +24,8 @@ yann@1: #include yann@1: #include yann@1: yann@1: +/* The FPU stores have been removed from this file - see fpu/setjmp.S */ yann@1: + yann@1: ENTRY (BP_SYM (__sigsetjmp)) yann@1: CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE) yann@1: yann@1: @@ -31,43 +33,25 @@ yann@1: mflr r0 yann@1: stw r2,(JB_GPR2*4)(3) yann@1: stw r14,((JB_GPRS+0)*4)(3) yann@1: - stfd fp14,((JB_FPRS+0*2)*4)(3) yann@1: stw r0,(JB_LR*4)(3) yann@1: stw r15,((JB_GPRS+1)*4)(3) yann@1: - stfd fp15,((JB_FPRS+1*2)*4)(3) yann@1: mfcr r0 yann@1: stw r16,((JB_GPRS+2)*4)(3) yann@1: - stfd fp16,((JB_FPRS+2*2)*4)(3) yann@1: stw r0,(JB_CR*4)(3) yann@1: stw r17,((JB_GPRS+3)*4)(3) yann@1: - stfd fp17,((JB_FPRS+3*2)*4)(3) yann@1: stw r18,((JB_GPRS+4)*4)(3) yann@1: - stfd fp18,((JB_FPRS+4*2)*4)(3) yann@1: stw r19,((JB_GPRS+5)*4)(3) yann@1: - stfd fp19,((JB_FPRS+5*2)*4)(3) yann@1: stw r20,((JB_GPRS+6)*4)(3) yann@1: - stfd fp20,((JB_FPRS+6*2)*4)(3) yann@1: stw r21,((JB_GPRS+7)*4)(3) yann@1: - stfd fp21,((JB_FPRS+7*2)*4)(3) yann@1: stw r22,((JB_GPRS+8)*4)(3) yann@1: - stfd fp22,((JB_FPRS+8*2)*4)(3) yann@1: stw r23,((JB_GPRS+9)*4)(3) yann@1: - stfd fp23,((JB_FPRS+9*2)*4)(3) yann@1: stw r24,((JB_GPRS+10)*4)(3) yann@1: - stfd fp24,((JB_FPRS+10*2)*4)(3) yann@1: stw r25,((JB_GPRS+11)*4)(3) yann@1: - stfd fp25,((JB_FPRS+11*2)*4)(3) yann@1: stw r26,((JB_GPRS+12)*4)(3) yann@1: - stfd fp26,((JB_FPRS+12*2)*4)(3) yann@1: stw r27,((JB_GPRS+13)*4)(3) yann@1: - stfd fp27,((JB_FPRS+13*2)*4)(3) yann@1: stw r28,((JB_GPRS+14)*4)(3) yann@1: - stfd fp28,((JB_FPRS+14*2)*4)(3) yann@1: stw r29,((JB_GPRS+15)*4)(3) yann@1: - stfd fp29,((JB_FPRS+15*2)*4)(3) yann@1: stw r30,((JB_GPRS+16)*4)(3) yann@1: - stfd fp30,((JB_FPRS+16*2)*4)(3) yann@1: stw r31,((JB_GPRS+17)*4)(3) yann@1: - stfd fp31,((JB_FPRS+17*2)*4)(3) yann@1: b JUMPTARGET (BP_SYM (__sigjmp_save)) yann@1: END (BP_SYM (__sigsetjmp))