Chromium Code Reviews| 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 a5cb12aceab8db2947e25f8178c25c7f934d9001..5fc2a6926073dfac5c21376c49bb7d5070fc7d57 100644 |
| --- a/test/cctest/interpreter/test-bytecode-generator.cc |
| +++ b/test/cctest/interpreter/test-bytecode-generator.cc |
| @@ -75,6 +75,8 @@ class BytecodeGeneratorHelper { |
| #define B(x) static_cast<uint8_t>(Bytecode::k##x) |
| #define U8(x) static_cast<uint8_t>((x) & 0xff) |
| #define R(x) static_cast<uint8_t>(-(x) & 0xff) |
| +#define A(x, n) R(helper.kLastParamIndex - (n) + 1 + (x)) |
| +#define THIS(n) A(0, n) |
| #define _ static_cast<uint8_t>(0x5a) |
| #if defined(V8_TARGET_LITTLE_ENDIAN) |
| #define U16(x) static_cast<uint8_t>((x) & 0xff), \ |
| @@ -128,7 +130,7 @@ static void CheckConstant(InstanceType expected, Object* actual) { |
| template <typename T> |
| -static void CheckBytecodeArrayEqual(struct ExpectedSnippet<T> expected, |
| +static void CheckBytecodeArrayEqual(const ExpectedSnippet<T>& expected, |
| Handle<BytecodeArray> actual, |
| bool has_unknown = false) { |
| CHECK_EQ(actual->frame_size(), expected.frame_size); |
| @@ -229,158 +231,135 @@ TEST(PrimitiveExpressions) { |
| InitializedHandleScope handle_scope; |
| BytecodeGeneratorHelper helper; |
| - ExpectedSnippet<int> snippets[] = { |
| - {"var x = 0; return x;", |
| - kPointerSize, |
| - 1, |
| - 6, |
| - {B(LdaZero), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 0; return x + 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 12, |
| - {B(LdaZero), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(Add), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 0; return x - 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 12, |
| - {B(LdaZero), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(Sub), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 4; return x * 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(4), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(Mul), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 4; return x / 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(4), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(Div), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 4; return x % 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(4), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(Mod), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 1; return x | 2;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(2), // |
| - B(BitwiseOr), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 1; return x ^ 2;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(2), // |
| - B(BitwiseXor), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 1; return x & 2;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(2), // |
| - B(BitwiseAnd), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 10; return x << 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(10), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(ShiftLeft), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 10; return x >> 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(10), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(ShiftRight), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 10; return x >>> 3;", |
| - 2 * kPointerSize, |
| - 1, |
| - 13, |
| - {B(LdaSmi8), U8(10), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // Easy to spot r1 not really needed here. |
| - B(Star), R(1), // Dead store. |
| - B(LdaSmi8), U8(3), // |
| - B(ShiftRightLogical), R(1), // |
| - B(Return)}, |
| - 0}, |
| - {"var x = 0; return (x, 3);", |
| - 1 * kPointerSize, |
| - 1, |
| - 8, |
| - {B(LdaZero), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(LdaSmi8), U8(3), // |
| - B(Return)}, |
| - 0}}; |
| + ExpectedSnippet<int> snippets[] = {{"var x = 0; return x;", |
| + kPointerSize, |
| + 1, |
| + 6, |
| + {B(LdaZero), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 0; return x + 3;", |
| + kPointerSize, |
| + 1, |
| + 8, |
| + {B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(Add), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 0; return x - 3;", |
| + kPointerSize, |
| + 1, |
| + 8, |
| + {B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(Sub), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 4; return x * 3;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(4), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(Mul), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 4; return x / 3;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(4), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(Div), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 4; return x % 3;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(4), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(Mod), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 1; return x | 2;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(1), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(2), // |
| + B(BitwiseOr), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 1; return x ^ 2;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(1), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(2), // |
| + B(BitwiseXor), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 1; return x & 2;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(1), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(2), // |
| + B(BitwiseAnd), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 10; return x << 3;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(10), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(ShiftLeft), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 10; return x >> 3;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(10), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(ShiftRight), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 10; return x >>> 3;", |
| + kPointerSize, |
| + 1, |
| + 9, |
| + {B(LdaSmi8), U8(10), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(ShiftRightLogical), R(0), // |
| + B(Return)}, |
| + 0}, |
| + {"var x = 0; return (x, 3);", |
| + kPointerSize, |
| + 1, |
| + 8, |
| + {B(LdaZero), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(LdaSmi8), U8(3), // |
| + B(Return)}, |
| + 0}}; |
| for (size_t i = 0; i < arraysize(snippets); i++) { |
| Handle<BytecodeArray> bytecode_array = |
| @@ -507,27 +486,51 @@ TEST(Parameters) { |
| ExpectedSnippet<int> snippets[] = { |
| {"function f() { return this; }", |
| - 0, 1, 3, {B(Ldar), R(helper.kLastParamIndex), B(Return)}, 0}, |
| + 0, |
| + 1, |
| + 3, |
| + {B(Ldar), THIS(1), B(Return)}, |
| + 0}, |
| {"function f(arg1) { return arg1; }", |
| - 0, 2, 3, {B(Ldar), R(helper.kLastParamIndex), B(Return)}, 0}, |
| + 0, |
| + 2, |
| + 3, |
| + {B(Ldar), A(1, 2), B(Return)}, |
| + 0}, |
| {"function f(arg1) { return this; }", |
| - 0, 2, 3, {B(Ldar), R(helper.kLastParamIndex - 1), B(Return)}, 0}, |
| + 0, |
| + 2, |
| + 3, |
| + {B(Ldar), THIS(2), B(Return)}, |
| + 0}, |
| {"function f(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { return arg4; }", |
| - 0, 8, 3, {B(Ldar), R(helper.kLastParamIndex - 3), B(Return)}, 0}, |
| + 0, |
| + 8, |
| + 3, |
| + {B(Ldar), A(4, 8), B(Return)}, |
| + 0}, |
| {"function f(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { return this; }", |
| - 0, 8, 3, {B(Ldar), R(helper.kLastParamIndex - 7), B(Return)}, 0}, |
| + 0, |
| + 8, |
| + 3, |
| + {B(Ldar), THIS(8), B(Return)}, |
| + 0}, |
| {"function f(arg1) { arg1 = 1; }", |
| - 0, 2, 6, |
| - {B(LdaSmi8), U8(1), // |
| - B(Star), R(helper.kLastParamIndex), // |
| - B(LdaUndefined), // |
| + 0, |
| + 2, |
| + 6, |
| + {B(LdaSmi8), U8(1), // |
| + B(Star), A(1, 2), // |
| + B(LdaUndefined), // |
| B(Return)}, |
| 0}, |
| {"function f(arg1, arg2, arg3, arg4) { arg2 = 1; }", |
| - 0, 5, 6, |
| - {B(LdaSmi8), U8(1), // |
| - B(Star), R(helper.kLastParamIndex - 2), // |
| - B(LdaUndefined), // |
| + 0, |
| + 5, |
| + 6, |
| + {B(LdaSmi8), U8(1), // |
| + B(Star), A(2, 5), // |
| + B(LdaUndefined), // |
| B(Return)}, |
| 0}, |
| }; |
| @@ -697,104 +700,88 @@ TEST(PropertyLoads) { |
| ExpectedSnippet<const char*> snippets[] = { |
| {"function f(a) { return a.name; }\nf({name : \"test\"})", |
| - 1 * kPointerSize, |
| + 0, |
| 2, |
| - 10, |
| + 6, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaConstant), U8(0), // |
| - B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // |
| - B(Return) // |
| + B(LdaConstant), U8(0), // |
| + B(LoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), // |
| + B(Return), // |
| }, |
| 1, |
| {"name"}}, |
| {"function f(a) { return a[\"key\"]; }\nf({key : \"test\"})", |
| - 1 * kPointerSize, |
| + 0, |
| 2, |
| - 10, |
| + 6, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaConstant), U8(0), // |
| - B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // |
| - B(Return) // |
| + B(LdaConstant), U8(0), // |
| + B(LoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), // |
| + B(Return) // |
| }, |
| 1, |
| {"key"}}, |
| {"function f(a) { return a[100]; }\nf({100 : \"test\"})", |
| - 1 * kPointerSize, |
| + 0, |
| 2, |
| - 10, |
| + 6, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaSmi8), U8(100), // |
| - B(KeyedLoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // |
| - B(Return) // |
| + B(LdaSmi8), U8(100), // |
| + B(KeyedLoadICSloppy), A(1, 2), U8(vector->GetIndex(slot1)), // |
| + B(Return) // |
| }, |
| 0}, |
| {"function f(a, b) { return a[b]; }\nf({arg : \"test\"}, \"arg\")", |
| - 1 * kPointerSize, |
| + 0, |
| 3, |
| - 10, |
| + 6, |
| { |
| - B(Ldar), R(helper.kLastParamIndex - 1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(KeyedLoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // |
| - B(Return) // |
| + B(Ldar), A(1, 2), // |
| + B(KeyedLoadICSloppy), A(1, 3), U8(vector->GetIndex(slot1)), // |
| + B(Return) // |
| }, |
| 0}, |
| {"function f(a) { var b = a.name; return a[-124]; }\n" |
| "f({\"-124\" : \"test\", name : 123 })", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 2, |
| - 21, |
| + 13, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(1), // |
| - B(LdaConstant), U8(0), // |
| - B(LoadICSloppy), R(1), U8(vector->GetIndex(slot1)), // |
| - B(Star), R(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(1), // |
| - B(LdaSmi8), U8(-124), // |
| - B(KeyedLoadICSloppy), R(1), U8(vector->GetIndex(slot2)), // |
| - B(Return) // |
| + 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), // |
| }, |
| 1, |
| {"name"}}, |
| {"function f(a) { \"use strict\"; return a.name; }\nf({name : \"test\"})", |
| - 1 * kPointerSize, |
| + 0, |
| 2, |
| - 12, |
| + 8, |
| { |
| // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
| // expression, or any other unused literal expression. |
| - B(LdaConstant), U8(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaConstant), U8(1), // |
| - B(LoadICStrict), R(0), U8(vector->GetIndex(slot1)), // |
| - B(Return) // |
| + B(LdaConstant), U8(0), // |
| + B(LdaConstant), U8(1), // |
| + B(LoadICStrict), A(1, 2), U8(vector->GetIndex(slot1)), // |
| + B(Return), // |
| }, |
| 2, |
| {"use strict", "name"}}, |
| {"function f(a, b) { \"use strict\"; return a[b]; }\n" |
| "f({arg : \"test\"}, \"arg\")", |
| - 1 * kPointerSize, |
| + 0, |
| 3, |
| - 12, |
| + 8, |
| { |
| // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
| // expression, or any other unused literal expression. |
| - B(LdaConstant), U8(0), // |
| - B(Ldar), R(helper.kLastParamIndex - 1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(KeyedLoadICStrict), R(0), U8(vector->GetIndex(slot1)), // |
| - B(Return) // |
| + B(LdaConstant), U8(0), // |
| + B(Ldar), A(2, 3), // |
| + B(KeyedLoadICStrict), A(1, 3), U8(vector->GetIndex(slot1)), // |
| + B(Return), // |
| }, |
| 1, |
| {"use strict"}}}; |
| @@ -820,126 +807,109 @@ TEST(PropertyStores) { |
| ExpectedSnippet<const char*> snippets[] = { |
| {"function f(a) { a.name = \"val\"; }\nf({name : \"test\"})", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 2, |
| - 16, |
| + 12, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaConstant), U8(0), // |
| - B(Star), R(1), // |
| - B(LdaConstant), U8(1), // |
| - B(StoreICSloppy), R(0), R(1), U8(vector->GetIndex(slot1)), // |
| - B(LdaUndefined), // |
| - B(Return) // |
| + 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), // |
| }, |
| 2, |
| {"name", "val"}}, |
| {"function f(a) { a[\"key\"] = \"val\"; }\nf({key : \"test\"})", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 2, |
| - 16, |
| + 12, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaConstant), U8(0), // |
| - B(Star), R(1), // |
| - B(LdaConstant), U8(1), // |
| - B(StoreICSloppy), R(0), R(1), U8(vector->GetIndex(slot1)), // |
| - B(LdaUndefined), // |
| - B(Return) // |
| + 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), // |
| }, |
| 2, |
| {"key", "val"}}, |
| {"function f(a) { a[100] = \"val\"; }\nf({100 : \"test\"})", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 2, |
| - 16, |
| + 12, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaSmi8), U8(100), // |
| - B(Star), R(1), // |
| - B(LdaConstant), U8(0), // |
| - B(KeyedStoreICSloppy), R(0), R(1), 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)), // |
|
rmcilroy
2015/10/19 12:56:23
nit - indent operands (and below) - I can't find a
oth
2015/10/20 15:28:53
Done.
|
| + B(LdaUndefined), // |
| + B(Return), // |
| }, |
| 1, |
| {"val"}}, |
| {"function f(a, b) { a[b] = \"val\"; }\nf({arg : \"test\"}, \"arg\")", |
| - 2 * kPointerSize, |
| + 0, |
| 3, |
| - 16, |
| + 8, |
| { |
| - B(Ldar), R(helper.kLastParamIndex - 1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(1), // |
| - B(LdaConstant), U8(0), // |
| - B(KeyedStoreICSloppy), R(0), R(1), 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 })", |
| - 3 * kPointerSize, |
| + kPointerSize, |
| 2, |
| - 23, |
| + 15, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaConstant), U8(0), // |
| - B(Star), R(1), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(2), // |
| - B(LdaSmi8), U8(-124), // |
| - B(KeyedLoadICSloppy), R(2), U8(vector->GetIndex(slot1)), // |
| - B(StoreICSloppy), R(0), R(1), U8(vector->GetIndex(slot2)), // |
| - B(LdaUndefined), // |
| - B(Return) // |
| + 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), // |
| }, |
| 1, |
| {"name"}}, |
| {"function f(a) { \"use strict\"; a.name = \"val\"; }\n" |
| "f({name : \"test\"})", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 2, |
| - 18, |
| + 14, |
| { |
| // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
| // expression, or any other unused literal expression. |
| - B(LdaConstant), U8(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaConstant), U8(1), // |
| - B(Star), R(1), // |
| - B(LdaConstant), U8(2), // |
| - B(StoreICStrict), R(0), R(1), U8(vector->GetIndex(slot1)), // |
| - B(LdaUndefined), // |
| - B(Return) // |
| + B(LdaConstant), U8(0), // |
| + B(LdaConstant), U8(1), // |
| + B(Star), R(0), // |
| + B(LdaConstant), U8(2), // |
| + B(StoreICStrict), A(1, 2), R(0), U8(vector->GetIndex(slot1)), // |
| + B(LdaUndefined), // |
| + B(Return), // |
| }, |
| 3, |
| {"use strict", "name", "val"}}, |
| {"function f(a, b) { \"use strict\"; a[b] = \"val\"; }\n" |
| "f({arg : \"test\"}, \"arg\")", |
| - 2 * kPointerSize, |
| + 0, |
| 3, |
| - 18, |
| + 10, |
| { |
| // TODO(rmcilroy) Avoid unnecessary LdaConstant for "use strict" |
| // expression, or any other unused literal expression. |
| - B(LdaConstant), U8(0), // |
| - B(Ldar), R(helper.kLastParamIndex - 1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(1), // |
| - B(LdaConstant), U8(1), // |
| - B(KeyedStoreICStrict), R(0), R(1), U8(vector->GetIndex(slot1)), // |
| - B(LdaUndefined), // |
| - B(Return) // |
| + B(LdaConstant), U8(0), // |
| + B(LdaConstant), U8(1), // |
| + B(KeyedStoreICStrict), A(1, 3), A(2, 3), // |
| + U8(vector->GetIndex(slot1)), // |
| + B(LdaUndefined), // |
| + B(Return), // |
| }, |
| 2, |
| {"use strict", "val"}}}; |
| @@ -973,13 +943,13 @@ TEST(PropertyCall) { |
| 2, |
| 16, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| + 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(Return), // |
| }, |
| 1, |
| {"func"}}, |
| @@ -988,14 +958,14 @@ TEST(PropertyCall) { |
| 4, |
| 24, |
| { |
| - B(Ldar), R(helper.kLastParamIndex - 2), // |
| + 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), R(helper.kLastParamIndex - 1), // |
| + B(Ldar), A(2, 4), // |
| B(Star), R(2), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| + B(Ldar), A(3, 4), // |
| B(Star), R(3), // |
| B(Call), R(0), R(1), U8(2), // |
| B(Return) // |
| @@ -1005,19 +975,17 @@ TEST(PropertyCall) { |
| {"function f(a, b) { return a.func(b + b, b); }\nf(" FUNC_ARG ", 1)", |
| 4 * kPointerSize, |
| 3, |
| - 30, |
| + 26, |
| { |
| - B(Ldar), R(helper.kLastParamIndex - 1), // |
| + 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), R(helper.kLastParamIndex), // |
| - B(Star), R(3), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(Add), R(3), // |
| + B(Ldar), A(2, 3), // |
| + B(Add), A(2, 3), // |
| B(Star), R(2), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| + B(Ldar), A(2, 3), // |
| B(Star), R(3), // |
| B(Call), R(0), R(1), U8(2), // |
| B(Return), // |
| @@ -1294,7 +1262,7 @@ TEST(CallRuntime) { |
| 2, |
| 10, |
| { |
| - B(Ldar), R(helper.kLastParamIndex), // |
| + B(Ldar), A(1, 2), // |
| B(Star), R(0), // |
| B(CallRuntime), U16(Runtime::kIsArray), R(0), U8(1), // |
| B(Return) // |
| @@ -1381,39 +1349,35 @@ TEST(IfConditions) { |
| {unused, unused, unused, unused, unused, unused}}, |
| {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }" |
| "f(99);", |
| - kPointerSize, |
| + 0, |
| 2, |
| - 19, |
| - {B(Ldar), R(helper.kLastParamIndex), // |
| - B(Star), R(0), // |
| - B(LdaZero), // |
| - B(TestLessThanOrEqual), R(0), // |
| - B(JumpIfFalse), U8(7), // |
| - B(LdaConstant), U8(0), // |
| - B(Return), // |
| - B(Jump), U8(5), // |
| - B(LdaConstant), U8(1), // |
| - B(Return), // |
| - B(LdaUndefined), // |
| - B(Return)}, // |
| + 15, |
| + {B(LdaZero), // |
| + B(TestLessThanOrEqual), A(1, 2), // |
| + B(JumpIfFalse), U8(7), // |
| + B(LdaConstant), U8(0), // |
| + B(Return), // |
| + B(Jump), U8(5), // |
| + B(LdaConstant), U8(1), // |
| + B(Return), // |
| + B(LdaUndefined), // |
| + B(Return)}, // |
| 2, |
| {helper.factory()->NewNumberFromInt(200), |
| helper.factory()->NewNumberFromInt(-200), unused, unused, unused, |
| unused}}, |
| {"function f(a, b) { if (a in b) { return 200; } }" |
| "f('prop', { prop: 'yes'});", |
| - kPointerSize, |
| + 0, |
| 3, |
| - 15, |
| - {B(Ldar), R(helper.kLastParamIndex - 1), // |
| - B(Star), R(0), // |
| - B(Ldar), R(helper.kLastParamIndex), // |
| - B(TestIn), R(0), // |
| - B(JumpIfFalse), U8(5), // |
| - B(LdaConstant), U8(0), // |
| - B(Return), // |
| - B(LdaUndefined), // |
| - B(Return)}, // |
| + 11, |
| + {B(Ldar), A(2, 3), // |
| + B(TestIn), A(1, 3), // |
| + B(JumpIfFalse), U8(5), // |
| + B(LdaConstant), U8(0), // |
| + B(Return), // |
| + B(LdaUndefined), // |
| + B(Return)}, // |
| 1, |
| {helper.factory()->NewNumberFromInt(200), unused, unused, unused, unused, |
| unused}}, |
| @@ -1422,34 +1386,34 @@ TEST(IfConditions) { |
| X X X X X X X X X X X X X X X X X X X X X X X X |
| #undef X |
| " return 200; } else { return -200; } } f(0.001)", |
| - 3 * kPointerSize, |
| + 2 * kPointerSize, |
| 2, |
| - 218, |
| - {B(LdaZero), // |
| - B(Star), R(0), // |
| - B(LdaZero), // |
| - B(Star), R(1), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| - B(LdaConstant), U8(0), // |
| - B(TestEqualStrict), R(2), // |
| - B(JumpIfFalseConstant), U8(2), // |
| -#define X B(Ldar), R(0), B(Star), R(1), B(Ldar), R(1), B(Star), R(0), |
| - X X X X X X X X X X X X X X X X X X X X X X X X |
| + 214, |
| + { |
| +#define X B(Ldar), R(0), B(Star), R(1), B(Ldar), R(1), B(Star), R(0) |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaZero), // |
| + B(Star), R(1), // |
| + B(LdaConstant), U8(0), // |
| + B(TestEqualStrict), R(0), // |
| + B(JumpIfFalseConstant), U8(2), // |
| + X, X, X, X, X, X, X, X, X, X, // |
| + X, X, X, X, X, X, X, X, X, X, // |
| + X, X, X, X, // |
| + B(LdaConstant), U8(1), // |
| + B(Return), // |
| + B(Jump), U8(5), // |
| + B(LdaConstant), U8(3), // |
| + B(Return), // |
| + B(LdaUndefined), // |
| + B(Return)}, // |
| #undef X |
| - B(LdaConstant), U8(1), // |
| - B(Return), // |
| - B(Jump), U8(5), // |
| - B(LdaConstant), U8(3), // |
| - B(Return), // |
| - B(LdaUndefined), // |
| - B(Return)}, // |
| 4, |
| {helper.factory()->NewHeapNumber(0.01), |
| helper.factory()->NewNumberFromInt(200), |
| helper.factory()->NewNumberFromInt(199), |
| - helper.factory()->NewNumberFromInt(-200), |
| - unused, unused}}, |
| + helper.factory()->NewNumberFromInt(-200), unused, unused}}, |
| {"function f(a, b) {\n" |
| " if (a == b) { return 1; }\n" |
| " if (a === b) { return 1; }\n" |
| @@ -1459,22 +1423,18 @@ TEST(IfConditions) { |
| " if (a >= b) { return 1; }\n" |
| " if (a in b) { return 1; }\n" |
| " if (a instanceof b) { return 1; }\n" |
| - " /* if (a != b) { return 1; } */" // TODO(oth) Ast visitor yields |
| - " /* if (a !== b) { return 1; } */" // UNARY NOT, rather than !=/!==. |
| " return 0;\n" |
| "} f(1, 1);", |
| - kPointerSize, |
| + 0, |
| 3, |
| - 106, |
| + 74, |
| { |
| #define IF_CONDITION_RETURN(condition) \ |
| - B(Ldar), R(helper.kLastParamIndex - 1), \ |
| - B(Star), R(0), \ |
| - B(Ldar), R(helper.kLastParamIndex), \ |
| - B(condition), R(0), \ |
| - B(JumpIfFalse), U8(5), \ |
| - B(LdaSmi8), U8(1), \ |
| - B(Return), |
| + B(Ldar), A(2, 3), \ |
| + B(condition), A(1, 3), \ |
| + B(JumpIfFalse), U8(5), \ |
| + B(LdaSmi8), U8(1), \ |
| + B(Return), |
| IF_CONDITION_RETURN(TestEqual) // |
| IF_CONDITION_RETURN(TestEqualStrict) // |
| IF_CONDITION_RETURN(TestLessThan) // |
| @@ -1483,9 +1443,9 @@ TEST(IfConditions) { |
| IF_CONDITION_RETURN(TestGreaterThanOrEqual) // |
| IF_CONDITION_RETURN(TestIn) // |
| IF_CONDITION_RETURN(TestInstanceOf) // |
| + B(LdaZero), // |
| + B(Return)}, // |
| #undef IF_CONDITION_RETURN |
| - B(LdaZero), // |
| - B(Return)}, // |
| 0, |
| {unused, unused, unused, unused, unused, unused}}, |
| }; |
| @@ -1508,31 +1468,29 @@ TEST(DeclareGlobals) { |
| 1, |
| 45, |
| { |
| - B(Ldar), R(Register::function_closure().index()), // |
| - B(Star), R(2), // |
| - B(LdaConstant), U8(0), // |
| - B(Star), R(3), // |
| - B(CallRuntime), U16(Runtime::kNewScriptContext), R(2), U8(2), // |
| - B(PushContext), R(1), // |
| - B(LdaConstant), U8(1), // |
| - B(Star), R(2), // |
| - B(LdaZero), // |
| - B(Star), R(3), // |
| - B(CallRuntime), U16(Runtime::kDeclareGlobals), R(2), U8(2), // |
| - B(LdaConstant), U8(2), // |
| - B(Star), R(2), // |
| - B(LdaZero), // |
| - B(Star), R(3), // |
| - B(LdaSmi8), U8(1), // |
| - B(Star), R(4), // |
| - B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), // |
| - U8(3), // |
| - B(LdaUndefined), // |
| - B(Return) // |
| + B(Ldar), R(Register::function_closure().index()), // |
| + B(Star), R(2), // |
| + B(LdaConstant), U8(0), // |
| + B(Star), R(3), // |
| + B(CallRuntime), U16(Runtime::kNewScriptContext), R(2), U8(2), // |
| + B(PushContext), R(1), // |
| + B(LdaConstant), U8(1), // |
| + B(Star), R(2), // |
| + B(LdaZero), // |
| + B(Star), R(3), // |
| + B(CallRuntime), U16(Runtime::kDeclareGlobals), R(2), U8(2), // |
| + B(LdaConstant), U8(2), // |
| + B(Star), R(2), // |
| + B(LdaZero), // |
| + B(Star), R(3), // |
| + B(LdaSmi8), U8(1), // |
| + B(Star), R(4), // |
| + B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), U8(3), // |
| + B(LdaUndefined), // |
| + B(Return), // |
| }, |
| 3, |
| - {InstanceType::FIXED_ARRAY_TYPE, |
| - InstanceType::FIXED_ARRAY_TYPE, |
| + {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, |
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| {"function f() {}", |
| 3 * kPointerSize, |
| @@ -1578,7 +1536,7 @@ TEST(DeclareGlobals) { |
| B(LdaSmi8), U8(1), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), // |
| - U8(3), // |
| + U8(3), // |
| B(LdaSmi8), U8(2), // |
| B(StaGlobalSloppy), _, // |
| B(Star), R(0), // |
| @@ -1586,8 +1544,7 @@ TEST(DeclareGlobals) { |
| B(Return) // |
| }, |
| 3, |
| - {InstanceType::FIXED_ARRAY_TYPE, |
| - InstanceType::FIXED_ARRAY_TYPE, |
| + {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, |
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| {"function f() {}\nf();", |
| 4 * kPointerSize, |
| @@ -1634,34 +1591,28 @@ TEST(BasicLoops) { |
| {"var x = 0;" |
| "var y = 1;" |
| "while (x < 10) {" |
| - " y = y * 10;" |
| + " y = y * 12;" |
| " x = x + 1;" |
| "}" |
| "return y;", |
| - 3 * kPointerSize, |
| + 2 * kPointerSize, |
| 1, |
| - 42, |
| + 30, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| B(LdaSmi8), U8(1), // |
| B(Star), R(1), // |
| - B(Jump), U8(22), // |
| - B(Ldar), R(1), // |
| - B(Star), R(2), // |
| - B(LdaSmi8), U8(10), // |
| - B(Mul), R(2), // |
| + B(Jump), U8(14), // |
| + B(LdaSmi8), U8(12), // |
| + B(Mul), R(1), // |
| B(Star), R(1), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(2), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| B(LdaSmi8), U8(10), // |
| - B(TestLessThan), R(2), // |
| - B(JumpIfTrue), U8(-28), // |
| + B(TestLessThan), R(0), // |
| + B(JumpIfTrue), U8(-16), // |
| B(Ldar), R(1), // |
| B(Return), // |
| }, |
| @@ -1676,52 +1627,40 @@ TEST(BasicLoops) { |
| " i = i + 1;" |
| "}" |
| "return i;", |
| - 2 * kPointerSize, |
| + 1 * kPointerSize, |
| 1, |
| - 80, |
| + 56, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| - B(Jump), U8(71), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(47), // |
| B(LdaZero), // |
| - B(TestLessThan), R(1), // |
| + B(TestLessThan), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(60), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(40), // |
| B(LdaSmi8), U8(3), // |
| - B(TestEqual), R(1), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(51), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(35), // |
| B(LdaSmi8), U8(4), // |
| - B(TestEqual), R(1), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(39), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(27), // |
| B(LdaSmi8), U8(10), // |
| - B(TestEqual), R(1), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(24), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(16), // |
| B(LdaSmi8), U8(5), // |
| - B(TestEqual), R(1), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(15), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(11), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(1), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| B(LdaTrue), // |
| - B(JumpIfTrue), U8(-70), // |
| + B(JumpIfTrue), U8(-46), // |
| B(Ldar), R(0), // |
| - B(Return) // |
| + B(Return), // |
| }, |
| 0}, |
| {"var x = 0; var y = 1;" |
| @@ -1732,43 +1671,33 @@ TEST(BasicLoops) { |
| " x = x + 1;" |
| "} while (x < 10);" |
| "return y;", |
| - 3 * kPointerSize, |
| + 2 * kPointerSize, |
| 1, |
| - 64, |
| + 44, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| B(LdaSmi8), U8(1), // |
| B(Star), R(1), // |
| - B(Ldar), R(1), // |
| - B(Star), R(2), // |
| B(LdaSmi8), U8(10), // |
| - B(Mul), R(2), // |
| + B(Mul), R(1), // |
| B(Star), R(1), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| B(LdaSmi8), U8(5), // |
| - B(TestEqual), R(2), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(34), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| + B(Jump), U8(22), // |
| B(LdaSmi8), U8(6), // |
| - B(TestEqual), R(2), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(12), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| + B(Jump), U8(8), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(2), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| B(LdaSmi8), U8(10), // |
| - B(TestLessThan), R(2), // |
| - B(JumpIfTrue), U8(-52), // |
| + B(TestLessThan), R(0), // |
| + B(JumpIfTrue), U8(-32), // |
| B(Ldar), R(1), // |
| - B(Return) // |
| + B(Return), // |
| }, |
| 0}, |
| {"var x = 0; " |
| @@ -1776,24 +1705,20 @@ TEST(BasicLoops) { |
| " if (x == 1) break;" |
| " x = x + 1;" |
| "}", |
| - 2 * kPointerSize, |
| + 1 * kPointerSize, |
| 1, |
| - 29, |
| + 21, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| B(LdaSmi8), U8(1), // |
| - B(TestEqual), R(1), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(14), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(10), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(1), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| - B(Jump), U8(-22), // |
| + B(Jump), U8(-14), // |
| B(LdaUndefined), // |
| B(Return), // |
| }, |
| @@ -1803,31 +1728,25 @@ TEST(BasicLoops) { |
| " u = u + 1;" |
| " continue;" |
| "}", |
| - 3 * kPointerSize, |
| + 2 * kPointerSize, |
| 1, |
| - 42, |
| + 30, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| B(LdaZero), // |
| B(Star), R(1), // |
| - B(Jump), U8(24), // |
| - B(Ldar), R(0), // |
| - B(Star), R(2), // |
| + B(Jump), U8(16), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(2), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| B(Jump), U8(2), // |
| - B(Ldar), R(1), // |
| - B(Star), R(2), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(2), // |
| + B(Add), R(1), // |
| B(Star), R(1), // |
| - B(Ldar), R(1), // |
| - B(Star), R(2), // |
| B(LdaSmi8), U8(100), // |
| - B(TestLessThan), R(2), // |
| - B(JumpIfTrue), U8(-30), // |
| + B(TestLessThan), R(1), // |
| + B(JumpIfTrue), U8(-18), // |
| B(LdaUndefined), // |
| B(Return), // |
| }, |
| @@ -1842,38 +1761,30 @@ TEST(BasicLoops) { |
| " break;" |
| "}" |
| "return i;", |
| - 2 * kPointerSize, |
| + 1 * kPointerSize, |
| 1, |
| - 57, |
| + 41, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| - B(Jump), U8(48), // |
| - B(Jump), U8(24), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(32), // |
| + B(Jump), U8(16), // |
| B(LdaSmi8), U8(2), // |
| - B(TestEqual), R(1), // |
| + B(TestEqual), R(0), // |
| B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(22), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(14), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(1), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| B(LdaSmi8), U8(3), // |
| - B(TestLessThan), R(1), // |
| - B(JumpIfTrue), U8(-30), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(TestLessThan), R(0), // |
| + B(JumpIfTrue), U8(-18), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(1), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| B(Jump), U8(5), // |
| B(LdaTrue), // |
| - B(JumpIfTrue), U8(-47), // |
| + B(JumpIfTrue), U8(-31), // |
| B(Ldar), R(0), // |
| B(Return), // |
| }, |
| @@ -1898,24 +1809,20 @@ TEST(UnaryOperators) { |
| " x = x + 10;" |
| "}" |
| "return x;", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 1, |
| - 29, |
| + 21, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| - B(Jump), U8(12), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| + B(Jump), U8(8), // |
| B(LdaSmi8), U8(10), // |
| - B(Add), R(1), // |
| + B(Add), R(0), // |
| B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| B(LdaSmi8), U8(10), // |
| - B(TestEqual), R(1), // |
| + B(TestEqual), R(0), // |
| B(LogicalNot), // |
| - B(JumpIfTrue), U8(-19), // |
| + B(JumpIfTrue), U8(-11), // |
| B(Ldar), R(0), // |
| B(Return), // |
| }, |
| @@ -1925,36 +1832,32 @@ TEST(UnaryOperators) { |
| " x = !x;" |
| "} while(x == false);" |
| "return x;", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 1, |
| - 20, |
| + 16, |
| { |
| - B(LdaFalse), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(LogicalNot), // |
| - B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| - B(LdaFalse), // |
| - B(TestEqual), R(1), // |
| - B(JumpIfTrue), U8(-12), // |
| - B(Ldar), R(0), // |
| - B(Return), // |
| + B(LdaFalse), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(LogicalNot), // |
| + B(Star), R(0), // |
| + B(LdaFalse), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfTrue), U8(-8), // |
| + B(Ldar), R(0), // |
| + B(Return), // |
| }, |
| 0}, |
| {"var x = 101;" |
| "return void(x * 3);", |
| - 2 * kPointerSize, |
| + kPointerSize, |
| 1, |
| - 14, |
| + 10, |
| { |
| B(LdaSmi8), U8(101), // |
| B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(Star), R(1), // |
| B(LdaSmi8), U8(3), // |
| - B(Mul), R(1), // |
| + B(Mul), R(0), // |
| B(LdaUndefined), // |
| B(Return), // |
| }, |
| @@ -1962,16 +1865,14 @@ TEST(UnaryOperators) { |
| {"var x = 1234;" |
| "var y = void (x * x - 1);" |
| "return y;", |
| - 4 * kPointerSize, |
| + 3 * kPointerSize, |
| 1, |
| - 24, |
| + 20, |
| { |
| B(LdaConstant), U8(0), // |
| B(Star), R(0), // |
| B(Ldar), R(0), // |
| - B(Star), R(3), // |
| - B(Ldar), R(0), // |
| - B(Mul), R(3), // |
| + B(Mul), R(0), // |
| B(Star), R(2), // |
| B(LdaSmi8), U8(1), // |
| B(Sub), R(2), // |
| @@ -1984,14 +1885,14 @@ TEST(UnaryOperators) { |
| {1234}}, |
| {"var x = 13;" |
| "return typeof(x);", |
| - 1 * kPointerSize, |
| + kPointerSize, |
| 1, |
| 8, |
| { |
| B(LdaSmi8), U8(13), // |
| B(Star), R(0), // |
| - B(Ldar), R(0), // |
| - B(TypeOf), // |
| + B(Ldar), R(0), // TODO(oth): Ldar R(X) following Star R(X) |
| + B(TypeOf), // could be culled in bytecode array builder. |
|
rmcilroy
2015/10/19 12:56:23
nit - move comment up one line (on Star and Ldar)
oth
2015/10/20 15:28:53
Done.
|
| B(Return), // |
| }, |
| 0}, |
| @@ -2161,9 +2062,9 @@ TEST(ArrayLiterals) { |
| 1, |
| {InstanceType::FIXED_ARRAY_TYPE}}, |
| {"var a = 1; return [ a, a + 1 ];", |
| - 4 * kPointerSize, |
| + 3 * kPointerSize, |
| 1, |
| - 39, |
| + 35, |
| { |
| B(LdaSmi8), U8(1), // |
| B(Star), R(0), // |
| @@ -2176,13 +2077,11 @@ TEST(ArrayLiterals) { |
| B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot1)), // |
| B(LdaSmi8), U8(1), // |
| B(Star), R(1), // |
| - B(Ldar), R(0), // |
| - B(Star), R(3), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(3), // |
| + B(Add), R(0), // |
| B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot1)), // |
| B(Ldar), R(2), // |
| - B(Return) // |
| + B(Return), // |
| }, |
| 1, |
| {InstanceType::FIXED_ARRAY_TYPE}}, |
| @@ -2198,9 +2097,9 @@ TEST(ArrayLiterals) { |
| 1, |
| {InstanceType::FIXED_ARRAY_TYPE}}, |
| {"var a = 1; return [ [ a, 2 ], [ a + 2 ] ];", |
| - 6 * kPointerSize, |
| + 5 * kPointerSize, |
| 1, |
| - 71, |
| + 67, |
| { |
| B(LdaSmi8), U8(1), // |
| B(Star), R(0), // |
| @@ -2225,10 +2124,8 @@ TEST(ArrayLiterals) { |
| B(Star), R(4), // |
| B(LdaZero), // |
| B(Star), R(3), // |
| - B(Ldar), R(0), // |
| - B(Star), R(5), // |
| B(LdaSmi8), U8(2), // |
| - B(Add), R(5), // |
| + B(Add), R(0), // |
| B(KeyedStoreICSloppy), R(4), R(3), U8(vector->GetIndex(slot2)), // |
| B(Ldar), R(4), // |
| B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot3)), // |
| @@ -2301,9 +2198,9 @@ TEST(ObjectLiterals) { |
| {InstanceType::FIXED_ARRAY_TYPE, |
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| {"var a = 1; return { val: a, val: a + 1 };", |
| - 4 * kPointerSize, |
| + 3 * kPointerSize, |
| 1, |
| - 32, |
| + 28, |
| { |
| B(LdaSmi8), U8(1), // |
| B(Star), R(0), // |
| @@ -2313,10 +2210,8 @@ TEST(ObjectLiterals) { |
| B(Ldar), R(0), // |
| B(LdaConstant), U8(1), // |
| B(Star), R(2), // |
| - B(Ldar), R(0), // |
| - B(Star), R(3), // |
| B(LdaSmi8), U8(1), // |
| - B(Add), R(3), // |
| + B(Add), R(0), // |
| B(StoreICSloppy), R(1), R(2), U8(3), // |
| B(Ldar), R(1), // |
| B(Return), // |
| @@ -2382,7 +2277,7 @@ TEST(ObjectLiterals) { |
| B(LdaZero), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
| - R(0), U8(5), // |
| + R(0), U8(5), // |
| B(Ldar), R(0), // |
| B(Return), // |
| }, |
| @@ -2409,7 +2304,7 @@ TEST(ObjectLiterals) { |
| B(LdaZero), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
| - R(0), U8(5), // |
| + R(0), U8(5), // |
| B(Ldar), R(0), // |
| B(Return), // |
| }, |
| @@ -2436,7 +2331,7 @@ TEST(ObjectLiterals) { |
| B(LdaZero), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
| - R(0), U8(5), // |
| + R(0), U8(5), // |
| B(Ldar), R(0), // |
| B(Return), // |
| }, |
| @@ -2499,7 +2394,7 @@ TEST(ObjectLiterals) { |
| B(LdaZero), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
| - U8(4), // |
| + U8(4), // |
| B(Ldar), R(1), // |
| B(Return), // |
| }, |
| @@ -2528,7 +2423,7 @@ TEST(ObjectLiterals) { |
| B(LdaZero), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
| - U8(4), // |
| + U8(4), // |
| B(Ldar), R(1), // |
| B(Return), // |
| }, |
| @@ -2554,7 +2449,7 @@ TEST(ObjectLiterals) { |
| B(LdaZero), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
| - U8(4), // |
| + U8(4), // |
| B(LdaConstant), U8(1), // |
| B(CreateObjectLiteral), U8(0), U8(13), // |
| B(Star), R(2), // |
| @@ -2583,7 +2478,7 @@ TEST(ObjectLiterals) { |
| B(LdaZero), // |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
| - U8(4), // |
| + U8(4), // |
| B(LdaConstant), U8(3), // |
| B(ToName), // |
| B(Star), R(2), // |
| @@ -2593,7 +2488,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), // |
| @@ -2603,7 +2498,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), // |
| }, |
| @@ -2665,11 +2560,10 @@ TEST(TopLevelObjectLiterals) { |
| B(Star), R(4), // |
| B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), U8(3), // |
| B(LdaUndefined), // |
| - B(Return), // |
| + B(Return), |
| }, |
| 6, |
| - {InstanceType::FIXED_ARRAY_TYPE, |
| - InstanceType::FIXED_ARRAY_TYPE, |
| + {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, |
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
| InstanceType::FIXED_ARRAY_TYPE, |
| InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
| @@ -2691,7 +2585,7 @@ TEST(TryCatch) { |
| // TODO(rmcilroy): modify tests when we have real try catch support. |
| ExpectedSnippet<int> snippets[] = { |
| {"try { return 1; } catch(e) { return 2; }", |
| - 1 * kPointerSize, |
| + kPointerSize, |
| 1, |
| 5, |
| { |
| @@ -2718,7 +2612,7 @@ TEST(TryFinally) { |
| // TODO(rmcilroy): modify tests when we have real try finally support. |
| ExpectedSnippet<int> snippets[] = { |
| {"var a = 1; try { a = 2; } finally { a = 3; }", |
| - 1 * kPointerSize, |
| + kPointerSize, |
| 1, |
| 14, |
| { |