Chromium Code Reviews| Index: src/ia32/lithium-ia32.cc |
| diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc |
| index 3a615d7a81f155d6ada0f2f6154bb75b2960bc06..c3cdf39b00f7a71e895cb866c5fa0c13e974b531 100644 |
| --- a/src/ia32/lithium-ia32.cc |
| +++ b/src/ia32/lithium-ia32.cc |
| @@ -2158,26 +2158,34 @@ LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { |
| LInstruction* LChunkBuilder::DoTransitionElementsKind( |
| HTransitionElementsKind* instr) { |
| + LOperand* object = UseRegister(instr->object()); |
| if (IsSimpleMapChangeTransition(instr->from_kind(), instr->to_kind())) { |
| LOperand* object = UseRegister(instr->object()); |
| LOperand* new_map_reg = TempRegister(); |
| LOperand* temp_reg = TempRegister(); |
| LTransitionElementsKind* result = |
| - new(zone()) LTransitionElementsKind(object, new_map_reg, temp_reg); |
| - return DefineSameAsFirst(result); |
| + new(zone()) LTransitionElementsKind(object, NULL, |
| + new_map_reg, temp_reg); |
| + return result; |
| } else { |
| - LOperand* object = UseFixed(instr->object(), eax); |
| - LOperand* fixed_object_reg = FixedTemp(edx); |
| - LOperand* new_map_reg = FixedTemp(ebx); |
| + LOperand* context = UseRegister(instr->context()); |
| LTransitionElementsKind* result = |
| - new(zone()) LTransitionElementsKind(object, |
| - new_map_reg, |
| - fixed_object_reg); |
| - return MarkAsCall(DefineFixed(result, eax), instr); |
| + new(zone()) LTransitionElementsKind(object, context, NULL, NULL); |
| + return AssignPointerMap(result); |
| } |
| } |
| +LInstruction* LChunkBuilder::DoTrapAllocationMemento( |
| + HTrapAllocationMemento* instr) { |
| + LOperand* object = UseRegister(instr->object()); |
| + LOperand* temp = TempRegister(); |
| + LTrapAllocationMemento* result = |
| + new(zone()) LTrapAllocationMemento(object, temp); |
| + return AssignEnvironment(result); |
| +} |
| + |
| + |
| LInstruction* LChunkBuilder::DoStoreNamedField(HStoreNamedField* instr) { |
| bool needs_write_barrier = instr->NeedsWriteBarrier(); |
| bool needs_write_barrier_for_map = !instr->transition().is_null() && |
| @@ -2256,13 +2264,23 @@ LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) { |
| LInstruction* LChunkBuilder::DoAllocateObject(HAllocateObject* instr) { |
| - LOperand* context = UseFixed(instr->context(), esi); |
| + LOperand* context = UseAny(instr->context()); |
|
Michael Starzinger
2013/01/31 13:15:10
It seems info()->MarkAsDeferredCalling() is missin
danno
2013/01/31 15:53:25
Done.
|
| LOperand* temp = TempRegister(); |
| LAllocateObject* result = new(zone()) LAllocateObject(context, temp); |
| return AssignPointerMap(DefineAsRegister(result)); |
| } |
| +LInstruction* LChunkBuilder::DoAllocate(HAllocate* instr) { |
| + info()->MarkAsDeferredCalling(); |
| + LOperand* context = UseAny(instr->context()); |
| + LOperand* size = UseTempRegister(instr->size()); |
| + LOperand* temp = TempRegister(); |
| + LAllocate* result = new(zone()) LAllocate(context, size, temp); |
| + return AssignPointerMap(DefineAsRegister(result)); |
| +} |
| + |
| + |
| LInstruction* LChunkBuilder::DoFastLiteral(HFastLiteral* instr) { |
| LOperand* context = UseFixed(instr->context(), esi); |
| return MarkAsCall( |