| 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/common/wasm/test-signatures.h" | 9 #include "test/common/wasm/test-signatures.h" |
| 10 | 10 |
| (...skipping 1261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1272 } | 1272 } |
| 1273 } | 1273 } |
| 1274 } | 1274 } |
| 1275 } | 1275 } |
| 1276 | 1276 |
| 1277 namespace { | 1277 namespace { |
| 1278 // A helper for tests that require a module environment for functions and | 1278 // A helper for tests that require a module environment for functions and |
| 1279 // globals. | 1279 // globals. |
| 1280 class TestModuleEnv : public ModuleEnv { | 1280 class TestModuleEnv : public ModuleEnv { |
| 1281 public: | 1281 public: |
| 1282 TestModuleEnv() { | 1282 explicit TestModuleEnv(ModuleOrigin origin = kWasmOrigin) |
| 1283 instance = nullptr; | 1283 : ModuleEnv(&mod, nullptr) { |
| 1284 module = &mod; | 1284 mod.origin = origin; |
| 1285 } | 1285 } |
| 1286 byte AddGlobal(LocalType type, bool mutability = true) { | 1286 byte AddGlobal(LocalType type, bool mutability = true) { |
| 1287 mod.globals.push_back({type, mutability, WasmInitExpr(), 0, false, false}); | 1287 mod.globals.push_back({type, mutability, WasmInitExpr(), 0, false, false}); |
| 1288 CHECK(mod.globals.size() <= 127); | 1288 CHECK(mod.globals.size() <= 127); |
| 1289 return static_cast<byte>(mod.globals.size() - 1); | 1289 return static_cast<byte>(mod.globals.size() - 1); |
| 1290 } | 1290 } |
| 1291 byte AddSignature(FunctionSig* sig) { | 1291 byte AddSignature(FunctionSig* sig) { |
| 1292 mod.signatures.push_back(sig); | 1292 mod.signatures.push_back(sig); |
| 1293 CHECK(mod.signatures.size() <= 127); | 1293 CHECK(mod.signatures.size() <= 127); |
| 1294 return static_cast<byte>(mod.signatures.size() - 1); | 1294 return static_cast<byte>(mod.signatures.size() - 1); |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1647 } else { | 1647 } else { |
| 1648 EXPECT_FAILURE_S(&sig, WASM_SET_GLOBAL(0, WASM_GET_LOCAL(0))); | 1648 EXPECT_FAILURE_S(&sig, WASM_SET_GLOBAL(0, WASM_GET_LOCAL(0))); |
| 1649 } | 1649 } |
| 1650 } | 1650 } |
| 1651 } | 1651 } |
| 1652 } | 1652 } |
| 1653 | 1653 |
| 1654 TEST_F(AstDecoderTest, WasmGrowMemory) { | 1654 TEST_F(AstDecoderTest, WasmGrowMemory) { |
| 1655 TestModuleEnv module_env; | 1655 TestModuleEnv module_env; |
| 1656 module = &module_env; | 1656 module = &module_env; |
| 1657 module->origin = kWasmOrigin; | |
| 1658 | 1657 |
| 1659 byte code[] = {WASM_GET_LOCAL(0), kExprGrowMemory, 0}; | 1658 byte code[] = {WASM_GET_LOCAL(0), kExprGrowMemory, 0}; |
| 1660 EXPECT_VERIFIES_C(i_i, code); | 1659 EXPECT_VERIFIES_C(i_i, code); |
| 1661 EXPECT_FAILURE_C(i_d, code); | 1660 EXPECT_FAILURE_C(i_d, code); |
| 1662 } | 1661 } |
| 1663 | 1662 |
| 1664 TEST_F(AstDecoderTest, AsmJsGrowMemory) { | 1663 TEST_F(AstDecoderTest, AsmJsGrowMemory) { |
| 1665 TestModuleEnv module_env; | 1664 TestModuleEnv module_env(kAsmJsOrigin); |
| 1666 module = &module_env; | 1665 module = &module_env; |
| 1667 module->origin = kAsmJsOrigin; | |
| 1668 | 1666 |
| 1669 byte code[] = {WASM_GET_LOCAL(0), kExprGrowMemory, 0}; | 1667 byte code[] = {WASM_GET_LOCAL(0), kExprGrowMemory, 0}; |
| 1670 EXPECT_FAILURE_C(i_i, code); | 1668 EXPECT_FAILURE_C(i_i, code); |
| 1671 } | 1669 } |
| 1672 | 1670 |
| 1673 TEST_F(AstDecoderTest, AsmJsBinOpsCheckOrigin) { | 1671 TEST_F(AstDecoderTest, AsmJsBinOpsCheckOrigin) { |
| 1674 LocalType float32int32float32[] = {kAstF32, kAstI32, kAstF32}; | 1672 LocalType float32int32float32[] = {kAstF32, kAstI32, kAstF32}; |
| 1675 FunctionSig sig_f_if(1, 2, float32int32float32); | 1673 FunctionSig sig_f_if(1, 2, float32int32float32); |
| 1676 LocalType float64int32float64[] = {kAstF64, kAstI32, kAstF64}; | 1674 LocalType float64int32float64[] = {kAstF64, kAstI32, kAstF64}; |
| 1677 FunctionSig sig_d_id(1, 2, float64int32float64); | 1675 FunctionSig sig_d_id(1, 2, float64int32float64); |
| 1678 struct { | 1676 struct { |
| 1679 WasmOpcode op; | 1677 WasmOpcode op; |
| 1680 FunctionSig* sig; | 1678 FunctionSig* sig; |
| 1681 } AsmJsBinOps[] = { | 1679 } AsmJsBinOps[] = { |
| 1682 {kExprF64Atan2, sigs.d_dd()}, | 1680 {kExprF64Atan2, sigs.d_dd()}, |
| 1683 {kExprF64Pow, sigs.d_dd()}, | 1681 {kExprF64Pow, sigs.d_dd()}, |
| 1684 {kExprF64Mod, sigs.d_dd()}, | 1682 {kExprF64Mod, sigs.d_dd()}, |
| 1685 {kExprI32AsmjsDivS, sigs.i_ii()}, | 1683 {kExprI32AsmjsDivS, sigs.i_ii()}, |
| 1686 {kExprI32AsmjsDivU, sigs.i_ii()}, | 1684 {kExprI32AsmjsDivU, sigs.i_ii()}, |
| 1687 {kExprI32AsmjsRemS, sigs.i_ii()}, | 1685 {kExprI32AsmjsRemS, sigs.i_ii()}, |
| 1688 {kExprI32AsmjsRemU, sigs.i_ii()}, | 1686 {kExprI32AsmjsRemU, sigs.i_ii()}, |
| 1689 {kExprI32AsmjsStoreMem8, sigs.i_ii()}, | 1687 {kExprI32AsmjsStoreMem8, sigs.i_ii()}, |
| 1690 {kExprI32AsmjsStoreMem16, sigs.i_ii()}, | 1688 {kExprI32AsmjsStoreMem16, sigs.i_ii()}, |
| 1691 {kExprI32AsmjsStoreMem, sigs.i_ii()}, | 1689 {kExprI32AsmjsStoreMem, sigs.i_ii()}, |
| 1692 {kExprF32AsmjsStoreMem, &sig_f_if}, | 1690 {kExprF32AsmjsStoreMem, &sig_f_if}, |
| 1693 {kExprF64AsmjsStoreMem, &sig_d_id}, | 1691 {kExprF64AsmjsStoreMem, &sig_d_id}, |
| 1694 }; | 1692 }; |
| 1695 | 1693 |
| 1696 { | 1694 { |
| 1697 TestModuleEnv module_env; | 1695 TestModuleEnv module_env(kAsmJsOrigin); |
| 1698 module = &module_env; | 1696 module = &module_env; |
| 1699 module->origin = kAsmJsOrigin; | |
| 1700 for (size_t i = 0; i < arraysize(AsmJsBinOps); i++) { | 1697 for (size_t i = 0; i < arraysize(AsmJsBinOps); i++) { |
| 1701 TestBinop(AsmJsBinOps[i].op, AsmJsBinOps[i].sig); | 1698 TestBinop(AsmJsBinOps[i].op, AsmJsBinOps[i].sig); |
| 1702 } | 1699 } |
| 1703 } | 1700 } |
| 1704 | 1701 |
| 1705 { | 1702 { |
| 1706 TestModuleEnv module_env; | 1703 TestModuleEnv module_env; |
| 1707 module = &module_env; | 1704 module = &module_env; |
| 1708 module->origin = kWasmOrigin; | |
| 1709 for (size_t i = 0; i < arraysize(AsmJsBinOps); i++) { | 1705 for (size_t i = 0; i < arraysize(AsmJsBinOps); i++) { |
| 1710 byte code[] = { | 1706 byte code[] = { |
| 1711 WASM_BINOP(AsmJsBinOps[i].op, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))}; | 1707 WASM_BINOP(AsmJsBinOps[i].op, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))}; |
| 1712 EXPECT_FAILURE_SC(AsmJsBinOps[i].sig, code); | 1708 EXPECT_FAILURE_SC(AsmJsBinOps[i].sig, code); |
| 1713 } | 1709 } |
| 1714 } | 1710 } |
| 1715 } | 1711 } |
| 1716 | 1712 |
| 1717 TEST_F(AstDecoderTest, AsmJsUnOpsCheckOrigin) { | 1713 TEST_F(AstDecoderTest, AsmJsUnOpsCheckOrigin) { |
| 1718 LocalType float32int32[] = {kAstF32, kAstI32}; | 1714 LocalType float32int32[] = {kAstF32, kAstI32}; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1735 {kExprI32AsmjsLoadMem16S, sigs.i_i()}, | 1731 {kExprI32AsmjsLoadMem16S, sigs.i_i()}, |
| 1736 {kExprI32AsmjsLoadMem16U, sigs.i_i()}, | 1732 {kExprI32AsmjsLoadMem16U, sigs.i_i()}, |
| 1737 {kExprI32AsmjsLoadMem, sigs.i_i()}, | 1733 {kExprI32AsmjsLoadMem, sigs.i_i()}, |
| 1738 {kExprF32AsmjsLoadMem, &sig_f_i}, | 1734 {kExprF32AsmjsLoadMem, &sig_f_i}, |
| 1739 {kExprF64AsmjsLoadMem, &sig_d_i}, | 1735 {kExprF64AsmjsLoadMem, &sig_d_i}, |
| 1740 {kExprI32AsmjsSConvertF32, sigs.i_f()}, | 1736 {kExprI32AsmjsSConvertF32, sigs.i_f()}, |
| 1741 {kExprI32AsmjsUConvertF32, sigs.i_f()}, | 1737 {kExprI32AsmjsUConvertF32, sigs.i_f()}, |
| 1742 {kExprI32AsmjsSConvertF64, sigs.i_d()}, | 1738 {kExprI32AsmjsSConvertF64, sigs.i_d()}, |
| 1743 {kExprI32AsmjsUConvertF64, sigs.i_d()}}; | 1739 {kExprI32AsmjsUConvertF64, sigs.i_d()}}; |
| 1744 { | 1740 { |
| 1745 TestModuleEnv module_env; | 1741 TestModuleEnv module_env(kAsmJsOrigin); |
| 1746 module = &module_env; | 1742 module = &module_env; |
| 1747 module->origin = kAsmJsOrigin; | |
| 1748 for (size_t i = 0; i < arraysize(AsmJsUnOps); i++) { | 1743 for (size_t i = 0; i < arraysize(AsmJsUnOps); i++) { |
| 1749 TestUnop(AsmJsUnOps[i].op, AsmJsUnOps[i].sig); | 1744 TestUnop(AsmJsUnOps[i].op, AsmJsUnOps[i].sig); |
| 1750 } | 1745 } |
| 1751 } | 1746 } |
| 1752 | 1747 |
| 1753 { | 1748 { |
| 1754 TestModuleEnv module_env; | 1749 TestModuleEnv module_env; |
| 1755 module = &module_env; | 1750 module = &module_env; |
| 1756 module->origin = kWasmOrigin; | |
| 1757 for (size_t i = 0; i < arraysize(AsmJsUnOps); i++) { | 1751 for (size_t i = 0; i < arraysize(AsmJsUnOps); i++) { |
| 1758 byte code[] = {WASM_UNOP(AsmJsUnOps[i].op, WASM_GET_LOCAL(0))}; | 1752 byte code[] = {WASM_UNOP(AsmJsUnOps[i].op, WASM_GET_LOCAL(0))}; |
| 1759 EXPECT_FAILURE_SC(AsmJsUnOps[i].sig, code); | 1753 EXPECT_FAILURE_SC(AsmJsUnOps[i].sig, code); |
| 1760 } | 1754 } |
| 1761 } | 1755 } |
| 1762 } | 1756 } |
| 1763 | 1757 |
| 1764 TEST_F(AstDecoderTest, BreakEnd) { | 1758 TEST_F(AstDecoderTest, BreakEnd) { |
| 1765 EXPECT_VERIFIES( | 1759 EXPECT_VERIFIES( |
| 1766 i_i, WASM_BLOCK_I(WASM_I32_ADD(WASM_BRV(0, WASM_ZERO), WASM_ZERO))); | 1760 i_i, WASM_BLOCK_I(WASM_I32_ADD(WASM_BRV(0, WASM_ZERO), WASM_ZERO))); |
| (...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2709 iter.next(); | 2703 iter.next(); |
| 2710 EXPECT_TRUE(iter.has_next()); | 2704 EXPECT_TRUE(iter.has_next()); |
| 2711 EXPECT_EQ(kExprI8Const, iter.current()); | 2705 EXPECT_EQ(kExprI8Const, iter.current()); |
| 2712 iter.next(); | 2706 iter.next(); |
| 2713 EXPECT_FALSE(iter.has_next()); | 2707 EXPECT_FALSE(iter.has_next()); |
| 2714 } | 2708 } |
| 2715 | 2709 |
| 2716 } // namespace wasm | 2710 } // namespace wasm |
| 2717 } // namespace internal | 2711 } // namespace internal |
| 2718 } // namespace v8 | 2712 } // namespace v8 |
| OLD | NEW |