| Index: src/s390/codegen-s390.cc
|
| diff --git a/src/s390/codegen-s390.cc b/src/s390/codegen-s390.cc
|
| index 02cc8c206c704338f94cd4e4d2798af5f0718a46..7ab14443575beec1749cc91b8a8fe13e13fc8384 100644
|
| --- a/src/s390/codegen-s390.cc
|
| +++ b/src/s390/codegen-s390.cc
|
| @@ -81,11 +81,13 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm, Register string,
|
| __ beq(&check_sequential, Label::kNear /*, cr0*/);
|
|
|
| // Dispatch on the indirect string shape: slice or cons.
|
| - Label cons_string;
|
| - __ mov(ip, Operand(kSlicedNotConsMask));
|
| - __ LoadRR(r0, result);
|
| - __ AndP(r0, ip /*, SetRC*/); // Should be okay to remove RC
|
| - __ beq(&cons_string, Label::kNear /*, cr0*/);
|
| + Label cons_string, thin_string;
|
| + __ LoadRR(ip, result);
|
| + __ nilf(ip, Operand(kStringRepresentationMask));
|
| + __ CmpP(ip, Operand(kConsStringTag));
|
| + __ beq(&cons_string);
|
| + __ CmpP(ip, Operand(kThinStringTag));
|
| + __ beq(&thin_string);
|
|
|
| // Handle slices.
|
| Label indirect_string_loaded;
|
| @@ -95,6 +97,11 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm, Register string,
|
| __ AddP(index, ip);
|
| __ b(&indirect_string_loaded, Label::kNear);
|
|
|
| + // Handle thin strings.
|
| + __ bind(&thin_string);
|
| + __ LoadP(string, FieldMemOperand(string, ThinString::kActualOffset));
|
| + __ b(&indirect_string_loaded, Label::kNear);
|
| +
|
| // Handle cons strings.
|
| // Check whether the right hand side is the empty string (i.e. if
|
| // this is really a flat string in a cons string). If that is not
|
|
|