Module Name: src Committed By: riastradh Date: Tue Feb 20 03:53:49 UTC 2024
Modified Files: src/lib/libm/arch/x86_64: fenv.c src/tests/lib/libm: t_fenv.c Log Message: fenv(3): Fix fetestexcept to avoid side effects on trap state. PR port-amd64/57949 To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/lib/libm/arch/x86_64/fenv.c cvs rdiff -u -r1.14 -r1.15 src/tests/lib/libm/t_fenv.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/libm/arch/x86_64/fenv.c diff -u src/lib/libm/arch/x86_64/fenv.c:1.10 src/lib/libm/arch/x86_64/fenv.c:1.11 --- src/lib/libm/arch/x86_64/fenv.c:1.10 Fri Sep 3 21:54:59 2021 +++ src/lib/libm/arch/x86_64/fenv.c Tue Feb 20 03:53:48 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: fenv.c,v 1.10 2021/09/03 21:54:59 andvar Exp $ */ +/* $NetBSD: fenv.c,v 1.11 2024/02/20 03:53:48 riastradh Exp $ */ /*- * Copyright (c) 2004-2005 David Schultz <das (at) FreeBSD.ORG> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: fenv.c,v 1.10 2021/09/03 21:54:59 andvar Exp $"); +__RCSID("$NetBSD: fenv.c,v 1.11 2024/02/20 03:53:48 riastradh Exp $"); #include "namespace.h" @@ -259,7 +259,6 @@ fesetexceptflag(const fexcept_t *flagp, int fetestexcept(int excepts) { - fenv_t fenv; uint32_t mxcsr; uint16_t status; int ex; @@ -268,17 +267,10 @@ fetestexcept(int excepts) ex = excepts & FE_ALL_EXCEPT; - /* Store the current x87 floating-point environment */ - memset(&fenv, 0, sizeof(fenv)); - - __fnstenv(&fenv); __fnstsw(&status); - - /* Store the MXCSR register state */ - __stmxcsr(&fenv.mxcsr); __stmxcsr(&mxcsr); - return ((fenv.x87.status | fenv.mxcsr) & ex); + return ((status | mxcsr) & ex); } /* Index: src/tests/lib/libm/t_fenv.c diff -u src/tests/lib/libm/t_fenv.c:1.14 src/tests/lib/libm/t_fenv.c:1.15 --- src/tests/lib/libm/t_fenv.c:1.14 Mon Feb 19 23:19:10 2024 +++ src/tests/lib/libm/t_fenv.c Tue Feb 20 03:53:48 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: t_fenv.c,v 1.14 2024/02/19 23:19:10 riastradh Exp $ */ +/* $NetBSD: t_fenv.c,v 1.15 2024/02/20 03:53:48 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_fenv.c,v 1.14 2024/02/19 23:19:10 riastradh Exp $"); +__RCSID("$NetBSD: t_fenv.c,v 1.15 2024/02/20 03:53:48 riastradh Exp $"); #include <atf-c.h> @@ -364,9 +364,6 @@ ATF_TC_BODY(fetestexcept_trap, tc) "fegetexcept()=0x%x FE_ALL_EXCEPT=0x%x", except, FE_ALL_EXCEPT); (void)fetestexcept(FE_ALL_EXCEPT); -#ifdef __x86_64__ - atf_tc_expect_fail("PR port-amd64/57949"); -#endif ATF_CHECK_EQ_MSG((except = fegetexcept()), FE_ALL_EXCEPT, "fegetexcept()=0x%x FE_ALL_EXCEPT=0x%x", except, FE_ALL_EXCEPT); }