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

Side by Side Diff: src/assembler.h

Issue 2900683002: [compiler] Delay allocation of code-embedded heap numbers. (Closed)
Patch Set: Fix rebase. Created 3 years, 6 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/arm64/macro-assembler-arm64-inl.h ('k') | src/assembler.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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 17 matching lines...) Expand all
28 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 // The original source code covered by the above license above has been 31 // The original source code covered by the above license above has been
32 // modified significantly by Google Inc. 32 // modified significantly by Google Inc.
33 // Copyright 2012 the V8 project authors. All rights reserved. 33 // Copyright 2012 the V8 project authors. All rights reserved.
34 34
35 #ifndef V8_ASSEMBLER_H_ 35 #ifndef V8_ASSEMBLER_H_
36 #define V8_ASSEMBLER_H_ 36 #define V8_ASSEMBLER_H_
37 37
38 #include <forward_list>
39
38 #include "src/allocation.h" 40 #include "src/allocation.h"
39 #include "src/builtins/builtins.h" 41 #include "src/builtins/builtins.h"
40 #include "src/deoptimize-reason.h" 42 #include "src/deoptimize-reason.h"
41 #include "src/globals.h" 43 #include "src/globals.h"
42 #include "src/isolate.h" 44 #include "src/isolate.h"
43 #include "src/label.h" 45 #include "src/label.h"
44 #include "src/log.h" 46 #include "src/log.h"
45 #include "src/register-configuration.h" 47 #include "src/register-configuration.h"
46 #include "src/runtime/runtime.h" 48 #include "src/runtime/runtime.h"
47 49
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 constant_pool_available_ = available; 142 constant_pool_available_ = available;
141 } else { 143 } else {
142 // Embedded constant pool not supported on this architecture. 144 // Embedded constant pool not supported on this architecture.
143 UNREACHABLE(); 145 UNREACHABLE();
144 } 146 }
145 } 147 }
146 148
147 // The program counter, which points into the buffer above and moves forward. 149 // The program counter, which points into the buffer above and moves forward.
148 byte* pc_; 150 byte* pc_;
149 151
152 // The following two functions help with avoiding allocations of heap numbers
153 // during the code assembly phase. {RequestHeapNumber} records the need for a
154 // future heap number allocation, together with the current pc offset. After
155 // code assembly, {AllocateRequestedHeapNumbers} will allocate these numbers
156 // and, with the help of {Assembler::set_heap_number}, place them where they
157 // are expected (determined by the recorded pc offset).
158 void RequestHeapNumber(double value) {
159 heap_numbers_.emplace_front(value, pc_offset());
160 }
161 void AllocateRequestedHeapNumbers(Isolate* isolate);
162
150 private: 163 private:
151 IsolateData isolate_data_; 164 IsolateData isolate_data_;
152 uint64_t enabled_cpu_features_; 165 uint64_t enabled_cpu_features_;
153 bool emit_debug_code_; 166 bool emit_debug_code_;
154 bool predictable_code_size_; 167 bool predictable_code_size_;
155 168
156 // Indicates whether the constant pool can be accessed, which is only possible 169 // Indicates whether the constant pool can be accessed, which is only possible
157 // if the pp register points to the current code object's constant pool. 170 // if the pp register points to the current code object's constant pool.
158 bool constant_pool_available_; 171 bool constant_pool_available_;
159 172
160 // Constant pool. 173 // Constant pool.
161 friend class FrameAndConstantPoolScope; 174 friend class FrameAndConstantPoolScope;
162 friend class ConstantPoolUnavailableScope; 175 friend class ConstantPoolUnavailableScope;
176
177 // Delayed allocation of heap numbers.
178 struct RequestedHeapNumber {
179 RequestedHeapNumber(double value, int offset);
180 double value; // The number for which we later need to create a HeapObject.
181 int offset; // The {buffer_} offset where we emitted a dummy that needs to
182 // get replaced by the actual HeapObject via
183 // {Assembler::set_heap_number}.
184 };
185 std::forward_list<RequestedHeapNumber> heap_numbers_;
163 }; 186 };
164 187
165 188
166 // Avoids emitting debug code during the lifetime of this scope object. 189 // Avoids emitting debug code during the lifetime of this scope object.
167 class DontEmitDebugCodeScope BASE_EMBEDDED { 190 class DontEmitDebugCodeScope BASE_EMBEDDED {
168 public: 191 public:
169 explicit DontEmitDebugCodeScope(AssemblerBase* assembler) 192 explicit DontEmitDebugCodeScope(AssemblerBase* assembler)
170 : assembler_(assembler), old_value_(assembler->emit_debug_code()) { 193 : assembler_(assembler), old_value_(assembler->emit_debug_code()) {
171 assembler_->set_emit_debug_code(false); 194 assembler_->set_emit_debug_code(false);
172 } 195 }
(...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 std::vector<ConstantPoolEntry> shared_entries; 1284 std::vector<ConstantPoolEntry> shared_entries;
1262 }; 1285 };
1263 1286
1264 Label emitted_label_; // Records pc_offset of emitted pool 1287 Label emitted_label_; // Records pc_offset of emitted pool
1265 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES]; 1288 PerTypeEntryInfo info_[ConstantPoolEntry::NUMBER_OF_TYPES];
1266 }; 1289 };
1267 1290
1268 } // namespace internal 1291 } // namespace internal
1269 } // namespace v8 1292 } // namespace v8
1270 #endif // V8_ASSEMBLER_H_ 1293 #endif // V8_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « src/arm64/macro-assembler-arm64-inl.h ('k') | src/assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698