| Index: test/cctest/wasm/test-run-wasm-simd.cc
|
| diff --git a/test/cctest/wasm/test-run-wasm-simd.cc b/test/cctest/wasm/test-run-wasm-simd.cc
|
| index 0b047a55bea1d9d4a95ddb28864c746589126078..e110b35a199fdf0b36b40b2c7bf0acfb2c1732d3 100644
|
| --- a/test/cctest/wasm/test-run-wasm-simd.cc
|
| +++ b/test/cctest/wasm/test-run-wasm-simd.cc
|
| @@ -391,9 +391,9 @@ T RecipSqrtRefine(T a, T b) {
|
| #define WASM_SIMD_I32x4_FROM_F32x4(x) x, WASM_SIMD_OP(kExprI32x4SConvertF32x4)
|
| #define WASM_SIMD_U32x4_FROM_F32x4(x) x, WASM_SIMD_OP(kExprI32x4UConvertF32x4)
|
|
|
| -// Skip FP operations on extremely large or extremely small values, which may
|
| -// cause tests to fail due to non-IEEE-754 arithmetic on some platforms.
|
| -bool SkipFPTestInput(float x) {
|
| +// Skip FP tests involving extremely large or extremely small values, which
|
| +// may fail due to non-IEEE-754 SIMD arithmetic on some platforms.
|
| +bool SkipFPValue(float x) {
|
| float abs_x = std::fabs(x);
|
| const float kSmallFloatThreshold = 1.0e-32f;
|
| const float kLargeFloatThreshold = 1.0e32f;
|
| @@ -401,9 +401,9 @@ bool SkipFPTestInput(float x) {
|
| (abs_x < kSmallFloatThreshold || abs_x > kLargeFloatThreshold);
|
| }
|
|
|
| -// Skip tests where the expected value is a NaN. Our WASM test code can't
|
| -// deal with NaNs.
|
| -bool SkipFPExpectedValue(float x) { return std::isnan(x); }
|
| +// Skip tests where the expected value is a NaN, since our WASM test code
|
| +// doesn't handle NaNs. Also skip extreme values.
|
| +bool SkipFPExpectedValue(float x) { return std::isnan(x) || SkipFPValue(x); }
|
|
|
| #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
|
| WASM_EXEC_COMPILED_TEST(F32x4Splat) {
|
| @@ -487,7 +487,7 @@ void RunF32x4UnOpTest(WasmOpcode simd_op, FloatUnOp expected_op,
|
| WASM_RETURN1(WASM_ONE));
|
|
|
| FOR_FLOAT32_INPUTS(i) {
|
| - if (SkipFPTestInput(*i)) continue;
|
| + if (SkipFPValue(*i)) continue;
|
| float expected = expected_op(*i);
|
| if (SkipFPExpectedValue(expected)) continue;
|
| float abs_error = std::abs(expected) * error;
|
| @@ -531,9 +531,9 @@ void RunF32x4BinOpTest(WasmOpcode simd_op, FloatBinOp expected_op) {
|
| WASM_SIMD_CHECK_SPLAT_F32x4(simd1, expected), WASM_RETURN1(WASM_ONE));
|
|
|
| FOR_FLOAT32_INPUTS(i) {
|
| - if (SkipFPTestInput(*i)) continue;
|
| + if (SkipFPValue(*i)) continue;
|
| FOR_FLOAT32_INPUTS(j) {
|
| - if (SkipFPTestInput(*j)) continue;
|
| + if (SkipFPValue(*j)) continue;
|
| float expected = expected_op(*i, *j);
|
| if (SkipFPExpectedValue(expected)) continue;
|
| CHECK_EQ(1, r.Call(*i, *j, expected));
|
| @@ -584,9 +584,9 @@ void RunF32x4CompareOpTest(WasmOpcode simd_op, FloatCompareOp expected_op) {
|
| WASM_SIMD_CHECK_SPLAT4(I32x4, simd1, I32, expected), WASM_ONE);
|
|
|
| FOR_FLOAT32_INPUTS(i) {
|
| - if (SkipFPTestInput(*i)) continue;
|
| + if (SkipFPValue(*i)) continue;
|
| FOR_FLOAT32_INPUTS(j) {
|
| - if (SkipFPTestInput(*j)) continue;
|
| + if (SkipFPValue(*j)) continue;
|
| float diff = *i - *j;
|
| if (SkipFPExpectedValue(diff)) continue;
|
| CHECK_EQ(1, r.Call(*i, *j, expected_op(*i, *j)));
|
| @@ -908,7 +908,7 @@ WASM_EXEC_COMPILED_TEST(I32x4FromFloat32x4) {
|
| WASM_SIMD_CHECK_SPLAT4(I32x4, simd2, I32, expected_unsigned), WASM_ONE);
|
|
|
| FOR_FLOAT32_INPUTS(i) {
|
| - if (SkipFPTestInput(*i)) continue;
|
| + if (SkipFPValue(*i)) continue;
|
| int32_t signed_value = ConvertToInt(*i, false);
|
| int32_t unsigned_value = ConvertToInt(*i, true);
|
| CHECK_EQ(1, r.Call(*i, signed_value, unsigned_value));
|
|
|