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( |