| Index: src/x87/code-stubs-x87.cc
|
| diff --git a/src/x87/code-stubs-x87.cc b/src/x87/code-stubs-x87.cc
|
| index 690c3700c47bc300f534941663b386b90a287ebb..202dec63bb276351ea1e09fce43142d6cf7eb577 100644
|
| --- a/src/x87/code-stubs-x87.cc
|
| +++ b/src/x87/code-stubs-x87.cc
|
| @@ -382,8 +382,6 @@ void LoadIndexedStringStub::Generate(MacroAssembler* masm) {
|
| Register result = eax;
|
| DCHECK(!result.is(scratch));
|
|
|
| - // TODO(mvstanton): the generator doesn't need to verify that
|
| - // receiver is a string map, that is done outside the handler.
|
| StringCharAtGenerator char_at_generator(receiver, index, scratch, result,
|
| &miss, // When not a string.
|
| &miss, // When not a number.
|
| @@ -1959,6 +1957,13 @@ void CallICStub::Generate(MacroAssembler* masm) {
|
| __ mov(FieldOperand(ebx, edx, times_half_pointer_size,
|
| FixedArray::kHeaderSize),
|
| Immediate(TypeFeedbackVector::MegamorphicSentinel(isolate)));
|
| + // We have to update statistics for runtime profiling.
|
| + const int with_types_offset =
|
| + FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex);
|
| + __ sub(FieldOperand(ebx, with_types_offset), Immediate(Smi::FromInt(1)));
|
| + const int generic_offset =
|
| + FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex);
|
| + __ add(FieldOperand(ebx, generic_offset), Immediate(Smi::FromInt(1)));
|
| __ jmp(&slow_start);
|
| }
|
|
|
| @@ -2848,8 +2853,9 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
| // ebx: instance type
|
| // ecx: sub string length (smi)
|
| // edx: from index (smi)
|
| - StringCharAtGenerator generator(
|
| - eax, edx, ecx, eax, &runtime, &runtime, &runtime, STRING_INDEX_IS_NUMBER);
|
| + StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime,
|
| + &runtime, STRING_INDEX_IS_NUMBER,
|
| + RECEIVER_IS_STRING);
|
| generator.GenerateFast(masm);
|
| __ ret(3 * kPointerSize);
|
| generator.SkipSlow(masm, &runtime);
|
|
|