Index: src/x64/lithium-x64.cc |
diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc |
index 4535fc8ebb7596d786a9c426d0fb2def05cf1a35..631cb5c3a54b5ef90252e06fceb9dcbe1df4475f 100644 |
--- a/src/x64/lithium-x64.cc |
+++ b/src/x64/lithium-x64.cc |
@@ -1409,8 +1409,9 @@ LInstruction* LChunkBuilder::DoCheckInstanceType(HCheckInstanceType* instr) { |
LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps* instr) { |
- Abort("Unimplemented: %s", "DoCheckPrototypeMaps"); |
- return NULL; |
+ LOperand* temp = TempRegister(); |
+ LCheckPrototypeMaps* result = new LCheckPrototypeMaps(temp); |
+ return AssignEnvironment(result); |
} |
@@ -1465,9 +1466,7 @@ LInstruction* LChunkBuilder::DoLoadGlobal(HLoadGlobal* instr) { |
LInstruction* LChunkBuilder::DoStoreGlobal(HStoreGlobal* instr) { |
- Abort("Unimplemented: %s", "DoStoreGlobal"); |
- return NULL; |
-} |
+ return new LStoreGlobal(UseRegisterAtStart(instr->value()));} |
LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { |
@@ -1477,8 +1476,9 @@ LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { |
LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { |
- Abort("Unimplemented: %s", "DoLoadNamedField"); |
- return NULL; |
+ ASSERT(instr->representation().IsTagged()); |
+ LOperand* obj = UseRegisterAtStart(instr->object()); |
+ return DefineAsRegister(new LLoadNamedField(obj)); |
} |
@@ -1528,8 +1528,22 @@ LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { |
LInstruction* LChunkBuilder::DoStoreNamedField(HStoreNamedField* instr) { |
- Abort("Unimplemented: %s", "DoStoreNamedField"); |
- return NULL; |
+ bool needs_write_barrier = instr->NeedsWriteBarrier(); |
+ |
+ LOperand* obj = needs_write_barrier |
+ ? UseTempRegister(instr->object()) |
+ : UseRegisterAtStart(instr->object()); |
+ |
+ LOperand* val = needs_write_barrier |
+ ? UseTempRegister(instr->value()) |
+ : UseRegister(instr->value()); |
+ |
+ // We only need a scratch register if we have a write barrier or we |
+ // have a store into the properties array (not in-object-property). |
+ LOperand* temp = (!instr->is_in_object() || needs_write_barrier) |
+ ? TempRegister() : NULL; |
+ |
+ return new LStoreNamedField(obj, val, temp); |
} |
@@ -1666,7 +1680,14 @@ LInstruction* LChunkBuilder::DoStackCheck(HStackCheck* instr) { |
LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) { |
- Abort("Unimplemented: %s", "DoEnterInlined"); |
+ HEnvironment* outer = current_block_->last_environment(); |
+ HConstant* undefined = graph()->GetConstantUndefined(); |
+ HEnvironment* inner = outer->CopyForInlining(instr->closure(), |
+ instr->function(), |
+ false, |
+ undefined); |
+ current_block_->UpdateEnvironment(inner); |
+ chunk_->AddInlinedClosure(instr->closure()); |
return NULL; |
} |