This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Fixes for powerpc64 libc_p
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: libc-alpha at sources dot redhat dot com
- Cc: Steve Munroe <sjmunroe at us dot ibm dot com>
- Date: Wed, 6 Oct 2004 23:05:50 +0930
- Subject: Fixes for powerpc64 libc_p
This patch fixes broken assembly routines in powerpc64-linux libc_p.a.
The problem is that sysdeps/powerpc/powerpc64/sysdep.h defines a
CALL_MCOUNT that is quite wrong for our _mcount. The ppc64 _mcount
assumes function parameters have been saved before it is called (and are
restored afterwards) by gcc function prologue code. The CALL_MCOUNT
definition on the other hand is for a _mcount that does all register
saving and restoring itself, like the ppc32 version. Net result is that
a function like memcpy in libc_p.a will hang or segv.
* gmon/Makefile (CFLAGS-mcount.c): Move before inclusion of "Rules".
* sysdeps/powerpc/powerpc64/Makefile (CFLAGS-mcount.c): Add
-msoft-float.
* sysdeps/powerpc/powerpc64/sysdep.h (SAVE_ARG, REST_ARG): New macros.
(CALL_MCOUNT): Replace with a gas macro implementation.
(EALIGN): Delete PROF version.
* sysdeps/powerpc/powerpc64/__longjmp-common.S: Invoke CALL_MCOUNT.
* sysdeps/powerpc/powerpc64/bsd-_setjmp.S: Likewise.
* sysdeps/powerpc/powerpc64/bsd-setjmp.S: Likewise.
* sysdeps/powerpc/powerpc64/setjmp-common.S: Likewise.
* sysdeps/powerpc/powerpc64/memcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/memset.S: Likewise.
* sysdeps/powerpc/powerpc64/stpcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/strchr.S: Likewise.
* sysdeps/powerpc/powerpc64/strcmp.S: Likewise.
* sysdeps/powerpc/powerpc64/strcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/strlen.S: Likewise.
* sysdeps/powerpc/powerpc64/strncmp.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_floor.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_llrintf.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_llround.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_rint.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_round.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Likewise.
* sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Likewise.
* sysdeps/powerpc/powerpc64/setjmp-common.S: Add extra entry point
past _mcount call.
* sysdeps/powerpc/powerpc64/bsd-_setjmp.S: Use it.
* sysdeps/powerpc/powerpc64/bsd-setjmp.S: Likewise.
Regression tested powerpc64-linux. OK to apply?
Index: gmon/Makefile
===================================================================
RCS file: /cvs/glibc/libc/gmon/Makefile,v
retrieving revision 1.16
diff -u -p -r1.16 Makefile
--- gmon/Makefile 11 Mar 2002 10:26:47 -0000 1.16
+++ gmon/Makefile 6 Oct 2004 13:06:03 -0000
@@ -29,11 +29,11 @@ elide-routines.os = bb_init_func bb_exit
tests := tst-sprofil
-include ../Rules
-
# The mcount code won't work without a frame pointer.
CFLAGS-mcount.c := -fno-omit-frame-pointer
+include ../Rules
+
# We cannot compile mcount.c with -pg because that would
# create recursive calls. Just copy the normal static object.
# On systems where `profil' is not a system call, the same
Index: sysdeps/powerpc/powerpc64/Makefile
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/Makefile,v
retrieving revision 1.4
diff -u -p -r1.4 Makefile
--- sysdeps/powerpc/powerpc64/Makefile 20 Feb 2004 05:43:52 -0000 1.4
+++ sysdeps/powerpc/powerpc64/Makefile 6 Oct 2004 13:06:09 -0000
@@ -22,3 +22,10 @@ ifeq ($(subdir),elf)
# help gcc inline asm code from dl-machine.h
+cflags += -finline-limit=2000
endif
+
+ifeq ($(subdir),gmon)
+# The assembly functions assume that fp arg regs are not trashed.
+# Compiling with -msoft-float ensures that fp regs are not used
+# for moving memory around.
+CFLAGS-mcount.c += -msoft-float
+endif
Index: sysdeps/powerpc/powerpc64/__longjmp-common.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/__longjmp-common.S,v
retrieving revision 1.4
diff -u -p -r1.4 __longjmp-common.S
--- sysdeps/powerpc/powerpc64/__longjmp-common.S 16 Jul 2004 23:06:01 -0000 1.4
+++ sysdeps/powerpc/powerpc64/__longjmp-common.S 6 Oct 2004 13:06:09 -0000
@@ -42,6 +42,7 @@
.machine "altivec"
ENTRY (BP_SYM (__longjmp))
+ CALL_MCOUNT 2
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#ifndef __NO_VMX__
ld r5,.LC__dl_hwcap@toc(r2)
Index: sysdeps/powerpc/powerpc64/bsd-_setjmp.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/bsd-_setjmp.S,v
retrieving revision 1.4
diff -u -p -r1.4 bsd-_setjmp.S
--- sysdeps/powerpc/powerpc64/bsd-_setjmp.S 16 Jul 2004 23:06:27 -0000 1.4
+++ sysdeps/powerpc/powerpc64/bsd-_setjmp.S 6 Oct 2004 13:06:09 -0000
@@ -25,8 +25,9 @@
#if defined NOT_IN_libc
/* Build a non-versioned object for rtld-*. */
ENTRY (BP_SYM (_setjmp))
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__sigsetjmp))
+ b JUMPTARGET (__sigsetjmp_ent)
END (BP_SYM (_setjmp))
libc_hidden_def (_setjmp)
@@ -36,8 +37,9 @@ libc_hidden_def (_setjmp)
symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.3);
ENTRY (BP_SYM (__novmx_setjmp))
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__novmx__sigsetjmp))
+ b JUMPTARGET (__novmx__sigsetjmp_ent)
END (BP_SYM (__novmx_setjmp))
libc_hidden_def (__novmx_setjmp)
# endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) */
@@ -50,13 +52,15 @@ ENTRY (BP_SYM (__GI__setjmp))
#if defined SHARED && !defined IS_IN_rtld
std r2,40(r1) /* Save the callers TOC in the save area. */
#endif
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__vmx__sigsetjmp))
+ b JUMPTARGET (__vmx__sigsetjmp_ent)
END (BP_SYM (__GI__setjmp))
ENTRY (BP_SYM (__vmx_setjmp))
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__vmx__sigsetjmp))
+ b JUMPTARGET (__vmx__sigsetjmp_ent)
END (BP_SYM (__vmx_setjmp))
libc_hidden_def (__vmx_setjmp)
#endif /* !NOT_IN_libc */
Index: sysdeps/powerpc/powerpc64/bsd-setjmp.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/bsd-setjmp.S,v
retrieving revision 1.4
diff -u -p -r1.4 bsd-setjmp.S
--- sysdeps/powerpc/powerpc64/bsd-setjmp.S 5 Jul 2004 17:09:17 -0000 1.4
+++ sysdeps/powerpc/powerpc64/bsd-setjmp.S 6 Oct 2004 13:06:09 -0000
@@ -25,8 +25,9 @@
ENTRY (__novmxsetjmp)
+ CALL_MCOUNT 1
li r4,1 /* Set second argument to 1. */
- b JUMPTARGET (__novmx__sigsetjmp)
+ b JUMPTARGET (__novmx__sigsetjmp_ent)
END (__novmxsetjmp)
strong_alias (__novmxsetjmp, __novmx__setjmp)
symbol_version (__novmxsetjmp, setjmp, GLIBC_2.3)
@@ -35,8 +36,9 @@ symbol_version (__novmxsetjmp, setjmp, G
ENTRY (__vmxsetjmp)
+ CALL_MCOUNT 1
li r4,1 /* Set second argument to 1. */
- b JUMPTARGET (__vmx__sigsetjmp)
+ b JUMPTARGET (__vmx__sigsetjmp_ent)
END (__vmxsetjmp)
strong_alias (__vmxsetjmp, __vmx__setjmp)
strong_alias (__vmx__sigsetjmp, __setjmp)
Index: sysdeps/powerpc/powerpc64/memcpy.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/memcpy.S,v
retrieving revision 1.4
diff -u -p -r1.4 memcpy.S
--- sysdeps/powerpc/powerpc64/memcpy.S 25 Jul 2004 04:26:25 -0000 1.4
+++ sysdeps/powerpc/powerpc64/memcpy.S 6 Oct 2004 13:06:09 -0000
@@ -37,6 +37,8 @@
Each case has a optimized unrolled loop. */
EALIGN (BP_SYM (memcpy), 5, 0)
+ CALL_MCOUNT 3
+
cmpldi cr1,5,31
neg 0,3
std 3,-16(1)
Index: sysdeps/powerpc/powerpc64/memset.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/memset.S,v
retrieving revision 1.3
diff -u -p -r1.3 memset.S
--- sysdeps/powerpc/powerpc64/memset.S 29 Apr 2003 22:47:19 -0000 1.3
+++ sysdeps/powerpc/powerpc64/memset.S 6 Oct 2004 13:06:09 -0000
@@ -41,6 +41,7 @@
to 0, to take advantage of the dcbz instruction. */
EALIGN (BP_SYM (memset), 5, 0)
+ CALL_MCOUNT 3
#define rTMP r0
#define rRTN r3 /* Initial value of 1st argument. */
@@ -274,6 +275,7 @@ libc_hidden_builtin_def (memset)
/* Copied from bzero.S to prevent the linker from inserting a stub
between bzero and memset. */
ENTRY (BP_SYM (__bzero))
+ CALL_MCOUNT 3
#if __BOUNDED_POINTERS__
mr r6,r4
li r5,0
Index: sysdeps/powerpc/powerpc64/setjmp-common.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/setjmp-common.S,v
retrieving revision 1.4
diff -u -p -r1.4 setjmp-common.S
--- sysdeps/powerpc/powerpc64/setjmp-common.S 16 Jul 2004 23:07:03 -0000 1.4
+++ sysdeps/powerpc/powerpc64/setjmp-common.S 6 Oct 2004 13:06:09 -0000
@@ -41,6 +41,10 @@
.machine "altivec"
ENTRY (BP_SYM (__sigsetjmp))
+ CALL_MCOUNT 2
+ .globl JUMPTARGET(GLUE(__sigsetjmp,_ent))
+ .hidden JUMPTARGET(GLUE(__sigsetjmp,_ent))
+JUMPTARGET(GLUE(__sigsetjmp,_ent)):
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
std r1,(JB_GPR1*8)(3)
mflr r0
Index: sysdeps/powerpc/powerpc64/stpcpy.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/stpcpy.S,v
retrieving revision 1.2
diff -u -p -r1.2 stpcpy.S
--- sysdeps/powerpc/powerpc64/stpcpy.S 28 May 2004 06:39:36 -0000 1.2
+++ sysdeps/powerpc/powerpc64/stpcpy.S 6 Oct 2004 13:06:09 -0000
@@ -26,6 +26,7 @@
/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (__stpcpy), 4, 0)
+ CALL_MCOUNT 2
#define rTMP r0
#define rRTN r3
Index: sysdeps/powerpc/powerpc64/strchr.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/strchr.S,v
retrieving revision 1.3
diff -u -p -r1.3 strchr.S
--- sysdeps/powerpc/powerpc64/strchr.S 29 Apr 2003 22:47:19 -0000 1.3
+++ sysdeps/powerpc/powerpc64/strchr.S 6 Oct 2004 13:06:09 -0000
@@ -26,6 +26,7 @@
/* char * [r3] strchr (const char *s [r3] , int c [r4] ) */
ENTRY (BP_SYM (strchr))
+ CALL_MCOUNT 2
#define rTMP1 r0
#define rRTN r3 /* outgoing result */
Index: sysdeps/powerpc/powerpc64/strcmp.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/strcmp.S,v
retrieving revision 1.4
diff -u -p -r1.4 strcmp.S
--- sysdeps/powerpc/powerpc64/strcmp.S 29 Apr 2003 22:47:18 -0000 1.4
+++ sysdeps/powerpc/powerpc64/strcmp.S 6 Oct 2004 13:06:09 -0000
@@ -26,6 +26,7 @@
/* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */
EALIGN (BP_SYM(strcmp), 4, 0)
+ CALL_MCOUNT 2
#define rTMP r0
#define rRTN r3
Index: sysdeps/powerpc/powerpc64/strcpy.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/strcpy.S,v
retrieving revision 1.3
diff -u -p -r1.3 strcpy.S
--- sysdeps/powerpc/powerpc64/strcpy.S 29 Apr 2003 22:47:18 -0000 1.3
+++ sysdeps/powerpc/powerpc64/strcpy.S 6 Oct 2004 13:06:09 -0000
@@ -26,6 +26,7 @@
/* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (strcpy), 4, 0)
+ CALL_MCOUNT 2
#define rTMP r0
#define rRTN r3 /* incoming DEST arg preserved as result */
Index: sysdeps/powerpc/powerpc64/strlen.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/strlen.S,v
retrieving revision 1.3
diff -u -p -r1.3 strlen.S
--- sysdeps/powerpc/powerpc64/strlen.S 29 Apr 2003 22:47:18 -0000 1.3
+++ sysdeps/powerpc/powerpc64/strlen.S 6 Oct 2004 13:06:09 -0000
@@ -79,6 +79,7 @@
/* int [r3] strlen (char *s [r3]) */
ENTRY (BP_SYM (strlen))
+ CALL_MCOUNT 1
#define rTMP1 r0
#define rRTN r3 /* incoming STR arg, outgoing result */
Index: sysdeps/powerpc/powerpc64/strncmp.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/strncmp.S,v
retrieving revision 1.1
diff -u -p -r1.1 strncmp.S
--- sysdeps/powerpc/powerpc64/strncmp.S 3 Nov 2003 17:38:58 -0000 1.1
+++ sysdeps/powerpc/powerpc64/strncmp.S 6 Oct 2004 13:06:09 -0000
@@ -26,6 +26,7 @@
/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
EALIGN (BP_SYM(strncmp), 4, 0)
+ CALL_MCOUNT 3
#define rTMP r0
#define rRTN r3
Index: sysdeps/powerpc/powerpc64/sysdep.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/sysdep.h,v
retrieving revision 1.9
diff -u -p -r1.9 sysdep.h
--- sysdeps/powerpc/powerpc64/sysdep.h 8 Sep 2004 06:56:39 -0000 1.9
+++ sysdeps/powerpc/powerpc64/sysdep.h 6 Oct 2004 13:06:09 -0000
@@ -23,37 +23,36 @@
#ifdef __ASSEMBLER__
+/* Support macros for CALL_MCOUNT. */
+ .macro SAVE_ARG NARG
+ .if \NARG
+ SAVE_ARG \NARG-1
+ std 2+\NARG,-72+8*(\NARG)(1)
+ .endif
+ .endm
+
+ .macro REST_ARG NARG
+ .if \NARG
+ REST_ARG \NARG-1
+ ld 2+\NARG,40+8*(\NARG)(1)
+ .endif
+ .endm
+
/* If compiled for profiling, call `_mcount' at the start of each function.
see ppc-mcount.S for more details. */
+ .macro CALL_MCOUNT NARG
#ifdef PROF
-/* The mcount code relies on a the return address being on the stack
- to locate our caller and so it can restore it; so store one just
- for its benefit. */
-#ifdef SYSV_ELF_PROFILING
-#define CALL_MCOUNT \
- .pushsection; \
- .section ".data"; \
- .align ALIGNARG(2); \
-__mcount: \
- .long 0; \
- .previous; \
- .section ".toc","aw"; \
-.LC__mcount:; \
- .tc __mcount[TC],__mcount; \
- .previous; \
- mflr r0; \
- std r0,16(r1); \
- ld r0,.LC__mcount@toc(r2); \
- bl JUMPTARGET(_mcount);
-#else /* SYSV_ELF_PROFILING */
-#define CALL_MCOUNT \
- mflr r0; \
- std r0,16(r1); \
- bl JUMPTARGET(_mcount);
-#endif /* SYSV_ELF_PROFILING */
-#else /* PROF */
-#define CALL_MCOUNT /* Do nothing. */
-#endif /* PROF */
+ mflr r0
+ SAVE_ARG \NARG
+ std r0,16(r1)
+ stdu r1,-112(r1)
+ bl JUMPTARGET (_mcount)
+ ld r0,128(r1)
+ REST_ARG \NARG
+ addi r1,r1,112
+ mtlr r0
+#endif
+ .endm
#ifdef USE_PPC64_OVERLAPPING_OPD
# define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase
@@ -106,24 +105,11 @@ BODY_LABEL(name):
/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
past a 2^alignt boundary. */
-#ifdef PROF
-#define EALIGN(name, alignt, words) \
- ENTRY_2(name) \
- .align ALIGNARG(alignt); \
- EALIGN_W_##words; \
-BODY_LABEL(name): \
- CALL_MCOUNT \
- b 0f; \
- .align ALIGNARG(alignt); \
- EALIGN_W_##words; \
-0:
-#else /* PROF */
#define EALIGN(name, alignt, words) \
ENTRY_2(name) \
.align ALIGNARG(alignt); \
EALIGN_W_##words; \
BODY_LABEL(name):
-#endif
/* Local labels stripped out by the linker. */
#undef L
Index: sysdeps/powerpc/powerpc64/fpu/s_ceil.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_ceil.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_ceil.S
--- sysdeps/powerpc/powerpc64/fpu/s_ceil.S 3 May 2004 21:19:07 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_ceil.S 6 Oct 2004 13:06:09 -0000
@@ -27,6 +27,7 @@
.section ".text"
ENTRY (__ceil)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
Index: sysdeps/powerpc/powerpc64/fpu/s_ceilf.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_ceilf.S
--- sysdeps/powerpc/powerpc64/fpu/s_ceilf.S 3 May 2004 21:19:17 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_ceilf.S 6 Oct 2004 13:06:09 -0000
@@ -27,6 +27,7 @@
.section ".text"
ENTRY (__ceilf)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
Index: sysdeps/powerpc/powerpc64/fpu/s_copysign.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_copysign.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_copysign.S
--- sysdeps/powerpc/powerpc64/fpu/s_copysign.S 17 Sep 2002 23:50:03 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_copysign.S 6 Oct 2004 13:06:09 -0000
@@ -23,6 +23,7 @@
#include <sysdep.h>
ENTRY(__copysign)
+ CALL_MCOUNT 0
/* double [f1] copysign (double [f1] x, double [f2] y);
copysign(x,y) returns a value with the magnitude of x and
with the sign bit of y. */
Index: sysdeps/powerpc/powerpc64/fpu/s_floor.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_floor.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_floor.S
--- sysdeps/powerpc/powerpc64/fpu/s_floor.S 3 May 2004 21:19:27 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_floor.S 6 Oct 2004 13:06:09 -0000
@@ -25,6 +25,7 @@
.section ".text"
ENTRY (__floor)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
Index: sysdeps/powerpc/powerpc64/fpu/s_floorf.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_floorf.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_floorf.S
--- sysdeps/powerpc/powerpc64/fpu/s_floorf.S 3 May 2004 21:19:44 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_floorf.S 6 Oct 2004 13:06:09 -0000
@@ -25,6 +25,7 @@
.section ".text"
ENTRY (__floorf)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
Index: sysdeps/powerpc/powerpc64/fpu/s_llrint.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_llrint.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_llrint.S
--- sysdeps/powerpc/powerpc64/fpu/s_llrint.S 3 May 2004 21:19:56 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_llrint.S 6 Oct 2004 13:06:09 -0000
@@ -21,6 +21,7 @@
/* long long int[r3] __llrint (double x[fp1]) */
ENTRY (__llrint)
+ CALL_MCOUNT 0
fctid fp13,fp1
stfd fp13,-16(r1)
nop /* Insure the following load is in a different dispatch group */
Index: sysdeps/powerpc/powerpc64/fpu/s_llrintf.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_llrintf.S
--- sysdeps/powerpc/powerpc64/fpu/s_llrintf.S 3 May 2004 21:20:24 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_llrintf.S 6 Oct 2004 13:06:09 -0000
@@ -21,6 +21,7 @@
/* long long int[r3] __llrintf (float x[fp1]) */
ENTRY (__llrintf)
+ CALL_MCOUNT 0
fctid fp13,fp1
stfd fp13,-16(r1)
nop /* Insure the following load is in a different dispatch group */
Index: sysdeps/powerpc/powerpc64/fpu/s_llround.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_llround.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_llround.S
--- sysdeps/powerpc/powerpc64/fpu/s_llround.S 3 May 2004 21:20:44 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_llround.S 6 Oct 2004 13:06:09 -0000
@@ -37,6 +37,7 @@
to the integer value. */
ENTRY (__llround)
+ CALL_MCOUNT 0
lfd fp12,.LC0@toc(2)
lfd fp10,.LC1@toc(2)
fcmpu cr6,fp1,fp12 /* if (x > 0.0) */
Index: sysdeps/powerpc/powerpc64/fpu/s_llroundf.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_llroundf.S
--- sysdeps/powerpc/powerpc64/fpu/s_llroundf.S 3 May 2004 21:20:55 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_llroundf.S 6 Oct 2004 13:06:09 -0000
@@ -37,6 +37,7 @@
to the integer value. */
ENTRY (__llroundf)
+ CALL_MCOUNT 0
lfd fp12,.LC0@toc(2)
lfd fp10,.LC1@toc(2)
fcmpu cr6,fp1,fp12 /* if (x < 0.0) */
Index: sysdeps/powerpc/powerpc64/fpu/s_rint.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_rint.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_rint.S
--- sysdeps/powerpc/powerpc64/fpu/s_rint.S 3 May 2004 21:21:33 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_rint.S 6 Oct 2004 13:06:09 -0000
@@ -28,6 +28,7 @@
.section ".text"
ENTRY (__rint)
+ CALL_MCOUNT 0
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
fsub fp12,fp13,fp13 /* generate 0.0 */
Index: sysdeps/powerpc/powerpc64/fpu/s_rintf.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_rintf.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_rintf.S
--- sysdeps/powerpc/powerpc64/fpu/s_rintf.S 3 May 2004 21:21:45 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_rintf.S 6 Oct 2004 13:06:09 -0000
@@ -25,6 +25,7 @@
.section ".text"
ENTRY (__rintf)
+ CALL_MCOUNT 0
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
fsubs fp12,fp13,fp13 /* generate 0.0 */
Index: sysdeps/powerpc/powerpc64/fpu/s_round.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_round.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_round.S
--- sysdeps/powerpc/powerpc64/fpu/s_round.S 3 May 2004 21:21:55 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_round.S 6 Oct 2004 13:06:09 -0000
@@ -39,6 +39,7 @@
to the integer value. */
ENTRY (__round)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
Index: sysdeps/powerpc/powerpc64/fpu/s_roundf.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_roundf.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_roundf.S
--- sysdeps/powerpc/powerpc64/fpu/s_roundf.S 3 May 2004 21:22:08 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_roundf.S 6 Oct 2004 13:06:09 -0000
@@ -39,6 +39,7 @@
to the integer value. */
ENTRY (__roundf )
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
Index: sysdeps/powerpc/powerpc64/fpu/s_trunc.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_trunc.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_trunc.S
--- sysdeps/powerpc/powerpc64/fpu/s_trunc.S 3 May 2004 21:22:19 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_trunc.S 6 Oct 2004 13:06:09 -0000
@@ -34,6 +34,7 @@
subtracting +-2**52. */
ENTRY (__trunc)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
Index: sysdeps/powerpc/powerpc64/fpu/s_truncf.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/powerpc64/fpu/s_truncf.S,v
retrieving revision 1.1
diff -u -p -r1.1 s_truncf.S
--- sysdeps/powerpc/powerpc64/fpu/s_truncf.S 3 May 2004 21:22:27 -0000 1.1
+++ sysdeps/powerpc/powerpc64/fpu/s_truncf.S 6 Oct 2004 13:06:09 -0000
@@ -34,6 +34,7 @@
subtracting +-2**23. */
ENTRY (__truncf)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
--
Alan Modra
IBM OzLabs - Linux Technology Centre