Pull up following revision(s) (requested by martin in ticket #416): distrib/sets/lists/comp/md.hppa: revision 1.3 include/fenv.h: revision 1.13 via patch lib/libm/Makefile: revision 1.168 lib/libm/arch/hppa/fenv.c: revisions 1.1, 1.2 sys/arch/hppa/include/Makefile: revision 1.12 sys/arch/hppa/include/fenv.h: revisions 1.1, 1.2 sys/arch/hppa/include/ieeefp.h: revisions 1.5-1.7 tests/lib/libm/Makefile: revision 1.29 via patch fenv(3) support for hppa -- use unsigned over uint32_t so that this file works without stdint.h being included before hand. fixes mknative-gcc problems, and likely others. -- Properly separate fenv.h and ieeefp.h by moving all fenv defines over to the former. Now that they are decoupled, make rounding modes match the hardware bits. -- Simplify, now that rounding mode defines match the hardware bits.diff -r1.2 -r1.2.6.1 src/distrib/sets/lists/comp/md.hppa
(snj)
--- src/distrib/sets/lists/comp/md.hppa 2014/03/06 12:17:12 1.2
+++ src/distrib/sets/lists/comp/md.hppa 2015/01/20 20:57:24 1.2.6.1
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | # $NetBSD: md.hppa,v 1.2 2014/03/06 12:17:12 skrll Exp $ | 1 | # $NetBSD: md.hppa,v 1.2.6.1 2015/01/20 20:57:24 snj Exp $ | |
2 | ./usr/include/gcc-4.5/tgmath.h comp-c-include gcccmds,gcc=45 | 2 | ./usr/include/gcc-4.5/tgmath.h comp-c-include gcccmds,gcc=45 | |
3 | ./usr/include/gcc-4.8/tgmath.h comp-c-include gcccmds,gcc=48 | 3 | ./usr/include/gcc-4.8/tgmath.h comp-c-include gcccmds,gcc=48 | |
4 | ./usr/include/hp700 comp-obsolete obsolete | 4 | ./usr/include/hp700 comp-obsolete obsolete | |
5 | ./usr/include/hp700/ansi.h comp-obsolete obsolete | 5 | ./usr/include/hp700/ansi.h comp-obsolete obsolete | |
6 | ./usr/include/hp700/aout_machdep.h comp-obsolete obsolete | 6 | ./usr/include/hp700/aout_machdep.h comp-obsolete obsolete | |
7 | ./usr/include/hp700/asm.h comp-obsolete obsolete | 7 | ./usr/include/hp700/asm.h comp-obsolete obsolete | |
8 | ./usr/include/hp700/autoconf.h comp-obsolete obsolete | 8 | ./usr/include/hp700/autoconf.h comp-obsolete obsolete | |
9 | ./usr/include/hp700/bswap.h comp-obsolete obsolete | 9 | ./usr/include/hp700/bswap.h comp-obsolete obsolete | |
10 | ./usr/include/hp700/bus.h comp-obsolete obsolete | 10 | ./usr/include/hp700/bus.h comp-obsolete obsolete | |
11 | ./usr/include/hp700/byte_swap.h comp-obsolete obsolete | 11 | ./usr/include/hp700/byte_swap.h comp-obsolete obsolete | |
12 | ./usr/include/hp700/cdefs.h comp-obsolete obsolete | 12 | ./usr/include/hp700/cdefs.h comp-obsolete obsolete | |
13 | ./usr/include/hp700/cpu.h comp-obsolete obsolete | 13 | ./usr/include/hp700/cpu.h comp-obsolete obsolete | |
14 | ./usr/include/hp700/cpufunc.h comp-obsolete obsolete | 14 | ./usr/include/hp700/cpufunc.h comp-obsolete obsolete | |
@@ -69,26 +69,27 @@ | @@ -69,26 +69,27 @@ | |||
69 | ./usr/include/hppa/asm.h comp-c-include | 69 | ./usr/include/hppa/asm.h comp-c-include | |
70 | ./usr/include/hppa/autoconf.h comp-c-include | 70 | ./usr/include/hppa/autoconf.h comp-c-include | |
71 | ./usr/include/hppa/bswap.h comp-c-include | 71 | ./usr/include/hppa/bswap.h comp-c-include | |
72 | ./usr/include/hppa/byte_swap.h comp-c-include | 72 | ./usr/include/hppa/byte_swap.h comp-c-include | |
73 | ./usr/include/hppa/cdefs.h comp-c-include | 73 | ./usr/include/hppa/cdefs.h comp-c-include | |
74 | ./usr/include/hppa/cpu.h comp-c-include | 74 | ./usr/include/hppa/cpu.h comp-c-include | |
75 | ./usr/include/hppa/cpufunc.h comp-c-include | 75 | ./usr/include/hppa/cpufunc.h comp-c-include | |
76 | ./usr/include/hppa/disklabel.h comp-c-include | 76 | ./usr/include/hppa/disklabel.h comp-c-include | |
77 | ./usr/include/hppa/eisa_machdep.h comp-c-include | 77 | ./usr/include/hppa/eisa_machdep.h comp-c-include | |
78 | ./usr/include/hppa/elf_machdep.h comp-c-include | 78 | ./usr/include/hppa/elf_machdep.h comp-c-include | |
79 | ./usr/include/hppa/endian.h comp-c-include | 79 | ./usr/include/hppa/endian.h comp-c-include | |
80 | ./usr/include/hppa/endian_machdep.h comp-c-include | 80 | ./usr/include/hppa/endian_machdep.h comp-c-include | |
81 | ./usr/include/hppa/exec.h comp-c-include | 81 | ./usr/include/hppa/exec.h comp-c-include | |
82 | ./usr/include/hppa/fenv.h comp-c-include | |||
82 | ./usr/include/hppa/float.h comp-c-include | 83 | ./usr/include/hppa/float.h comp-c-include | |
83 | ./usr/include/hppa/frame.h comp-c-include | 84 | ./usr/include/hppa/frame.h comp-c-include | |
84 | ./usr/include/hppa/ieee.h comp-c-include | 85 | ./usr/include/hppa/ieee.h comp-c-include | |
85 | ./usr/include/hppa/ieeefp.h comp-c-include | 86 | ./usr/include/hppa/ieeefp.h comp-c-include | |
86 | ./usr/include/hppa/int_const.h comp-c-include | 87 | ./usr/include/hppa/int_const.h comp-c-include | |
87 | ./usr/include/hppa/int_fmtio.h comp-c-include | 88 | ./usr/include/hppa/int_fmtio.h comp-c-include | |
88 | ./usr/include/hppa/int_limits.h comp-c-include | 89 | ./usr/include/hppa/int_limits.h comp-c-include | |
89 | ./usr/include/hppa/int_mwgwtypes.h comp-c-include | 90 | ./usr/include/hppa/int_mwgwtypes.h comp-c-include | |
90 | ./usr/include/hppa/int_types.h comp-c-include | 91 | ./usr/include/hppa/int_types.h comp-c-include | |
91 | ./usr/include/hppa/intr.h comp-c-include | 92 | ./usr/include/hppa/intr.h comp-c-include | |
92 | ./usr/include/hppa/intrdefs.h comp-c-include | 93 | ./usr/include/hppa/intrdefs.h comp-c-include | |
93 | ./usr/include/hppa/iomod.h comp-c-include | 94 | ./usr/include/hppa/iomod.h comp-c-include | |
94 | ./usr/include/hppa/isa_machdep.h comp-c-include | 95 | ./usr/include/hppa/isa_machdep.h comp-c-include |
--- src/include/fenv.h 2014/08/10 05:57:30 1.10
+++ src/include/fenv.h 2015/01/20 20:57:24 1.10.2.1
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | /* $NetBSD: fenv.h,v 1.10 2014/08/10 05:57:30 matt Exp $ */ | 1 | /* $NetBSD: fenv.h,v 1.10.2.1 2015/01/20 20:57:24 snj Exp $ */ | |
2 | /* | 2 | /* | |
3 | * Copyright (c) 2010 The NetBSD Foundation, Inc. | 3 | * Copyright (c) 2010 The NetBSD Foundation, Inc. | |
4 | * All rights reserved. | 4 | * All rights reserved. | |
5 | * | 5 | * | |
6 | * Redistribution and use in source and binary forms, with or without | 6 | * Redistribution and use in source and binary forms, with or without | |
7 | * modification, are permitted provided that the following conditions | 7 | * modification, are permitted provided that the following conditions | |
8 | * are met: | 8 | * are met: | |
9 | * 1. Redistributions of source code must retain the above copyright | 9 | * 1. Redistributions of source code must retain the above copyright | |
10 | * notice, this list of conditions and the following disclaimer. | 10 | * notice, this list of conditions and the following disclaimer. | |
11 | * 2. Redistributions in binary form must reproduce the above copyright | 11 | * 2. Redistributions in binary form must reproduce the above copyright | |
12 | * notice, this list of conditions and the following disclaimer in the | 12 | * notice, this list of conditions and the following disclaimer in the | |
13 | * documentation and/or other materials provided with the distribution. | 13 | * documentation and/or other materials provided with the distribution. | |
14 | * | 14 | * | |
@@ -16,26 +16,27 @@ | @@ -16,26 +16,27 @@ | |||
16 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | 16 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |
17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
18 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | 18 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | |
19 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 19 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 | * POSSIBILITY OF SUCH DAMAGE. | 25 | * POSSIBILITY OF SUCH DAMAGE. | |
26 | */ | 26 | */ | |
27 | 27 | |||
28 | #if !defined(__aarch64__) && !defined(__arm__) && !defined(__i386__) \ | 28 | #if !defined(__aarch64__) && !defined(__arm__) && !defined(__i386__) \ | |
29 | && !defined(__hppa__) \ | |||
29 | && !defined(__sparc__) && !defined(__x86_64__) | 30 | && !defined(__sparc__) && !defined(__x86_64__) | |
30 | #error "fenv.h is currently not supported for this architecture" | 31 | #error "fenv.h is currently not supported for this architecture" | |
31 | #endif | 32 | #endif | |
32 | 33 | |||
33 | #ifndef _FENV_H_ | 34 | #ifndef _FENV_H_ | |
34 | #define _FENV_H_ | 35 | #define _FENV_H_ | |
35 | 36 | |||
36 | #include <sys/featuretest.h> | 37 | #include <sys/featuretest.h> | |
37 | #include <machine/fenv.h> | 38 | #include <machine/fenv.h> | |
38 | 39 | |||
39 | __BEGIN_DECLS | 40 | __BEGIN_DECLS | |
40 | 41 | |||
41 | /* Function prototypes */ | 42 | /* Function prototypes */ |
--- src/lib/libm/Makefile 2014/10/13 19:34:58 1.164.2.1
+++ src/lib/libm/Makefile 2015/01/20 20:57:24 1.164.2.2
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | # $NetBSD: Makefile,v 1.164.2.1 2014/10/13 19:34:58 martin Exp $ | 1 | # $NetBSD: Makefile,v 1.164.2.2 2015/01/20 20:57:24 snj Exp $ | |
2 | # | 2 | # | |
3 | # @(#)Makefile 5.1beta 93/09/24 | 3 | # @(#)Makefile 5.1beta 93/09/24 | |
4 | # | 4 | # | |
5 | # ==================================================== | 5 | # ==================================================== | |
6 | # Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. | 6 | # Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. | |
7 | # | 7 | # | |
8 | # Developed at SunPro, a Sun Microsystems, Inc. business. | 8 | # Developed at SunPro, a Sun Microsystems, Inc. business. | |
9 | # Permission to use, copy, modify, and distribute this | 9 | # Permission to use, copy, modify, and distribute this | |
10 | # software is freely granted, provided that this notice | 10 | # software is freely granted, provided that this notice | |
11 | # is preserved. | 11 | # is preserved. | |
12 | # ==================================================== | 12 | # ==================================================== | |
13 | # | 13 | # | |
14 | # | 14 | # | |
@@ -65,26 +65,31 @@ COMMON_SRCS+= s_fma.c s_fmaf.c s_fmal.c | @@ -65,26 +65,31 @@ COMMON_SRCS+= s_fma.c s_fmaf.c s_fmal.c | |||
65 | .PATH: ${.CURDIR}/arch/alpha | 65 | .PATH: ${.CURDIR}/arch/alpha | |
66 | ARCH_SRCS = s_copysign.S s_copysignf.S lrint.S | 66 | ARCH_SRCS = s_copysign.S s_copysignf.S lrint.S | |
67 | COPTS+= -mfloat-ieee -mieee-with-inexact -mfp-trap-mode=sui -mtrap-precision=i | 67 | COPTS+= -mfloat-ieee -mieee-with-inexact -mfp-trap-mode=sui -mtrap-precision=i | |
68 | .elif (${LIBC_MACHINE_CPU} == "arm") | 68 | .elif (${LIBC_MACHINE_CPU} == "arm") | |
69 | .PATH.c: ${.CURDIR}/arch/arm | 69 | .PATH.c: ${.CURDIR}/arch/arm | |
70 | COMMON_SRCS+= fenv.c s_nexttowardf.c \ | 70 | COMMON_SRCS+= fenv.c s_nexttowardf.c \ | |
71 | s_nearbyint.c s_rintl.c | 71 | s_nearbyint.c s_rintl.c | |
72 | COPTS.e_sqrtl.c += -DHAVE_FENV_H | 72 | COPTS.e_sqrtl.c += -DHAVE_FENV_H | |
73 | COPTS.fenv.c+= -mfpu=vfp | 73 | COPTS.fenv.c+= -mfpu=vfp | |
74 | .if (${MKSOFTFLOAT} == "no") | 74 | .if (${MKSOFTFLOAT} == "no") | |
75 | .PATH.S: ${.CURDIR}/arch/arm | 75 | .PATH.S: ${.CURDIR}/arch/arm | |
76 | ARCH_SRCS = e_sqrt.S e_sqrtf.S lrint.S lrintf.S s_fabsf.S s_fma.S s_fmaf.S | 76 | ARCH_SRCS = e_sqrt.S e_sqrtf.S lrint.S lrintf.S s_fabsf.S s_fma.S s_fmaf.S | |
77 | .endif | 77 | .endif | |
78 | .elif (${LIBC_MACHINE_ARCH} == "hppa") | |||
79 | .PATH.c: ${.CURDIR}/arch/hppa | |||
80 | COMMON_SRCS+= fenv.c s_nexttowardf.c \ | |||
81 | s_nearbyint.c s_rintl.c | |||
82 | COPTS.e_sqrtl.c += -DHAVE_FENV_H | |||
78 | .elif (${LIBC_MACHINE_ARCH} == "sparc") | 83 | .elif (${LIBC_MACHINE_ARCH} == "sparc") | |
79 | .PATH: ${.CURDIR}/arch/sparc | 84 | .PATH: ${.CURDIR}/arch/sparc | |
80 | COMMON_SRCS+= fenv.c | 85 | COMMON_SRCS+= fenv.c | |
81 | COPTS.e_sqrtl.c += -DHAVE_FENV_H | 86 | COPTS.e_sqrtl.c += -DHAVE_FENV_H | |
82 | COMMON_SRCS+= s_fma.c s_fmaf.c s_fmal.c | 87 | COMMON_SRCS+= s_fma.c s_fmaf.c s_fmal.c | |
83 | .elif (${LIBC_MACHINE_ARCH} == "sparc64") | 88 | .elif (${LIBC_MACHINE_ARCH} == "sparc64") | |
84 | .PATH: ${.CURDIR}/arch/sparc64 | 89 | .PATH: ${.CURDIR}/arch/sparc64 | |
85 | COMMON_SRCS+= fenv.c s_nexttowardf.c \ | 90 | COMMON_SRCS+= fenv.c s_nexttowardf.c \ | |
86 | s_nearbyint.c s_rintl.c | 91 | s_nearbyint.c s_rintl.c | |
87 | COPTS.e_sqrtl.c += -DHAVE_FENV_H | 92 | COPTS.e_sqrtl.c += -DHAVE_FENV_H | |
88 | .ifndef _COMPAT_M32_MK_ | 93 | .ifndef _COMPAT_M32_MK_ | |
89 | COMMON_SRCS+= s_nexttoward.c | 94 | COMMON_SRCS+= s_nexttoward.c | |
90 | .endif | 95 | .endif |
/* $NetBSD: fenv.c,v 1.2.2.2 2015/01/20 20:57:24 snj Exp $ */
/*-
* Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
*/
#include <sys/cdefs.h>
__RCSID("$NetBSD: fenv.c,v 1.2.2.2 2015/01/20 20:57:24 snj Exp $");
#include <assert.h>
#include <fenv.h>
/*
* Convert from exception flags (__BITS(27,32)) to exception enable bits
* (__BITS(5,0)) by right-shifting this much:
*/
#define FE_FLAGS_SHIFT 27
/*
* Mask all rounding mode bits
*/
#define FE_ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \
FE_UPWARD | FE_TOWARDZERO)
/* Load lower 32 bits from floating-point state register */
static inline uint32_t
readfpsr(void)
{
uint32_t rv;
__asm__ __volatile__ ("fstws %%fr0, %0" : "=m"(rv));
return rv;
}
/* Save floating-point state register */
static inline void
writefpsr(uint32_t val)
{
__asm__ __volatile__("fldws %0,%%fr0" : : "m"(val));
}
/*
* The feclearexcept() function clears the supported floating-point exceptions
* represented by `excepts'.
*/
int
feclearexcept(int excepts)
{
fexcept_t r;
int ex;
_DIAGASSERT((excepts & ~FE_ALL_EXCEPT) == 0);
ex = (excepts & FE_ALL_EXCEPT) << FE_FLAGS_SHIFT;
r = readfpsr();
r &= ~ex;
writefpsr(r);
/* Success */
return 0;
}
/*
* The fegetexceptflag() function stores an implementation-defined
* representation of the states of the floating-point status flags indicated
* by the argument excepts in the object pointed to by the argument flagp.
*/
int
fegetexceptflag(fexcept_t *flagp, int excepts)
{
fexcept_t r;
int ex;
_DIAGASSERT(flagp != NULL);
_DIAGASSERT((excepts & ~_FE_ALL_EXCEPT) == 0);
ex = (excepts & FE_ALL_EXCEPT) << FE_FLAGS_SHIFT;
r = readfpsr();
*flagp = (r & ex) >> FE_FLAGS_SHIFT;
/* Success */
return 0;
}
/*
* This function sets the floating-point status flags indicated by the argument
* `excepts' to the states stored in the object pointed to by `flagp'. It does
* NOT raise any floating-point exceptions, but only sets the state of the flags.
*/
int
fesetexceptflag(const fexcept_t *flagp, int excepts)
{
fexcept_t r;
int ex;
_DIAGASSERT(flagp != NULL);
_DIAGASSERT((excepts & ~FE_ALL_EXCEPT) == 0);
ex = (excepts & FE_ALL_EXCEPT) << FE_FLAGS_SHIFT;
r = readfpsr();
r &= ~ex;
r |= (*flagp << FE_FLAGS_SHIFT) & ex;
writefpsr(r);
/* Success */
return 0;
}
/*
* The feraiseexcept() function raises the supported floating-point exceptions
* represented by the argument `excepts'.
*
* The order in which these floating-point exceptions are raised is unspecified
* (by the standard).
*/
int
feraiseexcept(int excepts)
{
volatile double d;
int ex;
_DIAGASSERT((excepts & ~FE_ALL_EXCEPT) == 0);
ex = excepts & FE_ALL_EXCEPT;
/*
* With a compiler that supports the FENV_ACCESS pragma properly, simple
* expressions like '0.0 / 0.0' should be sufficient to generate traps.
* Unfortunately, we need to bring a volatile variable into the equation
* to prevent incorrect optimizations.
*/
if (ex & FE_INVALID) {
d = 0.0;
d = 0.0 / d;
}
if (ex & FE_DIVBYZERO) {
d = 0.0;
d = 1.0 / d;
}
if (ex & FE_OVERFLOW) {
d = 0x1.ffp1023;
d *= 2.0;
}
if (ex & FE_UNDERFLOW) {
d = 0x1p-1022;
d /= 0x1p1023;
}
if (ex & FE_INEXACT) {
d = 0x1p-1022;
d += 1.0;
}
/* Success */
return 0;
}
/*
* The fetestexcept() function determines which of a specified subset of the
* floating-point exception flags are currently set. The `excepts' argument
* specifies the floating-point status flags to be queried.
*/
int
fetestexcept(int excepts)
{
fexcept_t r;
_DIAGASSERT((excepts & ~FE_ALL_EXCEPT) == 0);
r = readfpsr();
return (r >> FE_FLAGS_SHIFT) & (excepts & FE_ALL_EXCEPT);
}
/*
* The fegetround() function gets the current rounding direction.
*/
int
fegetround(void)
{
fenv_t r;
r = readfpsr();
return r & FE_ROUND_MASK;
}
/*
* The fesetround() function establishes the rounding direction represented by
* its argument `round'. If the argument is not equal to the value of a rounding
* direction macro, the rounding direction is not changed.
*/
int
fesetround(int round)
{
fenv_t r;
_DIAGASSERT((round & ~FE_ROUND_MASK) == 0);
if (round & ~FE_ROUND_MASK)
return -1;
r = readfpsr();
r &= ~FE_ROUND_MASK;
r |= round;
writefpsr(r);
/* Success */
return 0;
}
/*
* The fegetenv() function attempts to store the current floating-point
* environment in the object pointed to by envp.
*/
int
fegetenv(fenv_t *envp)
{
_DIAGASSERT(envp != NULL);
*envp = readfpsr();
/* Success */
return 0;
}
/*
* The feholdexcept() function saves the current floating-point environment
* in the object pointed to by envp, clears the floating-point status flags, and
* then installs a non-stop (continue on floating-point exceptions) mode, if
* available, for all floating-point exceptions.
*/
int
feholdexcept(fenv_t *envp)
{
fenv_t r;
_DIAGASSERT(envp != NULL);
r = readfpsr();
*envp = r;
r &= ~FE_ALL_EXCEPT;
writefpsr(r);
/* Success */
return 0;
}
/*
* The fesetenv() function attempts to establish the floating-point environment
* represented by the object pointed to by envp. The argument `envp' points
* to an object set by a call to fegetenv() or feholdexcept(), or equal a
* floating-point environment macro. The fesetenv() function does not raise
* floating-point exceptions, but only installs the state of the floating-point
* status flags represented through its argument.
*/
int
fesetenv(const fenv_t *envp)
{
_DIAGASSERT(envp != NULL);
writefpsr(*envp);
/* Success */
return 0;
}
/*
* The feupdateenv() function saves the currently raised floating-point
* exceptions in its automatic storage, installs the floating-point environment
* represented by the object pointed to by `envp', and then raises the saved
* floating-point exceptions. The argument `envp' shall point to an object set
* by a call to feholdexcept() or fegetenv(), or equal a floating-point
* environment macro.
*/
int
feupdateenv(const fenv_t *envp)
{
fexcept_t r;
_DIAGASSERT(envp != NULL);
r = readfpsr();
writefpsr(*envp);
_DIAGASSERT((r & ~FE_ALL_EXCEPT) == 0);
feraiseexcept(r & FE_ALL_EXCEPT);
/* Success */
return 0;
}
/*
* The following functions are extentions to the standard
*/
int
feenableexcept(int mask)
{
fenv_t old_r, new_r;
old_r = readfpsr();
new_r = old_r | (mask & FE_ALL_EXCEPT);
writefpsr(new_r);
return old_r & FE_ALL_EXCEPT;
}
int
fedisableexcept(int mask)
{
fenv_t old_r, new_r;
old_r = readfpsr();
new_r = old_r & ~(mask & FE_ALL_EXCEPT);
writefpsr(new_r);
return old_r & FE_ALL_EXCEPT;
}
int
fegetexcept(void)
{
fenv_t r;
r = readfpsr();
return r & FE_ALL_EXCEPT;
}
--- src/sys/arch/hppa/include/Makefile 2014/02/24 07:23:43 1.11
+++ src/sys/arch/hppa/include/Makefile 2015/01/20 20:57:24 1.11.4.1
@@ -1,23 +1,23 @@ | @@ -1,23 +1,23 @@ | |||
1 | # $NetBSD: Makefile,v 1.11 2014/02/24 07:23:43 skrll Exp $ | 1 | # $NetBSD: Makefile,v 1.11.4.1 2015/01/20 20:57:24 snj Exp $ | |
2 | 2 | |||
3 | INCSDIR= /usr/include/hppa | 3 | INCSDIR= /usr/include/hppa | |
4 | 4 | |||
5 | INCS= ansi.h aout_machdep.h asm.h autoconf.h \ | 5 | INCS= ansi.h aout_machdep.h asm.h autoconf.h \ | |
6 | bswap.h byte_swap.h \ | 6 | bswap.h byte_swap.h \ | |
7 | cdefs.h cpu.h cpufunc.h \ | 7 | cdefs.h cpu.h cpufunc.h \ | |
8 | disklabel.h \ | 8 | disklabel.h \ | |
9 | eisa_machdep.h elf_machdep.h endian.h endian_machdep.h exec.h \ | 9 | eisa_machdep.h elf_machdep.h endian.h endian_machdep.h exec.h \ | |
10 | float.h frame.h \ | 10 | fenv.h float.h frame.h \ | |
11 | ieee.h ieeefp.h intr.h intrdefs.h iomod.h isa_machdep.h \ | 11 | ieee.h ieeefp.h intr.h intrdefs.h iomod.h isa_machdep.h \ | |
12 | int_const.h int_fmtio.h int_limits.h int_mwgwtypes.h int_types.h \ | 12 | int_const.h int_fmtio.h int_limits.h int_mwgwtypes.h int_types.h \ | |
13 | kcore.h \ | 13 | kcore.h \ | |
14 | limits.h loadfile_machdep.h lock.h \ | 14 | limits.h loadfile_machdep.h lock.h \ | |
15 | math.h mcontext.h mutex.h \ | 15 | math.h mcontext.h mutex.h \ | |
16 | nvm.h \ | 16 | nvm.h \ | |
17 | param.h pcb.h pdc.h pmap.h pmc.h proc.h profile.h psl.h pte.h ptrace.h \ | 17 | param.h pcb.h pdc.h pmap.h pmc.h proc.h profile.h psl.h pte.h ptrace.h \ | |
18 | reg.h reloc.h rwlock.h \ | 18 | reg.h reloc.h rwlock.h \ | |
19 | setjmp.h signal.h som.h \ | 19 | setjmp.h signal.h som.h \ | |
20 | trap.h types.h \ | 20 | trap.h types.h \ | |
21 | vmparam.h \ | 21 | vmparam.h \ | |
22 | wchar_limits.h | 22 | wchar_limits.h | |
23 | 23 |
/* $NetBSD: fenv.h,v 1.2.2.2 2015/01/20 20:57:24 snj Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#ifndef _HPPA_FENV_H_
#define _HPPA_FENV_H_
#include <sys/stdint.h>
typedef unsigned fenv_t;
typedef unsigned fexcept_t;
#define FE_INEXACT 0x01 /* imprecise (loss of precision) */
#define FE_UNDERFLOW 0x02 /* underflow exception */
#define FE_OVERFLOW 0x04 /* overflow exception */
#define FE_DIVBYZERO 0x08 /* divide-by-zero exception */
#define FE_INVALID 0x10 /* invalid operation exception */
#define FE_ALL_EXCEPT 0x1f
#define FE_TONEAREST (0) /* round to nearest representable number */
#define FE_TOWARDZERO (1<<9) /* round to zero (truncate) */
#define FE_UPWARD (2<<9) /* round toward positive infinity */
#define FE_DOWNWARD (3<<9) /* round toward negative infinity */
__BEGIN_DECLS
/* Default floating-point environment */
extern const fenv_t __fe_dfl_env;
#define FE_DFL_ENV (&__fe_dfl_env)
__END_DECLS
#endif /* !_HPPA_FENV_H_ */
--- src/sys/arch/hppa/include/ieeefp.h 2008/08/05 16:47:42 1.4
+++ src/sys/arch/hppa/include/ieeefp.h 2015/01/20 20:57:24 1.4.56.1
@@ -1,51 +1,35 @@ | @@ -1,51 +1,35 @@ | |||
1 | /* $NetBSD: ieeefp.h,v 1.4 2008/08/05 16:47:42 matt Exp $ */ | 1 | /* $NetBSD: ieeefp.h,v 1.4.56.1 2015/01/20 20:57:24 snj Exp $ */ | |
2 | 2 | |||
3 | /* | 3 | /* | |
4 | * Written by J.T. Conklin, Apr 6, 1995 | 4 | * Written by J.T. Conklin, Apr 6, 1995 | |
5 | * Public domain. | 5 | * Public domain. | |
6 | */ | 6 | */ | |
7 | 7 | |||
8 | #ifndef _HPPA_IEEEFP_H_ | 8 | #ifndef _HPPA_IEEEFP_H_ | |
9 | #define _HPPA_IEEEFP_H_ | 9 | #define _HPPA_IEEEFP_H_ | |
10 | 10 | |||
11 | #include <sys/featuretest.h> | 11 | #include <sys/featuretest.h> | |
12 | 12 | |||
13 | #if defined(_NETBSD_SOURCE) || defined(_ISOC99_SOURCE) | 13 | #if defined(_NETBSD_SOURCE) || defined(_ISOC99_SOURCE) | |
14 | 14 | |||
15 | typedef int fenv_t; | |||
16 | typedef int fexcept_t; | |||
17 | ||||
18 | #define FE_INEXACT 0x01 /* imprecise (loss of precision) */ | |||
19 | #define FE_UNDERFLOW 0x02 /* underflow exception */ | |||
20 | #define FE_OVERFLOW 0x04 /* overflow exception */ | |||
21 | #define FE_DIVBYZERO 0x08 /* divide-by-zero exception */ | |||
22 | #define FE_INVALID 0x10 /* invalid operation exception */ | |||
23 | ||||
24 | #define FE_ALL_EXCEPT 0x1f | |||
25 | ||||
26 | #define FE_TONEAREST 0 /* round to nearest representable number */ | |||
27 | #define FE_TOWARDZERO 1 /* round to zero (truncate) */ | |||
28 | #define FE_UPWARD 2 /* round toward positive infinity */ | |||
29 | #define FE_DOWNWARD 3 /* round toward negative infinity */ | |||
30 | ||||
31 | #if !defined(_ISOC99_SOURCE) | 15 | #if !defined(_ISOC99_SOURCE) | |
32 | 16 | |||
33 | typedef int fp_except; | 17 | typedef int fp_except; | |
34 | #define FP_X_INV FE_INVALID /* invalid operation exception */ | 18 | #define FP_X_INV 0x10 /* invalid operation exception */ | |
35 | #define FP_X_DZ FE_DIVBYZERO /* divide-by-zero exception */ | 19 | #define FP_X_DZ 0x08 /* divide-by-zero exception */ | |
36 | #define FP_X_OFL FE_OVERFLOW /* overflow exception */ | 20 | #define FP_X_OFL 0x04 /* overflow exception */ | |
37 | #define FP_X_UFL FE_UNDERFLOW /* underflow exception */ | 21 | #define FP_X_UFL 0x02 /* underflow exception */ | |
38 | #define FP_X_IMP FE_INEXACT /* imprecise (loss of precision) */ | 22 | #define FP_X_IMP 0x01 /* imprecise (loss of precision) */ | |
39 | 23 | |||
40 | typedef enum { | 24 | typedef enum { | |
41 | FP_RN=FE_TONEAREST, /* round to nearest representable number */ | 25 | FP_RN=0, /* round to nearest representable number */ | |
42 | FP_RZ=FE_TOWARDZERO, /* round to zero (truncate) */ | 26 | FP_RZ=1, /* round to zero (truncate) */ | |
43 | FP_RP=FE_UPWARD, /* round toward positive infinity */ | 27 | FP_RP=2, /* round toward positive infinity */ | |
44 | FP_RM=FE_DOWNWARD /* round toward negative infinity */ | 28 | FP_RM=3 /* round toward negative infinity */ | |
45 | } fp_rnd; | 29 | } fp_rnd; | |
46 | 30 | |||
47 | #endif /* !_ISOC99_SOURCE */ | 31 | #endif /* !_ISOC99_SOURCE */ | |
48 | 32 | |||
49 | #endif /* _NETBSD_SOURCE || _ISOC99_SOURCE */ | 33 | #endif /* _NETBSD_SOURCE || _ISOC99_SOURCE */ | |
50 | 34 | |||
51 | #endif /* _HPPA_IEEEFP_H_ */ | 35 | #endif /* _HPPA_IEEEFP_H_ */ |
--- src/tests/lib/libm/Makefile 2015/01/12 21:03:09 1.26.2.1
+++ src/tests/lib/libm/Makefile 2015/01/20 20:57:24 1.26.2.2
@@ -1,20 +1,21 @@ | @@ -1,20 +1,21 @@ | |||
1 | # $NetBSD: Makefile,v 1.26.2.1 2015/01/12 21:03:09 snj Exp $ | 1 | # $NetBSD: Makefile,v 1.26.2.2 2015/01/20 20:57:24 snj Exp $ | |
2 | 2 | |||
3 | .include <bsd.own.mk> | 3 | .include <bsd.own.mk> | |
4 | 4 | |||
5 | TESTSDIR= ${TESTSBASE}/lib/libm | 5 | TESTSDIR= ${TESTSBASE}/lib/libm | |
6 | 6 | |||
7 | .if ${MACHINE_CPU} == "aarch64" || ${MACHINE_CPU} == "arm" \ | 7 | .if ${MACHINE_CPU} == "aarch64" || ${MACHINE_CPU} == "arm" \ | |
8 | || ${MACHINE_ARCH} == "hppa" \ | |||
8 | || ${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64" \ | 9 | || ${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64" \ | |
9 | || ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64" | 10 | || ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64" | |
10 | CPPFLAGS+= -DHAVE_FENV_H | 11 | CPPFLAGS+= -DHAVE_FENV_H | |
11 | .endif | 12 | .endif | |
12 | 13 | |||
13 | .if ${MACHINE} == "alpha" | 14 | .if ${MACHINE} == "alpha" | |
14 | COPTS+= -mfloat-ieee -mieee-with-inexact -mfp-trap-mode=sui -mtrap-precision=i | 15 | COPTS+= -mfloat-ieee -mieee-with-inexact -mfp-trap-mode=sui -mtrap-precision=i | |
15 | .endif | 16 | .endif | |
16 | 17 | |||
17 | CPPFLAGS.t_fmod.c+= -I${.CURDIR}/../libc/gen | 18 | CPPFLAGS.t_fmod.c+= -I${.CURDIR}/../libc/gen | |
18 | 19 | |||
19 | TESTS_C+= t_acos | 20 | TESTS_C+= t_acos | |
20 | TESTS_C+= t_asin | 21 | TESTS_C+= t_asin |