Reviewers: ager,
http://codereview.chromium.org/6085010/diff/1/src/arm/code-stubs-arm.cc File src/arm/code-stubs-arm.cc (right): http://codereview.chromium.org/6085010/diff/1/src/arm/code-stubs-arm.cc#newcode3019 src/arm/code-stubs-arm.cc:3019: __ b(hs, &slow); hs and cs are the same - I find hs more readable in this case. Description: ARM: Fix a bug in the lithium arguments support Got the comparison wrong and fortot to actually set the flags. Please review this at http://codereview.chromium.org/6085010/ SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/arm/code-stubs-arm.cc M src/arm/lithium-codegen-arm.cc Index: src/arm/code-stubs-arm.cc =================================================================== --- src/arm/code-stubs-arm.cc (revision 6189) +++ src/arm/code-stubs-arm.cc (working copy) @@ -3016,7 +3016,7 @@ // through register r0. Use unsigned comparison to get negative // check for free. __ cmp(r1, r0); - __ b(cs, &slow); + __ b(hs, &slow); // Read the argument from the stack and return it. __ sub(r3, r0, r1); Index: src/arm/lithium-codegen-arm.cc =================================================================== --- src/arm/lithium-codegen-arm.cc (revision 6189) +++ src/arm/lithium-codegen-arm.cc (working copy) @@ -1593,8 +1593,10 @@ Operand index = ToOperand(instr->index()); Register result = ToRegister(instr->result()); - __ sub(length, length, index); - DeoptimizeIf(hi, instr->environment()); + // Bailout index is not a valid argument index. Use unsigned check to get + // negative check for free. + __ sub(length, length, index, SetCC); + DeoptimizeIf(ls, instr->environment()); // There are two words between the frame pointer and the last argument. // Subtracting from length accounts for one of them add one more. -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
