]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 6 Jan 2005 21:52:35 +0000 (21:52 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 6 Jan 2005 21:52:35 +0000 (21:52 +0000)
2004-12-22  Steven Munroe  <sjmunroe@us.ibm.com>

* math/libm-test.inc (rint_test_tonearest): New test.
(rint_test_towardzero): New test.
(rint_test_downward): New test.
(rint_test_upward): New test.
* sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Fix -0.0 case.
Remove redundant const values.
* sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Fix -0.0 case.
Remove redundant const values.  Use float const.
* sysdeps/powerpc/powerpc32/fpu/s_floor.S: Fix -0.0 case.
* sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Fix -0.0 case.
Use float const.
* sysdeps/powerpc/powerpc32/fpu/s_rint.S: Fix -0.0 case.
* sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Fix -0.0 case.
Use float const.
* sysdeps/powerpc/powerpc32/fpu/s_round.S: Fix -0.0 case.
Remove redundant const values.
* sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Fix -0.0 case.
Remove redundant const values.  Use float const.
* sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Fix -0.0 case.
Remove redundant const values.
* sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Fix -0.0 case.
Remove redundant const values.  Use float const.
* sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.  Remove redundant const values.
* sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.  Remove redundant const values.
Use float const.
* sysdeps/powerpc/powerpc64/fpu/s_floor.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.
* sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.  Use float const.
* sysdeps/powerpc/powerpc64/fpu/s_rint.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.
* sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.  Use float const.
* sysdeps/powerpc/powerpc64/fpu/s_round.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.  Remove redundant const values.
* sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.  Remove redundant const values.
Use float const.
* sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.
* sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Use EALIGN for Quadword
alignment.  Fix -0.0 case.  Remove redundant const values.
Use float const.

24 files changed:
ChangeLog
WUR-REPORT
math/libm-test.inc
posix/unistd.h
sysdeps/powerpc/powerpc32/fpu/s_ceil.S
sysdeps/powerpc/powerpc32/fpu/s_ceilf.S
sysdeps/powerpc/powerpc32/fpu/s_floor.S
sysdeps/powerpc/powerpc32/fpu/s_floorf.S
sysdeps/powerpc/powerpc32/fpu/s_rint.S
sysdeps/powerpc/powerpc32/fpu/s_rintf.S
sysdeps/powerpc/powerpc32/fpu/s_round.S
sysdeps/powerpc/powerpc32/fpu/s_roundf.S
sysdeps/powerpc/powerpc32/fpu/s_trunc.S
sysdeps/powerpc/powerpc32/fpu/s_truncf.S
sysdeps/powerpc/powerpc64/fpu/s_ceil.S
sysdeps/powerpc/powerpc64/fpu/s_ceilf.S
sysdeps/powerpc/powerpc64/fpu/s_floor.S
sysdeps/powerpc/powerpc64/fpu/s_floorf.S
sysdeps/powerpc/powerpc64/fpu/s_rint.S
sysdeps/powerpc/powerpc64/fpu/s_rintf.S
sysdeps/powerpc/powerpc64/fpu/s_round.S
sysdeps/powerpc/powerpc64/fpu/s_roundf.S
sysdeps/powerpc/powerpc64/fpu/s_trunc.S
sysdeps/powerpc/powerpc64/fpu/s_truncf.S

index 2ad1924005bd8cf486d8169bc61d37c740721113..bf73bd99890b904aa529ba91102271775e345bc8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,51 @@
+2004-12-22  Steven Munroe  <sjmunroe@us.ibm.com>
+
+       * math/libm-test.inc (rint_test_tonearest): New test.
+       (rint_test_towardzero): New test.
+       (rint_test_downward): New test.
+       (rint_test_upward): New test.
+       * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Fix -0.0 case.
+       Remove redundant const values.
+       * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Fix -0.0 case.
+       Remove redundant const values.  Use float const.
+       * sysdeps/powerpc/powerpc32/fpu/s_floor.S: Fix -0.0 case.
+       * sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Fix -0.0 case.
+       Use float const.
+       * sysdeps/powerpc/powerpc32/fpu/s_rint.S: Fix -0.0 case.
+       * sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Fix -0.0 case.
+       Use float const.
+       * sysdeps/powerpc/powerpc32/fpu/s_round.S: Fix -0.0 case.
+       Remove redundant const values.
+       * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Fix -0.0 case.
+       Remove redundant const values.  Use float const.
+       * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Fix -0.0 case.
+       Remove redundant const values.
+       * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Fix -0.0 case.
+       Remove redundant const values.  Use float const.
+       * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.  Remove redundant const values.
+       * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.  Remove redundant const values.
+       Use float const.
+       * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.
+       * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.  Use float const.
+       * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.
+       * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.  Use float const.
+       * sysdeps/powerpc/powerpc64/fpu/s_round.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.  Remove redundant const values.
+       * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.  Remove redundant const values.
+       Use float const.
+       * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.
+       * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Use EALIGN for Quadword
+       alignment.  Fix -0.0 case.  Remove redundant const values.
+       Use float const.
+
 2005-01-06  Ulrich Drepper  <drepper@redhat.com>
 
        * misc/sys/cdefs.h: Define __wur.
index a8b28607d5920857488d720878d3876d86d859a6..52c4a812d9c3e45d6b3fdabfc61eabfccd1a4390 100644 (file)
@@ -23,3 +23,23 @@ fseek:     see lseek
 fseeko:    likewise
 fgetpos:   similarly
 fsetpos:   likewise
+
+
+<stdlib.h>:
+
+atext:     it is guaranteed that a certain number of handlers can be
+           registered, so some calls might need not be checked
+on_exit:   same
+random functions:  one might want to discard a number of results.  In any
+           case, no security problem
+
+
+putenv:    probably SHOULD be marked, but we'll wait a bit.
+setenv:    likewise
+unsetenv:  likewise
+clearenv:  likewise
+
+mbstowcs:  probably SHOULD be marked
+wcstombs:  likewise
+
+ptsname_r: probably SHOULD be marked
index 60711fabdcfaf1a82828660434c75de2c3c40416..be052226290967c2c705679d6d7bb07673766f71 100644 (file)
@@ -3794,6 +3794,114 @@ rint_test (void)
   END (rint);
 }
 
+static void
+rint_test_tonearest (void)
+{
+  int save_round_mode;
+  START (rint_tonearest);
+
+  save_round_mode = fegetround();
+
+  if (!fesetround (FE_TONEAREST))
+  {
+    TEST_f_f (rint, 2.0, 2.0);
+    TEST_f_f (rint, 1.5, 2.0);
+    TEST_f_f (rint, 1.0, 1.0);
+    TEST_f_f (rint, 0.5, 0.0);
+    TEST_f_f (rint, 0.0, 0.0);
+    TEST_f_f (rint, minus_zero, minus_zero);
+    TEST_f_f (rint, -0.5, -0.0);
+    TEST_f_f (rint, -1.0, -1.0);
+    TEST_f_f (rint, -1.5, -2.0);
+    TEST_f_f (rint, -2.0, -2.0);
+  }
+
+  fesetround(save_round_mode);
+
+  END (rint_tonearest);
+}
+
+static void
+rint_test_towardzero (void)
+{
+  int save_round_mode;
+  START (rint_towardzero);
+
+  save_round_mode = fegetround();
+
+  if (!fesetround (FE_TOWARDZERO))
+  {
+    TEST_f_f (rint, 2.0, 2.0);
+    TEST_f_f (rint, 1.5, 1.0);
+    TEST_f_f (rint, 1.0, 1.0);
+    TEST_f_f (rint, 0.5, 0.0);
+    TEST_f_f (rint, 0.0, 0.0);
+    TEST_f_f (rint, minus_zero, minus_zero);
+    TEST_f_f (rint, -0.5, -0.0);
+    TEST_f_f (rint, -1.0, -1.0);
+    TEST_f_f (rint, -1.5, -1.0);
+    TEST_f_f (rint, -2.0, -2.0);
+  }
+
+  fesetround(save_round_mode);
+
+  END (rint_towardzero);
+}
+
+static void
+rint_test_downward (void)
+{
+  int save_round_mode;
+  START (rint_downward);
+
+  save_round_mode = fegetround();
+
+  if (!fesetround (FE_DOWNWARD))
+  {
+    TEST_f_f (rint, 2.0, 2.0);
+    TEST_f_f (rint, 1.5, 1.0);
+    TEST_f_f (rint, 1.0, 1.0);
+    TEST_f_f (rint, 0.5, 0.0);
+    TEST_f_f (rint, 0.0, 0.0);
+    TEST_f_f (rint, minus_zero, minus_zero);
+    TEST_f_f (rint, -0.5, -1.0);
+    TEST_f_f (rint, -1.0, -1.0);
+    TEST_f_f (rint, -1.5, -2.0);
+    TEST_f_f (rint, -2.0, -2.0);
+  }
+
+  fesetround(save_round_mode);
+
+  END (rint_downward);
+}
+
+static void
+rint_test_upward (void)
+{
+  int save_round_mode;
+  START (rint_upward);
+
+  save_round_mode = fegetround();
+
+  if (!fesetround (FE_UPWARD))
+  {
+    TEST_f_f (rint, 2.0, 2.0);
+    TEST_f_f (rint, 1.5, 2.0);
+    TEST_f_f (rint, 1.0, 1.0);
+    TEST_f_f (rint, 0.5, 1.0);
+    TEST_f_f (rint, 0.0, 0.0);
+    TEST_f_f (rint, minus_zero, minus_zero);
+    TEST_f_f (rint, -0.5, -0.0);
+    TEST_f_f (rint, -1.0, -1.0);
+    TEST_f_f (rint, -1.5, -1.0);
+    TEST_f_f (rint, -2.0, -2.0);
+  }
+
+  fesetround(save_round_mode);
+
+  END (rint_upward);
+}
+
 static void
 round_test (void)
 {
@@ -4557,6 +4665,10 @@ main (int argc, char **argv)
   floor_test ();
   nearbyint_test ();
   rint_test ();
+  rint_test_tonearest ();
+  rint_test_towardzero ();
+  rint_test_downward ();
+  rint_test_upward ();
   lrint_test ();
   llrint_test ();
   round_test ();
index f597b37b95352b175d93915ef23cb634a20fb9bc..269e997d39a0e5c717568e2f0b55c61a35aea2db 100644 (file)
@@ -283,7 +283,6 @@ extern int euidaccess (__const char *__name, int __type)
    the current position (if WHENCE is SEEK_CUR),
    or the end of the file (if WHENCE is SEEK_END).
    Return the new file position.  */
-// XXX Probably should be __wur but lseek(fd,
 #ifndef __USE_FILE_OFFSET64
 extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
 #else
index d211314bbf51ddf6f7fa9beac8bce5121d1bfe51..22cf76e54c10e7f36f1f439db342694dbf4ce41b 100644 (file)
 TWO52.0:
        .long 0x43300000
        .long 0
-       .type   NEGZERO.0,@object
-       .size   NEGZERO.0,8
-NEGZERO.0:
-       .long 0x80000000
-       .long 0
 
        .section        .rodata.cst8,"aM",@progbits,8
        .align 3
 .LC0:  /* 2**52 */
        .long 0x43300000
        .long 0
-.LC1:  /* -0.0 */
-       .long 0x80000000
-       .long 0
 
        .section        ".text"
 ENTRY (__ceil)
@@ -64,27 +56,18 @@ ENTRY (__ceil)
        ble-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-#ifdef SHARED
-       mflr    r11
-       bl      _GLOBAL_OFFSET_TABLE_@local-4
-       mflr    r10
-       lwz     r9,.LC1@got(10)
-       mtlr    r11
-       lfd     fp1,0(r9)
-#else
-       lis     r9,.LC1@ha
-       lfd     fp1,.LC1@l(r9)
-#endif
        blr
        END (__ceil)
 
index 4439dc23382b6b6a3e9b3c420003dd86377fff98..e7a72186c9b8b8c433d4e7f12a68730feab9c486 100644 (file)
 #include <sysdep.h>
 
        .section        .rodata
-       .align 3
-       .type   TWO52.0,@object
-       .size   TWO52.0,8
-TWO52.0:
-       .long 0x43300000
-       .long 0
-       .type   NEGZERO.0,@object
-       .size   NEGZERO.0,8
-NEGZERO.0:
-       .long 0x80000000
-       .long 0
+       .align 2
+       .type   TWO23.0,@object
+       .size   TWO23.0,4
+TWO23.0:
+       .long 0x4b000000
 
-       .section        .rodata.cst8,"aM",@progbits,8
-       .align 3
+       .section        .rodata.cst4,"aM",@progbits,4
+       .align 2
 .LC0:  /* 2**23 */
-       .long 0x41600000
-       .long 0
-.LC1:  /* -0.0 */
-       .long 0x80000000
-       .long 0
+       .long 0x4b000000
 
        .section        ".text"
 ENTRY (__ceilf)
@@ -50,10 +40,10 @@ ENTRY (__ceilf)
        mflr    r10
        lwz     r9,.LC0@got(10)
        mtlr    r11
-       lfd     fp13,0(r9)
+       lfs     fp13,0(r9)
 #else
        lis     r9,.LC0@ha
-       lfd     fp13,.LC0@l(r9)
+       lfs     fp13,.LC0@l(r9)
 #endif
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
@@ -64,27 +54,18 @@ ENTRY (__ceilf)
        ble-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-#ifdef SHARED
-       mflr    r11
-       bl      _GLOBAL_OFFSET_TABLE_@local-4
-       mflr    r10
-       lwz     r9,.LC1@got(10)
-       mtlr    r11
-       lfd     fp1,0(r9)
-#else
-       lis     r9,.LC1@ha
-       lfd     fp1,.LC1@l(r9)
-#endif
        blr
        END (__ceilf)
 
index 143f907b18180c6463abd433a04c61d80848ade6..812ea7ced2710f1df9b0d1350d455a82cd776156 100644 (file)
@@ -56,15 +56,16 @@ ENTRY (__floor)
        ble-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       fmr     fp1,fp12        /* x must be +0.0 for the 0.0 case.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
 .L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */  
        blr
index 154bc30ff72095598487ade4268a7104227b34f0..ead41d4657149efb66ff71a740f3a5dca3647368 100644 (file)
 #include <sysdep.h>
 
        .section        .rodata
-       .align 3
+       .align 2
        .type   TWO23.0,@object
-       .size   TWO23.0,8
+       .size   TWO23.0,4
 TWO23.0:
-       .long 0x41600000
-       .long 0
+       .long 0x4b000000
 
-       .section        .rodata.cst8,"aM",@progbits,8
-       .align 3
+       .section        .rodata.cst4,"aM",@progbits,4
+       .align 2
 .LC0:  /* 2**23 */
-       .long 0x41600000
-       .long 0
+       .long 0x4b000000
 
        .section        ".text"
 ENTRY (__floorf)
@@ -42,10 +40,10 @@ ENTRY (__floorf)
        mflr    r10
        lwz     r9,.LC0@got(10)
        mtlr    r11
-       lfd     fp13,0(r9)
+       lfs     fp13,0(r9)
 #else
        lis     r9,.LC0@ha
-       lfd     fp13,.LC0@l(r9)
+       lfs     fp13,.LC0@l(r9)
 #endif
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
@@ -56,15 +54,16 @@ ENTRY (__floorf)
        ble-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       fmr     fp1,fp12        /* x must be +0.0 for the 0.0 case.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
 .L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */  
        blr
index dee25f204f8b7de2357429bb3cfed88d0afac00d..fa02dbc59cd7793a586bb1e79b9629a917a8c02d 100644 (file)
@@ -57,13 +57,14 @@ ENTRY (__rint)
        bng-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-       blr
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = 0.0; */
 .L4:
        bnllr-  cr6             /* if (x < 0.0)  */
-       fsub    fp1,fp13,fp1    /* x = TWO52 - x;  */
-       fsub    fp0,fp1,fp13    /* x = - (x - TWO52);  */
-       fneg    fp1,fp0
-       blr
+       fsub    fp1,fp1,fp13    /* x-= TWO52;  */
+       fadd    fp1,fp1,fp13    /* x+= TWO52;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = -0.0; */
        END (__rint)
 
 weak_alias (__rint, rint)
index cebf6423af33b78a82714e2bcae4d8e35e8b1642..78259512687e9347bb2189fb5e4f087c2e1e6cb3 100644 (file)
 
 
        .section        .rodata
-       .align 3
+       .align 2
        .type   TWO23.0,@object
-       .size   TWO23.0,8
+       .size   TWO23.0,4
 TWO23.0:
-       .long 0x41600000
-       .long 0
+       .long 0x4b000000
 
-       .section        .rodata.cst8,"aM",@progbits,8
-       .align 3
+       .section        .rodata.cst4,"aM",@progbits,4
+       .align 2
 .LC0:  /* 2**23 */
-       .long 0x41600000
-       .long 0
+       .long 0x4b000000
 
        .section        ".text"
 ENTRY (__rintf)
@@ -42,10 +40,10 @@ ENTRY (__rintf)
        mflr    r10
        lwz     r9,.LC0@got(10)
        mtlr    r11
-       lfd     fp13,0(r9)
+       lfs     fp13,0(r9)
 #else
        lis     r9,.LC0@ha
-       lfd     fp13,.LC0@l(r9)
+       lfs     fp13,.LC0@l(r9)
 #endif
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
@@ -55,13 +53,14 @@ ENTRY (__rintf)
        bng-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-       blr
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = 0.0; */
 .L4:
        bnllr-  cr6             /* if (x < 0.0)  */
-       fsubs   fp1,fp13,fp1    /* x = TWO23 - x;  */
-       fsubs   fp0,fp1,fp13    /* x = - (x - TWO23);  */
-       fneg    fp1,fp0
-       blr
+       fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
+       fadds   fp1,fp1,fp13    /* x+= TWO23;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = -0.0; */
        END (__rintf)
 
 weak_alias (__rintf, rintf)
index 13fc74f001ffdf27e44c55f7a139f8a548247889..39eab232f60da505491fd8f2f9dba6a44802c039 100644 (file)
@@ -31,11 +31,6 @@ TWO52.0:
 POINTFIVE.0:
        .long 0x3fe00000
        .long 0
-       .type   NEGZERO.0,@object
-       .size   NEGZERO.0,8
-NEGZERO.0:
-       .long 0x80000000
-       .long 0
 
        .section        .rodata.cst8,"aM",@progbits,8
        .align 3
@@ -45,9 +40,6 @@ NEGZERO.0:
 .LC1:  /* 0.5 */
        .long 0x3fe00000
        .long 0
-.LC2:  /* -0.0 */
-       .long 0x80000000
-       .long 0
 
 /* double [fp1] round (double x [fp1])
    IEEE 1003.1 round function.  IEEE specifies "round to the nearest 
@@ -89,7 +81,8 @@ ENTRY (__round)
        fadd    fp1,fp1,fp10    /* x+= 0.5;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
@@ -97,16 +90,10 @@ ENTRY (__round)
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp9,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-#ifdef SHARED
-       lwz     r9,.LC2@got(10)
-       lfd     fp1,0(r9)
-#else
-       lis     r9,.LC2@ha
-       lfd     fp1,.LC2@l(r9)
-#endif
        blr
        END (__round)
 
index ea8aaf3add2c35ca8351c99108ebc95f9aa939a4..a9b42f01705af96bf6e35f4f86c813b04345d920 100644 (file)
 #include <sysdep.h>
 
        .section        .rodata
-       .align 3
+       .align 2
        .type   TWO23.0,@object
-       .size   TWO23.0,8
+       .size   TWO23.0,4
 TWO23.0:
-       .long 0x43300000
-       .long 0
+       .long 0x4b000000
        .type   POINTFIVE.0,@object
-       .size   POINTFIVE.0,8
+       .size   POINTFIVE.0,4
 POINTFIVE.0:
-       .long 0x3fe00000
-       .long 0
-       .type   NEGZERO.0,@object
-       .size   NEGZERO.0,8
-NEGZERO.0:
-       .long 0x80000000
-       .long 0
+       .long 0x3f000000
 
-       .section        .rodata.cst8,"aM",@progbits,8
-       .align 3
+       .section        .rodata.cst4,"aM",@progbits,4
+       .align 2
 .LC0:  /* 2**23 */
-       .long 0x41600000
-       .long 0
+       .long 0x4b000000
 .LC1:  /* 0.5 */
-       .long 0x3fe00000
-       .long 0
-.LC2:  /* -0.0 */
-       .long 0x80000000
-       .long 0
+       .long 0x3f000000
 
 /* float [fp1] roundf  (float x [fp1])
    IEEE 1003.1 round function.  IEEE specifies "round to the nearest 
@@ -67,10 +55,10 @@ ENTRY (__roundf )
        mflr    r10
        lwz     r9,.LC0@got(10)
        mtlr    r11
-       lfd     fp13,0(r9)
+       lfs     fp13,0(r9)
 #else
        lis     r9,.LC0@ha
-       lfd     fp13,.LC0@l(r9)
+       lfs     fp13,.LC0@l(r9)
 #endif
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
@@ -80,16 +68,17 @@ ENTRY (__roundf )
        mtfsfi  7,1             /* Set rounding mode toward 0.  */
 #ifdef SHARED
        lwz     r9,.LC1@got(10)
-       lfd     fp10,0(r9)
+       lfs     fp10,0(r9)
 #else
        lis     r9,.LC1@ha
-       lfd     fp10,.LC1@l(r9)
+       lfs     fp10,.LC1@l(r9)
 #endif
        ble-    cr6,.L4
        fadds   fp1,fp1,fp10    /* x+= 0.5;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
@@ -97,16 +86,10 @@ ENTRY (__roundf )
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp9,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-#ifdef SHARED
-       lwz     r9,.LC2@got(10)
-       lfd     fp1,0(r9)
-#else
-       lis     r9,.LC2@ha
-       lfd     fp1,.LC2@l(r9)
-#endif
        blr
        END (__roundf)
 
index a4be651f8c1491c234462aba4e34f0914f05f365..08acc00cb211edbe8c3df674fad6218e28aa79be 100644 (file)
 TWO52.0:
        .long 0x43300000
        .long 0
-       .type   NEGZERO.0,@object
-       .size   NEGZERO.0,8
-NEGZERO.0:
-       .long 0x80000000
-       .long 0
 
        .section        .rodata.cst8,"aM",@progbits,8
        .align 3
 .LC0:  /* 2**52 */
        .long 0x43300000
        .long 0
-.LC1:  /* -0.0 */
-       .long 0x80000000
-       .long 0
 
 /* double [fp1] trunc (double x [fp1])
    IEEE 1003.1 trunc function.  IEEE specifies "trunc to the integer
@@ -70,23 +62,18 @@ ENTRY (__trunc)
        ble-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous truncing mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-#ifdef SHARED
-       lwz     r9,.LC1@got(10)
-       lfd     fp1,0(r9)
-#else
-       lis     r9,.LC1@ha
-       lfd     fp1,.LC1@l(r9)
-#endif
        blr
        END (__trunc)
 
index 9a8dae931b0cc088c7623f491e061ded1488579e..3b6fe731b430ba8fcb01a4ada83ab1618c2f0bc3 100644 (file)
 #include <sysdep.h>
 
        .section        .rodata
-       .align 3
+       .align 2
        .type   TWO23.0,@object
-       .size   TWO23.0,8
+       .size   TWO23.0,2
 TWO23.0:
-       .long 0x41600000
-       .long 0
-       .type   NEGZERO.0,@object
-       .size   NEGZERO.0,8
-NEGZERO.0:
-       .long 0x80000000
-       .long 0
+       .long 0x4b000000
 
-       .section        .rodata.cst8,"aM",@progbits,8
-       .align 3
+       .section        .rodata.cst4,"aM",@progbits,4
+       .align 2
 .LC0:  /* 2**23 */
-       .long 0x41600000
-       .long 0
-.LC1:  /* -0.0 */
-       .long 0x80000000
-       .long 0
+       .long 0x4b000000
 
 /* float [fp1] truncf (float x [fp1])
    IEEE 1003.1 trunc function.  IEEE specifies "trunc to the integer
@@ -56,10 +46,10 @@ ENTRY (__truncf)
        mflr    r10
        lwz     r9,.LC0@got(10)
        mtlr    r11
-       lfd     fp13,0(r9)
+       lfs     fp13,0(r9)
 #else
        lis     r9,.LC0@ha
-       lfd     fp13,.LC0@l(r9)
+       lfs     fp13,.LC0@l(r9)
 #endif
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
@@ -70,23 +60,18 @@ ENTRY (__truncf)
        ble-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous truncing mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-#ifdef SHARED
-       lwz     r9,.LC1@got(10)
-       lfd     fp1,0(r9)
-#else
-       lis     r9,.LC1@ha
-       lfd     fp1,.LC1@l(r9)
-#endif
        blr
        END (__truncf)
 
index a1bfaa70c2b6833a585f81208b0e08d6edec1151..9809e24d26aa0b78cb0822b4f14c065b2f2c568e 100644 (file)
        .section        ".toc","aw"
 .LC0:  /* 2**52 */
        .tc FD_43300000_0[TC],0x4330000000000000
-.LC1:  /* -0.0 */
-       .tc FD_80000000_0[TC],0x8000000000000000
        .section        ".text"
 
-ENTRY (__ceil)
+EALIGN (__ceil, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
        lfd     fp13,.LC0@toc(2)
@@ -39,17 +37,18 @@ ENTRY (__ceil)
        ble-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       lfd     fp1,.LC1@toc(2) /* x must be -0.0 for the 0.0 case.  */ 
        blr
        END (__ceil)
 
index 42eb274389cbe5c6ba442b9ef034beb60f9f5d94..1ccd133b66661b1685ab0ccb07a1efff45c78cf1 100644 (file)
 
        .section        ".toc","aw"
 .LC0:  /* 2**23 */
-       .tc FD_41600000_0[TC],0x4160000000000000
-.LC1:  /* -0.0 */
-       .tc FD_80000000_0[TC],0x8000000000000000
+       .tc FD_4b000000_0[TC],0x4b00000000000000
        .section        ".text"
 
-ENTRY (__ceilf)
+EALIGN (__ceilf, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
-       lfd     fp13,.LC0@toc(2)
+       lfs     fp13,.LC0@toc(2)
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
        fcmpu   cr7,fp0,fp13    /* if (fabs(x) > TWO23)  */
@@ -39,17 +37,18 @@ ENTRY (__ceilf)
        ble-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       lfd     fp1,.LC1@toc(2) /* x must be -0.0 for the 0.0 case.  */ 
        blr
        END (__ceilf)
 
index 80cbdc570930a0f765d86e4fc21b7010c18899fb..183423c2b3f14db7f1e80649cf890c3ad85ef1cb 100644 (file)
@@ -24,7 +24,7 @@
        .tc FD_43300000_0[TC],0x4330000000000000
        .section        ".text"
 
-ENTRY (__floor)
+EALIGN (__floor, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
        lfd     fp13,.LC0@toc(2)
@@ -37,15 +37,16 @@ ENTRY (__floor)
        ble-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       fmr     fp1,fp12        /* x must be +0.0 for the 0.0 case.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
 .L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */  
        blr
index 20cbb15ebd8c456275ac6a1d53c8c31670687814..bcdbf7823ddfa2d4a17957000b6cd53a9ae29885 100644 (file)
 
        .section        ".toc","aw"
 .LC0:  /* 2**23 */
-       .tc FD_41600000_0[TC],0x4160000000000000
+       .tc FD_4b000000_0[TC],0x4b00000000000000
        .section        ".text"
 
-ENTRY (__floorf)
+EALIGN (__floorf, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
-       lfd     fp13,.LC0@toc(2)
+       lfs     fp13,.LC0@toc(2)
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
        fcmpu   cr7,fp0,fp13    /* if (fabs(x) > TWO23)  */
@@ -37,15 +37,16 @@ ENTRY (__floorf)
        ble-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       fmr     fp1,fp12        /* x must be +0.0 for the 0.0 case.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
 .L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */  
        blr
index 79e807269dfa6b81d4b461375c73f08291811bef..0c0e0ba67be9076c4dbfa1b82fef19cf96d2eb66 100644 (file)
@@ -27,7 +27,7 @@
        .tc FD_43300000_0[TC],0x4330000000000000
        .section        ".text"
 
-ENTRY (__rint)
+EALIGN (__rint, 4, 0)
        CALL_MCOUNT 0
        lfd     fp13,.LC0@toc(2)
        fabs    fp0,fp1
@@ -38,13 +38,14 @@ ENTRY (__rint)
        bng-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-       blr
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = 0.0; */
 .L4:
        bnllr-  cr6             /* if (x < 0.0)  */
-       fsub    fp1,fp13,fp1    /* x = TWO52 - x;  */
-       fsub    fp0,fp1,fp13    /* x = - (x - TWO52);  */
-       fneg    fp1,fp0
-       blr
+       fsub    fp1,fp1,fp13    /* x-= TWO52;  */
+       fadd    fp1,fp1,fp13    /* x+= TWO52;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = -0.0; */
        END (__rint)
 
 weak_alias (__rint, rint)
index eb34dd5e77c5e5191adf71a03814e5c6d3ce37c9..e4fa9ba2e6b06ef0d1ce3ab5c495e3f0f5dbbf64 100644 (file)
 
        .section        ".toc","aw"
 .LC0:  /* 2**23 */
-       .tc FD_41600000_0[TC],0x4160000000000000
+       .tc FD_4b000000_0[TC],0x4b00000000000000
        .section        ".text"
 
-ENTRY (__rintf)
+EALIGN (__rintf, 4, 0)
        CALL_MCOUNT 0
-       lfd     fp13,.LC0@toc(2)
+       lfs     fp13,.LC0@toc(2)
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
        fcmpu   cr7,fp0,fp13    /* if (fabs(x) > TWO23)  */
@@ -35,13 +35,14 @@ ENTRY (__rintf)
        bng-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-       blr
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = 0.0; */
 .L4:
        bnllr-  cr6             /* if (x < 0.0)  */
-       fsubs   fp1,fp13,fp1    /* x = TWO23 - x;  */
-       fsubs   fp0,fp1,fp13    /* x = - (x - TWO23);  */
-       fneg    fp1,fp0
-       blr
+       fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
+       fadds   fp1,fp1,fp13    /* x+= TWO23;  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+       blr                     /* x = -0.0; */
        END (__rintf)
 
 weak_alias (__rintf, rintf)
index c0b6d46feaf252a38aa8c18e52ca889f46cad687..b07a7ea15ac268d97a6bc757f8a7f295e70af999 100644 (file)
@@ -24,8 +24,6 @@
        .tc FD_43300000_0[TC],0x4330000000000000
 .LC1:  /* 0.5 */
        .tc FD_3fe00000_0[TC],0x3fe0000000000000
-.LC2:  /* -0.0 */
-       .tc FD_80000000_0[TC],0x8000000000000000
        .section        ".text"
        
 /* double [fp1] round (double x [fp1])
@@ -38,7 +36,7 @@
    "Round toward Zero" mode and round by adding +-0.5 before rounding
    to the integer value.  */
 
-ENTRY (__round)
+EALIGN (__round, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
        lfd     fp13,.LC0@toc(2)
@@ -53,7 +51,8 @@ ENTRY (__round)
        fadd    fp1,fp1,fp10    /* x+= 0.5;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
@@ -61,10 +60,10 @@ ENTRY (__round)
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp9,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
-       mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       lfd     fp1,.LC2@toc(2) /* x must be -0.0 for the 0.0 case.  */ 
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
+       mtfsf   0x01,fp11       /* restore previous rounding mode.  */  
        blr
        END (__round)
 
index 23ee4c052b75ae067f54fc3562ab0cb1f7a46726..d2e29fdb8fdf34f2bbd7580f94d00e1fcb37314f 100644 (file)
 
        .section        ".toc","aw"
 .LC0:  /* 2**23 */
-       .tc FD_41600000_0[TC],0x4160000000000000
+       .tc FD_4b000000_0[TC],0x4b00000000000000
 .LC1:  /* 0.5 */
-       .tc FD_3fe00000_0[TC],0x3fe0000000000000
-.LC2:  /* -0.0 */
-       .tc FD_80000000_0[TC],0x8000000000000000
+       .tc FD_3f000000_0[TC],0x3f00000000000000
        .section        ".text"
        
 /* float [fp1] roundf  (float x [fp1])
    "Round toward Zero" mode and round by adding +-0.5 before rounding
    to the integer value.  */
 
-ENTRY (__roundf )
+EALIGN (__roundf, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
-       lfd     fp13,.LC0@toc(2)
+       lfs     fp13,.LC0@toc(2)
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
        fcmpu   cr7,fp0,fp13    /* if (fabs(x) > TWO23)  */
        fcmpu   cr6,fp1,fp12    /* if (x > 0.0)  */
        bnllr-  cr7
        mtfsfi  7,1             /* Set rounding mode toward 0.  */
-       lfd     fp10,.LC1@toc(2)
+       lfs     fp10,.LC1@toc(2)
        ble-    cr6,.L4
        fadds   fp1,fp1,fp10    /* x+= 0.5;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
        blr
 .L4:
@@ -61,10 +60,10 @@ ENTRY (__roundf )
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp9,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
-       mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       lfd     fp1,.LC2@toc(2) /* x must be -0.0 for the 0.0 case.  */ 
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
+       mtfsf   0x01,fp11       /* restore previous rounding mode.  */  
        blr
        END (__roundf)
 
index 3ddd2985259fad67e6b915768f4a82cbb5528c97..d69e371b61f34b7e1fdcba1012be8154051df3a7 100644 (file)
@@ -22,8 +22,6 @@
        .section        ".toc","aw"
 .LC0:  /* 2**52 */
        .tc FD_43300000_0[TC],0x4330000000000000
-.LC2:  /* -0.0 */
-       .tc FD_80000000_0[TC],0x8000000000000000
        .section        ".text"
        
 /* double [fp1] trunc (double x [fp1])
@@ -33,7 +31,7 @@
    We set "round toward Zero" mode and trunc by adding +-2**52 then
    subtracting +-2**52.  */
 
-ENTRY (__trunc)
+EALIGN (__trunc, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
        lfd     fp13,.LC0@toc(2)
@@ -46,17 +44,18 @@ ENTRY (__trunc)
        ble-    cr6,.L4
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous truncing mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsub    fp1,fp1,fp13    /* x-= TWO52;  */
        fadd    fp1,fp1,fp13    /* x+= TWO52;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       lfd     fp1,.LC2@toc(2) /* x must be -0.0 for the 0.0 case.  */ 
        blr
        END (__trunc)
 
index b38b722a6f4c11175ed5887e531ffdbeb0e88776..15f53da8ca6b30267131a58095ab2b0f091d4039 100644 (file)
@@ -21,9 +21,7 @@
 
        .section        ".toc","aw"
 .LC0:  /* 2**23 */
-       .tc FD_41600000_0[TC],0x4160000000000000
-.LC2:  /* -0.0 */
-       .tc FD_80000000_0[TC],0x8000000000000000
+       .tc FD_4b000000_0[TC],0x4b00000000000000
        .section        ".text"
        
 /* float [fp1] truncf (float x [fp1])
    We set "round toward Zero" mode and trunc by adding +-2**23 then
    subtracting +-2**23.  */
 
-ENTRY (__truncf)
+EALIGN (__truncf, 4, 0)
        CALL_MCOUNT 0
        mffs    fp11            /* Save current FPU rounding mode.  */
-       lfd     fp13,.LC0@toc(2)
+       lfs     fp13,.LC0@toc(2)
        fabs    fp0,fp1
        fsubs   fp12,fp13,fp13  /* generate 0.0  */
        fcmpu   cr7,fp0,fp13    /* if (fabs(x) > TWO23)  */
@@ -46,17 +44,18 @@ ENTRY (__truncf)
        ble-    cr6,.L4
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
-.L9:   
+       fabs    fp1,fp1         /* if (x == 0.0)  */
+                               /* x = 0.0; */
        mtfsf   0x01,fp11       /* restore previous truncing mode.  */
        blr
 .L4:
        bge-    cr6,.L9         /* if (x < 0.0)  */
        fsubs   fp1,fp1,fp13    /* x-= TWO23;  */
        fadds   fp1,fp1,fp13    /* x+= TWO23;  */
-       fcmpu   cr5,fp1,fp12    /* if (x > 0.0)  */
+       fnabs   fp1,fp1         /* if (x == 0.0)  */
+                               /* x = -0.0; */
+.L9:
        mtfsf   0x01,fp11       /* restore previous rounding mode.  */
-       bnelr+  cr5
-       lfd     fp1,.LC2@toc(2) /* x must be -0.0 for the 0.0 case.  */ 
        blr
        END (__truncf)