| Index: src/s390/codegen-s390.cc | 
| diff --git a/src/s390/codegen-s390.cc b/src/s390/codegen-s390.cc | 
| index 6b84200510af8245594c3fafac9385a8cdc462d7..02cc8c206c704338f94cd4e4d2798af5f0718a46 100644 | 
| --- a/src/s390/codegen-s390.cc | 
| +++ b/src/s390/codegen-s390.cc | 
| @@ -70,9 +70,6 @@ void StubRuntimeCallHelper::AfterCall(MacroAssembler* masm) const { | 
| void StringCharLoadGenerator::Generate(MacroAssembler* masm, Register string, | 
| Register index, Register result, | 
| Label* call_runtime) { | 
| -  Label indirect_string_loaded; | 
| -  __ bind(&indirect_string_loaded); | 
| - | 
| // Fetch the instance type of the receiver into result register. | 
| __ LoadP(result, FieldMemOperand(string, HeapObject::kMapOffset)); | 
| __ LoadlB(result, FieldMemOperand(result, Map::kInstanceTypeOffset)); | 
| @@ -84,25 +81,19 @@ 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, thin_string; | 
| -  __ LoadRR(ip, result); | 
| -  __ nilf(ip, Operand(kStringRepresentationMask)); | 
| -  __ CmpP(ip, Operand(kConsStringTag)); | 
| -  __ beq(&cons_string); | 
| -  __ CmpP(ip, Operand(kThinStringTag)); | 
| -  __ beq(&thin_string); | 
| +  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*/); | 
|  | 
| // Handle slices. | 
| +  Label indirect_string_loaded; | 
| __ LoadP(result, FieldMemOperand(string, SlicedString::kOffsetOffset)); | 
| __ LoadP(string, FieldMemOperand(string, SlicedString::kParentOffset)); | 
| __ SmiUntag(ip, result); | 
| __ AddP(index, ip); | 
| -  __ b(&indirect_string_loaded); | 
| - | 
| -  // Handle thin strings. | 
| -  __ bind(&thin_string); | 
| -  __ LoadP(string, FieldMemOperand(string, ThinString::kActualOffset)); | 
| -  __ b(&indirect_string_loaded); | 
| +  __ b(&indirect_string_loaded, Label::kNear); | 
|  | 
| // Handle cons strings. | 
| // Check whether the right hand side is the empty string (i.e. if | 
| @@ -115,7 +106,10 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm, Register string, | 
| __ bne(call_runtime); | 
| // Get the first of the two strings and load its instance type. | 
| __ LoadP(string, FieldMemOperand(string, ConsString::kFirstOffset)); | 
| -  __ b(&indirect_string_loaded); | 
| + | 
| +  __ bind(&indirect_string_loaded); | 
| +  __ LoadP(result, FieldMemOperand(string, HeapObject::kMapOffset)); | 
| +  __ LoadlB(result, FieldMemOperand(result, Map::kInstanceTypeOffset)); | 
|  | 
| // Distinguish sequential and external strings. Only these two string | 
| // representations can reach here (slices and flat cons strings have been | 
|  |