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 "test/unittests/test-utils.h" | 5 #include "test/unittests/test-utils.h" |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #include "test/cctest/wasm/test-signatures.h" | 9 #include "test/cctest/wasm/test-signatures.h" |
10 | 10 |
(...skipping 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1185 // globals. | 1185 // globals. |
1186 class TestModuleEnv : public ModuleEnv { | 1186 class TestModuleEnv : public ModuleEnv { |
1187 public: | 1187 public: |
1188 TestModuleEnv() { | 1188 TestModuleEnv() { |
1189 instance = nullptr; | 1189 instance = nullptr; |
1190 module = &mod; | 1190 module = &mod; |
1191 linker = nullptr; | 1191 linker = nullptr; |
1192 mod.globals = new std::vector<WasmGlobal>; | 1192 mod.globals = new std::vector<WasmGlobal>; |
1193 mod.signatures = new std::vector<FunctionSig*>; | 1193 mod.signatures = new std::vector<FunctionSig*>; |
1194 mod.functions = new std::vector<WasmFunction>; | 1194 mod.functions = new std::vector<WasmFunction>; |
| 1195 mod.import_table = new std::vector<WasmImport>; |
1195 } | 1196 } |
1196 byte AddGlobal(MachineType mem_type) { | 1197 byte AddGlobal(MachineType mem_type) { |
1197 mod.globals->push_back({0, mem_type, 0, false}); | 1198 mod.globals->push_back({0, mem_type, 0, false}); |
1198 CHECK(mod.globals->size() <= 127); | 1199 CHECK(mod.globals->size() <= 127); |
1199 return static_cast<byte>(mod.globals->size() - 1); | 1200 return static_cast<byte>(mod.globals->size() - 1); |
1200 } | 1201 } |
1201 byte AddSignature(FunctionSig* sig) { | 1202 byte AddSignature(FunctionSig* sig) { |
1202 mod.signatures->push_back(sig); | 1203 mod.signatures->push_back(sig); |
1203 CHECK(mod.signatures->size() <= 127); | 1204 CHECK(mod.signatures->size() <= 127); |
1204 return static_cast<byte>(mod.signatures->size() - 1); | 1205 return static_cast<byte>(mod.signatures->size() - 1); |
1205 } | 1206 } |
1206 byte AddFunction(FunctionSig* sig) { | 1207 byte AddFunction(FunctionSig* sig) { |
1207 mod.functions->push_back({sig, 0, 0, 0, 0, 0, 0, 0, false, false}); | 1208 mod.functions->push_back({sig, 0, 0, 0, 0, 0, 0, 0, false, false}); |
1208 CHECK(mod.functions->size() <= 127); | 1209 CHECK(mod.functions->size() <= 127); |
1209 return static_cast<byte>(mod.functions->size() - 1); | 1210 return static_cast<byte>(mod.functions->size() - 1); |
1210 } | 1211 } |
| 1212 byte AddImport(FunctionSig* sig) { |
| 1213 mod.import_table->push_back({sig, 0, 0}); |
| 1214 CHECK(mod.import_table->size() <= 127); |
| 1215 return static_cast<byte>(mod.import_table->size() - 1); |
| 1216 } |
1211 | 1217 |
1212 private: | 1218 private: |
1213 WasmModule mod; | 1219 WasmModule mod; |
1214 }; | 1220 }; |
1215 } // namespace | 1221 } // namespace |
1216 | 1222 |
1217 | 1223 |
1218 TEST_F(WasmDecoderTest, SimpleCalls) { | 1224 TEST_F(WasmDecoderTest, SimpleCalls) { |
1219 FunctionEnv* env = &env_i_i; | 1225 FunctionEnv* env = &env_i_i; |
1220 TestModuleEnv module_env; | 1226 TestModuleEnv module_env; |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1357 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT0(f0, WASM_I64(27))); | 1363 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT0(f0, WASM_I64(27))); |
1358 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT0(f0, WASM_F64(37.2))); | 1364 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT0(f0, WASM_F64(37.2))); |
1359 | 1365 |
1360 byte f1 = module_env.AddFunction(sigs.i_d()); | 1366 byte f1 = module_env.AddFunction(sigs.i_d()); |
1361 | 1367 |
1362 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT(f1, WASM_ZERO, WASM_I8(16))); | 1368 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT(f1, WASM_ZERO, WASM_I8(16))); |
1363 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT(f1, WASM_ZERO, WASM_I64(16))); | 1369 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT(f1, WASM_ZERO, WASM_I64(16))); |
1364 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT(f1, WASM_ZERO, WASM_F32(17.6))); | 1370 EXPECT_FAILURE_INLINE(env, WASM_CALL_INDIRECT(f1, WASM_ZERO, WASM_F32(17.6))); |
1365 } | 1371 } |
1366 | 1372 |
| 1373 TEST_F(WasmDecoderTest, SimpleImportCalls) { |
| 1374 FunctionEnv* env = &env_i_i; |
| 1375 TestModuleEnv module_env; |
| 1376 env->module = &module_env; |
| 1377 |
| 1378 byte f0 = module_env.AddImport(sigs.i_v()); |
| 1379 byte f1 = module_env.AddImport(sigs.i_i()); |
| 1380 byte f2 = module_env.AddImport(sigs.i_ii()); |
| 1381 |
| 1382 EXPECT_VERIFIES_INLINE(env, WASM_CALL_IMPORT0(f0)); |
| 1383 EXPECT_VERIFIES_INLINE(env, WASM_CALL_IMPORT(f1, WASM_I8(22))); |
| 1384 EXPECT_VERIFIES_INLINE(env, WASM_CALL_IMPORT(f2, WASM_I8(32), WASM_I8(72))); |
| 1385 } |
| 1386 |
| 1387 TEST_F(WasmDecoderTest, ImportCallsWithMismatchedSigs3) { |
| 1388 FunctionEnv* env = &env_i_i; |
| 1389 TestModuleEnv module_env; |
| 1390 env->module = &module_env; |
| 1391 |
| 1392 byte f0 = module_env.AddImport(sigs.i_f()); |
| 1393 |
| 1394 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT0(f0)); |
| 1395 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT(f0, WASM_I8(17))); |
| 1396 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT(f0, WASM_I64(27))); |
| 1397 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT(f0, WASM_F64(37.2))); |
| 1398 |
| 1399 byte f1 = module_env.AddImport(sigs.i_d()); |
| 1400 |
| 1401 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT0(f1)); |
| 1402 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT(f1, WASM_I8(16))); |
| 1403 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT(f1, WASM_I64(16))); |
| 1404 EXPECT_FAILURE_INLINE(env, WASM_CALL_IMPORT(f1, WASM_F32(17.6))); |
| 1405 } |
1367 | 1406 |
1368 TEST_F(WasmDecoderTest, Int32Globals) { | 1407 TEST_F(WasmDecoderTest, Int32Globals) { |
1369 FunctionEnv* env = &env_i_i; | 1408 FunctionEnv* env = &env_i_i; |
1370 TestModuleEnv module_env; | 1409 TestModuleEnv module_env; |
1371 env->module = &module_env; | 1410 env->module = &module_env; |
1372 | 1411 |
1373 module_env.AddGlobal(MachineType::Int8()); | 1412 module_env.AddGlobal(MachineType::Int8()); |
1374 module_env.AddGlobal(MachineType::Uint8()); | 1413 module_env.AddGlobal(MachineType::Uint8()); |
1375 module_env.AddGlobal(MachineType::Int16()); | 1414 module_env.AddGlobal(MachineType::Int16()); |
1376 module_env.AddGlobal(MachineType::Uint16()); | 1415 module_env.AddGlobal(MachineType::Uint16()); |
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1980 EXPECT_LENGTH(2, kExprI8Const); | 2019 EXPECT_LENGTH(2, kExprI8Const); |
1981 EXPECT_LENGTH(5, kExprI32Const); | 2020 EXPECT_LENGTH(5, kExprI32Const); |
1982 EXPECT_LENGTH(5, kExprF32Const); | 2021 EXPECT_LENGTH(5, kExprF32Const); |
1983 EXPECT_LENGTH(9, kExprI64Const); | 2022 EXPECT_LENGTH(9, kExprI64Const); |
1984 EXPECT_LENGTH(9, kExprF64Const); | 2023 EXPECT_LENGTH(9, kExprF64Const); |
1985 EXPECT_LENGTH(2, kExprGetLocal); | 2024 EXPECT_LENGTH(2, kExprGetLocal); |
1986 EXPECT_LENGTH(2, kExprSetLocal); | 2025 EXPECT_LENGTH(2, kExprSetLocal); |
1987 EXPECT_LENGTH(2, kExprLoadGlobal); | 2026 EXPECT_LENGTH(2, kExprLoadGlobal); |
1988 EXPECT_LENGTH(2, kExprStoreGlobal); | 2027 EXPECT_LENGTH(2, kExprStoreGlobal); |
1989 EXPECT_LENGTH(2, kExprCallFunction); | 2028 EXPECT_LENGTH(2, kExprCallFunction); |
| 2029 EXPECT_LENGTH(2, kExprCallImport); |
1990 EXPECT_LENGTH(2, kExprCallIndirect); | 2030 EXPECT_LENGTH(2, kExprCallIndirect); |
1991 EXPECT_LENGTH(1, kExprIf); | 2031 EXPECT_LENGTH(1, kExprIf); |
1992 EXPECT_LENGTH(1, kExprIfElse); | 2032 EXPECT_LENGTH(1, kExprIfElse); |
1993 EXPECT_LENGTH(2, kExprBlock); | 2033 EXPECT_LENGTH(2, kExprBlock); |
1994 EXPECT_LENGTH(2, kExprLoop); | 2034 EXPECT_LENGTH(2, kExprLoop); |
1995 EXPECT_LENGTH(2, kExprBr); | 2035 EXPECT_LENGTH(2, kExprBr); |
1996 EXPECT_LENGTH(2, kExprBrIf); | 2036 EXPECT_LENGTH(2, kExprBrIf); |
1997 } | 2037 } |
1998 | 2038 |
1999 | 2039 |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2230 | 2270 |
2231 TEST_F(WasmOpcodeArityTest, Calls) { | 2271 TEST_F(WasmOpcodeArityTest, Calls) { |
2232 TestSignatures sigs; | 2272 TestSignatures sigs; |
2233 TestModuleEnv module; | 2273 TestModuleEnv module; |
2234 module.AddFunction(sigs.i_ii()); | 2274 module.AddFunction(sigs.i_ii()); |
2235 module.AddFunction(sigs.i_i()); | 2275 module.AddFunction(sigs.i_i()); |
2236 | 2276 |
2237 module.AddSignature(sigs.f_ff()); | 2277 module.AddSignature(sigs.f_ff()); |
2238 module.AddSignature(sigs.i_d()); | 2278 module.AddSignature(sigs.i_d()); |
2239 | 2279 |
| 2280 module.AddImport(sigs.f_ff()); |
| 2281 module.AddImport(sigs.i_d()); |
| 2282 |
2240 { | 2283 { |
2241 FunctionEnv env; | 2284 FunctionEnv env; |
2242 WasmDecoderTest::init_env(&env, sigs.i_ii()); | 2285 WasmDecoderTest::init_env(&env, sigs.i_ii()); |
2243 env.module = &module; | 2286 env.module = &module; |
2244 | 2287 |
2245 EXPECT_ARITY(2, kExprCallFunction, 0); | 2288 EXPECT_ARITY(2, kExprCallFunction, 0); |
| 2289 EXPECT_ARITY(2, kExprCallImport, 0); |
2246 EXPECT_ARITY(3, kExprCallIndirect, 0); | 2290 EXPECT_ARITY(3, kExprCallIndirect, 0); |
2247 EXPECT_ARITY(1, kExprBr); | 2291 EXPECT_ARITY(1, kExprBr); |
2248 EXPECT_ARITY(2, kExprBrIf); | 2292 EXPECT_ARITY(2, kExprBrIf); |
2249 } | 2293 } |
2250 | 2294 |
2251 { | 2295 { |
2252 FunctionEnv env; | 2296 FunctionEnv env; |
2253 WasmDecoderTest::init_env(&env, sigs.v_v()); | 2297 WasmDecoderTest::init_env(&env, sigs.v_v()); |
2254 env.module = &module; | 2298 env.module = &module; |
2255 | 2299 |
2256 EXPECT_ARITY(1, kExprCallFunction, 1); | 2300 EXPECT_ARITY(1, kExprCallFunction, 1); |
| 2301 EXPECT_ARITY(1, kExprCallImport, 1); |
2257 EXPECT_ARITY(2, kExprCallIndirect, 1); | 2302 EXPECT_ARITY(2, kExprCallIndirect, 1); |
2258 EXPECT_ARITY(1, kExprBr); | 2303 EXPECT_ARITY(1, kExprBr); |
2259 EXPECT_ARITY(2, kExprBrIf); | 2304 EXPECT_ARITY(2, kExprBrIf); |
2260 } | 2305 } |
2261 } | 2306 } |
2262 | 2307 |
2263 | 2308 |
2264 TEST_F(WasmOpcodeArityTest, LoadsAndStores) { | 2309 TEST_F(WasmOpcodeArityTest, LoadsAndStores) { |
2265 FunctionEnv env; | 2310 FunctionEnv env; |
2266 | 2311 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2418 EXPECT_ARITY(1, kExprF64SConvertI64); | 2463 EXPECT_ARITY(1, kExprF64SConvertI64); |
2419 EXPECT_ARITY(1, kExprF64UConvertI64); | 2464 EXPECT_ARITY(1, kExprF64UConvertI64); |
2420 EXPECT_ARITY(1, kExprF64ConvertF32); | 2465 EXPECT_ARITY(1, kExprF64ConvertF32); |
2421 EXPECT_ARITY(1, kExprF64ReinterpretI64); | 2466 EXPECT_ARITY(1, kExprF64ReinterpretI64); |
2422 EXPECT_ARITY(1, kExprI32ReinterpretF32); | 2467 EXPECT_ARITY(1, kExprI32ReinterpretF32); |
2423 EXPECT_ARITY(1, kExprI64ReinterpretF64); | 2468 EXPECT_ARITY(1, kExprI64ReinterpretF64); |
2424 } | 2469 } |
2425 } // namespace wasm | 2470 } // namespace wasm |
2426 } // namespace internal | 2471 } // namespace internal |
2427 } // namespace v8 | 2472 } // namespace v8 |
OLD | NEW |