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#ifndef V8_IC_IC_COMPILER_H_
6#define V8_IC_IC_COMPILER_H_
7
8#include "src/ic/access-compiler.h"
9
10namespace v8 {
11namespace internal {
12
13
14class PropertyICCompiler : public PropertyAccessCompiler {
15 public:
16  // Keyed
17  static Handle<Code> ComputeKeyedLoadMonomorphicHandler(
18      Handle<Map> receiver_map, ExtraICState extra_ic_state);
19
20  static Handle<Code> ComputeKeyedStoreMonomorphicHandler(
21      Handle<Map> receiver_map, KeyedAccessStoreMode store_mode);
22  static void ComputeKeyedStorePolymorphicHandlers(
23      MapHandleList* receiver_maps, MapHandleList* transitioned_maps,
24      CodeHandleList* handlers, KeyedAccessStoreMode store_mode);
25
26  // Helpers
27  // TODO(verwaest): Move all uses of these helpers to the PropertyICCompiler
28  // and make the helpers private.
29  static void GenerateRuntimeSetProperty(MacroAssembler* masm,
30                                         LanguageMode language_mode);
31
32
33 private:
34  explicit PropertyICCompiler(Isolate* isolate)
35      : PropertyAccessCompiler(isolate, Code::KEYED_STORE_IC,
36                               kCacheOnReceiver) {}
37
38  Handle<Code> CompileKeyedStoreMonomorphicHandler(
39      Handle<Map> receiver_map, KeyedAccessStoreMode store_mode);
40  void CompileKeyedStorePolymorphicHandlers(MapHandleList* receiver_maps,
41                                            MapHandleList* transitioned_maps,
42                                            CodeHandleList* handlers,
43                                            KeyedAccessStoreMode store_mode);
44};
45
46
47}  // namespace internal
48}  // namespace v8
49
50#endif  // V8_IC_IC_COMPILER_H_
51