Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Unified Diff: test/cctest/wasm/test-run-wasm.cc

Issue 2204963002: [wasm] Use the Float64Max/Min machine operators to implement F64Max/Min. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Typo Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/x64/macro-assembler-x64.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/wasm/test-run-wasm.cc
diff --git a/test/cctest/wasm/test-run-wasm.cc b/test/cctest/wasm/test-run-wasm.cc
index 9d1cc0ee1441c2528272a68d44a042697b096dd0..f48e44d4eb5c258f67fd3452510affe2c47eeb79 100644
--- a/test/cctest/wasm/test-run-wasm.cc
+++ b/test/cctest/wasm/test-run-wasm.cc
@@ -2571,19 +2571,19 @@ WASM_EXEC_TEST(F64Min) {
FOR_FLOAT64_INPUTS(i) {
FOR_FLOAT64_INPUTS(j) {
- double expected;
- if (*i < *j) {
- expected = *i;
- } else if (*j < *i) {
- expected = *j;
- } else if (*i != *i) {
- // If *i or *j is NaN, then the result is NaN.
- expected = *i;
+ double result = r.Call(*i, *j);
+ if (std::isnan(*i) || std::isnan(*j)) {
+ // If one of the inputs is nan, the result should be nan.
+ CHECK(std::isnan(result));
+ } else if ((*i == 0.0) && (*j == 0.0) &&
+ (copysign(1.0, *i) != copysign(1.0, *j))) {
+ // If one input is +0.0 and the other input is -0.0, the result should
+ // be -0.0.
+ CHECK_EQ(bit_cast<uint64_t>(-0.0), bit_cast<uint64_t>(result));
} else {
- expected = *j;
+ double expected = *i < *j ? *i : *j;
+ CHECK_DOUBLE_EQ(expected, result);
}
-
- CHECK_DOUBLE_EQ(expected, r.Call(*i, *j));
}
}
}
@@ -2619,92 +2619,23 @@ WASM_EXEC_TEST(F64Max) {
FOR_FLOAT64_INPUTS(i) {
FOR_FLOAT64_INPUTS(j) {
- double expected;
- if (*i > *j) {
- expected = *i;
- } else if (*j > *i) {
- expected = *j;
- } else if (*i != *i) {
- // If *i or *j is NaN, then the result is NaN.
- expected = *i;
+ double result = r.Call(*i, *j);
+ if (std::isnan(*i) || std::isnan(*j)) {
+ // If one of the inputs is nan, the result should be nan.
+ CHECK(std::isnan(result));
+ } else if ((*i == 0.0) && (*j == 0.0) &&
+ (copysign(1.0, *i) != copysign(1.0, *j))) {
+ // If one input is +0.0 and the other input is -0.0, the result should
+ // be -0.0.
+ CHECK_EQ(bit_cast<uint64_t>(0.0), bit_cast<uint64_t>(result));
} else {
- expected = *j;
+ double expected = *i > *j ? *i : *j;
+ CHECK_DOUBLE_EQ(expected, result);
}
-
- CHECK_DOUBLE_EQ(expected, r.Call(*i, *j));
}
}
}
-// TODO(ahaas): Fix on mips and reenable.
-#if !V8_TARGET_ARCH_MIPS && !V8_TARGET_ARCH_MIPS64
-
-WASM_EXEC_TEST(F32Min_Snan) {
- // Test that the instruction does not return a signalling NaN.
- {
- WasmRunner<float> r(execution_mode);
- BUILD(r,
- WASM_F32_MIN(WASM_F32(bit_cast<float>(0xff80f1e2)), WASM_F32(57.67)));
- CHECK_EQ(0xffc0f1e2, bit_cast<uint32_t>(r.Call()));
- }
- {
- WasmRunner<float> r(execution_mode);
- BUILD(r,
- WASM_F32_MIN(WASM_F32(45.73), WASM_F32(bit_cast<float>(0x7f80f1e2))));
- CHECK_EQ(0x7fc0f1e2, bit_cast<uint32_t>(r.Call()));
- }
-}
-
-WASM_EXEC_TEST(F32Max_Snan) {
- // Test that the instruction does not return a signalling NaN.
- {
- WasmRunner<float> r(execution_mode);
- BUILD(r,
- WASM_F32_MAX(WASM_F32(bit_cast<float>(0xff80f1e2)), WASM_F32(57.67)));
- CHECK_EQ(0xffc0f1e2, bit_cast<uint32_t>(r.Call()));
- }
- {
- WasmRunner<float> r(execution_mode);
- BUILD(r,
- WASM_F32_MAX(WASM_F32(45.73), WASM_F32(bit_cast<float>(0x7f80f1e2))));
- CHECK_EQ(0x7fc0f1e2, bit_cast<uint32_t>(r.Call()));
- }
-}
-
-WASM_EXEC_TEST(F64Min_Snan) {
- // Test that the instruction does not return a signalling NaN.
- {
- WasmRunner<double> r(execution_mode);
- BUILD(r, WASM_F64_MIN(WASM_F64(bit_cast<double>(0xfff000000000f1e2)),
- WASM_F64(57.67)));
- CHECK_EQ(0xfff800000000f1e2, bit_cast<uint64_t>(r.Call()));
- }
- {
- WasmRunner<double> r(execution_mode);
- BUILD(r, WASM_F64_MIN(WASM_F64(45.73),
- WASM_F64(bit_cast<double>(0x7ff000000000f1e2))));
- CHECK_EQ(0x7ff800000000f1e2, bit_cast<uint64_t>(r.Call()));
- }
-}
-
-WASM_EXEC_TEST(F64Max_Snan) {
- // Test that the instruction does not return a signalling NaN.
- {
- WasmRunner<double> r(execution_mode);
- BUILD(r, WASM_F64_MAX(WASM_F64(bit_cast<double>(0xfff000000000f1e2)),
- WASM_F64(57.67)));
- CHECK_EQ(0xfff800000000f1e2, bit_cast<uint64_t>(r.Call()));
- }
- {
- WasmRunner<double> r(execution_mode);
- BUILD(r, WASM_F64_MAX(WASM_F64(45.73),
- WASM_F64(bit_cast<double>(0x7ff000000000f1e2))));
- CHECK_EQ(0x7ff800000000f1e2, bit_cast<uint64_t>(r.Call()));
- }
-}
-
-#endif
-
WASM_EXEC_TEST(I32SConvertF32) {
WasmRunner<int32_t> r(execution_mode, MachineType::Float32());
BUILD(r, WASM_I32_SCONVERT_F32(WASM_GET_LOCAL(0)));
« no previous file with comments | « src/x64/macro-assembler-x64.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698