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

Side by Side Diff: test/unittests/wasm/ast-decoder-unittest.cc

Issue 1764723002: [wasm] Remove TableSwitch and replace with br_table. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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 unified diff | Download patch
OLDNEW
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 1649 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 EXPECT_VERIFIES(&env, code1); 1660 EXPECT_VERIFIES(&env, code1);
1661 EXPECT_VERIFIES(&env, code2); 1661 EXPECT_VERIFIES(&env, code2);
1662 } else { 1662 } else {
1663 EXPECT_FAILURE(&env, code1); 1663 EXPECT_FAILURE(&env, code1);
1664 EXPECT_FAILURE(&env, code2); 1664 EXPECT_FAILURE(&env, code2);
1665 } 1665 }
1666 } 1666 }
1667 } 1667 }
1668 } 1668 }
1669 1669
1670 TEST_F(AstDecoderTest, TableSwitch0) { 1670 TEST_F(AstDecoderTest, BrTable0) {
1671 static byte code[] = {kExprTableSwitch, 0, 0, 0, 0}; 1671 static byte code[] = {kExprBrTable, 0, 0};
1672 EXPECT_FAILURE(&env_v_v, code); 1672 EXPECT_FAILURE(&env_v_v, code);
1673 } 1673 }
1674 1674
1675 TEST_F(AstDecoderTest, TableSwitch0b) { 1675 TEST_F(AstDecoderTest, BrTable0b) {
1676 static byte code[] = {kExprTableSwitch, 0, 0, 0, 0, kExprI8Const, 11}; 1676 static byte code[] = {kExprBrTable, 0, 0, kExprI8Const, 11};
1677 EXPECT_FAILURE(&env_v_v, code); 1677 EXPECT_FAILURE(&env_v_v, code);
1678 EXPECT_FAILURE(&env_i_i, code); 1678 EXPECT_FAILURE(&env_i_i, code);
1679 } 1679 }
1680 1680
1681 TEST_F(AstDecoderTest, TableSwitch0c) { 1681 TEST_F(AstDecoderTest, BrTable0c) {
1682 static byte code[] = {kExprBrTable, 0, 1, 0, 0, kExprI8Const, 11};
1683 EXPECT_FAILURE(&env_v_v, code);
1684 EXPECT_FAILURE(&env_i_i, code);
1685 }
1686
1687 TEST_F(AstDecoderTest, BrTable1a) {
1682 static byte code[] = { 1688 static byte code[] = {
1683 WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(0)), WASM_I8(67))}; 1689 WASM_BLOCK(1, WASM_BR_TABLE(WASM_I8(67), 1, BR_TARGET(0)))};
1684 EXPECT_VERIFIES(&env_v_v, code); 1690 EXPECT_VERIFIES(&env_v_v, code);
1685 } 1691 }
1686 1692
1687 TEST_F(AstDecoderTest, TableSwitch0d) { 1693 TEST_F(AstDecoderTest, BrTable1b) {
1688 static byte code[] = { 1694 static byte code[] = {
1689 WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 2, WASM_CASE_BR(0), WASM_CASE_BR(1)), 1695 WASM_BLOCK(1, WASM_BR_TABLE(WASM_ZERO, 1, BR_TARGET(0)))};
1690 WASM_I8(67))};
1691 EXPECT_VERIFIES(&env_v_v, code); 1696 EXPECT_VERIFIES(&env_v_v, code);
1692 } 1697 EXPECT_FAILURE(&env_i_i, code);
1693
1694 TEST_F(AstDecoderTest, TableSwitch1) {
1695 static byte code[] = {WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
1696 WASM_TABLESWITCH_BODY(WASM_I8(0), WASM_I8(9))};
1697 EXPECT_VERIFIES(&env_i_i, code);
1698 EXPECT_VERIFIES(&env_v_v, code);
1699 EXPECT_FAILURE(&env_f_ff, code); 1698 EXPECT_FAILURE(&env_f_ff, code);
1700 EXPECT_FAILURE(&env_d_dd, code); 1699 EXPECT_FAILURE(&env_d_dd, code);
1701 } 1700 }
1702 1701
1703 TEST_F(AstDecoderTest, TableSwitch_off_end) { 1702 TEST_F(AstDecoderTest, BrTable2a) {
1704 static byte code[] = {WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)), 1703 static byte code[] = {
1705 WASM_TABLESWITCH_BODY(WASM_I8(0), WASM_I8(9))}; 1704 WASM_BLOCK(1, WASM_BR_TABLE(WASM_I8(67), 2, BR_TARGET(0), BR_TARGET(0)))};
1706 for (size_t len = arraysize(code) - 1; len > 0; len--) { 1705 EXPECT_VERIFIES(&env_v_v, code);
1707 Verify(kError, &env_v_v, code, code + len); 1706 }
1707
1708 TEST_F(AstDecoderTest, BrTable2b) {
1709 static byte code[] = {WASM_BLOCK(
1710 1, WASM_BLOCK(
1711 1, WASM_BR_TABLE(WASM_I8(67), 2, BR_TARGET(0), BR_TARGET(1))))};
1712 EXPECT_VERIFIES(&env_v_v, code);
1713 }
1714
1715 TEST_F(AstDecoderTest, BrTable_off_end) {
1716 static byte code[] = {
1717 WASM_BLOCK(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(0)))};
1718 for (size_t len = 1; len < sizeof(code); len++) {
1719 Verify(kError, &env_i_i, code, code + len);
1708 } 1720 }
1709 } 1721 }
1710 1722
1711 TEST_F(AstDecoderTest, TableSwitch2) { 1723 TEST_F(AstDecoderTest, BrTable_invalid_br1) {
1712 static byte code[] = { 1724 for (int depth = 0; depth < 4; depth++) {
1713 WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)), 1725 byte code[] = {
1714 WASM_TABLESWITCH_BODY(WASM_I8(3), WASM_I8(10), WASM_I8(11))}; 1726 WASM_BLOCK(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(depth)))};
1715 EXPECT_VERIFIES(&env_i_i, code); 1727 if (depth == 0) {
1716 EXPECT_VERIFIES(&env_v_v, code); 1728 EXPECT_VERIFIES(&env_v_i, code);
1717 EXPECT_FAILURE(&env_f_ff, code); 1729 } else {
1718 EXPECT_FAILURE(&env_d_dd, code); 1730 EXPECT_FAILURE(&env_v_i, code);
1719 } 1731 }
1720
1721 TEST_F(AstDecoderTest, TableSwitch1b) {
1722 EXPECT_VERIFIES_INLINE(&env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
1723 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_ZERO));
1724
1725 EXPECT_VERIFIES_INLINE(&env_f_ff, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
1726 WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_F32(0.0)));
1727
1728 EXPECT_VERIFIES_INLINE(&env_d_dd, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
1729 WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_F64(0.0)));
1730 }
1731
1732 TEST_F(AstDecoderTest, TableSwitch_br1) {
1733 for (int depth = 0; depth < 2; depth++) {
1734 byte code[] = {WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(depth)),
1735 WASM_GET_LOCAL(0))};
1736 EXPECT_VERIFIES(&env_v_i, code);
1737 EXPECT_FAILURE(&env_i_i, code);
1738 } 1732 }
1739 } 1733 }
1740 1734
1741 TEST_F(AstDecoderTest, TableSwitch_invalid_br) { 1735 TEST_F(AstDecoderTest, BrTable_invalid_br2) {
1742 for (int depth = 1; depth < 4; depth++) { 1736 for (int depth = 0; depth < 4; depth++) {
1743 EXPECT_FAILURE_INLINE(&env_v_i, 1737 byte code[] = {
1744 WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(depth)), 1738 WASM_LOOP(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(depth)))};
1745 WASM_GET_LOCAL(0)); 1739 if (depth <= 1) {
1746 EXPECT_FAILURE_INLINE( 1740 EXPECT_VERIFIES(&env_v_i, code);
1747 &env_v_i, 1741 } else {
1748 WASM_TABLESWITCH_OP(0, 2, WASM_CASE_BR(depth), WASM_CASE_BR(depth)), 1742 EXPECT_FAILURE(&env_v_i, code);
1749 WASM_GET_LOCAL(0)); 1743 }
1750 } 1744 }
1751 } 1745 }
1752 1746
1753 TEST_F(AstDecoderTest, TableSwitch_invalid_case_ref) {
1754 EXPECT_FAILURE_INLINE(&env_i_i, WASM_TABLESWITCH_OP(0, 1, WASM_CASE(0)),
1755 WASM_GET_LOCAL(0));
1756 EXPECT_FAILURE_INLINE(&env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(1)),
1757 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_ZERO));
1758 }
1759
1760 TEST_F(AstDecoderTest, TableSwitch1_br) {
1761 EXPECT_VERIFIES_INLINE(
1762 &env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
1763 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_ZERO)));
1764 }
1765
1766 TEST_F(AstDecoderTest, TableSwitch2_br) {
1767 EXPECT_VERIFIES_INLINE(
1768 &env_i_i, WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)),
1769 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_I8(0)),
1770 WASM_BRV(0, WASM_I8(1))));
1771
1772 EXPECT_FAILURE_INLINE(
1773 &env_f_ff, WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)),
1774 WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_BRV(0, WASM_I8(3)),
1775 WASM_BRV(0, WASM_I8(4))));
1776 }
1777
1778 TEST_F(AstDecoderTest, TableSwitch2x2) {
1779 EXPECT_VERIFIES_INLINE(
1780 &env_i_i, WASM_TABLESWITCH_OP(2, 4, WASM_CASE(0), WASM_CASE(1),
1781 WASM_CASE(0), WASM_CASE(1)),
1782 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_I8(3)),
1783 WASM_BRV(0, WASM_I8(4))));
1784 }
1785
1786 TEST_F(AstDecoderTest, ExprBreakNesting1) { 1747 TEST_F(AstDecoderTest, ExprBreakNesting1) {
1787 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BRV(0, WASM_ZERO))); 1748 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BRV(0, WASM_ZERO)));
1788 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR(0))); 1749 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR(0)));
1789 EXPECT_VERIFIES_INLINE(&env_v_v, 1750 EXPECT_VERIFIES_INLINE(&env_v_v,
1790 WASM_BLOCK(1, WASM_BRV_IF(0, WASM_ZERO, WASM_ZERO))); 1751 WASM_BLOCK(1, WASM_BRV_IF(0, WASM_ZERO, WASM_ZERO)));
1791 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR_IF(0, WASM_ZERO))); 1752 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR_IF(0, WASM_ZERO)));
1792 1753
1793 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BRV(0, WASM_ZERO))); 1754 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BRV(0, WASM_ZERO)));
1794 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BR(0))); 1755 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BR(0)));
1795 EXPECT_VERIFIES_INLINE(&env_v_v, 1756 EXPECT_VERIFIES_INLINE(&env_v_v,
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
2332 EXPECT_ARITY(1, kExprF64SConvertI64); 2293 EXPECT_ARITY(1, kExprF64SConvertI64);
2333 EXPECT_ARITY(1, kExprF64UConvertI64); 2294 EXPECT_ARITY(1, kExprF64UConvertI64);
2334 EXPECT_ARITY(1, kExprF64ConvertF32); 2295 EXPECT_ARITY(1, kExprF64ConvertF32);
2335 EXPECT_ARITY(1, kExprF64ReinterpretI64); 2296 EXPECT_ARITY(1, kExprF64ReinterpretI64);
2336 EXPECT_ARITY(1, kExprI32ReinterpretF32); 2297 EXPECT_ARITY(1, kExprI32ReinterpretF32);
2337 EXPECT_ARITY(1, kExprI64ReinterpretF64); 2298 EXPECT_ARITY(1, kExprI64ReinterpretF64);
2338 } 2299 }
2339 } // namespace wasm 2300 } // namespace wasm
2340 } // namespace internal 2301 } // namespace internal
2341 } // namespace v8 2302 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698