Index: src/ia32/lithium-ia32.cc |
=================================================================== |
--- src/ia32/lithium-ia32.cc (revision 6167) |
+++ src/ia32/lithium-ia32.cc (working copy) |
@@ -833,6 +833,12 @@ |
} |
+LInstruction* LChunkBuilder::MarkAsSaveDoubles(LInstruction* instr) { |
+ allocator_->MarkAsSaveDoubles(); |
+ return instr; |
+} |
+ |
+ |
LInstruction* LChunkBuilder::AssignPointerMap(LInstruction* instr) { |
ASSERT(!instr->HasPointerMap()); |
instr->set_pointer_map(new LPointerMap(position_)); |
@@ -1257,10 +1263,11 @@ |
} else if (v->IsInstanceOf()) { |
HInstanceOf* instance_of = HInstanceOf::cast(v); |
LInstruction* result = |
- new LInstanceOfAndBranch(UseFixed(instance_of->left(), eax), |
- UseFixed(instance_of->right(), edx), |
- first_id, |
- second_id); |
+ new LInstanceOfAndBranch( |
+ UseFixed(instance_of->left(), InstanceofStub::left()), |
+ UseFixed(instance_of->right(), InstanceofStub::right()), |
+ first_id, |
+ second_id); |
return MarkAsCall(result, instr); |
} else if (v->IsTypeofIs()) { |
HTypeofIs* typeof_is = HTypeofIs::cast(v); |
@@ -1308,12 +1315,23 @@ |
LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) { |
LInstruction* result = |
- new LInstanceOf(UseFixed(instr->left(), eax), |
- UseFixed(instr->right(), edx)); |
+ new LInstanceOf(UseFixed(instr->left(), InstanceofStub::left()), |
+ UseFixed(instr->right(), InstanceofStub::right())); |
return MarkAsCall(DefineFixed(result, eax), instr); |
} |
+LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal( |
+ HInstanceOfKnownGlobal* instr) { |
+ LInstruction* result = |
+ new LInstanceOfKnownGlobal( |
+ UseFixed(instr->value(), InstanceofStub::left()), |
+ FixedTemp(edi)); |
+ MarkAsSaveDoubles(result); |
+ return AssignEnvironment(AssignPointerMap(DefineFixed(result, eax))); |
+} |
+ |
+ |
LInstruction* LChunkBuilder::DoApplyArguments(HApplyArguments* instr) { |
LOperand* function = UseFixed(instr->function(), edi); |
LOperand* receiver = UseFixed(instr->receiver(), eax); |