diff options
| author | matt <matt@NetBSD.org> | 2011-07-10 21:18:47 +0000 |
|---|---|---|
| committer | matt <matt@NetBSD.org> | 2011-07-10 21:18:47 +0000 |
| commit | a67d3e78ea928852d2911c3ca010da768337459d (patch) | |
| tree | f462b0945ba379d548422e339e6aafed9a190df5 /lib | |
| parent | bfcd2d8ffca28415782e770b100240775bbac62c (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.c | 13 | ||||
| -rw-r--r-- | lib/libc/arch/powerpc/gen/fpgetmask.c | 13 | ||||
| -rw-r--r-- | lib/libc/arch/powerpc/gen/fpgetround.c | 13 | ||||
| -rw-r--r-- | lib/libc/arch/powerpc/gen/fpgetsticky.c | 13 | ||||
| -rw-r--r-- | lib/libc/arch/powerpc/gen/fpsetmask.c | 19 | ||||
| -rw-r--r-- | lib/libc/arch/powerpc/gen/fpsetround.c | 19 | ||||
| -rw-r--r-- | lib/libc/arch/powerpc/gen/fpsetsticky.c | 29 |
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); } |
