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

Side by Side Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1688283003: [Interpreter] Implements calls through CallICStub in the interpreter. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/interpreter/bytecode-array-iterator.h" 8 #include "src/interpreter/bytecode-array-iterator.h"
9 #include "src/interpreter/bytecode-generator.h" 9 #include "src/interpreter/bytecode-generator.h"
10 #include "src/interpreter/interpreter.h" 10 #include "src/interpreter/interpreter.h"
(...skipping 1579 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 {"function f(a) { return a.func(); }\nf(" FUNC_ARG ")", 1590 {"function f(a) { return a.func(); }\nf(" FUNC_ARG ")",
1591 2 * kPointerSize, 1591 2 * kPointerSize,
1592 2, 1592 2,
1593 17, 1593 17,
1594 { 1594 {
1595 B(StackCheck), // 1595 B(StackCheck), //
1596 B(Ldar), A(1, 2), // 1596 B(Ldar), A(1, 2), //
1597 B(Star), R(1), // 1597 B(Star), R(1), //
1598 B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), // 1598 B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), //
1599 B(Star), R(0), // 1599 B(Star), R(0), //
1600 B(Call), R(0), R(1), U8(1), U8(vector->GetIndex(slot1)), // 1600 B(CallIC), R(0), R(1), U8(1), U8(vector->GetIndex(slot1)), //
1601 B(Return), // 1601 B(Return), //
1602 }, 1602 },
1603 1, 1603 1,
1604 {"func"}}, 1604 {"func"}},
1605 {"function f(a, b, c) { return a.func(b, c); }\nf(" FUNC_ARG ", 1, 2)", 1605 {"function f(a, b, c) { return a.func(b, c); }\nf(" FUNC_ARG ", 1, 2)",
1606 4 * kPointerSize, 1606 4 * kPointerSize,
1607 4, 1607 4,
1608 25, 1608 25,
1609 { 1609 {
1610 B(StackCheck), // 1610 B(StackCheck), //
1611 B(Ldar), A(1, 4), // 1611 B(Ldar), A(1, 4), //
1612 B(Star), R(1), // 1612 B(Star), R(1), //
1613 B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), // 1613 B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), //
1614 B(Star), R(0), // 1614 B(Star), R(0), //
1615 B(Ldar), A(2, 4), // 1615 B(Ldar), A(2, 4), //
1616 B(Star), R(2), // 1616 B(Star), R(2), //
1617 B(Ldar), A(3, 4), // 1617 B(Ldar), A(3, 4), //
1618 B(Star), R(3), // 1618 B(Star), R(3), //
1619 B(Call), R(0), R(1), U8(3), U8(vector->GetIndex(slot1)), // 1619 B(CallIC), R(0), R(1), U8(3), U8(vector->GetIndex(slot1)), //
1620 B(Return) // 1620 B(Return) //
1621 }, 1621 },
1622 1, 1622 1,
1623 {"func"}}, 1623 {"func"}},
1624 {"function f(a, b) { return a.func(b + b, b); }\nf(" FUNC_ARG ", 1)", 1624 {"function f(a, b) { return a.func(b + b, b); }\nf(" FUNC_ARG ", 1)",
1625 4 * kPointerSize, 1625 4 * kPointerSize,
1626 3, 1626 3,
1627 31, 1627 31,
1628 { 1628 {
1629 B(StackCheck), // 1629 B(StackCheck), //
1630 B(Ldar), A(1, 3), // 1630 B(Ldar), A(1, 3), //
1631 B(Star), R(1), // 1631 B(Star), R(1), //
1632 B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), // 1632 B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), //
1633 B(Star), R(0), // 1633 B(Star), R(0), //
1634 B(Ldar), A(2, 3), // 1634 B(Ldar), A(2, 3), //
1635 B(Star), R(3), // 1635 B(Star), R(3), //
1636 B(Ldar), A(2, 3), // 1636 B(Ldar), A(2, 3), //
1637 B(Add), R(3), // 1637 B(Add), R(3), //
1638 B(Star), R(2), // 1638 B(Star), R(2), //
1639 B(Ldar), A(2, 3), // 1639 B(Ldar), A(2, 3), //
1640 B(Star), R(3), // 1640 B(Star), R(3), //
1641 B(Call), R(0), R(1), U8(3), U8(vector->GetIndex(slot1)), // 1641 B(CallIC), R(0), R(1), U8(3), U8(vector->GetIndex(slot1)), //
1642 B(Return), // 1642 B(Return), //
1643 }, 1643 },
1644 1, 1644 1,
1645 {"func"}}, 1645 {"func"}},
1646 {"function f(a) {\n" 1646 {"function f(a) {\n"
1647 " a.func;\n" REPEAT_127( 1647 " a.func;\n" REPEAT_127(
1648 SPACE, " a.func;\n") " return a.func(); }\nf(" FUNC_ARG ")", 1648 SPACE, " a.func;\n") " return a.func(); }\nf(" FUNC_ARG ")",
1649 2 * kPointerSize, 1649 2 * kPointerSize,
1650 2, 1650 2,
1651 1047, 1651 1047,
1652 { 1652 {
1653 B(StackCheck), // 1653 B(StackCheck), //
1654 B(Ldar), A(1, 2), // 1654 B(Ldar), A(1, 2), //
1655 B(Star), R(0), // 1655 B(Star), R(0), //
1656 B(LoadICSloppy), R(0), U8(0), U8(wide_idx += 2), // 1656 B(LoadICSloppy), R(0), U8(0), U8(wide_idx += 2), //
1657 REPEAT_127(COMMA, // 1657 REPEAT_127(COMMA, //
1658 B(Ldar), A(1, 2), // 1658 B(Ldar), A(1, 2), //
1659 B(Star), R(0), // 1659 B(Star), R(0), //
1660 B(LoadICSloppy), R(0), U8(0), U8((wide_idx += 2))), // 1660 B(LoadICSloppy), R(0), U8(0), U8((wide_idx += 2))), //
1661 B(Ldar), A(1, 2), // 1661 B(Ldar), A(1, 2), //
1662 B(Star), R(1), // 1662 B(Star), R(1), //
1663 B(LoadICSloppyWide), R(1), U16(0), U16(wide_idx + 4), // 1663 B(LoadICSloppyWide), R(1), U16(0), U16(wide_idx + 4), //
1664 B(Star), R(0), // 1664 B(Star), R(0), //
1665 B(CallWide), R16(0), R16(1), U16(1), U16(wide_idx + 2), // 1665 B(CallICWide), R16(0), R16(1), U16(1), U16(wide_idx + 2), //
1666 B(Return), // 1666 B(Return), //
1667 }, 1667 },
1668 1, 1668 1,
1669 {"func"}}, 1669 {"func"}},
1670 }; 1670 };
1671 // clang-format on 1671 // clang-format on
1672 1672
1673 for (size_t i = 0; i < arraysize(snippets); i++) { 1673 for (size_t i = 0; i < arraysize(snippets); i++) {
1674 Handle<BytecodeArray> bytecode_array = 1674 Handle<BytecodeArray> bytecode_array =
1675 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); 1675 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName);
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
1940 Handle<i::TypeFeedbackVector> vector = 1940 Handle<i::TypeFeedbackVector> vector =
1941 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); 1941 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
1942 1942
1943 // clang-format off 1943 // clang-format off
1944 ExpectedSnippet<const char*> snippets[] = { 1944 ExpectedSnippet<const char*> snippets[] = {
1945 {"function t() { }\nfunction f() { return t(); }\nf()", 1945 {"function t() { }\nfunction f() { return t(); }\nf()",
1946 2 * kPointerSize, 1946 2 * kPointerSize,
1947 1, 1947 1,
1948 15, 1948 15,
1949 { 1949 {
1950 B(StackCheck), // 1950 B(StackCheck), //
1951 B(LdaUndefined), // 1951 B(LdaUndefined), //
1952 B(Star), R(1), // 1952 B(Star), R(1), //
1953 B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), // 1953 B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), //
1954 B(Star), R(0), // 1954 B(Star), R(0), //
1955 B(Call), R(0), R(1), U8(1), U8(vector->GetIndex(slot1)), // 1955 B(CallIC), R(0), R(1), U8(1), U8(vector->GetIndex(slot1)), //
1956 B(Return) // 1956 B(Return) //
1957 }, 1957 },
1958 1, 1958 1,
1959 {"t"}}, 1959 {"t"}},
1960 {"function t(a, b, c) { }\nfunction f() { return t(1, 2, 3); }\nf()", 1960 {"function t(a, b, c) { }\nfunction f() { return t(1, 2, 3); }\nf()",
1961 5 * kPointerSize, 1961 5 * kPointerSize,
1962 1, 1962 1,
1963 27, 1963 27,
1964 { 1964 {
1965 B(StackCheck), // 1965 B(StackCheck), //
1966 B(LdaUndefined), // 1966 B(LdaUndefined), //
1967 B(Star), R(1), // 1967 B(Star), R(1), //
1968 B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), // 1968 B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), //
1969 B(Star), R(0), // 1969 B(Star), R(0), //
1970 B(LdaSmi8), U8(1), // 1970 B(LdaSmi8), U8(1), //
1971 B(Star), R(2), // 1971 B(Star), R(2), //
1972 B(LdaSmi8), U8(2), // 1972 B(LdaSmi8), U8(2), //
1973 B(Star), R(3), // 1973 B(Star), R(3), //
1974 B(LdaSmi8), U8(3), // 1974 B(LdaSmi8), U8(3), //
1975 B(Star), R(4), // 1975 B(Star), R(4), //
1976 B(Call), R(0), R(1), U8(4), U8(vector->GetIndex(slot1)), // 1976 B(CallIC), R(0), R(1), U8(4), U8(vector->GetIndex(slot1)), //
1977 B(Return) // 1977 B(Return) //
1978 }, 1978 },
1979 1, 1979 1,
1980 {"t"}}, 1980 {"t"}},
1981 }; 1981 };
1982 // clang-format on 1982 // clang-format on
1983 1983
1984 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]); 1984 size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
1985 for (size_t i = 0; i < num_snippets; i++) { 1985 for (size_t i = 0; i < num_snippets; i++) {
1986 Handle<BytecodeArray> bytecode_array = 1986 Handle<BytecodeArray> bytecode_array =
1987 helper.MakeBytecode(snippets[i].code_snippet, "f"); 1987 helper.MakeBytecode(snippets[i].code_snippet, "f");
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
2415 B(Star), R(1), // 2415 B(Star), R(1), //
2416 B(LdaZero), // 2416 B(LdaZero), //
2417 B(Star), R(2), // 2417 B(Star), R(2), //
2418 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), // 2418 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), //
2419 B(StackCheck), // 2419 B(StackCheck), //
2420 B(LdaUndefined), // 2420 B(LdaUndefined), //
2421 B(Star), R(2), // 2421 B(Star), R(2), //
2422 B(LdaGlobalSloppy), U8(1), // 2422 B(LdaGlobalSloppy), U8(1), //
2423 /* */ U8(load_vector->GetIndex(load_slot_1)), // 2423 /* */ U8(load_vector->GetIndex(load_slot_1)), //
2424 B(Star), R(1), // 2424 B(Star), R(1), //
2425 B(Call), R(1), R(2), U8(1), // 2425 B(CallIC), R(1), R(2), U8(1), //
2426 /* */ U8(load_vector->GetIndex(call_slot_1)), // 2426 /* */ U8(load_vector->GetIndex(call_slot_1)), //
2427 B(Star), R(0), // 2427 B(Star), R(0), //
2428 B(Return) // 2428 B(Return) //
2429 }, 2429 },
2430 2, 2430 2,
2431 {InstanceType::FIXED_ARRAY_TYPE, 2431 {InstanceType::FIXED_ARRAY_TYPE,
2432 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, 2432 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
2433 }; 2433 };
2434 // clang-format on 2434 // clang-format on
2435 2435
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after
3907 B(CreateClosure), U8(0), U8(0), // 3907 B(CreateClosure), U8(0), U8(0), //
3908 B(Return) // 3908 B(Return) //
3909 }, 3909 },
3910 1, 3910 1,
3911 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, 3911 {InstanceType::SHARED_FUNCTION_INFO_TYPE}},
3912 {"return (function(){ })()", 3912 {"return (function(){ })()",
3913 2 * kPointerSize, 3913 2 * kPointerSize,
3914 1, 3914 1,
3915 15, 3915 15,
3916 { 3916 {
3917 B(StackCheck), // 3917 B(StackCheck), //
3918 B(LdaUndefined), // 3918 B(LdaUndefined), //
3919 B(Star), R(1), // 3919 B(Star), R(1), //
3920 B(CreateClosure), U8(0), U8(0), // 3920 B(CreateClosure), U8(0), U8(0), //
3921 B(Star), R(0), // 3921 B(Star), R(0), //
3922 B(Call), R(0), R(1), U8(1), U8(vector->GetIndex(slot)), // 3922 B(CallIC), R(0), R(1), U8(1), U8(vector->GetIndex(slot)), //
3923 B(Return) // 3923 B(Return) //
3924 }, 3924 },
3925 1, 3925 1,
3926 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, 3926 {InstanceType::SHARED_FUNCTION_INFO_TYPE}},
3927 {"return (function(x){ return x; })(1)", 3927 {"return (function(x){ return x; })(1)",
3928 3 * kPointerSize, 3928 3 * kPointerSize,
3929 1, 3929 1,
3930 19, 3930 19,
3931 { 3931 {
3932 B(StackCheck), // 3932 B(StackCheck), //
3933 B(LdaUndefined), // 3933 B(LdaUndefined), //
3934 B(Star), R(1), // 3934 B(Star), R(1), //
3935 B(CreateClosure), U8(0), U8(0), // 3935 B(CreateClosure), U8(0), U8(0), //
3936 B(Star), R(0), // 3936 B(Star), R(0), //
3937 B(LdaSmi8), U8(1), // 3937 B(LdaSmi8), U8(1), //
3938 B(Star), R(2), // 3938 B(Star), R(2), //
3939 B(Call), R(0), R(1), U8(2), U8(vector->GetIndex(slot)), // 3939 B(CallIC), R(0), R(1), U8(2), U8(vector->GetIndex(slot)), //
3940 B(Return) // 3940 B(Return) //
3941 }, 3941 },
3942 1, 3942 1,
3943 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, 3943 {InstanceType::SHARED_FUNCTION_INFO_TYPE}},
3944 }; 3944 };
3945 // clang-format on 3945 // clang-format on
3946 3946
3947 for (size_t i = 0; i < arraysize(snippets); i++) { 3947 for (size_t i = 0; i < arraysize(snippets); i++) {
3948 Handle<BytecodeArray> bytecode_array = 3948 Handle<BytecodeArray> bytecode_array =
3949 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 3949 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
3950 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 3950 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3994 1, 3994 1,
3995 23, 3995 23,
3996 { 3996 {
3997 B(StackCheck), // 3997 B(StackCheck), //
3998 B(CreateRegExpLiteral), U8(0), U8(0), U8(0), // 3998 B(CreateRegExpLiteral), U8(0), U8(0), U8(0), //
3999 B(Star), R(1), // 3999 B(Star), R(1), //
4000 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // 4000 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), //
4001 B(Star), R(0), // 4001 B(Star), R(0), //
4002 B(LdaConstant), U8(2), // 4002 B(LdaConstant), U8(2), //
4003 B(Star), R(2), // 4003 B(Star), R(2), //
4004 B(Call), R(0), R(1), U8(2), U8(vector->GetIndex(slot1)), // 4004 B(CallIC), R(0), R(1), U8(2), U8(vector->GetIndex(slot1)), //
4005 B(Return), // 4005 B(Return), //
4006 }, 4006 },
4007 3, 4007 3,
4008 {"ab+d", "exec", "abdd"}}, 4008 {"ab+d", "exec", "abdd"}},
4009 }; 4009 };
4010 // clang-format on 4010 // clang-format on
4011 4011
4012 for (size_t i = 0; i < arraysize(snippets); i++) { 4012 for (size_t i = 0; i < arraysize(snippets); i++) {
4013 Handle<BytecodeArray> bytecode_array = 4013 Handle<BytecodeArray> bytecode_array =
4014 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 4014 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
(...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after
5167 B(CreateClosure), U8(0), U8(0), // 5167 B(CreateClosure), U8(0), U8(0), //
5168 B(Return), // 5168 B(Return), //
5169 }, 5169 },
5170 1, 5170 1,
5171 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, 5171 {InstanceType::SHARED_FUNCTION_INFO_TYPE}},
5172 {"var a; (function() { a = 2; })(); return a;", 5172 {"var a; (function() { a = 2; })(); return a;",
5173 3 * kPointerSize, 5173 3 * kPointerSize,
5174 1, 5174 1,
5175 25, 5175 25,
5176 { 5176 {
5177 B(CallRuntime), U16(Runtime::kNewFunctionContext), // 5177 B(CallRuntime), U16(Runtime::kNewFunctionContext), //
5178 /* */ R(closure), U8(1), // 5178 /* */ R(closure), U8(1), //
5179 B(PushContext), R(0), // 5179 B(PushContext), R(0), //
5180 B(StackCheck), // 5180 B(StackCheck), //
5181 B(LdaUndefined), // 5181 B(LdaUndefined), //
5182 B(Star), R(2), // 5182 B(Star), R(2), //
5183 B(CreateClosure), U8(0), U8(0), // 5183 B(CreateClosure), U8(0), U8(0), //
5184 B(Star), R(1), // 5184 B(Star), R(1), //
5185 B(Call), R(1), R(2), U8(1), U8(vector->GetIndex(slot)), // 5185 B(CallIC), R(1), R(2), U8(1), U8(vector->GetIndex(slot)), //
5186 B(LdaContextSlot), R(context), U8(first_context_slot), // 5186 B(LdaContextSlot), R(context), U8(first_context_slot), //
5187 B(Return), // 5187 B(Return), //
5188 }, 5188 },
5189 1, 5189 1,
5190 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, 5190 {InstanceType::SHARED_FUNCTION_INFO_TYPE}},
5191 {"'use strict'; let a = 1; { let b = 2; return function() { a + b; }; }", 5191 {"'use strict'; let a = 1; { let b = 2; return function() { a + b; }; }",
5192 4 * kPointerSize, 5192 4 * kPointerSize,
5193 1, 5193 1,
5194 47, 5194 47,
5195 { 5195 {
5196 B(CallRuntime), U16(Runtime::kNewFunctionContext), // 5196 B(CallRuntime), U16(Runtime::kNewFunctionContext), //
5197 /* */ R(closure), U8(1), // 5197 /* */ R(closure), U8(1), //
(...skipping 20 matching lines...) Expand all
5218 2, 5218 2,
5219 {InstanceType::FIXED_ARRAY_TYPE, 5219 {InstanceType::FIXED_ARRAY_TYPE,
5220 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, 5220 InstanceType::SHARED_FUNCTION_INFO_TYPE}},
5221 {"'use strict';\n" 5221 {"'use strict';\n"
5222 REPEAT_249_UNIQUE_VARS() 5222 REPEAT_249_UNIQUE_VARS()
5223 "eval();" 5223 "eval();"
5224 "var b = 100;" 5224 "var b = 100;"
5225 "return b", 5225 "return b",
5226 3 * kPointerSize, 5226 3 * kPointerSize,
5227 1, 5227 1,
5228 1042, 5228 1041,
5229 { 5229 {
5230 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // 5230 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), //
5231 /* */ U8(1), // 5231 /* */ U8(1), //
5232 B(PushContext), R(0), // 5232 B(PushContext), R(0), //
5233 B(Ldar), THIS(1), // 5233 B(Ldar), THIS(1), //
5234 B(StaContextSlot), R(context), U8(first_context_slot), // 5234 B(StaContextSlot), R(context), U8(first_context_slot), //
5235 B(CreateUnmappedArguments), // 5235 B(CreateUnmappedArguments), //
5236 B(StaContextSlot), R(context), U8(first_context_slot + 1), // 5236 B(StaContextSlot), R(context), U8(first_context_slot + 1), //
5237 B(Ldar), R(new_target), // 5237 B(Ldar), R(new_target), //
5238 B(StaContextSlot), R(context), U8(first_context_slot + 2), // 5238 B(StaContextSlot), R(context), U8(first_context_slot + 2), //
5239 B(StackCheck), // 5239 B(StackCheck), //
5240 REPEAT_249(COMMA, // 5240 REPEAT_249(COMMA, //
5241 B(LdaZero), // 5241 B(LdaZero), //
5242 B(StaContextSlot), R(context), U8(wide_slot++)), // 5242 B(StaContextSlot), R(context), U8(wide_slot++)), //
5243 B(LdaUndefined), // 5243 B(LdaUndefined), //
5244 B(Star), R(2), // 5244 B(Star), R(2), //
5245 B(LdaGlobalStrict), U8(0), U8(1), // 5245 B(LdaGlobalStrict), U8(0), U8(1), //
5246 B(Star), R(1), // 5246 B(Star), R(1), //
5247 B(Call), R(1), R(2), U8(1), U8(0), // 5247 B(Call), R(1), R(2), U8(1), //
5248 B(LdaSmi8), U8(100), // 5248 B(LdaSmi8), U8(100), //
5249 B(StaContextSlotWide), R(context), U16(256), // 5249 B(StaContextSlotWide), R(context), U16(256), //
5250 B(LdaContextSlotWide), R(context), U16(256), // 5250 B(LdaContextSlotWide), R(context), U16(256), //
5251 B(Return), // 5251 B(Return), //
5252 }, 5252 },
5253 1, 5253 1,
5254 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, 5254 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
5255 }; 5255 };
5256 // clang-format on 5256 // clang-format on
5257 5257
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after
6453 7 * kPointerSize, 6453 7 * kPointerSize,
6454 1, 6454 1,
6455 86, 6455 86,
6456 { 6456 {
6457 B(StackCheck), // 6457 B(StackCheck), //
6458 B(CreateArrayLiteral), U8(0), U8(0), U8(array_literal_flags), // 6458 B(CreateArrayLiteral), U8(0), U8(0), U8(array_literal_flags), //
6459 B(Star), R(5), // 6459 B(Star), R(5), //
6460 B(LdaConstant), U8(1), // 6460 B(LdaConstant), U8(1), //
6461 B(KeyedLoadICSloppy), R(5), U8(vector->GetIndex(slot2)), // 6461 B(KeyedLoadICSloppy), R(5), U8(vector->GetIndex(slot2)), //
6462 B(Star), R(4), // 6462 B(Star), R(4), //
6463 B(Call), R(4), R(5), U8(1), U8(vector->GetIndex(slot1)), // 6463 B(CallIC), R(4), R(5), U8(1), U8(vector->GetIndex(slot1)), //
6464 B(Star), R(1), // 6464 B(Star), R(1), //
6465 B(Ldar), R(1), // 6465 B(Ldar), R(1), //
6466 B(Star), R(6), // 6466 B(Star), R(6), //
6467 B(LoadICSloppy), R(6), U8(2), U8(vector->GetIndex(slot4)), // 6467 B(LoadICSloppy), R(6), U8(2), U8(vector->GetIndex(slot4)), //
6468 B(Star), R(5), // 6468 B(Star), R(5), //
6469 B(Call), R(5), R(6), U8(1), U8(vector->GetIndex(slot3)), // 6469 B(CallIC), R(5), R(6), U8(1), U8(vector->GetIndex(slot3)), //
6470 B(Star), R(2), // 6470 B(Star), R(2), //
6471 B(Star), R(4), // 6471 B(Star), R(4), //
6472 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(4), U8(1), // 6472 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(4), U8(1), //
6473 B(LogicalNot), // 6473 B(LogicalNot), //
6474 B(JumpIfFalse), U8(11), // 6474 B(JumpIfFalse), U8(11), //
6475 B(Ldar), R(2), // 6475 B(Ldar), R(2), //
6476 B(Star), R(4), // 6476 B(Star), R(4), //
6477 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), // 6477 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), //
6478 /* */ R(4), U8(1), // 6478 /* */ R(4), U8(1), //
6479 B(Ldar), R(2), // 6479 B(Ldar), R(2), //
(...skipping 22 matching lines...) Expand all
6502 1, 6502 1,
6503 85, 6503 85,
6504 { 6504 {
6505 B(StackCheck), // 6505 B(StackCheck), //
6506 B(LdaConstant), U8(0), // 6506 B(LdaConstant), U8(0), //
6507 B(Star), R(3), // 6507 B(Star), R(3), //
6508 B(Star), R(6), // 6508 B(Star), R(6), //
6509 B(LdaConstant), U8(1), // 6509 B(LdaConstant), U8(1), //
6510 B(KeyedLoadICSloppy), R(6), U8(vector->GetIndex(slot2)), // 6510 B(KeyedLoadICSloppy), R(6), U8(vector->GetIndex(slot2)), //
6511 B(Star), R(5), // 6511 B(Star), R(5), //
6512 B(Call), R(5), R(6), U8(1), U8(vector->GetIndex(slot1)), // 6512 B(CallIC), R(5), R(6), U8(1), U8(vector->GetIndex(slot1)), //
6513 B(Star), R(1), // 6513 B(Star), R(1), //
6514 B(Ldar), R(1), // 6514 B(Ldar), R(1), //
6515 B(Star), R(7), // 6515 B(Star), R(7), //
6516 B(LoadICSloppy), R(7), U8(2), U8(vector->GetIndex(slot4)), // 6516 B(LoadICSloppy), R(7), U8(2), U8(vector->GetIndex(slot4)), //
6517 B(Star), R(6), // 6517 B(Star), R(6), //
6518 B(Call), R(6), R(7), U8(1), U8(vector->GetIndex(slot3)), // 6518 B(CallIC), R(6), R(7), U8(1), U8(vector->GetIndex(slot3)), //
6519 B(Star), R(2), // 6519 B(Star), R(2), //
6520 B(Star), R(5), // 6520 B(Star), R(5), //
6521 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(5), U8(1), // 6521 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(5), U8(1), //
6522 B(LogicalNot), // 6522 B(LogicalNot), //
6523 B(JumpIfFalse), U8(11), // 6523 B(JumpIfFalse), U8(11), //
6524 B(Ldar), R(2), // 6524 B(Ldar), R(2), //
6525 B(Star), R(5), // 6525 B(Star), R(5), //
6526 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), // 6526 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), //
6527 /* */ R(5), U8(1), // 6527 /* */ R(5), U8(1), //
6528 B(Ldar), R(2), // 6528 B(Ldar), R(2), //
(...skipping 24 matching lines...) Expand all
6553 7 * kPointerSize, 6553 7 * kPointerSize,
6554 1, 6554 1,
6555 108, 6555 108,
6556 { 6556 {
6557 B(StackCheck), // 6557 B(StackCheck), //
6558 B(CreateArrayLiteral), U8(0), U8(0), U8(array_literal_flags), // 6558 B(CreateArrayLiteral), U8(0), U8(0), U8(array_literal_flags), //
6559 B(Star), R(5), // 6559 B(Star), R(5), //
6560 B(LdaConstant), U8(1), // 6560 B(LdaConstant), U8(1), //
6561 B(KeyedLoadICSloppy), R(5), U8(vector->GetIndex(slot2)), // 6561 B(KeyedLoadICSloppy), R(5), U8(vector->GetIndex(slot2)), //
6562 B(Star), R(4), // 6562 B(Star), R(4), //
6563 B(Call), R(4), R(5), U8(1), U8(vector->GetIndex(slot1)), // 6563 B(CallIC), R(4), R(5), U8(1), U8(vector->GetIndex(slot1)), //
6564 B(Star), R(1), // 6564 B(Star), R(1), //
6565 B(Ldar), R(1), // 6565 B(Ldar), R(1), //
6566 B(Star), R(6), // 6566 B(Star), R(6), //
6567 B(LoadICSloppy), R(6), U8(2), U8(vector->GetIndex(slot4)), // 6567 B(LoadICSloppy), R(6), U8(2), U8(vector->GetIndex(slot4)), //
6568 B(Star), R(5), // 6568 B(Star), R(5), //
6569 B(Call), R(5), R(6), U8(1), U8(vector->GetIndex(slot3)), // 6569 B(CallIC), R(5), R(6), U8(1), U8(vector->GetIndex(slot3)), //
6570 B(Star), R(2), // 6570 B(Star), R(2), //
6571 B(Star), R(4), // 6571 B(Star), R(4), //
6572 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(4), U8(1), // 6572 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(4), U8(1), //
6573 B(LogicalNot), // 6573 B(LogicalNot), //
6574 B(JumpIfFalse), U8(11), // 6574 B(JumpIfFalse), U8(11), //
6575 B(Ldar), R(2), // 6575 B(Ldar), R(2), //
6576 B(Star), R(4), // 6576 B(Star), R(4), //
6577 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), // 6577 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), //
6578 /* */ R(4), U8(1), // 6578 /* */ R(4), U8(1), //
6579 B(Ldar), R(2), // 6579 B(Ldar), R(2), //
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
6615 { 6615 {
6616 B(StackCheck), // 6616 B(StackCheck), //
6617 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // 6617 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), //
6618 B(Star), R(3), // 6618 B(Star), R(3), //
6619 B(Star), R(2), // 6619 B(Star), R(2), //
6620 B(CreateArrayLiteral), U8(1), U8(1), U8(array_literal_flags), // 6620 B(CreateArrayLiteral), U8(1), U8(1), U8(array_literal_flags), //
6621 B(Star), R(4), // 6621 B(Star), R(4), //
6622 B(LdaConstant), U8(2), // 6622 B(LdaConstant), U8(2), //
6623 B(KeyedLoadICSloppy), R(4), U8(vector->GetIndex(slot2)), // 6623 B(KeyedLoadICSloppy), R(4), U8(vector->GetIndex(slot2)), //
6624 B(Star), R(3), // 6624 B(Star), R(3), //
6625 B(Call), R(3), R(4), U8(1), U8(vector->GetIndex(slot1)), // 6625 B(CallIC), R(3), R(4), U8(1), U8(vector->GetIndex(slot1)), //
6626 B(Star), R(0), // 6626 B(Star), R(0), //
6627 B(Ldar), R(0), // 6627 B(Ldar), R(0), //
6628 B(Star), R(5), // 6628 B(Star), R(5), //
6629 B(LoadICSloppy), R(5), U8(3), U8(vector->GetIndex(slot4)), // 6629 B(LoadICSloppy), R(5), U8(3), U8(vector->GetIndex(slot4)), //
6630 B(Star), R(4), // 6630 B(Star), R(4), //
6631 B(Call), R(4), R(5), U8(1), U8(vector->GetIndex(slot3)), // 6631 B(CallIC), R(4), R(5), U8(1), U8(vector->GetIndex(slot3)), //
6632 B(Star), R(1), // 6632 B(Star), R(1), //
6633 B(Star), R(3), // 6633 B(Star), R(3), //
6634 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(3), U8(1), // 6634 B(CallRuntime), U16(Runtime::kInlineIsJSReceiver), R(3), U8(1), //
6635 B(LogicalNot), // 6635 B(LogicalNot), //
6636 B(JumpIfFalse), U8(11), // 6636 B(JumpIfFalse), U8(11), //
6637 B(Ldar), R(1), // 6637 B(Ldar), R(1), //
6638 B(Star), R(3), // 6638 B(Star), R(3), //
6639 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), // 6639 B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), //
6640 /* */ R(3), U8(1), // 6640 /* */ R(3), U8(1), //
6641 B(Ldar), R(1), // 6641 B(Ldar), R(1), //
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
7569 int context = Register::current_context().index(); 7569 int context = Register::current_context().index();
7570 int new_target = Register::new_target().index(); 7570 int new_target = Register::new_target().index();
7571 7571
7572 int first_context_slot = Context::MIN_CONTEXT_SLOTS; 7572 int first_context_slot = Context::MIN_CONTEXT_SLOTS;
7573 7573
7574 // clang-format off 7574 // clang-format off
7575 ExpectedSnippet<const char*> snippets[] = { 7575 ExpectedSnippet<const char*> snippets[] = {
7576 {"return eval('1;');", 7576 {"return eval('1;');",
7577 9 * kPointerSize, 7577 9 * kPointerSize,
7578 1, 7578 1,
7579 65, 7579 64,
7580 { 7580 {
7581 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // 7581 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), //
7582 /* */ U8(1), // 7582 /* */ U8(1), //
7583 B(PushContext), R(0), // 7583 B(PushContext), R(0), //
7584 B(Ldar), THIS(1), // 7584 B(Ldar), THIS(1), //
7585 B(StaContextSlot), R(context), U8(first_context_slot), // 7585 B(StaContextSlot), R(context), U8(first_context_slot), //
7586 B(CreateMappedArguments), // 7586 B(CreateMappedArguments), //
7587 B(StaContextSlot), R(context), U8(first_context_slot + 1), // 7587 B(StaContextSlot), R(context), U8(first_context_slot + 1), //
7588 B(Ldar), R(new_target), // 7588 B(Ldar), R(new_target), //
7589 B(StaContextSlot), R(context), U8(first_context_slot + 2), // 7589 B(StaContextSlot), R(context), U8(first_context_slot + 2), //
7590 B(StackCheck), // 7590 B(StackCheck), //
7591 B(LdaConstant), U8(0), // 7591 B(LdaConstant), U8(0), //
7592 B(Star), R(3), // 7592 B(Star), R(3), //
7593 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), // 7593 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), //
7594 /* */ R(3), U8(1), R(1), // 7594 /* */ R(3), U8(1), R(1), //
7595 B(LdaConstant), U8(1), // 7595 B(LdaConstant), U8(1), //
7596 B(Star), R(3), // 7596 B(Star), R(3), //
7597 B(Mov), R(1), R(4), // 7597 B(Mov), R(1), R(4), //
7598 B(Mov), R(3), R(5), // 7598 B(Mov), R(3), R(5), //
7599 B(Mov), R(closure), R(6), // 7599 B(Mov), R(closure), R(6), //
7600 B(LdaZero), // 7600 B(LdaZero), //
7601 B(Star), R(7), // 7601 B(Star), R(7), //
7602 B(LdaSmi8), U8(10), // 7602 B(LdaSmi8), U8(10), //
7603 B(Star), R(8), // 7603 B(Star), R(8), //
7604 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), // 7604 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), //
7605 /* */ U8(5), // 7605 /* */ U8(5), //
7606 B(Star), R(1), // 7606 B(Star), R(1), //
7607 B(Call), R(1), R(2), U8(2), U8(0), // 7607 B(Call), R(1), R(2), U8(2), //
7608 B(Return), // 7608 B(Return), //
7609 }, 7609 },
7610 2, 7610 2,
7611 {"eval", "1;"}}, 7611 {"eval", "1;"}},
7612 }; 7612 };
7613 // clang-format on 7613 // clang-format on
7614 7614
7615 for (size_t i = 0; i < arraysize(snippets); i++) { 7615 for (size_t i = 0; i < arraysize(snippets); i++) {
7616 Handle<BytecodeArray> bytecode_array = 7616 Handle<BytecodeArray> bytecode_array =
7617 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 7617 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
7618 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 7618 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
7619 } 7619 }
7620 } 7620 }
7621 7621
7622 7622
7623 TEST(LookupSlot) { 7623 TEST(LookupSlot) {
7624 InitializedHandleScope handle_scope; 7624 InitializedHandleScope handle_scope;
7625 BytecodeGeneratorHelper helper; 7625 BytecodeGeneratorHelper helper;
7626 7626
7627 int closure = Register::function_closure().index(); 7627 int closure = Register::function_closure().index();
7628 int context = Register::current_context().index(); 7628 int context = Register::current_context().index();
7629 int first_context_slot = Context::MIN_CONTEXT_SLOTS; 7629 int first_context_slot = Context::MIN_CONTEXT_SLOTS;
7630 int new_target = Register::new_target().index(); 7630 int new_target = Register::new_target().index();
7631 7631
7632 // clang-format off 7632 // clang-format off
7633 ExpectedSnippet<const char*> snippets[] = { 7633 ExpectedSnippet<const char*> snippets[] = {
7634 {"eval('var x = 10;'); return x;", 7634 {"eval('var x = 10;'); return x;",
7635 9 * kPointerSize, 7635 9 * kPointerSize,
7636 1, 7636 1,
7637 67, 7637 66,
7638 { 7638 {
7639 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // 7639 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), //
7640 /* */ U8(1), // 7640 /* */ U8(1), //
7641 B(PushContext), R(0), // 7641 B(PushContext), R(0), //
7642 B(Ldar), THIS(1), // 7642 B(Ldar), THIS(1), //
7643 B(StaContextSlot), R(context), U8(first_context_slot), // 7643 B(StaContextSlot), R(context), U8(first_context_slot), //
7644 B(CreateMappedArguments), // 7644 B(CreateMappedArguments), //
7645 B(StaContextSlot), R(context), U8(first_context_slot + 1), // 7645 B(StaContextSlot), R(context), U8(first_context_slot + 1), //
7646 B(Ldar), R(new_target), // 7646 B(Ldar), R(new_target), //
7647 B(StaContextSlot), R(context), U8(first_context_slot + 2), // 7647 B(StaContextSlot), R(context), U8(first_context_slot + 2), //
7648 B(StackCheck), // 7648 B(StackCheck), //
7649 B(LdaConstant), U8(0), // 7649 B(LdaConstant), U8(0), //
7650 B(Star), R(3), // 7650 B(Star), R(3), //
7651 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), // 7651 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), //
7652 R(3), U8(1), R(1), // 7652 R(3), U8(1), R(1), //
7653 B(LdaConstant), U8(1), // 7653 B(LdaConstant), U8(1), //
7654 B(Star), R(3), // 7654 B(Star), R(3), //
7655 B(Mov), R(1), R(4), // 7655 B(Mov), R(1), R(4), //
7656 B(Mov), R(3), R(5), // 7656 B(Mov), R(3), R(5), //
7657 B(Mov), R(closure), R(6), // 7657 B(Mov), R(closure), R(6), //
7658 B(LdaZero), // 7658 B(LdaZero), //
7659 B(Star), R(7), // 7659 B(Star), R(7), //
7660 B(LdaSmi8), U8(10), // 7660 B(LdaSmi8), U8(10), //
7661 B(Star), R(8), // 7661 B(Star), R(8), //
7662 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), // 7662 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), //
7663 U8(5), // 7663 U8(5), //
7664 B(Star), R(1), // 7664 B(Star), R(1), //
7665 B(Call), R(1), R(2), U8(2), U8(0), // 7665 B(Call), R(1), R(2), U8(2), //
7666 B(LdaLookupSlot), U8(2), // 7666 B(LdaLookupSlot), U8(2), //
7667 B(Return), // 7667 B(Return), //
7668 }, 7668 },
7669 3, 7669 3,
7670 {"eval", "var x = 10;", "x"}}, 7670 {"eval", "var x = 10;", "x"}},
7671 {"eval('var x = 10;'); return typeof x;", 7671 {"eval('var x = 10;'); return typeof x;",
7672 9 * kPointerSize, 7672 9 * kPointerSize,
7673 1, 7673 1,
7674 68, 7674 67,
7675 { 7675 {
7676 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // 7676 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), //
7677 /* */ U8(1), // 7677 /* */ U8(1), //
7678 B(PushContext), R(0), // 7678 B(PushContext), R(0), //
7679 B(Ldar), THIS(1), // 7679 B(Ldar), THIS(1), //
7680 B(StaContextSlot), R(context), U8(first_context_slot), // 7680 B(StaContextSlot), R(context), U8(first_context_slot), //
7681 B(CreateMappedArguments), // 7681 B(CreateMappedArguments), //
7682 B(StaContextSlot), R(context), U8(first_context_slot + 1), // 7682 B(StaContextSlot), R(context), U8(first_context_slot + 1), //
7683 B(Ldar), R(new_target), // 7683 B(Ldar), R(new_target), //
7684 B(StaContextSlot), R(context), U8(first_context_slot + 2), // 7684 B(StaContextSlot), R(context), U8(first_context_slot + 2), //
7685 B(StackCheck), // 7685 B(StackCheck), //
7686 B(LdaConstant), U8(0), // 7686 B(LdaConstant), U8(0), //
7687 B(Star), R(3), // 7687 B(Star), R(3), //
7688 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), // 7688 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), //
7689 /* */ R(3), U8(1), R(1), // 7689 /* */ R(3), U8(1), R(1), //
7690 B(LdaConstant), U8(1), // 7690 B(LdaConstant), U8(1), //
7691 B(Star), R(3), // 7691 B(Star), R(3), //
7692 B(Mov), R(1), R(4), // 7692 B(Mov), R(1), R(4), //
7693 B(Mov), R(3), R(5), // 7693 B(Mov), R(3), R(5), //
7694 B(Mov), R(closure), R(6), // 7694 B(Mov), R(closure), R(6), //
7695 B(LdaZero), // 7695 B(LdaZero), //
7696 B(Star), R(7), // 7696 B(Star), R(7), //
7697 B(LdaSmi8), U8(10), // 7697 B(LdaSmi8), U8(10), //
7698 B(Star), R(8), // 7698 B(Star), R(8), //
7699 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), // 7699 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), //
7700 /* */ U8(5), // 7700 /* */ U8(5), //
7701 B(Star), R(1), // 7701 B(Star), R(1), //
7702 B(Call), R(1), R(2), U8(2), U8(0), // 7702 B(Call), R(1), R(2), U8(2), //
7703 B(LdaLookupSlotInsideTypeof), U8(2), // 7703 B(LdaLookupSlotInsideTypeof), U8(2), //
7704 B(TypeOf), // 7704 B(TypeOf), //
7705 B(Return), // 7705 B(Return), //
7706 }, 7706 },
7707 3, 7707 3,
7708 {"eval", "var x = 10;", "x"}}, 7708 {"eval", "var x = 10;", "x"}},
7709 {"x = 20; return eval('');", 7709 {"x = 20; return eval('');",
7710 9 * kPointerSize, 7710 9 * kPointerSize,
7711 1, 7711 1,
7712 69, 7712 68,
7713 { 7713 {
7714 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // 7714 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), //
7715 U8(1), // 7715 U8(1), //
7716 B(PushContext), R(0), // 7716 B(PushContext), R(0), //
7717 B(Ldar), THIS(1), // 7717 B(Ldar), THIS(1), //
7718 B(StaContextSlot), R(context), U8(first_context_slot), // 7718 B(StaContextSlot), R(context), U8(first_context_slot), //
7719 B(CreateMappedArguments), // 7719 B(CreateMappedArguments), //
7720 B(StaContextSlot), R(context), U8(first_context_slot + 1), // 7720 B(StaContextSlot), R(context), U8(first_context_slot + 1), //
7721 B(Ldar), R(new_target), // 7721 B(Ldar), R(new_target), //
7722 B(StaContextSlot), R(context), U8(first_context_slot + 2), // 7722 B(StaContextSlot), R(context), U8(first_context_slot + 2), //
7723 B(StackCheck), // 7723 B(StackCheck), //
7724 B(LdaSmi8), U8(20), // 7724 B(LdaSmi8), U8(20), //
7725 B(StaLookupSlotSloppy), U8(0), // 7725 B(StaLookupSlotSloppy), U8(0), //
7726 B(LdaConstant), U8(1), // 7726 B(LdaConstant), U8(1), //
7727 B(Star), R(3), // 7727 B(Star), R(3), //
7728 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), // 7728 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), //
7729 /* */ R(3), U8(1), R(1), // 7729 /* */ R(3), U8(1), R(1), //
7730 B(LdaConstant), U8(2), // 7730 B(LdaConstant), U8(2), //
7731 B(Star), R(3), // 7731 B(Star), R(3), //
7732 B(Mov), R(1), R(4), // 7732 B(Mov), R(1), R(4), //
7733 B(Mov), R(3), R(5), // 7733 B(Mov), R(3), R(5), //
7734 B(Mov), R(closure), R(6), // 7734 B(Mov), R(closure), R(6), //
7735 B(LdaZero), // 7735 B(LdaZero), //
7736 B(Star), R(7), // 7736 B(Star), R(7), //
7737 B(LdaSmi8), U8(10), // 7737 B(LdaSmi8), U8(10), //
7738 B(Star), R(8), // 7738 B(Star), R(8), //
7739 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), // 7739 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), //
7740 /* */ U8(5), // 7740 /* */ U8(5), //
7741 B(Star), R(1), // 7741 B(Star), R(1), //
7742 B(Call), R(1), R(2), U8(2), U8(0), // 7742 B(Call), R(1), R(2), U8(2), //
7743 B(Return), // 7743 B(Return), //
7744 }, 7744 },
7745 3, 7745 3,
7746 {"x", "eval", ""}}, 7746 {"x", "eval", ""}},
7747 }; 7747 };
7748 // clang-format on 7748 // clang-format on
7749 7749
7750 for (size_t i = 0; i < arraysize(snippets); i++) { 7750 for (size_t i = 0; i < arraysize(snippets); i++) {
7751 Handle<BytecodeArray> bytecode_array = 7751 Handle<BytecodeArray> bytecode_array =
7752 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 7752 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
7753 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 7753 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
7754 } 7754 }
7755 } 7755 }
7756 7756
7757 7757
7758 TEST(CallLookupSlot) { 7758 TEST(CallLookupSlot) {
7759 InitializedHandleScope handle_scope; 7759 InitializedHandleScope handle_scope;
7760 BytecodeGeneratorHelper helper; 7760 BytecodeGeneratorHelper helper;
7761 Zone zone; 7761 Zone zone;
7762 7762
7763 FeedbackVectorSpec feedback_spec(&zone);
7764 FeedbackVectorSlot slot1 = feedback_spec.AddLoadICSlot();
7765 FeedbackVectorSlot slot2 = feedback_spec.AddCallICSlot();
7766 USE(slot1);
7767
7768 Handle<i::TypeFeedbackVector> vector =
7769 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
7770
7771 int closure = Register::function_closure().index(); 7763 int closure = Register::function_closure().index();
7772 int context = Register::current_context().index(); 7764 int context = Register::current_context().index();
7773 int new_target = Register::new_target().index(); 7765 int new_target = Register::new_target().index();
7774 7766
7775 // clang-format off 7767 // clang-format off
7776 ExpectedSnippet<InstanceType> snippets[] = { 7768 ExpectedSnippet<InstanceType> snippets[] = {
7777 {"g = function(){}; eval(''); return g();", 7769 {"g = function(){}; eval(''); return g();",
7778 9 * kPointerSize, 7770 9 * kPointerSize,
7779 1, 7771 1,
7780 85, 7772 83,
7781 { 7773 {
7782 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // 7774 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), //
7783 /* */ U8(1), // 7775 /* */ U8(1), //
7784 B(PushContext), R(0), // 7776 B(PushContext), R(0), //
7785 B(Ldar), THIS(1), // 7777 B(Ldar), THIS(1), //
7786 B(StaContextSlot), R(context), U8(4), // 7778 B(StaContextSlot), R(context), U8(4), //
7787 B(CreateMappedArguments), // 7779 B(CreateMappedArguments), //
7788 B(StaContextSlot), R(context), U8(5), // 7780 B(StaContextSlot), R(context), U8(5), //
7789 B(Ldar), R(new_target), // 7781 B(Ldar), R(new_target), //
7790 B(StaContextSlot), R(context), U8(6), // 7782 B(StaContextSlot), R(context), U8(6), //
7791 B(StackCheck), // 7783 B(StackCheck), //
7792 B(CreateClosure), U8(0), U8(0), // 7784 B(CreateClosure), U8(0), U8(0), //
7793 B(StaLookupSlotSloppy), U8(1), // 7785 B(StaLookupSlotSloppy), U8(1), //
7794 B(LdaConstant), U8(2), // 7786 B(LdaConstant), U8(2), //
7795 B(Star), R(3), // 7787 B(Star), R(3), //
7796 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), // 7788 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), //
7797 R(3), U8(1), R(1), // 7789 R(3), U8(1), R(1), //
7798 B(LdaConstant), U8(3), // 7790 B(LdaConstant), U8(3), //
7799 B(Star), R(3), // 7791 B(Star), R(3), //
7800 B(Mov), R(1), R(4), // 7792 B(Mov), R(1), R(4), //
7801 B(Mov), R(3), R(5), // 7793 B(Mov), R(3), R(5), //
7802 B(Mov), R(closure), R(6), // 7794 B(Mov), R(closure), R(6), //
7803 B(LdaZero), // 7795 B(LdaZero), //
7804 B(Star), R(7), // 7796 B(Star), R(7), //
7805 B(LdaSmi8), U8(10), // 7797 B(LdaSmi8), U8(10), //
7806 B(Star), R(8), // 7798 B(Star), R(8), //
7807 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), // 7799 B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), //
7808 U8(5), // 7800 U8(5), //
7809 B(Star), R(1), // 7801 B(Star), R(1), //
7810 B(Call), R(1), R(2), U8(2), U8(0), // 7802 B(Call), R(1), R(2), U8(2), //
7811 B(LdaConstant), U8(1), // 7803 B(LdaConstant), U8(1), //
7812 B(Star), R(3), // 7804 B(Star), R(3), //
7813 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), // 7805 B(CallRuntimeForPair), U16(Runtime::kLoadLookupSlotForCall), //
7814 R(3), U8(1), R(1), // 7806 R(3), U8(1), R(1), //
7815 B(Call), R(1), R(2), U8(1), U8(vector->GetIndex(slot2)), // 7807 B(Call), R(1), R(2), U8(1), //
7816 B(Return), // 7808 B(Return), //
7817 }, 7809 },
7818 4, 7810 4,
7819 {InstanceType::SHARED_FUNCTION_INFO_TYPE, 7811 {InstanceType::SHARED_FUNCTION_INFO_TYPE,
7820 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, 7812 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
7821 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, 7813 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
7822 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, 7814 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
7823 }; 7815 };
7824 // clang-format on 7816 // clang-format on
7825 7817
(...skipping 1402 matching lines...) Expand 10 before | Expand all | Expand 10 after
9228 for (size_t i = 0; i < arraysize(snippets); i++) { 9220 for (size_t i = 0; i < arraysize(snippets); i++) {
9229 Handle<BytecodeArray> bytecode_array = 9221 Handle<BytecodeArray> bytecode_array =
9230 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 9222 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
9231 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 9223 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
9232 } 9224 }
9233 } 9225 }
9234 9226
9235 } // namespace interpreter 9227 } // namespace interpreter
9236 } // namespace internal 9228 } // namespace internal
9237 } // namespace v8 9229 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698