Chromium Code Reviews

Unified Diff: test/cctest/compiler/test-run-machops.cc

Issue 1738623003: [wasm] Int64Lowering of FXXXConvertI64 instructions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Make code dependent on V8_CC_MSC and not V8_OS_WIN Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Index: test/cctest/compiler/test-run-machops.cc
diff --git a/test/cctest/compiler/test-run-machops.cc b/test/cctest/compiler/test-run-machops.cc
index fba9e0e1a505e8ca89dd2866a51f50bb1af9c7fa..2cb72f11163e66ae63203c4afb689d5e5cd65349 100644
--- a/test/cctest/compiler/test-run-machops.cc
+++ b/test/cctest/compiler/test-run-machops.cc
@@ -5654,7 +5654,7 @@ TEST(RunCallCFunction8) {
#endif // USE_SIMULATOR
template <typename T>
-void TestExternalReferenceFunction(
+void TestExternalReferenceRoundingFunction(
titzer 2016/02/25 17:04:33 Can we split all these external references tests i
ahaas 2016/02/25 18:29:18 Done.
BufferedRawMachineAssemblerTester<int32_t>* m, ExternalReference ref,
T (*comparison)(T)) {
T parameter;
@@ -5672,58 +5672,128 @@ void TestExternalReferenceFunction(
TEST(RunCallExternalReferenceF32Trunc) {
BufferedRawMachineAssemblerTester<int32_t> m;
- ExternalReference ref =
- ExternalReference::f32_trunc_wrapper_function(m.isolate());
- TestExternalReferenceFunction<float>(&m, ref, truncf);
+ ExternalReference ref = ExternalReference::wasm_f32_trunc(m.isolate());
+ TestExternalReferenceRoundingFunction<float>(&m, ref, truncf);
}
TEST(RunCallExternalReferenceF32Floor) {
BufferedRawMachineAssemblerTester<int32_t> m;
- ExternalReference ref =
- ExternalReference::f32_floor_wrapper_function(m.isolate());
- TestExternalReferenceFunction<float>(&m, ref, floorf);
+ ExternalReference ref = ExternalReference::wasm_f32_floor(m.isolate());
+ TestExternalReferenceRoundingFunction<float>(&m, ref, floorf);
}
TEST(RunCallExternalReferenceF32Ceil) {
BufferedRawMachineAssemblerTester<int32_t> m;
- ExternalReference ref =
- ExternalReference::f32_ceil_wrapper_function(m.isolate());
- TestExternalReferenceFunction<float>(&m, ref, ceilf);
+ ExternalReference ref = ExternalReference::wasm_f32_ceil(m.isolate());
+ TestExternalReferenceRoundingFunction<float>(&m, ref, ceilf);
}
TEST(RunCallExternalReferenceF32RoundTiesEven) {
BufferedRawMachineAssemblerTester<int32_t> m;
- ExternalReference ref =
- ExternalReference::f32_nearest_int_wrapper_function(m.isolate());
- TestExternalReferenceFunction<float>(&m, ref, nearbyintf);
+ ExternalReference ref = ExternalReference::wasm_f32_nearest_int(m.isolate());
+ TestExternalReferenceRoundingFunction<float>(&m, ref, nearbyintf);
}
TEST(RunCallExternalReferenceF64Trunc) {
BufferedRawMachineAssemblerTester<int32_t> m;
- ExternalReference ref =
- ExternalReference::f64_trunc_wrapper_function(m.isolate());
- TestExternalReferenceFunction<double>(&m, ref, trunc);
+ ExternalReference ref = ExternalReference::wasm_f64_trunc(m.isolate());
+ TestExternalReferenceRoundingFunction<double>(&m, ref, trunc);
}
TEST(RunCallExternalReferenceF64Floor) {
BufferedRawMachineAssemblerTester<int32_t> m;
- ExternalReference ref =
- ExternalReference::f64_floor_wrapper_function(m.isolate());
- TestExternalReferenceFunction<double>(&m, ref, floor);
+ ExternalReference ref = ExternalReference::wasm_f64_floor(m.isolate());
+ TestExternalReferenceRoundingFunction<double>(&m, ref, floor);
}
TEST(RunCallExternalReferenceF64Ceil) {
BufferedRawMachineAssemblerTester<int32_t> m;
- ExternalReference ref =
- ExternalReference::f64_ceil_wrapper_function(m.isolate());
- TestExternalReferenceFunction<double>(&m, ref, ceil);
+ ExternalReference ref = ExternalReference::wasm_f64_ceil(m.isolate());
+ TestExternalReferenceRoundingFunction<double>(&m, ref, ceil);
}
TEST(RunCallExternalReferenceF64RoundTiesEven) {
BufferedRawMachineAssemblerTester<int32_t> m;
+ ExternalReference ref = ExternalReference::wasm_f64_nearest_int(m.isolate());
+ TestExternalReferenceRoundingFunction<double>(&m, ref, nearbyint);
+}
+
+TEST(RunCallExternalReferenceConvertInt64ToFloat32) {
+ BufferedRawMachineAssemblerTester<int32_t> m;
+ ExternalReference ref = ExternalReference::wasm_int64_to_float32(m.isolate());
+
+ int64_t input;
+ float output;
+
+ Node* function = m.ExternalConstant(ref);
+ m.CallCFunction2(MachineType::Pointer(), MachineType::Pointer(),
+ MachineType::Pointer(), function, m.PointerConstant(&input),
+ m.PointerConstant(&output));
+ m.Return(m.Int32Constant(4356));
+ FOR_INT64_INPUTS(i) {
+ input = *i;
+ m.Call();
+ CheckFloatEq(static_cast<float>(*i), output);
+ }
+}
+
+TEST(RunCallExternalReferenceConvertUint64ToFloat32) {
+ BufferedRawMachineAssemblerTester<int32_t> m;
+ ExternalReference ref =
+ ExternalReference::wasm_uint64_to_float32(m.isolate());
+
+ uint64_t input;
+ float output;
+
+ Node* function = m.ExternalConstant(ref);
+ m.CallCFunction2(MachineType::Pointer(), MachineType::Pointer(),
+ MachineType::Pointer(), function, m.PointerConstant(&input),
+ m.PointerConstant(&output));
+ m.Return(m.Int32Constant(4356));
+ FOR_UINT64_INPUTS(i) {
+ input = *i;
+ m.Call();
+ CheckFloatEq(static_cast<float>(*i), output);
+ }
+}
+
+TEST(RunCallExternalReferenceConvertInt64ToFloat64) {
+ BufferedRawMachineAssemblerTester<int32_t> m;
+ ExternalReference ref = ExternalReference::wasm_int64_to_float64(m.isolate());
+
+ int64_t input;
+ double output;
+
+ Node* function = m.ExternalConstant(ref);
+ m.CallCFunction2(MachineType::Pointer(), MachineType::Pointer(),
+ MachineType::Pointer(), function, m.PointerConstant(&input),
+ m.PointerConstant(&output));
+ m.Return(m.Int32Constant(4356));
+ FOR_INT64_INPUTS(i) {
+ input = *i;
+ m.Call();
+ CheckDoubleEq(static_cast<double>(*i), output);
+ }
+}
+
+TEST(RunCallExternalReferenceConvertUint64ToFloat64) {
+ BufferedRawMachineAssemblerTester<int32_t> m;
ExternalReference ref =
- ExternalReference::f64_nearest_int_wrapper_function(m.isolate());
- TestExternalReferenceFunction<double>(&m, ref, nearbyint);
+ ExternalReference::wasm_uint64_to_float64(m.isolate());
+
+ uint64_t input;
+ double output;
+
+ Node* function = m.ExternalConstant(ref);
+ m.CallCFunction2(MachineType::Pointer(), MachineType::Pointer(),
+ MachineType::Pointer(), function, m.PointerConstant(&input),
+ m.PointerConstant(&output));
+ m.Return(m.Int32Constant(4356));
+ FOR_UINT64_INPUTS(i) {
+ input = *i;
+ m.Call();
+ CheckDoubleEq(static_cast<double>(*i), output);
+ }
}
#if V8_TARGET_ARCH_64_BIT

Powered by Google App Engine