This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[COMMITTED] BZ#1500: hppa: Fix _FPU_GETCW and _FPU_SETCW.


hppa: Fix _FPU_GETCW and _FPU_SETCW.
    
The following patch fixes both _FPU_GETCW and
_FPU_SETCW for hppa. The initial implementation was
flawed and not well tested. We failed to set cw,
and passed in the value of a register to fldd.
This patch fixes both of those errors and allows
the libm tests to pass without failure.
    
Signed-off-by: Guy Martin <gmsoft@tuxicoman.be>
Signed-off-by: Carlos O'Donell <carlos@redhat.com>
---
    
2013-05-15  Guy Martin  <gmsoft@tuxicoman.be>
            Carlos O'Donell  <carlos@redhat.com>
    
        [BZ# 15000]
        * ports/sysdeps/hppa/fpu/fpu_control.h (_FPU_GETCW): Set cw.
        (_FPU_SETCW): Pass address to fldd.

diff --git a/ports/sysdeps/hppa/fpu/fpu_control.h b/ports/sysdeps/hppa/fpu/fpu_control.h
index 5cac334..627cdd5 100644
--- a/ports/sysdeps/hppa/fpu/fpu_control.h
+++ b/ports/sysdeps/hppa/fpu/fpu_control.h
@@ -49,7 +49,7 @@ typedef unsigned int fpu_control_t;
   __asm__ ("fstd %%fr0,0(%1)\n\t"                                              \
            "fldd 0(%1),%%fr0\n\t"                                              \
           : "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0");        \
-  __fullfp.__halfreg[0];                                                       \
+  cw = __fullfp.__halfreg[0];                                                  \
 })
 
 #define _FPU_SETCW(cw) \
@@ -57,7 +57,7 @@ typedef unsigned int fpu_control_t;
   union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp;     \
   __fullfp.__halfreg[0] = cw;                                                  \
   __asm__ ("fldd 0(%1),%%fr0\n\t"                                              \
-          : : "m" (__fullfp.__fpreg), "r" (__fullfp.__fpreg) : "%r0" );        \
+          : : "m" (__fullfp.__fpreg), "r" (&__fullfp.__fpreg) : "%r0" );       \
 })
 
 /* Default control word set at startup.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]