| Index: src/arm/full-codegen-arm.cc
|
| diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc
|
| index f5dff15ececebd8736fc0b548cb46a63c0c9570e..dfd0e618f1b7db042b75a67072ae0931d9e60ba6 100644
|
| --- a/src/arm/full-codegen-arm.cc
|
| +++ b/src/arm/full-codegen-arm.cc
|
| @@ -3823,7 +3823,7 @@ void FullCodeGenerator::EmitGetCachedArrayIndex(CallRuntime* expr) {
|
| }
|
|
|
|
|
| -void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| +void FullCodeGenerator::EmitFastOneByteArrayJoin(CallRuntime* expr) {
|
| Label bailout, done, one_char_separator, long_separator, non_trivial_array,
|
| not_size_one_array, loop, empty_separator_loop, one_char_separator_loop,
|
| one_char_separator_loop_entry, long_separator_loop;
|
| @@ -3870,7 +3870,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| __ ldr(elements, FieldMemOperand(array, JSArray::kElementsOffset));
|
| array = no_reg; // End of array's live range.
|
|
|
| - // Check that all array elements are sequential ASCII strings, and
|
| + // Check that all array elements are sequential one-byte strings, and
|
| // accumulate the sum of their lengths, as a smi-encoded value.
|
| __ mov(string_length, Operand::Zero());
|
| __ add(element,
|
| @@ -3886,14 +3886,14 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| // elements_end: Array end.
|
| if (generate_debug_code_) {
|
| __ cmp(array_length, Operand::Zero());
|
| - __ Assert(gt, kNoEmptyArraysHereInEmitFastAsciiArrayJoin);
|
| + __ Assert(gt, kNoEmptyArraysHereInEmitFastOneByteArrayJoin);
|
| }
|
| __ bind(&loop);
|
| __ ldr(string, MemOperand(element, kPointerSize, PostIndex));
|
| __ JumpIfSmi(string, &bailout);
|
| __ ldr(scratch, FieldMemOperand(string, HeapObject::kMapOffset));
|
| __ ldrb(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset));
|
| - __ JumpIfInstanceTypeIsNotSequentialAscii(scratch, scratch, &bailout);
|
| + __ JumpIfInstanceTypeIsNotSequentialOneByte(scratch, scratch, &bailout);
|
| __ ldr(scratch, FieldMemOperand(string, SeqOneByteString::kLengthOffset));
|
| __ add(string_length, string_length, Operand(scratch), SetCC);
|
| __ b(vs, &bailout);
|
| @@ -3914,11 +3914,11 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| // string_length: Sum of string lengths (smi).
|
| // elements: FixedArray of strings.
|
|
|
| - // Check that the separator is a flat ASCII string.
|
| + // Check that the separator is a flat one-byte string.
|
| __ JumpIfSmi(separator, &bailout);
|
| __ ldr(scratch, FieldMemOperand(separator, HeapObject::kMapOffset));
|
| __ ldrb(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset));
|
| - __ JumpIfInstanceTypeIsNotSequentialAscii(scratch, scratch, &bailout);
|
| + __ JumpIfInstanceTypeIsNotSequentialOneByte(scratch, scratch, &bailout);
|
|
|
| // Add (separator length times array_length) - separator length to the
|
| // string_length to get the length of the result string. array_length is not
|
| @@ -3947,12 +3947,10 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| // separator: Separator string
|
| // string_length: Length of result string (not smi)
|
| // array_length: Length of the array.
|
| - __ AllocateAsciiString(result,
|
| - string_length,
|
| - scratch,
|
| - string, // used as scratch
|
| - elements_end, // used as scratch
|
| - &bailout);
|
| + __ AllocateOneByteString(result, string_length, scratch,
|
| + string, // used as scratch
|
| + elements_end, // used as scratch
|
| + &bailout);
|
| // Prepare for looping. Set up elements_end to end of the array. Set
|
| // result_pos to the position of the result where to write the first
|
| // character.
|
| @@ -3991,7 +3989,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
|
|
| // One-character separator case
|
| __ bind(&one_char_separator);
|
| - // Replace separator with its ASCII character value.
|
| + // Replace separator with its one-byte character value.
|
| __ ldrb(separator, FieldMemOperand(separator, SeqOneByteString::kHeaderSize));
|
| // Jump into the loop after the code that copies the separator, so the first
|
| // element is not preceded by a separator
|
| @@ -4002,7 +4000,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| // result_pos: the position to which we are currently copying characters.
|
| // element: Current array element.
|
| // elements_end: Array end.
|
| - // separator: Single separator ASCII char (in lower byte).
|
| + // separator: Single separator one-byte char (in lower byte).
|
|
|
| // Copy the separator character to the result.
|
| __ strb(separator, MemOperand(result_pos, 1, PostIndex));
|
|
|