mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-05 00:49:43 +00:00
[compiler-rt] [builtins] Fix logb / logbl tests
Like was done before in D67999 for `logbf`, this patch fixes the tests for the internal compiler-rt implementations of `logb` and `logbl` to consider all NaNs equivalent. Not doing so was resulting in test failures for riscv64, since the the NaNs had different signs, but the spec doesn't specify the NaN signedness or payload. Fixes bug 44244. Reviewers: rupprecht, delcypher Reviewed By: rupprecht, delcypher Differential Revision: https://reviews.llvm.org/D74826
This commit is contained in:
parent
ddf60ba09f
commit
689f1e85ba
@ -20,8 +20,10 @@
|
||||
int test__compiler_rt_logb(fp_t x) {
|
||||
fp_t crt_value = __compiler_rt_logb(x);
|
||||
fp_t libm_value = logb(x);
|
||||
// Compare actual rep, e.g. to avoid NaN != the same NaN
|
||||
if (toRep(crt_value) != toRep(libm_value)) {
|
||||
// Compare the values, considering all NaNs equivalent, as the spec doesn't
|
||||
// specify the NaN signedness/payload.
|
||||
if (crt_value != libm_value &&
|
||||
!(crt_isnan(crt_value) && crt_isnan(libm_value))) {
|
||||
printf("error: in __compiler_rt_logb(%a [%lX]) = %a [%lX] != %a [%lX]\n",
|
||||
x, toRep(x), crt_value, toRep(crt_value), libm_value,
|
||||
toRep(libm_value));
|
||||
|
@ -27,18 +27,20 @@
|
||||
int test__compiler_rt_logbl(fp_t x) {
|
||||
fp_t crt_value = __compiler_rt_logbl(x);
|
||||
fp_t libm_value = logbl(x);
|
||||
// Compare actual rep, e.g. to avoid NaN != the same NaN
|
||||
if (toRep(crt_value) != toRep(libm_value)) {
|
||||
// Compare the values, considering all NaNs equivalent, as the spec doesn't
|
||||
// specify the NaN signedness/payload.
|
||||
if (crt_value != libm_value &&
|
||||
!(crt_isnan(crt_value) && crt_isnan(libm_value))) {
|
||||
// Split expected values into two for printf
|
||||
twords x_t, crt_value_t, libm_value_t;
|
||||
x_t.all = toRep(x);
|
||||
crt_value_t.all = toRep(crt_value);
|
||||
libm_value_t.all = toRep(libm_value);
|
||||
printf(
|
||||
"error: in __compiler_rt_logb(%a [%llX %llX]) = %a [%llX %llX] != %a "
|
||||
"error: in __compiler_rt_logbl([%llX %llX]) = [%llX %llX] != "
|
||||
"[%llX %llX]\n",
|
||||
x, x_t.s.high, x_t.s.low, crt_value, crt_value_t.s.high,
|
||||
crt_value_t.s.low, libm_value, libm_value_t.s.high, libm_value_t.s.low);
|
||||
x_t.s.high, x_t.s.low, crt_value_t.s.high, crt_value_t.s.low,
|
||||
libm_value_t.s.high, libm_value_t.s.low);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user