summaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/powerpc32/fpu/s_round.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/powerpc/powerpc32/fpu/s_round.S')
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/s_round.S23
1 files changed, 5 insertions, 18 deletions
diff --git a/sysdeps/powerpc/powerpc32/fpu/s_round.S b/sysdeps/powerpc/powerpc32/fpu/s_round.S
index 13fc74f001..39eab232f6 100644
--- a/sysdeps/powerpc/powerpc32/fpu/s_round.S
+++ b/sysdeps/powerpc/powerpc32/fpu/s_round.S
@@ -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)