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