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

Side by Side Diff: src/codegen.h

Issue 113895: Simplify deferred code by removing some unneeded or redundant stuff. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « src/arm/codegen-arm.cc ('k') | src/codegen.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 // allocator 45 // allocator
46 // AddDeferred 46 // AddDeferred
47 // in_spilled_code 47 // in_spilled_code
48 // set_in_spilled_code 48 // set_in_spilled_code
49 // 49 //
50 // These methods are either used privately by the shared code or implemented as 50 // These methods are either used privately by the shared code or implemented as
51 // shared code: 51 // shared code:
52 // CodeGenerator 52 // CodeGenerator
53 // ~CodeGenerator 53 // ~CodeGenerator
54 // ProcessDeferred 54 // ProcessDeferred
55 // ClearDeferred
56 // GenCode 55 // GenCode
57 // BuildBoilerplate 56 // BuildBoilerplate
58 // ComputeCallInitialize 57 // ComputeCallInitialize
59 // ComputeCallInitializeInLoop 58 // ComputeCallInitializeInLoop
60 // ProcessDeclarations 59 // ProcessDeclarations
61 // DeclareGlobals 60 // DeclareGlobals
62 // FindInlineRuntimeLUT 61 // FindInlineRuntimeLUT
63 // CheckForInlineRuntimeCall 62 // CheckForInlineRuntimeCall
64 // PatchInlineRuntimeEntry 63 // PatchInlineRuntimeEntry
65 // GenerateFastCaseSwitchStatement 64 // GenerateFastCaseSwitchStatement
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 ASSERT(top_ != NULL); 108 ASSERT(top_ != NULL);
110 return top_; 109 return top_;
111 } 110 }
112 111
113 private: 112 private:
114 static CodeGenerator* top_; 113 static CodeGenerator* top_;
115 CodeGenerator* previous_; 114 CodeGenerator* previous_;
116 }; 115 };
117 116
118 117
119 // Use lazy compilation; defaults to true.
120 // NOTE: Do not remove non-lazy compilation until we can properly
121 // install extensions with lazy compilation enabled. At the
122 // moment, this doesn't work for the extensions in Google3,
123 // and we can only run the tests with --nolazy.
124
125
126 // Deferred code objects are small pieces of code that are compiled 118 // Deferred code objects are small pieces of code that are compiled
127 // out of line. They are used to defer the compilation of uncommon 119 // out of line. They are used to defer the compilation of uncommon
128 // paths thereby avoiding expensive jumps around uncommon code parts. 120 // paths thereby avoiding expensive jumps around uncommon code parts.
129 class DeferredCode: public ZoneObject { 121 class DeferredCode: public ZoneObject {
130 public: 122 public:
131 explicit DeferredCode(CodeGenerator* generator); 123 DeferredCode();
132 virtual ~DeferredCode() { } 124 virtual ~DeferredCode() { }
133 125
134 virtual void Generate() = 0; 126 virtual void Generate() = 0;
135 127
136 // Unuse the entry and exit targets, deallocating all virtual frames 128 CodeGenerator* cgen() const { return CodeGeneratorScope::Current(); }
137 // held by them. It will be impossible to emit a (correct) jump
138 // into or out of the deferred code after clearing.
139 void Clear() {
140 enter_.Unuse();
141 exit_.Unuse();
142 }
143
144 MacroAssembler* masm() const { return masm_; }
145 CodeGenerator* generator() const { return generator_; }
146 129
147 // Set the virtual frame for entry to the deferred code as a 130 // Set the virtual frame for entry to the deferred code as a
148 // snapshot of the code generator's current frame (plus additional 131 // snapshot of the code generator's current frame (plus additional
149 // results). This is optional, but should be done before branching 132 // results). This is optional, but should be done before branching
150 // or jumping to the deferred code. 133 // or jumping to the deferred code.
151 inline void SetEntryFrame(Result* arg); 134 inline void SetEntryFrame(Result* arg);
152 inline void SetEntryFrame(Result* arg0, Result* arg1); 135 inline void SetEntryFrame(Result* arg0, Result* arg1);
153 136
154 JumpTarget* enter() { return &enter_; } 137 JumpTarget* enter() { return &enter_; }
155 138
156 void BindExit() { exit_.Bind(0); } 139 void BindExit() { exit_.Bind(0); }
157 void BindExit(Result* result) { exit_.Bind(result, 1); } 140 void BindExit(Result* result) { exit_.Bind(result, 1); }
158 void BindExit(Result* result0, Result* result1) { 141 void BindExit(Result* result0, Result* result1) {
159 exit_.Bind(result0, result1, 2); 142 exit_.Bind(result0, result1, 2);
160 } 143 }
161 void BindExit(Result* result0, Result* result1, Result* result2) { 144 void BindExit(Result* result0, Result* result1, Result* result2) {
162 exit_.Bind(result0, result1, result2, 3); 145 exit_.Bind(result0, result1, result2, 3);
163 } 146 }
164 147
165 int statement_position() const { return statement_position_; } 148 int statement_position() const { return statement_position_; }
166 int position() const { return position_; } 149 int position() const { return position_; }
167 150
168 #ifdef DEBUG 151 #ifdef DEBUG
169 void set_comment(const char* comment) { comment_ = comment; } 152 void set_comment(const char* comment) { comment_ = comment; }
170 const char* comment() const { return comment_; } 153 const char* comment() const { return comment_; }
171 #else 154 #else
172 inline void set_comment(const char* comment) { } 155 void set_comment(const char* comment) { }
173 const char* comment() const { return ""; } 156 const char* comment() const { return ""; }
174 #endif 157 #endif
175 158
176 protected: 159 protected:
177 CodeGenerator* const generator_;
178 MacroAssembler* const masm_;
179 JumpTarget enter_; 160 JumpTarget enter_;
180 JumpTarget exit_; 161 JumpTarget exit_;
181 162
182 private: 163 private:
183 int statement_position_; 164 int statement_position_;
184 int position_; 165 int position_;
185 #ifdef DEBUG 166 #ifdef DEBUG
186 const char* comment_; 167 const char* comment_;
187 #endif 168 #endif
188 DISALLOW_COPY_AND_ASSIGN(DeferredCode); 169 DISALLOW_COPY_AND_ASSIGN(DeferredCode);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 PrintF("ArgumentsAccessStub (type %d)\n", type_); 330 PrintF("ArgumentsAccessStub (type %d)\n", type_);
350 } 331 }
351 #endif 332 #endif
352 }; 333 };
353 334
354 335
355 } // namespace internal 336 } // namespace internal
356 } // namespace v8 337 } // namespace v8
357 338
358 #endif // V8_CODEGEN_H_ 339 #endif // V8_CODEGEN_H_
OLDNEW
« no previous file with comments | « src/arm/codegen-arm.cc ('k') | src/codegen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698