Module Name: src
Committed By: matt
Date: Sun Jul 10 21:18:47 UTC 2011
Modified Files:
src/lib/libc/arch/powerpc/gen: flt_rounds.c fpgetmask.c fpgetround.c
fpgetsticky.c fpsetmask.c fpsetround.c fpsetsticky.c
Log Message:
Don't use "f" with non-fp types. Use a union to go between
double and uint64_t. Makes clang happy.
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/lib/libc/arch/powerpc/gen/flt_rounds.c \
src/lib/libc/arch/powerpc/gen/fpsetsticky.c
cvs rdiff -u -r1.9 -r1.10 src/lib/libc/arch/powerpc/gen/fpgetmask.c \
src/lib/libc/arch/powerpc/gen/fpgetround.c \
src/lib/libc/arch/powerpc/gen/fpgetsticky.c \
src/lib/libc/arch/powerpc/gen/fpsetmask.c \
src/lib/libc/arch/powerpc/gen/fpsetround.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/arch/powerpc/gen/flt_rounds.c
diff -u src/lib/libc/arch/powerpc/gen/flt_rounds.c:1.10 src/lib/libc/arch/powerpc/gen/flt_rounds.c:1.11
--- src/lib/libc/arch/powerpc/gen/flt_rounds.c:1.10 Sat Dec 24 23:10:08 2005
+++ src/lib/libc/arch/powerpc/gen/flt_rounds.c Sun Jul 10 21:18:47 2011
@@ -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
}
Index: src/lib/libc/arch/powerpc/gen/fpsetsticky.c
diff -u src/lib/libc/arch/powerpc/gen/fpsetsticky.c:1.10 src/lib/libc/arch/powerpc/gen/fpsetsticky.c:1.11
--- src/lib/libc/arch/powerpc/gen/fpsetsticky.c:1.10 Mon Apr 28 20:22:57 2008
+++ src/lib/libc/arch/powerpc/gen/fpsetsticky.c Sun Jul 10 21:18:47 2011
@@ -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);
}
Index: src/lib/libc/arch/powerpc/gen/fpgetmask.c
diff -u src/lib/libc/arch/powerpc/gen/fpgetmask.c:1.9 src/lib/libc/arch/powerpc/gen/fpgetmask.c:1.10
--- src/lib/libc/arch/powerpc/gen/fpgetmask.c:1.9 Mon Apr 28 20:22:56 2008
+++ src/lib/libc/arch/powerpc/gen/fpgetmask.c Sun Jul 10 21:18:47 2011
@@ -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);
}
Index: src/lib/libc/arch/powerpc/gen/fpgetround.c
diff -u src/lib/libc/arch/powerpc/gen/fpgetround.c:1.9 src/lib/libc/arch/powerpc/gen/fpgetround.c:1.10
--- src/lib/libc/arch/powerpc/gen/fpgetround.c:1.9 Mon Apr 28 20:22:56 2008
+++ src/lib/libc/arch/powerpc/gen/fpgetround.c Sun Jul 10 21:18:47 2011
@@ -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);
}
Index: src/lib/libc/arch/powerpc/gen/fpgetsticky.c
diff -u src/lib/libc/arch/powerpc/gen/fpgetsticky.c:1.9 src/lib/libc/arch/powerpc/gen/fpgetsticky.c:1.10
--- src/lib/libc/arch/powerpc/gen/fpgetsticky.c:1.9 Mon Apr 28 20:22:56 2008
+++ src/lib/libc/arch/powerpc/gen/fpgetsticky.c Sun Jul 10 21:18:47 2011
@@ -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);
}
Index: src/lib/libc/arch/powerpc/gen/fpsetmask.c
diff -u src/lib/libc/arch/powerpc/gen/fpsetmask.c:1.9 src/lib/libc/arch/powerpc/gen/fpsetmask.c:1.10
--- src/lib/libc/arch/powerpc/gen/fpsetmask.c:1.9 Mon Apr 28 20:22:56 2008
+++ src/lib/libc/arch/powerpc/gen/fpsetmask.c Sun Jul 10 21:18:47 2011
@@ -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);
}
Index: src/lib/libc/arch/powerpc/gen/fpsetround.c
diff -u src/lib/libc/arch/powerpc/gen/fpsetround.c:1.9 src/lib/libc/arch/powerpc/gen/fpsetround.c:1.10
--- src/lib/libc/arch/powerpc/gen/fpsetround.c:1.9 Mon Apr 28 20:22:57 2008
+++ src/lib/libc/arch/powerpc/gen/fpsetround.c Sun Jul 10 21:18:47 2011
@@ -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);
}