Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(448)

Side by Side Diff: src/ic/access-compiler.h

Issue 2389313002: Avoid static initializers in PropertyAccessCompiler (Closed)
Patch Set: Ports Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « BUILD.gn ('k') | src/ic/access-compiler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_IC_ACCESS_COMPILER_H_ 5 #ifndef V8_IC_ACCESS_COMPILER_H_
6 #define V8_IC_ACCESS_COMPILER_H_ 6 #define V8_IC_ACCESS_COMPILER_H_
7 7
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/ic/access-compiler-data.h"
9 #include "src/macro-assembler.h" 10 #include "src/macro-assembler.h"
10 #include "src/objects.h" 11 #include "src/objects.h"
11 12
12 namespace v8 { 13 namespace v8 {
13 namespace internal { 14 namespace internal {
14 15
15
16 class PropertyAccessCompiler BASE_EMBEDDED { 16 class PropertyAccessCompiler BASE_EMBEDDED {
17 public: 17 public:
18 static Builtins::Name MissBuiltin(Code::Kind kind) { 18 static Builtins::Name MissBuiltin(Code::Kind kind) {
19 switch (kind) { 19 switch (kind) {
20 case Code::LOAD_IC: 20 case Code::LOAD_IC:
21 return Builtins::kLoadIC_Miss; 21 return Builtins::kLoadIC_Miss;
22 case Code::STORE_IC: 22 case Code::STORE_IC:
23 return Builtins::kStoreIC_Miss; 23 return Builtins::kStoreIC_Miss;
24 case Code::KEYED_LOAD_IC: 24 case Code::KEYED_LOAD_IC:
25 return Builtins::kKeyedLoadIC_Miss; 25 return Builtins::kKeyedLoadIC_Miss;
26 case Code::KEYED_STORE_IC: 26 case Code::KEYED_STORE_IC:
27 return Builtins::kKeyedStoreIC_Miss; 27 return Builtins::kKeyedStoreIC_Miss;
28 default: 28 default:
29 UNREACHABLE(); 29 UNREACHABLE();
30 } 30 }
31 return Builtins::kLoadIC_Miss; 31 return Builtins::kLoadIC_Miss;
32 } 32 }
33 33
34 static void TailCallBuiltin(MacroAssembler* masm, Builtins::Name name); 34 static void TailCallBuiltin(MacroAssembler* masm, Builtins::Name name);
35 35
36 protected: 36 protected:
37 PropertyAccessCompiler(Isolate* isolate, Code::Kind kind, 37 PropertyAccessCompiler(Isolate* isolate, Code::Kind kind,
38 CacheHolderFlag cache_holder) 38 CacheHolderFlag cache_holder)
39 : registers_(GetCallingConvention(kind)), 39 : registers_(GetCallingConvention(isolate, kind)),
40 kind_(kind), 40 kind_(kind),
41 cache_holder_(cache_holder), 41 cache_holder_(cache_holder),
42 isolate_(isolate), 42 isolate_(isolate),
43 masm_(isolate, NULL, 256, CodeObjectRequired::kYes) { 43 masm_(isolate, NULL, 256, CodeObjectRequired::kYes) {
44 // TODO(yangguo): remove this once we can serialize IC stubs. 44 // TODO(yangguo): remove this once we can serialize IC stubs.
45 masm_.enable_serializer(); 45 masm_.enable_serializer();
46 } 46 }
47 47
48 Code::Kind kind() const { return kind_; } 48 Code::Kind kind() const { return kind_; }
49 CacheHolderFlag cache_holder() const { return cache_holder_; } 49 CacheHolderFlag cache_holder() const { return cache_holder_; }
50 MacroAssembler* masm() { return &masm_; } 50 MacroAssembler* masm() { return &masm_; }
51 Isolate* isolate() const { return isolate_; } 51 Isolate* isolate() const { return isolate_; }
52 Heap* heap() const { return isolate()->heap(); } 52 Heap* heap() const { return isolate()->heap(); }
53 Factory* factory() const { return isolate()->factory(); } 53 Factory* factory() const { return isolate()->factory(); }
54 54
55 Register receiver() const { return registers_[0]; } 55 Register receiver() const { return registers_[0]; }
56 Register name() const { return registers_[1]; } 56 Register name() const { return registers_[1]; }
57 Register slot() const; 57 Register slot() const;
58 Register vector() const; 58 Register vector() const;
59 Register scratch1() const { return registers_[2]; } 59 Register scratch1() const { return registers_[2]; }
60 Register scratch2() const { return registers_[3]; } 60 Register scratch2() const { return registers_[3]; }
61 61
62 static Register* GetCallingConvention(Code::Kind);
63 static Register* load_calling_convention();
64 static Register* store_calling_convention();
65 static Register* keyed_store_calling_convention();
66
67 Register* registers_; 62 Register* registers_;
68 63
69 static void GenerateTailCall(MacroAssembler* masm, Handle<Code> code); 64 static void GenerateTailCall(MacroAssembler* masm, Handle<Code> code);
70 65
71 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); 66 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name);
72 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<Name> name); 67 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<Name> name);
73 68
74 private: 69 private:
70 static Register* GetCallingConvention(Isolate* isolate, Code::Kind kind);
71 static void InitializePlatformSpecific(AccessCompilerData* data);
72
75 Code::Kind kind_; 73 Code::Kind kind_;
76 CacheHolderFlag cache_holder_; 74 CacheHolderFlag cache_holder_;
77 75
78 Isolate* isolate_; 76 Isolate* isolate_;
79 MacroAssembler masm_; 77 MacroAssembler masm_;
80 // Ensure that MacroAssembler has a reasonable size. 78 // Ensure that MacroAssembler has a reasonable size.
81 STATIC_ASSERT(sizeof(MacroAssembler) < 128 * kPointerSize); 79 STATIC_ASSERT(sizeof(MacroAssembler) < 128 * kPointerSize);
82 }; 80 };
83 } // namespace internal 81 } // namespace internal
84 } // namespace v8 82 } // namespace v8
85 83
86 #endif // V8_IC_ACCESS_COMPILER_H_ 84 #endif // V8_IC_ACCESS_COMPILER_H_
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/ic/access-compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698