Reviewers: , Description: Minor change to FullCodeGenerator::EmitFastAsciiArrayJoin
The counting loop is always run at least once, and checking the loop condition
once is sufficient. Please review this at http://codereview.chromium.org/6592010/ SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/ia32/full-codegen-ia32.cc Index: src/ia32/full-codegen-ia32.cc =================================================================== --- src/ia32/full-codegen-ia32.cc (revision 6942) +++ src/ia32/full-codegen-ia32.cc (working copy) @@ -3459,7 +3459,7 @@ // If the array has length zero, return the empty string. __ mov(array_length, FieldOperand(array, JSArray::kLengthOffset)); - __ sar(array_length, 1); + __ SmiUntag(array_length); __ j(not_zero, &non_trivial_array); __ mov(result_operand, Factory::empty_string()); __ jmp(&done); @@ -3482,14 +3482,15 @@ // Loop condition: while (index < length). // Live loop registers: index, array_length, string, // scratch, string_length, elements. - __ jmp(&loop_condition); + if (FLAG_debug_code) { + __ cmp(index, Operand(array_length)); + __ Assert(less, "No empty arrays here"); + } __ bind(&loop); - __ cmp(index, Operand(array_length)); - __ j(greater_equal, &done); - - __ mov(string, FieldOperand(elements, index, - times_pointer_size, - FixedArray::kHeaderSize)); + __ mov(string, FieldOperand(elements, + index, + times_pointer_size, + FixedArray::kHeaderSize)); __ test(string, Immediate(kSmiTagMask)); __ j(zero, &bailout); __ mov(scratch, FieldOperand(string, HeapObject::kMapOffset)); -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
