| Index: src/x87/code-stubs-x87.cc
|
| diff --git a/src/x87/code-stubs-x87.cc b/src/x87/code-stubs-x87.cc
|
| index 4a6083c25fabca9472da9b8aa20cb163ce7fd1a5..690c3700c47bc300f534941663b386b90a287ebb 100644
|
| --- a/src/x87/code-stubs-x87.cc
|
| +++ b/src/x87/code-stubs-x87.cc
|
| @@ -371,6 +371,37 @@ void LoadIndexedInterceptorStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +void LoadIndexedStringStub::Generate(MacroAssembler* masm) {
|
| + // Return address is on the stack.
|
| + Label miss;
|
| +
|
| + Register receiver = LoadDescriptor::ReceiverRegister();
|
| + Register index = LoadDescriptor::NameRegister();
|
| + Register scratch = ebx;
|
| + DCHECK(!scratch.is(receiver) && !scratch.is(index));
|
| + 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.
|
| + &miss, // When index out of range.
|
| + STRING_INDEX_IS_ARRAY_INDEX,
|
| + RECEIVER_IS_STRING);
|
| + char_at_generator.GenerateFast(masm);
|
| + __ ret(0);
|
| +
|
| + StubRuntimeCallHelper call_helper;
|
| + char_at_generator.GenerateSlow(masm, call_helper);
|
| +
|
| + __ bind(&miss);
|
| + PropertyAccessCompiler::TailCallBuiltin(
|
| + masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC));
|
| +}
|
| +
|
| +
|
| void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
|
| // The key is in edx and the parameter count is in eax.
|
| DCHECK(edx.is(ArgumentsAccessReadDescriptor::index()));
|
|
|