| Index: src/x87/lithium-codegen-x87.cc
|
| diff --git a/src/x87/lithium-codegen-x87.cc b/src/x87/lithium-codegen-x87.cc
|
| index 07c9fb0260392ef1daa3b327b2b450c339fdb817..df222498540093e87fbe2a442ab5edf15e03adbd 100644
|
| --- a/src/x87/lithium-codegen-x87.cc
|
| +++ b/src/x87/lithium-codegen-x87.cc
|
| @@ -11,6 +11,7 @@
|
| #include "src/codegen.h"
|
| #include "src/deoptimizer.h"
|
| #include "src/hydrogen-osr.h"
|
| +#include "src/ic/stub-cache.h"
|
| #include "src/x87/lithium-codegen-x87.h"
|
|
|
| namespace v8 {
|
| @@ -3277,11 +3278,9 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
|
|
| // Load the result.
|
| __ mov(result,
|
| - BuildFastArrayOperand(instr->elements(),
|
| - instr->key(),
|
| + BuildFastArrayOperand(instr->elements(), instr->key(),
|
| instr->hydrogen()->key()->representation(),
|
| - FAST_ELEMENTS,
|
| - instr->base_offset()));
|
| + FAST_ELEMENTS, instr->base_offset()));
|
|
|
| // Check for the hole value.
|
| if (instr->hydrogen()->RequiresHoleCheck()) {
|
| @@ -3577,6 +3576,32 @@ void LCodeGen::CallKnownFunction(Handle<JSFunction> function,
|
| }
|
|
|
|
|
| +void LCodeGen::DoTailCallThroughMegamorphicCache(
|
| + LTailCallThroughMegamorphicCache* instr) {
|
| + Register receiver = ToRegister(instr->receiver());
|
| + Register name = ToRegister(instr->name());
|
| + DCHECK(receiver.is(LoadDescriptor::ReceiverRegister()));
|
| + DCHECK(name.is(LoadDescriptor::NameRegister()));
|
| +
|
| + Register scratch = ebx;
|
| + Register extra = eax;
|
| + DCHECK(!scratch.is(receiver) && !scratch.is(name));
|
| + DCHECK(!extra.is(receiver) && !extra.is(name));
|
| +
|
| + // Important for the tail-call.
|
| + bool must_teardown_frame = NeedsEagerFrame();
|
| +
|
| + // The probe will tail call to a handler if found.
|
| + isolate()->stub_cache()->GenerateProbe(masm(), instr->hydrogen()->flags(),
|
| + must_teardown_frame, receiver, name,
|
| + scratch, extra);
|
| +
|
| + // Tail call to miss if we ended up here.
|
| + if (must_teardown_frame) __ leave();
|
| + LoadIC::GenerateMiss(masm());
|
| +}
|
| +
|
| +
|
| void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) {
|
| DCHECK(ToRegister(instr->result()).is(eax));
|
|
|
|
|