| Index: test/cctest/interpreter/test-bytecode-generator.cc
|
| diff --git a/test/cctest/interpreter/test-bytecode-generator.cc b/test/cctest/interpreter/test-bytecode-generator.cc
|
| index dcb153e2b1fe750409d35c7c4602f803ef5be7d9..17a3766a128b282587b9023ba8c89311526ca65a 100644
|
| --- a/test/cctest/interpreter/test-bytecode-generator.cc
|
| +++ b/test/cctest/interpreter/test-bytecode-generator.cc
|
| @@ -730,22 +730,20 @@ TEST(PropertyLoads) {
|
| {"function f(a) { return a.name; }\nf({name : \"test\"})",
|
| 0,
|
| 2,
|
| - 6,
|
| + 5,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), //
|
| - B(Return), //
|
| + B(LoadICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"name"}},
|
| {"function f(a) { return a[\"key\"]; }\nf({key : \"test\"})",
|
| 0,
|
| 2,
|
| - 6,
|
| + 5,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), //
|
| - B(Return) //
|
| + B(LoadICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), //
|
| + B(Return) //
|
| },
|
| 1,
|
| {"key"}},
|
| @@ -773,40 +771,39 @@ TEST(PropertyLoads) {
|
| "f({\"-124\" : \"test\", name : 123 })",
|
| kPointerSize,
|
| 2,
|
| - 13,
|
| + 12,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), //
|
| - B(Star), R(0), //
|
| - B(LdaSmi8), U8(-124), //
|
| - B(KeyedLoadICSloppy), A(1, 2), U8(vector->GetIndex(slot2)), //
|
| - B(Return), //
|
| + B(LoadICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), //
|
| + B(Star), R(0), //
|
| + B(LdaSmi8), U8(-124), //
|
| + B(KeyedLoadICSloppy), A(1, 2), U8(vector->GetIndex(slot2)), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"name"}},
|
| {"function f(a) { \"use strict\"; return a.name; }\nf({name : \"test\"})",
|
| 0,
|
| 2,
|
| - 6,
|
| + 5,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICStrict), A(1, 2), U8(vector->GetIndex(slot1)), //
|
| - B(Return), //
|
| + B(LoadICStrict), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"name"}},
|
| - {"function f(a, b) { \"use strict\"; return a[b]; }\n"
|
| - "f({arg : \"test\"}, \"arg\")",
|
| - 0,
|
| - 3,
|
| - 6,
|
| - {
|
| - B(Ldar), A(2, 3), //
|
| - B(KeyedLoadICStrict), A(1, 3), U8(vector->GetIndex(slot1)), //
|
| - B(Return), //
|
| - },
|
| - 0,
|
| - }};
|
| + {
|
| + "function f(a, b) { \"use strict\"; return a[b]; }\n"
|
| + "f({arg : \"test\"}, \"arg\")",
|
| + 0,
|
| + 3,
|
| + 6,
|
| + {
|
| + B(Ldar), A(2, 3), //
|
| + B(KeyedLoadICStrict), A(1, 3), U8(vector->GetIndex(slot1)), //
|
| + B(Return), //
|
| + },
|
| + 0,
|
| + }};
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName);
|
| @@ -829,30 +826,26 @@ TEST(PropertyStores) {
|
|
|
| ExpectedSnippet<const char*> snippets[] = {
|
| {"function f(a) { a.name = \"val\"; }\nf({name : \"test\"})",
|
| - kPointerSize,
|
| + 0,
|
| 2,
|
| - 12,
|
| + 8,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(1), //
|
| - B(StoreICSloppy), A(1, 2), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(1), //
|
| + B(StoreICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), //
|
| + B(LdaUndefined), //
|
| + B(Return), //
|
| },
|
| 2,
|
| {"name", "val"}},
|
| {"function f(a) { a[\"key\"] = \"val\"; }\nf({key : \"test\"})",
|
| - kPointerSize,
|
| + 0,
|
| 2,
|
| - 12,
|
| + 8,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(1), //
|
| - B(StoreICSloppy), A(1, 2), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(1), //
|
| + B(StoreICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), //
|
| + B(LdaUndefined), //
|
| + B(Return), //
|
| },
|
| 2,
|
| {"key", "val"}},
|
| @@ -861,13 +854,13 @@ TEST(PropertyStores) {
|
| 2,
|
| 12,
|
| {
|
| - B(LdaSmi8), U8(100), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(0), //
|
| - B(KeyedStoreICSloppy), //
|
| - A(1, 2), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return), //
|
| + B(LdaSmi8), U8(100), //
|
| + B(Star), R(0), //
|
| + B(LdaConstant), U8(0), //
|
| + B(KeyedStoreICSloppy), A(1, 2), R(0), //
|
| + U8(vector->GetIndex(slot1)), //
|
| + B(LdaUndefined), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"val"}},
|
| @@ -876,42 +869,38 @@ TEST(PropertyStores) {
|
| 3,
|
| 8,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(KeyedStoreICSloppy), //
|
| - A(1, 3), A(2, 3), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(0), //
|
| + B(KeyedStoreICSloppy), A(1, 3), A(2, 3), //
|
| + U8(vector->GetIndex(slot1)), //
|
| + B(LdaUndefined), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"val"}},
|
| {"function f(a) { a.name = a[-124]; }\n"
|
| "f({\"-124\" : \"test\", name : 123 })",
|
| - kPointerSize,
|
| + 0,
|
| 2,
|
| - 15,
|
| + 11,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(0), //
|
| - B(LdaSmi8), U8(-124), //
|
| - B(KeyedLoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), //
|
| - B(StoreICSloppy), A(1, 2), R(0), U8(vector->GetIndex(slot2)), //
|
| - B(LdaUndefined), //
|
| - B(Return), //
|
| + B(LdaSmi8), U8(-124), //
|
| + B(KeyedLoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), //
|
| + B(StoreICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(LdaUndefined), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"name"}},
|
| {"function f(a) { \"use strict\"; a.name = \"val\"; }\n"
|
| "f({name : \"test\"})",
|
| - kPointerSize,
|
| + 0,
|
| 2,
|
| - 12,
|
| + 8,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(1), //
|
| - B(StoreICStrict), A(1, 2), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(1), //
|
| + B(StoreICStrict), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), //
|
| + B(LdaUndefined), //
|
| + B(Return), //
|
| },
|
| 2,
|
| {"name", "val"}},
|
| @@ -957,54 +946,51 @@ TEST(PropertyCall) {
|
| {"function f(a) { return a.func(); }\nf(" FUNC_ARG ")",
|
| 2 * kPointerSize,
|
| 2,
|
| - 16,
|
| + 15,
|
| {
|
| - B(Ldar), A(1, 2), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(Call), R(0), R(1), U8(0), //
|
| - B(Return), //
|
| + B(Ldar), A(1, 2), //
|
| + B(Star), R(1), //
|
| + B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(Call), R(0), R(1), U8(0), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"func"}},
|
| {"function f(a, b, c) { return a.func(b, c); }\nf(" FUNC_ARG ", 1, 2)",
|
| 4 * kPointerSize,
|
| 4,
|
| - 24,
|
| + 23,
|
| {
|
| - B(Ldar), A(1, 4), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(Ldar), A(2, 4), //
|
| - B(Star), R(2), //
|
| - B(Ldar), A(3, 4), //
|
| - B(Star), R(3), //
|
| - B(Call), R(0), R(1), U8(2), //
|
| - B(Return) //
|
| + B(Ldar), A(1, 4), //
|
| + B(Star), R(1), //
|
| + B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(Ldar), A(2, 4), //
|
| + B(Star), R(2), //
|
| + B(Ldar), A(3, 4), //
|
| + B(Star), R(3), //
|
| + B(Call), R(0), R(1), U8(2), //
|
| + B(Return) //
|
| },
|
| 1,
|
| {"func"}},
|
| {"function f(a, b) { return a.func(b + b, b); }\nf(" FUNC_ARG ", 1)",
|
| 4 * kPointerSize,
|
| 3,
|
| - 26,
|
| + 25,
|
| {
|
| - B(Ldar), A(1, 3), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(Ldar), A(2, 3), //
|
| - B(Add), A(2, 3), //
|
| - B(Star), R(2), //
|
| - B(Ldar), A(2, 3), //
|
| - B(Star), R(3), //
|
| - B(Call), R(0), R(1), U8(2), //
|
| - B(Return), //
|
| + B(Ldar), A(1, 3), //
|
| + B(Star), R(1), //
|
| + B(LoadICSloppy), R(1), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(Ldar), A(2, 3), //
|
| + B(Add), A(2, 3), //
|
| + B(Star), R(2), //
|
| + B(Ldar), A(2, 3), //
|
| + B(Star), R(3), //
|
| + B(Call), R(0), R(1), U8(2), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {"func"}}};
|
| @@ -1021,52 +1007,59 @@ TEST(LoadGlobal) {
|
| BytecodeGeneratorHelper helper;
|
| Zone zone;
|
|
|
| - int context_reg = Register::function_context().index();
|
| - int global_index = Context::GLOBAL_OBJECT_INDEX;
|
| -
|
| FeedbackVectorSpec feedback_spec(&zone);
|
| - FeedbackVectorSlot slot1 = feedback_spec.AddLoadICSlot();
|
| + FeedbackVectorSlot slot = feedback_spec.AddLoadICSlot();
|
|
|
| Handle<i::TypeFeedbackVector> vector =
|
| i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
|
|
|
| - ExpectedSnippet<InstanceType> snippets[] = {
|
| - {
|
| - "var a = 1;\nfunction f() { return a; }\nf()",
|
| - kPointerSize,
|
| - 1,
|
| - 11,
|
| - {
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(Return) //
|
| - },
|
| - 1,
|
| - {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE},
|
| - },
|
| - {
|
| - "function t() { }\nfunction f() { return t; }\nf()",
|
| - kPointerSize,
|
| - 1,
|
| - 11,
|
| - {
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(Return) //
|
| - },
|
| - 1,
|
| - {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE},
|
| - },
|
| + ExpectedSnippet<const char*> snippets[] = {
|
| + {"var a = 1;\nfunction f() { return a; }\nf()",
|
| + 0,
|
| + 1,
|
| + 4,
|
| + {
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(Return) //
|
| + },
|
| + 1,
|
| + {"a"}},
|
| + {"function t() { }\nfunction f() { return t; }\nf()",
|
| + 0,
|
| + 1,
|
| + 4,
|
| + {
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(Return) //
|
| + },
|
| + 1,
|
| + {"t"}},
|
| + {"'use strict'; var a = 1;\nfunction f() { return a; }\nf()",
|
| + 0,
|
| + 1,
|
| + 4,
|
| + {
|
| + B(LdaGlobalStrict), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(Return) //
|
| + },
|
| + 1,
|
| + {"a"}},
|
| + {"a = 1;\nfunction f() { return a; }\nf()",
|
| + 0,
|
| + 1,
|
| + 4,
|
| + {
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(Return) //
|
| + },
|
| + 1,
|
| + {"a"}},
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| - CheckBytecodeArrayEqual(snippets[i], bytecode_array, true);
|
| + CheckBytecodeArrayEqual(snippets[i], bytecode_array);
|
| }
|
| }
|
|
|
| @@ -1076,195 +1069,61 @@ TEST(StoreGlobal) {
|
| BytecodeGeneratorHelper helper;
|
| Zone zone;
|
|
|
| - int context_reg = Register::function_context().index();
|
| - int global_index = Context::GLOBAL_OBJECT_INDEX;
|
| -
|
| FeedbackVectorSpec feedback_spec(&zone);
|
| - FeedbackVectorSlot slot1 = feedback_spec.AddStoreICSlot();
|
| -
|
| - Handle<i::TypeFeedbackVector> vector =
|
| - i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
|
| -
|
| - ExpectedSnippet<InstanceType> snippets[] = {
|
| - {
|
| - "var a = 1;\nfunction f() { a = 2; }\nf()",
|
| - 3 * kPointerSize,
|
| - 1,
|
| - 21,
|
| - {
|
| - B(LdaSmi8), U8(2), //
|
| - B(Star), R(0), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(2), //
|
| - B(Ldar), R(0), //
|
| - B(StoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return) //
|
| - },
|
| - 1,
|
| - {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE},
|
| - },
|
| - {
|
| - "var a = \"test\"; function f(b) { a = b; }\nf(\"global\")",
|
| - 3 * kPointerSize,
|
| - 2,
|
| - 21,
|
| - {
|
| - B(Ldar), R(helper.kLastParamIndex), //
|
| - B(Star), R(0), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(2), //
|
| - B(Ldar), R(0), //
|
| - B(StoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return) //
|
| - },
|
| - 1,
|
| - {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE},
|
| - },
|
| - {
|
| - "'use strict'; var a = 1;\nfunction f() { a = 2; }\nf()",
|
| - 3 * kPointerSize,
|
| - 1,
|
| - 21,
|
| - {
|
| - B(LdaSmi8), U8(2), //
|
| - B(Star), R(0), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(2), //
|
| - B(Ldar), R(0), //
|
| - B(StoreICStrict), R(1), R(2), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return) //
|
| - },
|
| - 1,
|
| - {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE},
|
| - },
|
| - };
|
| -
|
| - for (size_t i = 0; i < arraysize(snippets); i++) {
|
| - Handle<BytecodeArray> bytecode_array =
|
| - helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| - CheckBytecodeArrayEqual(snippets[i], bytecode_array, true);
|
| - }
|
| -}
|
| -
|
| -
|
| -TEST(CallGlobal) {
|
| - InitializedHandleScope handle_scope;
|
| - BytecodeGeneratorHelper helper;
|
| - Zone zone;
|
| -
|
| - int context_reg = Register::function_context().index();
|
| - int global_index = Context::GLOBAL_OBJECT_INDEX;
|
| -
|
| - FeedbackVectorSpec feedback_spec(&zone);
|
| - FeedbackVectorSlot slot1 = feedback_spec.AddCallICSlot();
|
| - FeedbackVectorSlot slot2 = feedback_spec.AddLoadICSlot();
|
| - USE(slot1);
|
| -
|
| - Handle<i::TypeFeedbackVector> vector =
|
| - i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
|
| -
|
| - ExpectedSnippet<InstanceType> snippets[] = {
|
| - {
|
| - "function t() { }\nfunction f() { return t(); }\nf()",
|
| - 3 * kPointerSize,
|
| - 1,
|
| - 20,
|
| - {
|
| - B(LdaUndefined), //
|
| - B(Star), R(1), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(2), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(2), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(Call), R(0), R(1), U8(0), //
|
| - B(Return) //
|
| - },
|
| - 1,
|
| - {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE},
|
| - },
|
| - {
|
| - "function t(a, b, c) { }\nfunction f() { return t(1, 2, 3); }\nf()",
|
| - 5 * kPointerSize,
|
| - 1,
|
| - 32,
|
| - {
|
| - B(LdaUndefined), //
|
| - B(Star), R(1), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(2), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(2), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(LdaSmi8), U8(1), //
|
| - B(Star), R(2), //
|
| - B(LdaSmi8), U8(2), //
|
| - B(Star), R(3), //
|
| - B(LdaSmi8), U8(3), //
|
| - B(Star), R(4), //
|
| - B(Call), R(0), R(1), U8(3), //
|
| - B(Return) //
|
| - },
|
| - 1,
|
| - {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE},
|
| - },
|
| - };
|
| -
|
| - size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
|
| - for (size_t i = 0; i < num_snippets; i++) {
|
| - Handle<BytecodeArray> bytecode_array =
|
| - helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| - CheckBytecodeArrayEqual(snippets[i], bytecode_array, true);
|
| - }
|
| -}
|
| -
|
| -
|
| -TEST(LoadUnallocated) {
|
| - InitializedHandleScope handle_scope;
|
| - BytecodeGeneratorHelper helper;
|
| - Zone zone;
|
| -
|
| - int context_reg = Register::function_context().index();
|
| - int global_index = Context::GLOBAL_OBJECT_INDEX;
|
| -
|
| - FeedbackVectorSpec feedback_spec(&zone);
|
| - FeedbackVectorSlot slot1 = feedback_spec.AddLoadICSlot();
|
| + FeedbackVectorSlot slot = feedback_spec.AddStoreICSlot();
|
|
|
| Handle<i::TypeFeedbackVector> vector =
|
| i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
|
|
|
| ExpectedSnippet<const char*> snippets[] = {
|
| - {"a = 1;\nfunction f() { return a; }\nf()",
|
| - 1 * kPointerSize,
|
| + {"var a = 1;\nfunction f() { a = 2; }\nf()",
|
| + 0,
|
| 1,
|
| - 11,
|
| - {B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(Return)},
|
| + 7,
|
| + {
|
| + B(LdaSmi8), U8(2), //
|
| + B(StaGlobalSloppy), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(LdaUndefined), //
|
| + B(Return) //
|
| + },
|
| 1,
|
| {"a"}},
|
| - {"function f() { return t; }\nt = 1;\nf()",
|
| - 1 * kPointerSize,
|
| + {"var a = \"test\"; function f(b) { a = b; }\nf(\"global\")",
|
| + 0,
|
| + 2,
|
| + 7,
|
| + {
|
| + B(Ldar), R(helper.kLastParamIndex), //
|
| + B(StaGlobalSloppy), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(LdaUndefined), //
|
| + B(Return) //
|
| + },
|
| 1,
|
| - 11,
|
| - {B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), //
|
| - B(Return)},
|
| + {"a"}},
|
| + {"'use strict'; var a = 1;\nfunction f() { a = 2; }\nf()",
|
| + 0,
|
| 1,
|
| - {"t"}},
|
| + 7,
|
| + {
|
| + B(LdaSmi8), U8(2), //
|
| + B(StaGlobalStrict), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(LdaUndefined), //
|
| + B(Return) //
|
| + },
|
| + 1,
|
| + {"a"}},
|
| + {"a = 1;\nfunction f() { a = 2; }\nf()",
|
| + 0,
|
| + 1,
|
| + 7,
|
| + {
|
| + B(LdaSmi8), U8(2), //
|
| + B(StaGlobalSloppy), U8(0), U8(vector->GetIndex(slot)), //
|
| + B(LdaUndefined), //
|
| + B(Return) //
|
| + },
|
| + 1,
|
| + {"a"}},
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| @@ -1275,56 +1134,58 @@ TEST(LoadUnallocated) {
|
| }
|
|
|
|
|
| -TEST(StoreUnallocated) {
|
| +TEST(CallGlobal) {
|
| InitializedHandleScope handle_scope;
|
| BytecodeGeneratorHelper helper;
|
| Zone zone;
|
|
|
| - int context_reg = Register::function_context().index();
|
| - int global_index = Context::GLOBAL_OBJECT_INDEX;
|
| -
|
| FeedbackVectorSpec feedback_spec(&zone);
|
| - FeedbackVectorSlot slot1 = feedback_spec.AddStoreICSlot();
|
| + FeedbackVectorSlot slot1 = feedback_spec.AddLoadICSlot();
|
| + FeedbackVectorSlot slot2 = feedback_spec.AddLoadICSlot();
|
| + USE(slot1);
|
|
|
| Handle<i::TypeFeedbackVector> vector =
|
| i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
|
|
|
| ExpectedSnippet<const char*> snippets[] = {
|
| - {"a = 1;\nfunction f() { a = 2; }\nf()",
|
| - 3 * kPointerSize,
|
| + {"function t() { }\nfunction f() { return t(); }\nf()",
|
| + 2 * kPointerSize,
|
| 1,
|
| - 21,
|
| - {B(LdaSmi8), U8(2), //
|
| - B(Star), R(0), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(2), //
|
| - B(Ldar), R(0), //
|
| - B(StoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return)},
|
| + 13,
|
| + {
|
| + B(LdaUndefined), //
|
| + B(Star), R(1), //
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(Call), R(0), R(1), U8(0), //
|
| + B(Return) //
|
| + },
|
| 1,
|
| - {"a"}},
|
| - {"function f() { t = 4; }\nf()\nt = 1;",
|
| - 3 * kPointerSize,
|
| + {"t"}},
|
| + {"function t(a, b, c) { }\nfunction f() { return t(1, 2, 3); }\nf()",
|
| + 5 * kPointerSize,
|
| 1,
|
| - 21,
|
| - {B(LdaSmi8), U8(4), //
|
| - B(Star), R(0), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(2), //
|
| - B(Ldar), R(0), //
|
| - B(StoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot1)), //
|
| - B(LdaUndefined), //
|
| - B(Return)},
|
| + 25,
|
| + {
|
| + B(LdaUndefined), //
|
| + B(Star), R(1), //
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(LdaSmi8), U8(1), //
|
| + B(Star), R(2), //
|
| + B(LdaSmi8), U8(2), //
|
| + B(Star), R(3), //
|
| + B(LdaSmi8), U8(3), //
|
| + B(Star), R(4), //
|
| + B(Call), R(0), R(1), U8(3), //
|
| + B(Return) //
|
| + },
|
| 1,
|
| {"t"}},
|
| };
|
|
|
| - for (size_t i = 0; i < arraysize(snippets); i++) {
|
| + size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
|
| + for (size_t i = 0; i < num_snippets; i++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| helper.MakeBytecode(snippets[i].code_snippet, "f");
|
| CheckBytecodeArrayEqual(snippets[i], bytecode_array);
|
| @@ -1555,24 +1416,20 @@ TEST(DeclareGlobals) {
|
| BytecodeGeneratorHelper helper;
|
| Zone zone;
|
|
|
| - int context_reg = Register::function_context().index();
|
| - int global_index = Context::GLOBAL_OBJECT_INDEX;
|
| -
|
| // Create different feedback vector specs to be precise on slot numbering.
|
| - FeedbackVectorSpec feedback_spec_ss(&zone);
|
| - FeedbackVectorSlot slot_ss_1 = feedback_spec_ss.AddStoreICSlot();
|
| - FeedbackVectorSlot slot_ss_2 = feedback_spec_ss.AddStoreICSlot();
|
| - USE(slot_ss_1);
|
| -
|
| - Handle<i::TypeFeedbackVector> vector_ss =
|
| - i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec_ss);
|
| + FeedbackVectorSpec feedback_spec_stores(&zone);
|
| + FeedbackVectorSlot store_slot_1 = feedback_spec_stores.AddStoreICSlot();
|
| + FeedbackVectorSlot store_slot_2 = feedback_spec_stores.AddStoreICSlot();
|
| + USE(store_slot_1);
|
|
|
| - FeedbackVectorSpec feedback_spec_l(&zone);
|
| - FeedbackVectorSlot slot_l_1 = feedback_spec_l.AddLoadICSlot();
|
| + Handle<i::TypeFeedbackVector> store_vector =
|
| + i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec_stores);
|
|
|
| - Handle<i::TypeFeedbackVector> vector_l =
|
| - i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec_l);
|
| + FeedbackVectorSpec feedback_spec_loads(&zone);
|
| + FeedbackVectorSlot load_slot_1 = feedback_spec_loads.AddLoadICSlot();
|
|
|
| + Handle<i::TypeFeedbackVector> load_vector =
|
| + i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec_loads);
|
|
|
| ExpectedSnippet<InstanceType> snippets[] = {
|
| {"var a = 1;",
|
| @@ -1580,21 +1437,20 @@ TEST(DeclareGlobals) {
|
| 1,
|
| 30,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(1), //
|
| - B(LdaZero), //
|
| - B(Star), R(2), //
|
| - B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Star), R(1), //
|
| - B(LdaZero), //
|
| - B(Star), R(2), //
|
| - B(LdaSmi8), U8(1), //
|
| - B(Star), R(3), //
|
| - B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), //
|
| - U8(3), //
|
| - B(LdaUndefined), //
|
| - B(Return) //
|
| + B(LdaConstant), U8(0), //
|
| + B(Star), R(1), //
|
| + B(LdaZero), //
|
| + B(Star), R(2), //
|
| + B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), //
|
| + B(LdaConstant), U8(1), //
|
| + B(Star), R(1), //
|
| + B(LdaZero), //
|
| + B(Star), R(2), //
|
| + B(LdaSmi8), U8(1), //
|
| + B(Star), R(3), //
|
| + B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), U8(3), //
|
| + B(LdaUndefined), //
|
| + B(Return) //
|
| },
|
| 2,
|
| {InstanceType::FIXED_ARRAY_TYPE,
|
| @@ -1617,40 +1473,34 @@ TEST(DeclareGlobals) {
|
| {"var a = 1;\na=2;",
|
| 4 * kPointerSize,
|
| 1,
|
| - 52,
|
| + 38,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(1), //
|
| - B(LdaZero), //
|
| - B(Star), R(2), //
|
| - B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Star), R(1), //
|
| - B(LdaZero), //
|
| - B(Star), R(2), //
|
| - B(LdaSmi8), U8(1), //
|
| - B(Star), R(3), //
|
| - B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), //
|
| - U8(3), //
|
| - B(LdaSmi8), U8(2), //
|
| - B(Star), R(1), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(2), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Star), R(3), //
|
| - B(Ldar), R(1), //
|
| - B(StoreICSloppy), R(2), R(3), U8(vector_ss->GetIndex(slot_ss_2)), //
|
| - B(Star), R(0), //
|
| - B(Ldar), R(0), //
|
| - B(Return) //
|
| + B(LdaConstant), U8(0), //
|
| + B(Star), R(1), //
|
| + B(LdaZero), //
|
| + B(Star), R(2), //
|
| + B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), //
|
| + B(LdaConstant), U8(1), //
|
| + B(Star), R(1), //
|
| + B(LdaZero), //
|
| + B(Star), R(2), //
|
| + B(LdaSmi8), U8(1), //
|
| + B(Star), R(3), //
|
| + B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), U8(3), //
|
| + B(LdaSmi8), U8(2), //
|
| + B(StaGlobalSloppy), U8(1), //
|
| + U8(store_vector->GetIndex(store_slot_2)), //
|
| + B(Star), R(0), //
|
| + B(Ldar), R(0), //
|
| + B(Return) //
|
| },
|
| 2,
|
| {InstanceType::FIXED_ARRAY_TYPE,
|
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
|
| {"function f() {}\nf();",
|
| - 4 * kPointerSize,
|
| + 3 * kPointerSize,
|
| 1,
|
| - 36,
|
| + 29,
|
| {
|
| B(LdaConstant), U8(0), //
|
| B(Star), R(1), //
|
| @@ -1659,10 +1509,8 @@ TEST(DeclareGlobals) {
|
| B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), //
|
| B(LdaUndefined), //
|
| B(Star), R(2), //
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(3), //
|
| - B(LdaConstant), U8(1), //
|
| - B(LoadICSloppy), R(3), U8(vector_l->GetIndex(slot_l_1)), //
|
| + B(LdaGlobalSloppy), U8(1), //
|
| + U8(load_vector->GetIndex(load_slot_1)), //
|
| B(Star), R(1), //
|
| B(Call), R(1), R(2), U8(0), //
|
| B(Star), R(0), //
|
| @@ -2105,20 +1953,19 @@ TEST(RegExpLiterals) {
|
| {"return /ab+d/.exec('abdd');",
|
| 3 * kPointerSize,
|
| 1,
|
| - 27,
|
| + 26,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(Star), R(2), //
|
| - B(LdaConstant), U8(1), //
|
| - B(CreateRegExpLiteral), U8(0), R(2), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(2), //
|
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(3), //
|
| - B(Star), R(2), //
|
| - B(Call), R(0), R(1), U8(1), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(0), //
|
| + B(Star), R(2), //
|
| + B(LdaConstant), U8(1), //
|
| + B(CreateRegExpLiteral), U8(0), R(2), //
|
| + B(Star), R(1), //
|
| + B(LoadICSloppy), R(1), U8(2), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(LdaConstant), U8(3), //
|
| + B(Star), R(2), //
|
| + B(Call), R(0), R(1), U8(1), //
|
| + B(Return), //
|
| },
|
| 4,
|
| {"", "ab+d", "exec", "abdd"}},
|
| @@ -2247,6 +2094,13 @@ TEST(ArrayLiterals) {
|
| TEST(ObjectLiterals) {
|
| InitializedHandleScope handle_scope;
|
| BytecodeGeneratorHelper helper;
|
| + Zone zone;
|
| +
|
| + FeedbackVectorSpec feedback_spec(&zone);
|
| + FeedbackVectorSlot slot1 = feedback_spec.AddStoreICSlot();
|
| +
|
| + Handle<i::TypeFeedbackVector> vector =
|
| + i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec);
|
|
|
| int simple_flags = ObjectLiteral::kFastElements |
|
| ObjectLiteral::kShallowProperties |
|
| @@ -2277,81 +2131,73 @@ TEST(ObjectLiterals) {
|
| 1,
|
| {InstanceType::FIXED_ARRAY_TYPE}},
|
| {"var a = 1; return { name: 'string', val: a };",
|
| - 3 * kPointerSize,
|
| + 2 * kPointerSize,
|
| 1,
|
| - 24,
|
| + 20,
|
| {
|
| - B(LdaSmi8), U8(1), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(0), //
|
| - B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Star), R(2), //
|
| - B(Ldar), R(0), //
|
| - B(StoreICSloppy), R(1), R(2), U8(3), //
|
| - B(Ldar), R(1), //
|
| - B(Return), //
|
| + B(LdaSmi8), U8(1), //
|
| + B(Star), R(0), //
|
| + B(LdaConstant), U8(0), //
|
| + B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| + B(Star), R(1), //
|
| + B(Ldar), R(0), //
|
| + B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), //
|
| + B(Ldar), R(1), //
|
| + B(Return), //
|
| },
|
| 2,
|
| {InstanceType::FIXED_ARRAY_TYPE,
|
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
|
| {"var a = 1; return { val: a, val: a + 1 };",
|
| - 3 * kPointerSize,
|
| + 2 * kPointerSize,
|
| 1,
|
| - 26,
|
| + 22,
|
| {
|
| - B(LdaSmi8), U8(1), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(0), //
|
| - B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Star), R(2), //
|
| - B(LdaSmi8), U8(1), //
|
| - B(Add), R(0), //
|
| - B(StoreICSloppy), R(1), R(2), U8(3), //
|
| - B(Ldar), R(1), //
|
| - B(Return), //
|
| + B(LdaSmi8), U8(1), //
|
| + B(Star), R(0), //
|
| + B(LdaConstant), U8(0), //
|
| + B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| + B(Star), R(1), //
|
| + B(LdaSmi8), U8(1), //
|
| + B(Add), R(0), //
|
| + B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), //
|
| + B(Ldar), R(1), //
|
| + B(Return), //
|
| },
|
| 2,
|
| {InstanceType::FIXED_ARRAY_TYPE,
|
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
|
| {"return { func: function() { } };",
|
| - 2 * kPointerSize,
|
| + 1 * kPointerSize,
|
| 1,
|
| - 22,
|
| + 18,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(2), //
|
| - B(CreateClosure), U8(0), //
|
| - B(StoreICSloppy), R(0), R(1), U8(3), //
|
| - B(Ldar), R(0), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(0), //
|
| + B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| + B(Star), R(0), //
|
| + B(LdaConstant), U8(2), //
|
| + B(CreateClosure), U8(0), //
|
| + B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), //
|
| + B(Ldar), R(0), //
|
| + B(Return), //
|
| },
|
| 3,
|
| {InstanceType::FIXED_ARRAY_TYPE,
|
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
|
| InstanceType::SHARED_FUNCTION_INFO_TYPE}},
|
| {"return { func(a) { return a; } };",
|
| - 2 * kPointerSize,
|
| + 1 * kPointerSize,
|
| 1,
|
| - 22,
|
| + 18,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| - B(Star), R(0), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(2), //
|
| - B(CreateClosure), U8(0), //
|
| - B(StoreICSloppy), R(0), R(1), U8(3), //
|
| - B(Ldar), R(0), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(0), //
|
| + B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| + B(Star), R(0), //
|
| + B(LdaConstant), U8(2), //
|
| + B(CreateClosure), U8(0), //
|
| + B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), //
|
| + B(Ldar), R(0), //
|
| + B(Return), //
|
| },
|
| 3,
|
| {InstanceType::FIXED_ARRAY_TYPE,
|
| @@ -2502,17 +2348,15 @@ TEST(ObjectLiterals) {
|
| {"var a = 'test'; return { val: a, [a]: 1 }",
|
| 5 * kPointerSize,
|
| 1,
|
| - 41,
|
| + 37,
|
| {
|
| B(LdaConstant), U8(0), //
|
| B(Star), R(0), //
|
| B(LdaConstant), U8(1), //
|
| B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), //
|
| B(Star), R(1), //
|
| - B(LdaConstant), U8(2), //
|
| - B(Star), R(2), //
|
| B(Ldar), R(0), //
|
| - B(StoreICSloppy), R(1), R(2), U8(3), //
|
| + B(StoreICSloppy), R(1), U8(2), U8(vector->GetIndex(slot1)), //
|
| B(Ldar), R(0), //
|
| B(ToName), //
|
| B(Star), R(2), //
|
| @@ -2586,7 +2430,7 @@ TEST(ObjectLiterals) {
|
| B(LdaZero), //
|
| B(Star), R(4), //
|
| B(CallRuntime), U16(Runtime::kDefineGetterPropertyUnchecked), //
|
| - R(1), U8(4), //
|
| + R(1), U8(4), //
|
| B(LdaConstant), U8(3), //
|
| B(ToName), //
|
| B(Star), R(2), //
|
| @@ -2596,7 +2440,7 @@ TEST(ObjectLiterals) {
|
| B(LdaZero), //
|
| B(Star), R(4), //
|
| B(CallRuntime), U16(Runtime::kDefineSetterPropertyUnchecked), //
|
| - R(1), U8(4), //
|
| + R(1), U8(4), //
|
| B(Ldar), R(1), //
|
| B(Return), //
|
| },
|
| @@ -2626,9 +2470,9 @@ TEST(TopLevelObjectLiterals) {
|
| ObjectLiteral::kDisableMementos;
|
| ExpectedSnippet<InstanceType> snippets[] = {
|
| {"var a = { func: function() { } };",
|
| - 6 * kPointerSize,
|
| + 5 * kPointerSize,
|
| 1,
|
| - 54,
|
| + 50,
|
| {
|
| B(LdaConstant), U8(0), //
|
| B(Star), R(1), //
|
| @@ -2642,11 +2486,9 @@ TEST(TopLevelObjectLiterals) {
|
| B(LdaConstant), U8(2), //
|
| B(CreateObjectLiteral), U8(0), U8(has_function_flags), //
|
| B(Star), R(4), //
|
| - B(LdaConstant), U8(3), //
|
| - B(Star), R(5), //
|
| B(LdaConstant), U8(4), //
|
| B(CreateClosure), U8(1), //
|
| - B(StoreICSloppy), R(4), R(5), U8(5), //
|
| + B(StoreICSloppy), R(4), U8(3), U8(5), //
|
| B(CallRuntime), U16(Runtime::kToFastProperties), R(4), U8(1), //
|
| B(Ldar), R(4), //
|
| B(Star), R(3), //
|
| @@ -2798,9 +2640,6 @@ TEST(CallNew) {
|
| BytecodeGeneratorHelper helper;
|
| Zone zone;
|
|
|
| - int context_reg = Register::function_context().index();
|
| - int global_index = Context::GLOBAL_OBJECT_INDEX;
|
| -
|
| FeedbackVectorSpec feedback_spec(&zone);
|
| FeedbackVectorSlot slot1 = feedback_spec.AddGeneralSlot();
|
| FeedbackVectorSlot slot2 = feedback_spec.AddLoadICSlot();
|
| @@ -2813,17 +2652,14 @@ TEST(CallNew) {
|
| {"function bar() { this.value = 0; }\n"
|
| "function f() { return new bar(); }\n"
|
| "f()",
|
| - 2 * kPointerSize,
|
| + 1 * kPointerSize,
|
| 1,
|
| - 17,
|
| + 10,
|
| {
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(New), R(0), R(0), U8(0), //
|
| - B(Return), //
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(New), R(0), R(0), U8(0), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
|
| @@ -2832,17 +2668,14 @@ TEST(CallNew) {
|
| "f()",
|
| 2 * kPointerSize,
|
| 1,
|
| - 21,
|
| + 14,
|
| {
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(LdaSmi8), U8(3), //
|
| - B(Star), R(1), //
|
| - B(New), R(0), R(1), U8(1), //
|
| - B(Return), //
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(LdaSmi8), U8(3), //
|
| + B(Star), R(1), //
|
| + B(New), R(0), R(1), U8(1), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
|
| @@ -2856,21 +2689,18 @@ TEST(CallNew) {
|
| "f()",
|
| 4 * kPointerSize,
|
| 1,
|
| - 29,
|
| + 22,
|
| {
|
| - B(LdaContextSlot), R(context_reg), U8(global_index), //
|
| - B(Star), R(1), //
|
| - B(LdaConstant), U8(0), //
|
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot2)), //
|
| - B(Star), R(0), //
|
| - B(LdaSmi8), U8(3), //
|
| - B(Star), R(1), //
|
| - B(LdaSmi8), U8(4), //
|
| - B(Star), R(2), //
|
| - B(LdaSmi8), U8(5), //
|
| - B(Star), R(3), //
|
| - B(New), R(0), R(1), U8(3), //
|
| - B(Return), //
|
| + B(LdaGlobalSloppy), U8(0), U8(vector->GetIndex(slot2)), //
|
| + B(Star), R(0), //
|
| + B(LdaSmi8), U8(3), //
|
| + B(Star), R(1), //
|
| + B(LdaSmi8), U8(4), //
|
| + B(Star), R(2), //
|
| + B(LdaSmi8), U8(5), //
|
| + B(Star), R(3), //
|
| + B(New), R(0), R(1), U8(3), //
|
| + B(Return), //
|
| },
|
| 1,
|
| {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}},
|
|
|