diff options
author | Alan Modra <amodra@gmail.com> | 2013-08-17 18:32:18 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-10-04 10:35:54 +0930 |
commit | 6a31fe7f9cce72b69fce8fe499a2c6ad492c2311 (patch) | |
tree | 6aa4d32d9295f326632da0fddb773360fe3ee5b1 | |
parent | 7b88401f3b25325b1381798a0eccb3efe7751fec (diff) | |
download | glibc-6a31fe7f9cce72b69fce8fe499a2c6ad492c2311.tar.gz glibc-6a31fe7f9cce72b69fce8fe499a2c6ad492c2311.tar.xz glibc-6a31fe7f9cce72b69fce8fe499a2c6ad492c2311.zip |
PowerPC floating point little-endian [13 of 15]
http://sourceware.org/ml/libc-alpha/2013-08/msg00088.html * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Increase alignment of constants to usual value for .cst8 section, and remove redundant high address load. * sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S: Use float constant for 0x1p52. Load little-endian words of double from correct stack offsets.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/s_roundf.S | 3 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S | 20 |
3 files changed, 19 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog index 10c2e80b9b..45b4f7664b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2013-10-04 Alan Modra <amodra@gmail.com> + * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Increase alignment of + constants to usual value for .cst8 section, and remove redundant + high address load. + * sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S: Use float + constant for 0x1p52. Load little-endian words of double from + correct stack offsets. + +2013-10-04 Alan Modra <amodra@gmail.com> + * sysdeps/powerpc/sysdep.h (LOWORD, HIWORD, HISHORT): Define. * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Load little-endian words of double from correct stack offsets. diff --git a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S b/sysdeps/powerpc/powerpc32/fpu/s_roundf.S index 2ed9ca7b40..8cff1563a0 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_roundf.S @@ -19,7 +19,7 @@ #include <sysdep.h> .section .rodata.cst8,"aM",@progbits,8 - .align 2 + .align 3 .LC0: /* 2**23 */ .long 0x4b000000 .LC1: /* 0.5 */ @@ -60,7 +60,6 @@ ENTRY (__roundf ) #ifdef SHARED lfs fp10,.LC1-.LC0(r9) #else - lis r9,.LC1@ha lfs fp10,.LC1@l(r9) #endif ble- cr6,.L4 diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S b/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S index 631180f072..7246ca4d14 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S +++ b/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S @@ -19,12 +19,10 @@ #include <sysdep.h> #include <math_ldbl_opt.h> - .section .rodata.cst12,"aM",@progbits,12 + .section .rodata.cst8,"aM",@progbits,8 .align 3 - .LC0: /* 0x1.0000000000000p+52 == 2^52 */ - .long 0x43300000 - .long 0x00000000 - .long 0x3f000000 /* Use this for 0.5 */ + .LC0: .long (52+127)<<23 /* 0x1p+52 */ + .long (-1+127)<<23 /* 0.5 */ .section ".text" @@ -57,12 +55,12 @@ ENTRY (__llround) addi r9,r9,.LC0-got_label@l mtlr r11 cfi_same_value (lr) - lfd fp9,0(r9) - lfs fp10,8(r9) + lfs fp9,0(r9) + lfs fp10,4(r9) #else lis r9,.LC0@ha - lfd fp9,.LC0@l(r9) /* Load 2^52 into fpr9. */ - lfs fp10,.LC0@l+8(r9) /* Load 0.5 into fpr10. */ + lfs fp9,.LC0@l(r9) /* Load 2^52 into fpr9. */ + lfs fp10,.LC0@l+4(r9) /* Load 0.5 into fpr10. */ #endif fabs fp2,fp1 /* Get the absolute value of x. */ fsub fp12,fp10,fp10 /* Compute 0.0 into fpr12. */ @@ -80,8 +78,8 @@ ENTRY (__llround) nop nop nop - lwz r4,12(r1) /* Load return as integer. */ - lwz r3,8(r1) + lwz r3,8+HIWORD(r1) /* Load return as integer. */ + lwz r4,8+LOWORD(r1) .Lout: addi r1,r1,16 blr |