OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stdint.h> | 5 #include <stdint.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "src/wasm/wasm-macro-gen.h" | 9 #include "src/wasm/wasm-macro-gen.h" |
10 | 10 |
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
966 BUILD(r, B2(WASM_SELECT(WASM_SET_LOCAL(0, WASM_I8(0)), | 966 BUILD(r, B2(WASM_SELECT(WASM_SET_LOCAL(0, WASM_I8(0)), |
967 WASM_SET_LOCAL(0, WASM_I8(1)), | 967 WASM_SET_LOCAL(0, WASM_I8(1)), |
968 WASM_SET_LOCAL(0, WASM_I8(2))), | 968 WASM_SET_LOCAL(0, WASM_I8(2))), |
969 WASM_GET_LOCAL(0))); | 969 WASM_GET_LOCAL(0))); |
970 FOR_INT32_INPUTS(i) { CHECK_EQ(2, r.Call(*i)); } | 970 FOR_INT32_INPUTS(i) { CHECK_EQ(2, r.Call(*i)); } |
971 } | 971 } |
972 | 972 |
973 | 973 |
974 TEST(Run_Wasm_Select_strict2) { | 974 TEST(Run_Wasm_Select_strict2) { |
975 WasmRunner<int32_t> r(MachineType::Int32()); | 975 WasmRunner<int32_t> r(MachineType::Int32()); |
976 r.env()->AddLocals(kAstI32, 2); | 976 r.AllocateLocal(kAstI32); |
| 977 r.AllocateLocal(kAstI32); |
977 // select(b=5, c=6, a) | 978 // select(b=5, c=6, a) |
978 BUILD(r, WASM_SELECT(WASM_SET_LOCAL(1, WASM_I8(5)), | 979 BUILD(r, WASM_SELECT(WASM_SET_LOCAL(1, WASM_I8(5)), |
979 WASM_SET_LOCAL(2, WASM_I8(6)), WASM_GET_LOCAL(0))); | 980 WASM_SET_LOCAL(2, WASM_I8(6)), WASM_GET_LOCAL(0))); |
980 FOR_INT32_INPUTS(i) { | 981 FOR_INT32_INPUTS(i) { |
981 int32_t expected = *i ? 5 : 6; | 982 int32_t expected = *i ? 5 : 6; |
982 CHECK_EQ(expected, r.Call(*i)); | 983 CHECK_EQ(expected, r.Call(*i)); |
983 } | 984 } |
984 } | 985 } |
985 | 986 |
986 TEST(Run_Wasm_Select_strict3) { | 987 TEST(Run_Wasm_Select_strict3) { |
987 WasmRunner<int32_t> r(MachineType::Int32()); | 988 WasmRunner<int32_t> r(MachineType::Int32()); |
988 r.env()->AddLocals(kAstI32, 2); | 989 r.AllocateLocal(kAstI32); |
| 990 r.AllocateLocal(kAstI32); |
989 // select(b=5, c=6, a=b) | 991 // select(b=5, c=6, a=b) |
990 BUILD(r, WASM_SELECT(WASM_SET_LOCAL(1, WASM_I8(5)), | 992 BUILD(r, WASM_SELECT(WASM_SET_LOCAL(1, WASM_I8(5)), |
991 WASM_SET_LOCAL(2, WASM_I8(6)), | 993 WASM_SET_LOCAL(2, WASM_I8(6)), |
992 WASM_SET_LOCAL(0, WASM_GET_LOCAL(1)))); | 994 WASM_SET_LOCAL(0, WASM_GET_LOCAL(1)))); |
993 FOR_INT32_INPUTS(i) { | 995 FOR_INT32_INPUTS(i) { |
994 int32_t expected = 5; | 996 int32_t expected = 5; |
995 CHECK_EQ(expected, r.Call(*i)); | 997 CHECK_EQ(expected, r.Call(*i)); |
996 } | 998 } |
997 } | 999 } |
998 | 1000 |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1225 | 1227 |
1226 // Build the test function. | 1228 // Build the test function. |
1227 TestSignatures sigs; | 1229 TestSignatures sigs; |
1228 TestingModule module; | 1230 TestingModule module; |
1229 WasmFunctionCompiler t(sigs.v_v(), &module); | 1231 WasmFunctionCompiler t(sigs.v_v(), &module); |
1230 BUILD(t, kExprNop); | 1232 BUILD(t, kExprNop); |
1231 uint32_t index = t.CompileAndAdd(); | 1233 uint32_t index = t.CompileAndAdd(); |
1232 | 1234 |
1233 const int32_t kExpected = -414444; | 1235 const int32_t kExpected = -414444; |
1234 // Build the calling function. | 1236 // Build the calling function. |
1235 WasmRunner<int32_t> r; | 1237 WasmRunner<int32_t> r(&module); |
1236 r.env()->module = &module; | |
1237 BUILD(r, B2(WASM_CALL_FUNCTION0(index), WASM_I32V_3(kExpected))); | 1238 BUILD(r, B2(WASM_CALL_FUNCTION0(index), WASM_I32V_3(kExpected))); |
1238 | 1239 |
1239 int32_t result = r.Call(); | 1240 int32_t result = r.Call(); |
1240 CHECK_EQ(kExpected, result); | 1241 CHECK_EQ(kExpected, result); |
1241 } | 1242 } |
1242 | 1243 |
1243 | 1244 |
1244 TEST(Run_Wasm_VoidReturn2) { | 1245 TEST(Run_Wasm_VoidReturn2) { |
1245 // We use a wrapper function because WasmRunner<void> does not exist. | 1246 // We use a wrapper function because WasmRunner<void> does not exist. |
1246 // Build the test function. | 1247 // Build the test function. |
1247 TestSignatures sigs; | 1248 TestSignatures sigs; |
1248 TestingModule module; | 1249 TestingModule module; |
1249 WasmFunctionCompiler t(sigs.v_v(), &module); | 1250 WasmFunctionCompiler t(sigs.v_v(), &module); |
1250 BUILD(t, WASM_RETURN0); | 1251 BUILD(t, WASM_RETURN0); |
1251 uint32_t index = t.CompileAndAdd(); | 1252 uint32_t index = t.CompileAndAdd(); |
1252 | 1253 |
1253 const int32_t kExpected = -414444; | 1254 const int32_t kExpected = -414444; |
1254 // Build the calling function. | 1255 // Build the calling function. |
1255 WasmRunner<int32_t> r; | 1256 WasmRunner<int32_t> r(&module); |
1256 r.env()->module = &module; | |
1257 BUILD(r, B2(WASM_CALL_FUNCTION0(index), WASM_I32V_3(kExpected))); | 1257 BUILD(r, B2(WASM_CALL_FUNCTION0(index), WASM_I32V_3(kExpected))); |
1258 | 1258 |
1259 int32_t result = r.Call(); | 1259 int32_t result = r.Call(); |
1260 CHECK_EQ(kExpected, result); | 1260 CHECK_EQ(kExpected, result); |
1261 } | 1261 } |
1262 | 1262 |
1263 | 1263 |
1264 TEST(Run_Wasm_Block_If_P) { | 1264 TEST(Run_Wasm_Block_If_P) { |
1265 WasmRunner<int32_t> r(MachineType::Int32()); | 1265 WasmRunner<int32_t> r(MachineType::Int32()); |
1266 // { if (p0) return 51; return 52; } | 1266 // { if (p0) return 51; return 52; } |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1999 | 1999 |
2000 Zone zone; | 2000 Zone zone; |
2001 Isolate* isolate = CcTest::InitIsolateOnce(); | 2001 Isolate* isolate = CcTest::InitIsolateOnce(); |
2002 HandleScope scope(isolate); | 2002 HandleScope scope(isolate); |
2003 // Enable all optional operators. | 2003 // Enable all optional operators. |
2004 CommonOperatorBuilder common(&zone); | 2004 CommonOperatorBuilder common(&zone); |
2005 MachineOperatorBuilder machine(&zone, MachineType::PointerRepresentation(), | 2005 MachineOperatorBuilder machine(&zone, MachineType::PointerRepresentation(), |
2006 MachineOperatorBuilder::kAllOptionalOps); | 2006 MachineOperatorBuilder::kAllOptionalOps); |
2007 Graph graph(&zone); | 2007 Graph graph(&zone); |
2008 JSGraph jsgraph(isolate, &graph, &common, nullptr, nullptr, &machine); | 2008 JSGraph jsgraph(isolate, &graph, &common, nullptr, nullptr, &machine); |
2009 FunctionEnv env; | |
2010 FunctionSig* sig = WasmOpcodes::Signature(opcode); | 2009 FunctionSig* sig = WasmOpcodes::Signature(opcode); |
2011 init_env(&env, sig); | |
2012 | 2010 |
2013 if (sig->parameter_count() == 1) { | 2011 if (sig->parameter_count() == 1) { |
2014 byte code[] = {static_cast<byte>(opcode), kExprGetLocal, 0}; | 2012 byte code[] = {WASM_NO_LOCALS, static_cast<byte>(opcode), kExprGetLocal, 0}; |
2015 TestBuildingGraph(&zone, &jsgraph, &env, code, code + arraysize(code)); | 2013 TestBuildingGraph(&zone, &jsgraph, nullptr, sig, code, |
| 2014 code + arraysize(code)); |
2016 } else { | 2015 } else { |
2017 CHECK_EQ(2, sig->parameter_count()); | 2016 CHECK_EQ(2, sig->parameter_count()); |
2018 byte code[] = {static_cast<byte>(opcode), kExprGetLocal, 0, kExprGetLocal, | 2017 byte code[] = {WASM_NO_LOCALS, static_cast<byte>(opcode), |
2019 1}; | 2018 kExprGetLocal, 0, |
2020 TestBuildingGraph(&zone, &jsgraph, &env, code, code + arraysize(code)); | 2019 kExprGetLocal, 1}; |
| 2020 TestBuildingGraph(&zone, &jsgraph, nullptr, sig, code, |
| 2021 code + arraysize(code)); |
2021 } | 2022 } |
2022 } | 2023 } |
2023 | 2024 |
2024 | 2025 |
2025 TEST(Build_Wasm_SimpleExprs) { | 2026 TEST(Build_Wasm_SimpleExprs) { |
2026 // Test that the decoder can build a graph for all supported simple expressions. | 2027 // Test that the decoder can build a graph for all supported simple expressions. |
2027 #define GRAPH_BUILD_TEST(name, opcode, sig) \ | 2028 #define GRAPH_BUILD_TEST(name, opcode, sig) \ |
2028 TestBuildGraphForSimpleExpression(kExpr##name); | 2029 TestBuildGraphForSimpleExpression(kExpr##name); |
2029 | 2030 |
2030 FOREACH_SIMPLE_OPCODE(GRAPH_BUILD_TEST); | 2031 FOREACH_SIMPLE_OPCODE(GRAPH_BUILD_TEST); |
(...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3339 | 3340 |
3340 #if WASM_64 | 3341 #if WASM_64 |
3341 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } | 3342 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } |
3342 #endif | 3343 #endif |
3343 | 3344 |
3344 | 3345 |
3345 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } | 3346 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } |
3346 | 3347 |
3347 | 3348 |
3348 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } | 3349 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } |
OLD | NEW |