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

Side by Side Diff: src/code-stubs.h

Issue 11411033: Reduced TLS accesses even further. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Reverted accidental change Created 8 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « src/api.cc ('k') | src/code-stubs.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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 return static_cast<Major>(code_stub->major_key()); 134 return static_cast<Major>(code_stub->major_key());
135 } 135 }
136 136
137 static const char* MajorName(Major major_key, bool allow_unknown_keys); 137 static const char* MajorName(Major major_key, bool allow_unknown_keys);
138 138
139 virtual ~CodeStub() {} 139 virtual ~CodeStub() {}
140 140
141 bool CompilingCallsToThisStubIsGCSafe() { 141 bool CompilingCallsToThisStubIsGCSafe() {
142 bool is_pregenerated = IsPregenerated(); 142 bool is_pregenerated = IsPregenerated();
143 Code* code = NULL; 143 Code* code = NULL;
144 CHECK(!is_pregenerated || FindCodeInCache(&code)); 144 CHECK(!is_pregenerated || FindCodeInCache(&code, Isolate::Current()));
145 return is_pregenerated; 145 return is_pregenerated;
146 } 146 }
147 147
148 // See comment above, where Instanceof is defined. 148 // See comment above, where Instanceof is defined.
149 virtual bool IsPregenerated() { return false; } 149 virtual bool IsPregenerated() { return false; }
150 150
151 static void GenerateStubsAheadOfTime(); 151 static void GenerateStubsAheadOfTime();
152 static void GenerateFPStubs(); 152 static void GenerateFPStubs();
153 153
154 // Some stubs put untagged junk on the stack that cannot be scanned by the 154 // Some stubs put untagged junk on the stack that cannot be scanned by the
155 // GC. This means that we must be statically sure that no GC can occur while 155 // GC. This means that we must be statically sure that no GC can occur while
156 // they are running. If that is the case they should override this to return 156 // they are running. If that is the case they should override this to return
157 // true, which will cause an assertion if we try to call something that can 157 // true, which will cause an assertion if we try to call something that can
158 // GC or if we try to put a stack frame on top of the junk, which would not 158 // GC or if we try to put a stack frame on top of the junk, which would not
159 // result in a traversable stack. 159 // result in a traversable stack.
160 virtual bool SometimesSetsUpAFrame() { return true; } 160 virtual bool SometimesSetsUpAFrame() { return true; }
161 161
162 // Lookup the code in the (possibly custom) cache. 162 // Lookup the code in the (possibly custom) cache.
163 bool FindCodeInCache(Code** code_out); 163 bool FindCodeInCache(Code** code_out, Isolate* isolate);
164 164
165 protected: 165 protected:
166 static bool CanUseFPRegisters(); 166 static bool CanUseFPRegisters();
167 167
168 private: 168 private:
169 // Nonvirtual wrapper around the stub-specific Generate function. Call 169 // Nonvirtual wrapper around the stub-specific Generate function. Call
170 // this function to set up the macro assembler and generate the code. 170 // this function to set up the macro assembler and generate the code.
171 void GenerateCode(MacroAssembler* masm); 171 void GenerateCode(MacroAssembler* masm);
172 172
173 // Generates the assembler code for the stub. 173 // Generates the assembler code for the stub.
(...skipping 21 matching lines...) Expand all
195 virtual InlineCacheState GetICState() { 195 virtual InlineCacheState GetICState() {
196 return UNINITIALIZED; 196 return UNINITIALIZED;
197 } 197 }
198 198
199 // Add the code to a specialized cache, specific to an individual 199 // Add the code to a specialized cache, specific to an individual
200 // stub type. Please note, this method must add the code object to a 200 // stub type. Please note, this method must add the code object to a
201 // roots object, otherwise we will remove the code during GC. 201 // roots object, otherwise we will remove the code during GC.
202 virtual void AddToSpecialCache(Handle<Code> new_object) { } 202 virtual void AddToSpecialCache(Handle<Code> new_object) { }
203 203
204 // Find code in a specialized cache, work is delegated to the specific stub. 204 // Find code in a specialized cache, work is delegated to the specific stub.
205 virtual bool FindCodeInSpecialCache(Code** code_out) { return false; } 205 virtual bool FindCodeInSpecialCache(Code** code_out, Isolate* isolate) {
206 return false;
207 }
206 208
207 // If a stub uses a special cache override this. 209 // If a stub uses a special cache override this.
208 virtual bool UseSpecialCache() { return false; } 210 virtual bool UseSpecialCache() { return false; }
209 211
210 // Returns a name for logging/debugging purposes. 212 // Returns a name for logging/debugging purposes.
211 SmartArrayPointer<const char> GetName(); 213 SmartArrayPointer<const char> GetName();
212 virtual void PrintName(StringStream* stream); 214 virtual void PrintName(StringStream* stream);
213 215
214 // Returns whether the code generated for this stub needs to be allocated as 216 // Returns whether the code generated for this stub needs to be allocated as
215 // a fixed (non-moveable) code object. 217 // a fixed (non-moveable) code object.
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 void GenerateStrings(MacroAssembler* masm); 648 void GenerateStrings(MacroAssembler* masm);
647 void GenerateObjects(MacroAssembler* masm); 649 void GenerateObjects(MacroAssembler* masm);
648 void GenerateMiss(MacroAssembler* masm); 650 void GenerateMiss(MacroAssembler* masm);
649 void GenerateKnownObjects(MacroAssembler* masm); 651 void GenerateKnownObjects(MacroAssembler* masm);
650 void GenerateGeneric(MacroAssembler* masm); 652 void GenerateGeneric(MacroAssembler* masm);
651 653
652 bool strict() const { return op_ == Token::EQ_STRICT; } 654 bool strict() const { return op_ == Token::EQ_STRICT; }
653 Condition GetCondition() const { return CompareIC::ComputeCondition(op_); } 655 Condition GetCondition() const { return CompareIC::ComputeCondition(op_); }
654 656
655 virtual void AddToSpecialCache(Handle<Code> new_object); 657 virtual void AddToSpecialCache(Handle<Code> new_object);
656 virtual bool FindCodeInSpecialCache(Code** code_out); 658 virtual bool FindCodeInSpecialCache(Code** code_out, Isolate* isolate);
657 virtual bool UseSpecialCache() { return state_ == CompareIC::KNOWN_OBJECTS; } 659 virtual bool UseSpecialCache() { return state_ == CompareIC::KNOWN_OBJECTS; }
658 660
659 Token::Value op_; 661 Token::Value op_;
660 CompareIC::State left_; 662 CompareIC::State left_;
661 CompareIC::State right_; 663 CompareIC::State right_;
662 CompareIC::State state_; 664 CompareIC::State state_;
663 Handle<Map> known_map_; 665 Handle<Map> known_map_;
664 }; 666 };
665 667
666 668
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 1228
1227 // The current function entry hook. 1229 // The current function entry hook.
1228 static FunctionEntryHook entry_hook_; 1230 static FunctionEntryHook entry_hook_;
1229 1231
1230 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); 1232 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub);
1231 }; 1233 };
1232 1234
1233 } } // namespace v8::internal 1235 } } // namespace v8::internal
1234 1236
1235 #endif // V8_CODE_STUBS_H_ 1237 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/api.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698