Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/arch/powerpc/gen Don't use "f" with non-fp types. ...



details:   https://anonhg.NetBSD.org/src/rev/c3db7a8e6c2e
branches:  trunk
changeset: 767185:c3db7a8e6c2e
user:      matt <matt%NetBSD.org@localhost>
date:      Sun Jul 10 21:18:47 2011 +0000

description:
Don't use "f" with non-fp types.  Use a union to go between
double and uint64_t.  Makes clang happy.

diffstat:

 lib/libc/arch/powerpc/gen/flt_rounds.c  |  13 ++++++++-----
 lib/libc/arch/powerpc/gen/fpgetmask.c   |  13 ++++++++-----
 lib/libc/arch/powerpc/gen/fpgetround.c  |  13 ++++++++-----
 lib/libc/arch/powerpc/gen/fpgetsticky.c |  13 ++++++++-----
 lib/libc/arch/powerpc/gen/fpsetmask.c   |  19 +++++++++++--------
 lib/libc/arch/powerpc/gen/fpsetround.c  |  19 +++++++++++--------
 lib/libc/arch/powerpc/gen/fpsetsticky.c |  29 ++++++++++++++++-------------
 7 files changed, 70 insertions(+), 49 deletions(-)

diffs (280 lines):

diff -r f9167ed498bd -r c3db7a8e6c2e lib/libc/arch/powerpc/gen/flt_rounds.c
--- a/lib/libc/arch/powerpc/gen/flt_rounds.c    Sun Jul 10 21:02:37 2011 +0000
+++ b/lib/libc/arch/powerpc/gen/flt_rounds.c    Sun Jul 10 21:18:47 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: flt_rounds.c,v 1.10 2005/12/24 23:10:08 perry Exp $    */
+/*     $NetBSD: flt_rounds.c,v 1.11 2011/07/10 21:18:47 matt Exp $     */
 
 /*
  * Copyright (c) 1996 Mark Brinicombe
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: flt_rounds.c,v 1.10 2005/12/24 23:10:08 perry Exp $");
+__RCSID("$NetBSD: flt_rounds.c,v 1.11 2011/07/10 21:18:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include <ieeefp.h>
@@ -54,9 +54,12 @@
 #ifdef _SOFT_FLOAT
        return map[fpgetround()];
 #else
-       uint64_t fpscr;
+       union {
+               double u_d;
+               uint64_t u_fpscr;
+       } ud;
 
-       __asm volatile("mffs %0" : "=f"(fpscr));
-       return map[((uint32_t)fpscr & FPSCR_RN)];
+       __asm volatile("mffs %0" : "=f"(ud.u_d));
+       return map[((uint32_t)ud.u_fpscr & FPSCR_RN)];
 #endif
 }
diff -r f9167ed498bd -r c3db7a8e6c2e lib/libc/arch/powerpc/gen/fpgetmask.c
--- a/lib/libc/arch/powerpc/gen/fpgetmask.c     Sun Jul 10 21:02:37 2011 +0000
+++ b/lib/libc/arch/powerpc/gen/fpgetmask.c     Sun Jul 10 21:18:47 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fpgetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $     */
+/*     $NetBSD: fpgetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $      */
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpgetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $");
+__RCSID("$NetBSD: fpgetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -50,8 +50,11 @@
 fp_except
 fpgetmask(void)
 {
-       uint64_t fpscr;
+       union {
+               double  u_d;
+               uint64_t u_fpscr;
+       } ud;
 
-       __asm volatile("mffs %0" : "=f"(fpscr));
-       return (((uint32_t)fpscr & MASKBITS) >> MASKSHFT);
+       __asm volatile("mffs %0" : "=f"(ud.u_d));
+       return (((uint32_t)ud.u_fpscr & MASKBITS) >> MASKSHFT);
 }
diff -r f9167ed498bd -r c3db7a8e6c2e lib/libc/arch/powerpc/gen/fpgetround.c
--- a/lib/libc/arch/powerpc/gen/fpgetround.c    Sun Jul 10 21:02:37 2011 +0000
+++ b/lib/libc/arch/powerpc/gen/fpgetround.c    Sun Jul 10 21:18:47 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fpgetround.c,v 1.9 2008/04/28 20:22:56 martin Exp $    */
+/*     $NetBSD: fpgetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $     */
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpgetround.c,v 1.9 2008/04/28 20:22:56 martin Exp $");
+__RCSID("$NetBSD: fpgetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -50,8 +50,11 @@
 fp_rnd
 fpgetround(void)
 {
-       uint64_t fpscr;
+       union {
+               double u_d;
+               uint64_t u_fpscr;
+       } ud;
 
-       __asm volatile("mffs %0" : "=f"(fpscr));
-       return (((uint32_t)fpscr & ROUNDBITS) >> ROUNDSHFT);
+       __asm volatile("mffs %0" : "=f"(ud.u_d));
+       return (((uint32_t)ud.u_fpscr & ROUNDBITS) >> ROUNDSHFT);
 }
diff -r f9167ed498bd -r c3db7a8e6c2e lib/libc/arch/powerpc/gen/fpgetsticky.c
--- a/lib/libc/arch/powerpc/gen/fpgetsticky.c   Sun Jul 10 21:02:37 2011 +0000
+++ b/lib/libc/arch/powerpc/gen/fpgetsticky.c   Sun Jul 10 21:18:47 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fpgetsticky.c,v 1.9 2008/04/28 20:22:56 martin Exp $   */
+/*     $NetBSD: fpgetsticky.c,v 1.10 2011/07/10 21:18:47 matt Exp $    */
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpgetsticky.c,v 1.9 2008/04/28 20:22:56 martin Exp $");
+__RCSID("$NetBSD: fpgetsticky.c,v 1.10 2011/07/10 21:18:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -50,8 +50,11 @@
 fp_except
 fpgetsticky(void)
 {
-       uint64_t fpscr;
+       union {
+               double u_d;
+               uint64_t u_fpscr;
+       } ud;
 
-       __asm volatile("mffs %0" : "=f"(fpscr));
-       return (((uint32_t)fpscr & STICKYBITS) >> STICKYSHFT);
+       __asm volatile("mffs %0" : "=f"(ud.u_d));
+       return (((uint32_t)ud.u_fpscr & STICKYBITS) >> STICKYSHFT);
 }
diff -r f9167ed498bd -r c3db7a8e6c2e lib/libc/arch/powerpc/gen/fpsetmask.c
--- a/lib/libc/arch/powerpc/gen/fpsetmask.c     Sun Jul 10 21:02:37 2011 +0000
+++ b/lib/libc/arch/powerpc/gen/fpsetmask.c     Sun Jul 10 21:18:47 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fpsetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $     */
+/*     $NetBSD: fpsetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $      */
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpsetmask.c,v 1.9 2008/04/28 20:22:56 martin Exp $");
+__RCSID("$NetBSD: fpsetmask.c,v 1.10 2011/07/10 21:18:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -50,13 +50,16 @@
 fp_except
 fpsetmask(fp_except mask)
 {
-       uint64_t fpscr;
+       union {
+               double u_d;
+               uint64_t u_fpscr;
+       } ud;
        fp_except old;
 
-       __asm volatile("mffs %0" : "=f"(fpscr));
-       old = ((uint32_t)fpscr & MASKBITS) >> MASKSHFT;
-       fpscr &= ~MASKBITS;
-       fpscr |= ((uint32_t)mask << MASKSHFT) & MASKBITS;
-       __asm volatile("mtfsf 0xff,%0" :: "f"(fpscr));
+       __asm volatile("mffs %0" : "=f"(ud.u_d));
+       old = ((uint32_t)ud.u_fpscr & MASKBITS) >> MASKSHFT;
+       ud.u_fpscr &= ~MASKBITS;
+       ud.u_fpscr |= ((uint32_t)mask << MASKSHFT) & MASKBITS;
+       __asm volatile("mtfsf 0xff,%0" :: "f"(ud.u_d));
        return (old);
 }
diff -r f9167ed498bd -r c3db7a8e6c2e lib/libc/arch/powerpc/gen/fpsetround.c
--- a/lib/libc/arch/powerpc/gen/fpsetround.c    Sun Jul 10 21:02:37 2011 +0000
+++ b/lib/libc/arch/powerpc/gen/fpsetround.c    Sun Jul 10 21:18:47 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fpsetround.c,v 1.9 2008/04/28 20:22:57 martin Exp $    */
+/*     $NetBSD: fpsetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $     */
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpsetround.c,v 1.9 2008/04/28 20:22:57 martin Exp $");
+__RCSID("$NetBSD: fpsetround.c,v 1.10 2011/07/10 21:18:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -49,13 +49,16 @@
 fp_rnd
 fpsetround(fp_rnd rnd_dir)
 {
-       uint64_t fpscr;
+       union {
+               double u_d;
+               uint64_t u_fpscr;
+       } ud;
        fp_rnd old;
 
-       __asm volatile("mffs %0" : "=f"(fpscr));
-       old = (uint32_t)fpscr & ROUNDBITS;
-       fpscr &= ~ROUNDBITS;
-       fpscr |= rnd_dir & ROUNDBITS;
-       __asm volatile("mtfsf 0xff,%0" :: "f"(fpscr));
+       __asm volatile("mffs %0" : "=f"(ud.u_d));
+       old = (uint32_t)ud.u_fpscr & ROUNDBITS;
+       ud.u_fpscr &= ~ROUNDBITS;
+       ud.u_fpscr |= rnd_dir & ROUNDBITS;
+       __asm volatile("mtfsf 0xff,%0" :: "f"(ud.u_d));
        return (old);
 }
diff -r f9167ed498bd -r c3db7a8e6c2e lib/libc/arch/powerpc/gen/fpsetsticky.c
--- a/lib/libc/arch/powerpc/gen/fpsetsticky.c   Sun Jul 10 21:02:37 2011 +0000
+++ b/lib/libc/arch/powerpc/gen/fpsetsticky.c   Sun Jul 10 21:18:47 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fpsetsticky.c,v 1.10 2008/04/28 20:22:57 martin Exp $  */
+/*     $NetBSD: fpsetsticky.c,v 1.11 2011/07/10 21:18:47 matt Exp $    */
 
 /*
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpsetsticky.c,v 1.10 2008/04/28 20:22:57 martin Exp $");
+__RCSID("$NetBSD: fpsetsticky.c,v 1.11 2011/07/10 21:18:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -53,32 +53,35 @@
 fp_except
 fpsetsticky(fp_except mask)
 {
-       uint64_t fpscr;
+       union {
+               double u_d;
+               uint64_t u_fpscr;
+       } ud;
        fp_except old;
 
-       __asm volatile("mffs %0" : "=f"(fpscr));
-       old = ((uint32_t)fpscr & STICKYBITS) >> STICKYSHFT;
+       __asm volatile("mffs %0" : "=f"(ud.u_d));
+       old = ((uint32_t)ud.u_fpscr & STICKYBITS) >> STICKYSHFT;
        /*
         * FPSCR_VX (aka FP_X_INV) is not a sticky bit but a summary of the
         * all the FPSCR_VX* sticky bits.  So when FP_X_INV is cleared then
         * clear all of those bits, likewise when it's set, set them all.
         */
        if ((mask & FP_X_INV) == 0)
-               fpscr &= ~INVBITS;
+               ud.u_fpscr &= ~INVBITS;
        else 
-               fpscr |= INVBITS;
-       fpscr &= ~STICKYBITS;
-       fpscr |= ((uint32_t)mask << STICKYSHFT) & STICKYBITS;
+               ud.u_fpscr |= INVBITS;
+       ud.u_fpscr &= ~STICKYBITS;
+       ud.u_fpscr |= ((uint32_t)mask << STICKYSHFT) & STICKYBITS;
        /*
         * Make FPSCR_FX reflect the presence of a set sticky bit (or not).
         */
-       if (fpscr & (STICKYBITS|INVBITS))
-               fpscr |= FPSCR_FX;
+       if (ud.u_fpscr & (STICKYBITS|INVBITS))
+               ud.u_fpscr |= FPSCR_FX;
        else
-               fpscr &= ~FPSCR_FX;
+               ud.u_fpscr &= ~FPSCR_FX;
        /*
         * Write back the fpscr.
         */
-       __asm volatile("mtfsf 0xff,%0" :: "f"(fpscr));
+       __asm volatile("mtfsf 0xff,%0" :: "f"(ud.u_d));
        return (old);
 }



Home | Main Index | Thread Index | Old Index