Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index 5b6f6873c264326d8b843343161e556a79103884..54a1a348a93f4a1cb306ebeedaf3555ce0c9d93d 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -6155,7 +6155,6 @@ void SubStringStub::Generate(MacroAssembler* masm) { |
// ebx: instance type |
// Calculate length of sub string using the smi values. |
- Label result_longer_than_two; |
__ mov(ecx, Operand(esp, 1 * kPointerSize)); // To index. |
__ JumpIfNotSmi(ecx, &runtime); |
__ mov(edx, Operand(esp, 2 * kPointerSize)); // From index. |
@@ -6168,43 +6167,7 @@ void SubStringStub::Generate(MacroAssembler* masm) { |
__ IncrementCounter(counters->sub_string_native(), 1); |
__ ret(3 * kPointerSize); |
__ bind(¬_original_string); |
- // Special handling of sub-strings of length 1 and 2. One character strings |
- // are handled in the runtime system (looked up in the single character |
- // cache). Two character strings are looked for in the symbol cache. |
- __ cmp(ecx, Immediate(Smi::FromInt(2))); |
- __ j(greater, &result_longer_than_two); |
- __ j(less, &runtime); |
- |
- // Sub string of length 2 requested. |
- // eax: string |
- // ebx: instance type |
- // ecx: sub string length (smi, value is 2) |
- // edx: from index (smi) |
- __ JumpIfInstanceTypeIsNotSequentialAscii(ebx, ebx, &runtime); |
- |
- // Get the two characters forming the sub string. |
- __ SmiUntag(edx); // From index is no longer smi. |
- __ movzx_b(ebx, FieldOperand(eax, edx, times_1, SeqAsciiString::kHeaderSize)); |
- __ movzx_b(ecx, |
- FieldOperand(eax, edx, times_1, SeqAsciiString::kHeaderSize + 1)); |
- |
- // Try to lookup two character string in symbol table. |
- Label combine_two_char, save_two_char; |
- StringHelper::GenerateTwoCharacterSymbolTableProbe( |
- masm, ebx, ecx, eax, edx, edi, &combine_two_char, &save_two_char); |
- __ IncrementCounter(counters->sub_string_native(), 1); |
- __ ret(3 * kPointerSize); |
- |
- __ bind(&combine_two_char); |
- __ shl(ecx, kBitsPerByte); |
- __ or_(ebx, ecx); |
- __ bind(&save_two_char); |
- __ AllocateAsciiString(eax, 2, ecx, edx, &runtime); |
- __ mov_w(FieldOperand(eax, SeqAsciiString::kHeaderSize), ebx); |
- __ IncrementCounter(counters->sub_string_native(), 1); |
- __ ret(3 * kPointerSize); |
- __ bind(&result_longer_than_two); |
// eax: string |
// ebx: instance type |
// ecx: sub string length (smi) |
@@ -6271,11 +6234,11 @@ void SubStringStub::Generate(MacroAssembler* masm) { |
__ bind(&two_byte_slice); |
__ AllocateTwoByteSlicedString(eax, ebx, no_reg, &runtime); |
__ bind(&set_slice_header); |
- __ mov(FieldOperand(eax, SlicedString::kOffsetOffset), edx); |
__ mov(FieldOperand(eax, SlicedString::kLengthOffset), ecx); |
- __ mov(FieldOperand(eax, SlicedString::kParentOffset), edi); |
__ mov(FieldOperand(eax, SlicedString::kHashFieldOffset), |
Immediate(String::kEmptyHashField)); |
+ __ mov(FieldOperand(eax, SlicedString::kParentOffset), edi); |
+ __ mov(FieldOperand(eax, SlicedString::kOffsetOffset), edx); |
__ IncrementCounter(counters->sub_string_native(), 1); |
__ ret(3 * kPointerSize); |