1// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#if V8_TARGET_ARCH_IA32
6
7#include "src/ic/ic.h"
8#include "src/ic/ic-compiler.h"
9
10namespace v8 {
11namespace internal {
12
13#define __ ACCESS_MASM(masm)
14
15
16void PropertyICCompiler::GenerateRuntimeSetProperty(
17    MacroAssembler* masm, LanguageMode language_mode) {
18  typedef StoreWithVectorDescriptor Descriptor;
19  STATIC_ASSERT(Descriptor::kStackArgumentsCount == 3);
20  // ----------- S t a t e -------------
21  //  -- esp[12] : value
22  //  -- esp[8]  : slot
23  //  -- esp[4]  : vector
24  //  -- esp[0]  : return address
25  // -----------------------------------
26  __ LoadParameterFromStack<Descriptor>(Descriptor::ValueRegister(),
27                                        Descriptor::kValue);
28
29  __ mov(Operand(esp, 12), Descriptor::ReceiverRegister());
30  __ mov(Operand(esp, 8), Descriptor::NameRegister());
31  __ mov(Operand(esp, 4), Descriptor::ValueRegister());
32  __ pop(ebx);
33  __ push(Immediate(Smi::FromInt(language_mode)));
34  __ push(ebx);  // return address
35
36  // Do tail-call to runtime routine.
37  __ TailCallRuntime(Runtime::kSetProperty);
38}
39
40
41#undef __
42}  // namespace internal
43}  // namespace v8
44
45#endif  // V8_TARGET_ARCH_IA32
46