msun tests: use standard floating-point exception flags on lrint and fenv tests

Some platforms have additional architecture-specific floating-point flags.
Msun test cases lrint and test_fegsetenv (fenv) expects only standard flags,
so make sure to mask them appropriately.

This makes test pass on PowerPC64.

Reviewed by:	jhibbits, ngie
Sponsored by:	Eldorado Research Institute (eldorado.org.br)
Differential Revision:	https://reviews.freebsd.org/D27202
This commit is contained in:
Alfredo Dal'Ava Junior 2020-11-18 19:23:30 +00:00
parent 30a56f9ef7
commit 758f9acf8c
2 changed files with 12 additions and 9 deletions

View File

@ -43,13 +43,7 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
/*
* Implementations are permitted to define additional exception flags
* not specified in the standard, so it is not necessarily true that
* FE_ALL_EXCEPT == ALL_STD_EXCEPT.
*/
#define ALL_STD_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \
FE_OVERFLOW | FE_UNDERFLOW)
#include "test-utils.h"
#define NEXCEPTS (sizeof(std_excepts) / sizeof(std_excepts[0]))
@ -373,7 +367,13 @@ test_fegsetenv(void)
assert(fegetround() == FE_TONEAREST);
assert(fesetenv(&env2) == 0);
assert(fetestexcept(FE_ALL_EXCEPT) == excepts);
/*
* Some platforms like powerpc may set extra exception bits. Since
* only standard exceptions are tested, mask against ALL_STD_EXCEPT
*/
assert((fetestexcept(FE_ALL_EXCEPT) & ALL_STD_EXCEPT) == excepts);
assert(fegetround() == FE_DOWNWARD);
assert(fesetenv(&env1) == 0);
assert(fetestexcept(FE_ALL_EXCEPT) == 0);

View File

@ -41,6 +41,8 @@ __FBSDID("$FreeBSD$");
#include <ieeefp.h>
#endif
#include "test-utils.h"
/*
* XXX The volatile here is to avoid gcc's bogus constant folding and work
* around the lack of support for the FENV_ACCESS pragma.
@ -49,7 +51,8 @@ __FBSDID("$FreeBSD$");
volatile double _d = x; \
assert(feclearexcept(FE_ALL_EXCEPT) == 0); \
assert((func)(_d) == (result) || fetestexcept(FE_INVALID)); \
assert(fetestexcept(FE_ALL_EXCEPT) == (excepts)); \
assert((fetestexcept(FE_ALL_EXCEPT) & ALL_STD_EXCEPT) \
== (excepts)); \
} while (0)
#define testall(x, result, excepts) do { \