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);
 }

Reply via email to