| Index: src/arm/full-codegen-arm.cc
|
| diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc
|
| index 50544dea4347669f9857fac8fab5e6d0902122f8..b6267c91e73bdb11c4ee010b5e0c864c73f8b392 100644
|
| --- a/src/arm/full-codegen-arm.cc
|
| +++ b/src/arm/full-codegen-arm.cc
|
| @@ -3624,7 +3624,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| __ ldr(scratch1, FieldMemOperand(string, HeapObject::kMapOffset));
|
| __ ldrb(scratch1, FieldMemOperand(scratch1, Map::kInstanceTypeOffset));
|
| __ JumpIfInstanceTypeIsNotSequentialAscii(scratch1, scratch2, &bailout);
|
| - __ ldr(scratch1, FieldMemOperand(string, SeqAsciiString::kLengthOffset));
|
| + __ ldr(scratch1, FieldMemOperand(string, SeqOneByteString::kLengthOffset));
|
| __ add(string_length, string_length, Operand(scratch1), SetCC);
|
| __ b(vs, &bailout);
|
| __ cmp(element, elements_end);
|
| @@ -3653,7 +3653,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| // Add (separator length times array_length) - separator length to the
|
| // string_length to get the length of the result string. array_length is not
|
| // smi but the other values are, so the result is a smi
|
| - __ ldr(scratch1, FieldMemOperand(separator, SeqAsciiString::kLengthOffset));
|
| + __ ldr(scratch1, FieldMemOperand(separator, SeqOneByteString::kLengthOffset));
|
| __ sub(string_length, string_length, Operand(scratch1));
|
| __ smull(scratch2, ip, array_length, scratch1);
|
| // Check for smi overflow. No overflow if higher 33 bits of 64-bit result are
|
| @@ -3691,10 +3691,10 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| array_length = no_reg;
|
| __ add(result_pos,
|
| result,
|
| - Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
| + Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
|
|
| // Check the length of the separator.
|
| - __ ldr(scratch1, FieldMemOperand(separator, SeqAsciiString::kLengthOffset));
|
| + __ ldr(scratch1, FieldMemOperand(separator, SeqOneByteString::kLengthOffset));
|
| __ cmp(scratch1, Operand(Smi::FromInt(1)));
|
| __ b(eq, &one_char_separator);
|
| __ b(gt, &long_separator);
|
| @@ -3710,7 +3710,9 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| __ ldr(string, MemOperand(element, kPointerSize, PostIndex));
|
| __ ldr(string_length, FieldMemOperand(string, String::kLengthOffset));
|
| __ SmiUntag(string_length);
|
| - __ add(string, string, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
| + __ add(string,
|
| + string,
|
| + Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
| __ CopyBytes(string, result_pos, string_length, scratch1);
|
| __ cmp(element, elements_end);
|
| __ b(lt, &empty_separator_loop); // End while (element < elements_end).
|
| @@ -3720,7 +3722,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| // One-character separator case
|
| __ bind(&one_char_separator);
|
| // Replace separator with its ASCII character value.
|
| - __ ldrb(separator, FieldMemOperand(separator, SeqAsciiString::kHeaderSize));
|
| + __ 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
|
| __ jmp(&one_char_separator_loop_entry);
|
| @@ -3740,7 +3742,9 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| __ ldr(string, MemOperand(element, kPointerSize, PostIndex));
|
| __ ldr(string_length, FieldMemOperand(string, String::kLengthOffset));
|
| __ SmiUntag(string_length);
|
| - __ add(string, string, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
| + __ add(string,
|
| + string,
|
| + Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
| __ CopyBytes(string, result_pos, string_length, scratch1);
|
| __ cmp(element, elements_end);
|
| __ b(lt, &one_char_separator_loop); // End while (element < elements_end).
|
| @@ -3761,14 +3765,16 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
| __ SmiUntag(string_length);
|
| __ add(string,
|
| separator,
|
| - Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
| + Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
| __ CopyBytes(string, result_pos, string_length, scratch1);
|
|
|
| __ bind(&long_separator);
|
| __ ldr(string, MemOperand(element, kPointerSize, PostIndex));
|
| __ ldr(string_length, FieldMemOperand(string, String::kLengthOffset));
|
| __ SmiUntag(string_length);
|
| - __ add(string, string, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
| + __ add(string,
|
| + string,
|
| + Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
| __ CopyBytes(string, result_pos, string_length, scratch1);
|
| __ cmp(element, elements_end);
|
| __ b(lt, &long_separator_loop); // End while (element < elements_end).
|
|
|