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