diff options
Diffstat (limited to 'deps/v8/src/ic/ia32/ic-compiler-ia32.cc')
-rw-r--r-- | deps/v8/src/ic/ia32/ic-compiler-ia32.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/deps/v8/src/ic/ia32/ic-compiler-ia32.cc b/deps/v8/src/ic/ia32/ic-compiler-ia32.cc index d93b67bffc..a52f04689a 100644 --- a/deps/v8/src/ic/ia32/ic-compiler-ia32.cc +++ b/deps/v8/src/ic/ia32/ic-compiler-ia32.cc @@ -15,14 +15,21 @@ namespace internal { void PropertyICCompiler::GenerateRuntimeSetProperty( MacroAssembler* masm, LanguageMode language_mode) { - // Return address is on the stack. - DCHECK(!ebx.is(StoreDescriptor::ReceiverRegister()) && - !ebx.is(StoreDescriptor::NameRegister()) && - !ebx.is(StoreDescriptor::ValueRegister())); + typedef StoreWithVectorDescriptor Descriptor; + STATIC_ASSERT(Descriptor::kStackArgumentsCount == 3); + // ----------- S t a t e ------------- + // -- esp[12] : value + // -- esp[8] : slot + // -- esp[4] : vector + // -- esp[0] : return address + // ----------------------------------- + __ LoadParameterFromStack<Descriptor>(Descriptor::ValueRegister(), + Descriptor::kValue); + + __ mov(Operand(esp, 12), Descriptor::ReceiverRegister()); + __ mov(Operand(esp, 8), Descriptor::NameRegister()); + __ mov(Operand(esp, 4), Descriptor::ValueRegister()); __ pop(ebx); - __ push(StoreDescriptor::ReceiverRegister()); - __ push(StoreDescriptor::NameRegister()); - __ push(StoreDescriptor::ValueRegister()); __ push(Immediate(Smi::FromInt(language_mode))); __ push(ebx); // return address |