| Index: test/unittests/interpreter/bytecode-array-builder-unittest.cc
|
| diff --git a/test/unittests/interpreter/bytecode-array-builder-unittest.cc b/test/unittests/interpreter/bytecode-array-builder-unittest.cc
|
| index a569c9404785a965af2a0ac16c8796f3f895a767..380169911b409b3519b144c90e6322ab4e505b81 100644
|
| --- a/test/unittests/interpreter/bytecode-array-builder-unittest.cc
|
| +++ b/test/unittests/interpreter/bytecode-array-builder-unittest.cc
|
| @@ -57,11 +57,12 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) {
|
| .LoadFalse()
|
| .StoreAccumulatorInRegister(wide);
|
|
|
| + // Emit Ldar and Star taking care to foil the register optimizer.
|
| builder.StackCheck(0)
|
| .LoadAccumulatorWithRegister(other)
|
| + .BinaryOperation(Token::ADD, reg)
|
| .StoreAccumulatorInRegister(reg)
|
| - .LoadNull()
|
| - .StoreAccumulatorInRegister(reg);
|
| + .LoadNull();
|
|
|
| // Emit register-register transfer.
|
| builder.MoveRegister(reg, other);
|
| @@ -291,12 +292,14 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) {
|
| // Longer jumps requiring ConstantWide operand
|
| builder.Jump(&start).JumpIfNull(&start).JumpIfUndefined(&start).JumpIfNotHole(
|
| &start);
|
| +
|
| // Perform an operation that returns boolean value to
|
| // generate JumpIfTrue/False
|
| builder.CompareOperation(Token::Value::EQ, reg)
|
| .JumpIfTrue(&start)
|
| .CompareOperation(Token::Value::EQ, reg)
|
| .JumpIfFalse(&start);
|
| +
|
| // Perform an operation that returns a non-boolean operation to
|
| // generate JumpIfToBooleanTrue/False.
|
| builder.BinaryOperation(Token::Value::ADD, reg)
|
| @@ -370,9 +373,20 @@ TEST_F(BytecodeArrayBuilderTest, FrameSizesLookGood) {
|
| BytecodeArrayBuilder builder(isolate(), zone(), 0, contexts, locals);
|
| BytecodeRegisterAllocator temporaries(
|
| zone(), builder.temporary_register_allocator());
|
| + for (int i = 0; i < locals + contexts; i++) {
|
| + builder.LoadLiteral(Smi::FromInt(0));
|
| + builder.StoreAccumulatorInRegister(Register(i));
|
| + }
|
| for (int i = 0; i < temps; i++) {
|
| + builder.LoadLiteral(Smi::FromInt(0));
|
| builder.StoreAccumulatorInRegister(temporaries.NewRegister());
|
| }
|
| + if (temps > 0) {
|
| + // Ensure temporaries are used so not optimized away by the
|
| + // register optimizer.
|
| + builder.New(Register(locals + contexts), Register(locals + contexts),
|
| + static_cast<size_t>(temps));
|
| + }
|
| builder.Return();
|
|
|
| Handle<BytecodeArray> the_array = builder.ToBytecodeArray();
|
| @@ -398,6 +412,7 @@ TEST_F(BytecodeArrayBuilderTest, RegisterValues) {
|
|
|
| TEST_F(BytecodeArrayBuilderTest, Parameters) {
|
| BytecodeArrayBuilder builder(isolate(), zone(), 10, 0, 0);
|
| +
|
| Register param0(builder.Parameter(0));
|
| Register param9(builder.Parameter(9));
|
| CHECK_EQ(param9.index() - param0.index(), 9);
|
| @@ -429,6 +444,7 @@ TEST_F(BytecodeArrayBuilderTest, RegisterType) {
|
|
|
| TEST_F(BytecodeArrayBuilderTest, Constants) {
|
| BytecodeArrayBuilder builder(isolate(), zone(), 0, 0, 0);
|
| +
|
| Factory* factory = isolate()->factory();
|
| Handle<HeapObject> heap_num_1 = factory->NewHeapNumber(3.14);
|
| Handle<HeapObject> heap_num_2 = factory->NewHeapNumber(5.2);
|
| @@ -452,6 +468,7 @@ TEST_F(BytecodeArrayBuilderTest, ForwardJumps) {
|
| static const int kFarJumpDistance = 256;
|
|
|
| BytecodeArrayBuilder builder(isolate(), zone(), 0, 0, 1);
|
| +
|
| Register reg(0);
|
| BytecodeLabel far0, far1, far2, far3, far4;
|
| BytecodeLabel near0, near1, near2, near3, near4;
|
| @@ -563,6 +580,7 @@ TEST_F(BytecodeArrayBuilderTest, ForwardJumps) {
|
|
|
| TEST_F(BytecodeArrayBuilderTest, BackwardJumps) {
|
| BytecodeArrayBuilder builder(isolate(), zone(), 0, 0, 1);
|
| +
|
| Register reg(0);
|
|
|
| BytecodeLabel label0, label1, label2, label3, label4;
|
|
|