Reviewers: Kevin Millikin, Description: Fix bug in register requirements for function.apply.
Whenever we use a fixed temp at a call that can eagerly deopt we now allow fixed register exclusively to avoid any overlap. Please review this at http://codereview.chromium.org/6479014/ SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/ia32/lithium-ia32.cc Index: src/ia32/lithium-ia32.cc =================================================================== --- src/ia32/lithium-ia32.cc (revision 6712) +++ src/ia32/lithium-ia32.cc (working copy) @@ -82,7 +82,6 @@ for (UseIterator it(this); it.HasNext(); it.Advance()) { LOperand* operand = it.Next(); ASSERT(LUnallocated::cast(operand)->HasFixedPolicy() || - LUnallocated::cast(operand)->IsUsedAtStart() || !LUnallocated::cast(operand)->HasRegisterPolicy()); } for (TempIterator it(this); it.HasNext(); it.Advance()) { @@ -1155,9 +1154,9 @@ LInstruction* LChunkBuilder::DoApplyArguments(HApplyArguments* instr) { LOperand* function = UseFixed(instr->function(), edi); LOperand* receiver = UseFixed(instr->receiver(), eax); - LOperand* length = UseRegisterAtStart(instr->length()); - LOperand* elements = UseRegisterAtStart(instr->elements()); - LOperand* temp = FixedTemp(ebx); + LOperand* length = UseFixed(instr->length(), ebx); + LOperand* elements = UseFixed(instr->elements(), ecx); + LOperand* temp = FixedTemp(edx); LApplyArguments* result = new LApplyArguments(function, receiver, length, -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
