PowerPC floating point little-endian [13 of 15]
authorAlan Modra <amodra@gmail.com>
Sat, 17 Aug 2013 09:02:18 +0000 (18:32 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 4 Oct 2013 01:05:54 +0000 (10:35 +0930)
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.

ChangeLog
sysdeps/powerpc/powerpc32/fpu/s_roundf.S
sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S

index 10c2e80..45b4f76 100644 (file)
--- 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.
index 2ed9ca7..8cff156 100644 (file)
@@ -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
index 631180f..7246ca4 100644 (file)
 #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