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

Side by Side Diff: src/ic/ic.h

Issue 1248303002: Unify runtime-style IC functions with Runtime intrinsics (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Make mips work Created 5 years, 5 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 | « src/ic/ia32/ic-ia32.cc ('k') | src/ic/ic.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_H_ 5 #ifndef V8_IC_H_
6 #define V8_IC_H_ 6 #define V8_IC_H_
7 7
8 #include "src/ic/ic-state.h" 8 #include "src/ic/ic-state.h"
9 #include "src/macro-assembler.h" 9 #include "src/macro-assembler.h"
10 #include "src/messages.h" 10 #include "src/messages.h"
11 11
12 namespace v8 { 12 namespace v8 {
13 namespace internal { 13 namespace internal {
14 14
15
16 // IC_UTIL_LIST defines all utility functions called from generated
17 // inline caching code. The argument for the macro, ICU, is the function name.
18 #define IC_UTIL_LIST(ICU) \
19 ICU(LoadIC_Miss) \
20 ICU(KeyedLoadIC_Miss) \
21 ICU(CallIC_Miss) \
22 ICU(CallIC_Customization_Miss) \
23 ICU(StoreIC_Miss) \
24 ICU(StoreIC_Slow) \
25 ICU(KeyedStoreIC_Miss) \
26 ICU(KeyedStoreIC_Slow) \
27 /* Utilities for IC stubs. */ \
28 ICU(StoreCallbackProperty) \
29 ICU(LoadPropertyWithInterceptorOnly) \
30 ICU(LoadPropertyWithInterceptor) \
31 ICU(LoadElementWithInterceptor) \
32 ICU(StorePropertyWithInterceptor) \
33 ICU(CompareIC_Miss) \
34 ICU(BinaryOpIC_Miss) \
35 ICU(CompareNilIC_Miss) \
36 ICU(Unreachable) \
37 ICU(ToBooleanIC_Miss)
38 // 15 //
39 // IC is the base class for LoadIC, StoreIC, KeyedLoadIC, and KeyedStoreIC. 16 // IC is the base class for LoadIC, StoreIC, KeyedLoadIC, and KeyedStoreIC.
40 // 17 //
41 class IC { 18 class IC {
42 public: 19 public:
43 // The ids for utility called from the generated code.
44 enum UtilityId {
45 #define CONST_NAME(name) k##name,
46 IC_UTIL_LIST(CONST_NAME)
47 #undef CONST_NAME
48 kUtilityCount
49 };
50
51 // Looks up the address of the named utility.
52 static Address AddressFromUtilityId(UtilityId id);
53
54 // Alias the inline cache state type to make the IC code more readable. 20 // Alias the inline cache state type to make the IC code more readable.
55 typedef InlineCacheState State; 21 typedef InlineCacheState State;
56 22
57 // The IC code is either invoked with no extra frames on the stack 23 // The IC code is either invoked with no extra frames on the stack
58 // or with a single extra frame for supporting calls. 24 // or with a single extra frame for supporting calls.
59 enum FrameDepth { NO_EXTRA_FRAME = 0, EXTRA_CALL_FRAME = 1 }; 25 enum FrameDepth { NO_EXTRA_FRAME = 0, EXTRA_CALL_FRAME = 1 };
60 26
61 // Construct the IC structure with the given number of extra 27 // Construct the IC structure with the given number of extra
62 // JavaScript frames on the stack. 28 // JavaScript frames on the stack.
63 IC(FrameDepth depth, Isolate* isolate, FeedbackNexus* nexus = NULL, 29 IC(FrameDepth depth, Isolate* isolate, FeedbackNexus* nexus = NULL,
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 ExtraICState extra_ic_state_; 267 ExtraICState extra_ic_state_;
302 MapHandleList target_maps_; 268 MapHandleList target_maps_;
303 bool target_maps_set_; 269 bool target_maps_set_;
304 270
305 FeedbackNexus* nexus_; 271 FeedbackNexus* nexus_;
306 272
307 DISALLOW_IMPLICIT_CONSTRUCTORS(IC); 273 DISALLOW_IMPLICIT_CONSTRUCTORS(IC);
308 }; 274 };
309 275
310 276
311 // An IC_Utility encapsulates IC::UtilityId. It exists mainly because you
312 // cannot make forward declarations to an enum.
313 class IC_Utility {
314 public:
315 explicit IC_Utility(IC::UtilityId id)
316 : address_(IC::AddressFromUtilityId(id)), id_(id) {}
317
318 Address address() const { return address_; }
319
320 IC::UtilityId id() const { return id_; }
321
322 private:
323 Address address_;
324 IC::UtilityId id_;
325 };
326
327
328 class CallIC : public IC { 277 class CallIC : public IC {
329 public: 278 public:
330 CallIC(Isolate* isolate, CallICNexus* nexus) 279 CallIC(Isolate* isolate, CallICNexus* nexus)
331 : IC(EXTRA_CALL_FRAME, isolate, nexus) { 280 : IC(EXTRA_CALL_FRAME, isolate, nexus) {
332 DCHECK(nexus != NULL); 281 DCHECK(nexus != NULL);
333 } 282 }
334 283
335 void PatchMegamorphic(Handle<Object> function); 284 void PatchMegamorphic(Handle<Object> function);
336 285
337 void HandleMiss(Handle<Object> function); 286 void HandleMiss(Handle<Object> function);
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 explicit ToBooleanIC(Isolate* isolate) : IC(EXTRA_CALL_FRAME, isolate) {} 680 explicit ToBooleanIC(Isolate* isolate) : IC(EXTRA_CALL_FRAME, isolate) {}
732 681
733 Handle<Object> ToBoolean(Handle<Object> object); 682 Handle<Object> ToBoolean(Handle<Object> object);
734 }; 683 };
735 684
736 685
737 // Helper for BinaryOpIC and CompareIC. 686 // Helper for BinaryOpIC and CompareIC.
738 enum InlinedSmiCheck { ENABLE_INLINED_SMI_CHECK, DISABLE_INLINED_SMI_CHECK }; 687 enum InlinedSmiCheck { ENABLE_INLINED_SMI_CHECK, DISABLE_INLINED_SMI_CHECK };
739 void PatchInlinedSmiCode(Address address, InlinedSmiCheck check); 688 void PatchInlinedSmiCode(Address address, InlinedSmiCheck check);
740 689
741 DECLARE_RUNTIME_FUNCTION(KeyedLoadIC_MissFromStubFailure);
742 DECLARE_RUNTIME_FUNCTION(KeyedStoreIC_MissFromStubFailure);
743 DECLARE_RUNTIME_FUNCTION(UnaryOpIC_Miss);
744 DECLARE_RUNTIME_FUNCTION(StoreIC_MissFromStubFailure);
745 DECLARE_RUNTIME_FUNCTION(ElementsTransitionAndStoreIC_Miss);
746 DECLARE_RUNTIME_FUNCTION(BinaryOpIC_Miss);
747 DECLARE_RUNTIME_FUNCTION(BinaryOpIC_MissWithAllocationSite);
748 DECLARE_RUNTIME_FUNCTION(CompareNilIC_Miss);
749 DECLARE_RUNTIME_FUNCTION(ToBooleanIC_Miss);
750 DECLARE_RUNTIME_FUNCTION(LoadIC_MissFromStubFailure);
751
752 // Support functions for callbacks handlers.
753 DECLARE_RUNTIME_FUNCTION(StoreCallbackProperty);
754
755 // Support functions for interceptor handlers.
756 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly);
757 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptor);
758 DECLARE_RUNTIME_FUNCTION(LoadElementWithInterceptor);
759 DECLARE_RUNTIME_FUNCTION(StorePropertyWithInterceptor);
760 } 690 }
761 } // namespace v8::internal 691 } // namespace v8::internal
762 692
763 #endif // V8_IC_H_ 693 #endif // V8_IC_H_
OLDNEW
« no previous file with comments | « src/ic/ia32/ic-ia32.cc ('k') | src/ic/ic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698