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