summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormatt <matt@NetBSD.org>2011-07-10 21:18:47 +0000
committermatt <matt@NetBSD.org>2011-07-10 21:18:47 +0000
commita67d3e78ea928852d2911c3ca010da768337459d (patch)
treef462b0945ba379d548422e339e6aafed9a190df5 /lib
parentbfcd2d8ffca28415782e770b100240775bbac62c (diff)
Don't use "f" with non-fp types. Use a union to go between
double and uint64_t. Makes clang happy.
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/arch/powerpc/gen/flt_rounds.c13
-rw-r--r--lib/libc/arch/powerpc/gen/fpgetmask.c13
-rw-r--r--lib/libc/arch/powerpc/gen/fpgetround.c13
-rw-r--r--lib/libc/arch/powerpc/gen/fpgetsticky.c13
-rw-r--r--lib/libc/arch/powerpc/gen/fpsetmask.c19
-rw-r--r--lib/libc/arch/powerpc/gen/fpsetround.c19
-rw-r--r--lib/libc/arch/powerpc/gen/fpsetsticky.c29
7 files changed, 70 insertions, 49 deletions
diff --git a/lib/libc/arch/powerpc/gen/flt_rounds.c b/lib/libc/arch/powerpc/gen/flt_rounds.c
index d0b14f40d68..4a03e7cecb0 100644
--- a/lib/libc/arch/powerpc/gen/flt_rounds.c
+++ b/lib/libc/arch/powerpc/gen/flt_rounds.c
@@ -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 @@ __flt_rounds(void)
#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 --git a/lib/libc/arch/powerpc/gen/fpgetmask.c b/lib/libc/arch/powerpc/gen/fpgetmask.c
index 278411b49a7..6bc3f91cf1c 100644
--- a/lib/libc/arch/powerpc/gen/fpgetmask.c
+++ b/lib/libc/arch/powerpc/gen/fpgetmask.c
@@ -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 @@ __weak_alias(fpgetmask,_fpgetmask)
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 --git a/lib/libc/arch/powerpc/gen/fpgetround.c b/lib/libc/arch/powerpc/gen/fpgetround.c
index 65c19eb80ed..58cfe030ffa 100644
--- a/lib/libc/arch/powerpc/gen/fpgetround.c
+++ b/lib/libc/arch/powerpc/gen/fpgetround.c
@@ -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 @@ __weak_alias(fpgetround,_fpgetround)
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 --git a/lib/libc/arch/powerpc/gen/fpgetsticky.c b/lib/libc/arch/powerpc/gen/fpgetsticky.c
index 7fba344c989..079acc0c096 100644
--- a/lib/libc/arch/powerpc/gen/fpgetsticky.c
+++ b/lib/libc/arch/powerpc/gen/fpgetsticky.c
@@ -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 @@ __weak_alias(fpgetsticky,_fpgetsticky)
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 --git a/lib/libc/arch/powerpc/gen/fpsetmask.c b/lib/libc/arch/powerpc/gen/fpsetmask.c
index 8e6f07939e5..ef298c5913b 100644
--- a/lib/libc/arch/powerpc/gen/fpsetmask.c
+++ b/lib/libc/arch/powerpc/gen/fpsetmask.c
@@ -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 @@ __weak_alias(fpsetmask,_fpsetmask)
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 --git a/lib/libc/arch/powerpc/gen/fpsetround.c b/lib/libc/arch/powerpc/gen/fpsetround.c
index d451241046f..c2ed35eaa67 100644
--- a/lib/libc/arch/powerpc/gen/fpsetround.c
+++ b/lib/libc/arch/powerpc/gen/fpsetround.c
@@ -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 @@ __weak_alias(fpsetround,_fpsetround)
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 --git a/lib/libc/arch/powerpc/gen/fpsetsticky.c b/lib/libc/arch/powerpc/gen/fpsetsticky.c
index 2ce3f7d4580..71df9c058dc 100644
--- a/lib/libc/arch/powerpc/gen/fpsetsticky.c
+++ b/lib/libc/arch/powerpc/gen/fpsetsticky.c
@@ -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 @@ __weak_alias(fpsetsticky,_fpsetsticky)
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);
}