OLD | NEW |
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 | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are 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 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 rb_ = rb; | 226 rb_ = rb; |
227 offset_ = 0; | 227 offset_ = 0; |
228 } | 228 } |
229 | 229 |
230 | 230 |
231 // ----------------------------------------------------------------------------- | 231 // ----------------------------------------------------------------------------- |
232 // Specific instructions, constants, and masks. | 232 // Specific instructions, constants, and masks. |
233 | 233 |
234 Assembler::Assembler(IsolateData isolate_data, void* buffer, int buffer_size) | 234 Assembler::Assembler(IsolateData isolate_data, void* buffer, int buffer_size) |
235 : AssemblerBase(isolate_data, buffer, buffer_size), | 235 : AssemblerBase(isolate_data, buffer, buffer_size), |
236 recorded_ast_id_(TypeFeedbackId::None()), | |
237 constant_pool_builder_(kLoadPtrMaxReachBits, kLoadDoubleMaxReachBits) { | 236 constant_pool_builder_(kLoadPtrMaxReachBits, kLoadDoubleMaxReachBits) { |
238 reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_); | 237 reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_); |
239 | 238 |
240 no_trampoline_pool_before_ = 0; | 239 no_trampoline_pool_before_ = 0; |
241 trampoline_pool_blocked_nesting_ = 0; | 240 trampoline_pool_blocked_nesting_ = 0; |
242 constant_pool_entry_sharing_blocked_nesting_ = 0; | 241 constant_pool_entry_sharing_blocked_nesting_ = 0; |
243 next_trampoline_check_ = kMaxInt; | 242 next_trampoline_check_ = kMaxInt; |
244 internal_trampoline_exception_ = false; | 243 internal_trampoline_exception_ = false; |
245 last_bound_pos_ = 0; | 244 last_bound_pos_ = 0; |
246 optimizable_cmpi_pos_ = -1; | 245 optimizable_cmpi_pos_ = -1; |
247 trampoline_emitted_ = FLAG_force_long_branches; | 246 trampoline_emitted_ = FLAG_force_long_branches; |
248 tracked_branch_count_ = 0; | 247 tracked_branch_count_ = 0; |
249 ClearRecordedAstId(); | |
250 relocations_.reserve(128); | 248 relocations_.reserve(128); |
251 } | 249 } |
252 | 250 |
253 void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) { | 251 void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) { |
254 // Emit constant pool if necessary. | 252 // Emit constant pool if necessary. |
255 int constant_pool_offset = EmitConstantPool(); | 253 int constant_pool_offset = EmitConstantPool(); |
256 | 254 |
257 EmitRelocations(); | 255 EmitRelocations(); |
258 | 256 |
259 // Set up code descriptor. | 257 // Set up code descriptor. |
(...skipping 1789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2049 } | 2047 } |
2050 | 2048 |
2051 | 2049 |
2052 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { | 2050 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { |
2053 if (RelocInfo::IsNone(rmode) || | 2051 if (RelocInfo::IsNone(rmode) || |
2054 // Don't record external references unless the heap will be serialized. | 2052 // Don't record external references unless the heap will be serialized. |
2055 (rmode == RelocInfo::EXTERNAL_REFERENCE && !serializer_enabled() && | 2053 (rmode == RelocInfo::EXTERNAL_REFERENCE && !serializer_enabled() && |
2056 !emit_debug_code())) { | 2054 !emit_debug_code())) { |
2057 return; | 2055 return; |
2058 } | 2056 } |
2059 if (rmode == RelocInfo::CODE_TARGET_WITH_ID) { | |
2060 data = RecordedAstId().ToInt(); | |
2061 ClearRecordedAstId(); | |
2062 } | |
2063 DeferredRelocInfo rinfo(pc_offset(), rmode, data); | 2057 DeferredRelocInfo rinfo(pc_offset(), rmode, data); |
2064 relocations_.push_back(rinfo); | 2058 relocations_.push_back(rinfo); |
2065 } | 2059 } |
2066 | 2060 |
2067 | 2061 |
2068 void Assembler::EmitRelocations() { | 2062 void Assembler::EmitRelocations() { |
2069 EnsureSpaceFor(relocations_.size() * kMaxRelocSize); | 2063 EnsureSpaceFor(relocations_.size() * kMaxRelocSize); |
2070 | 2064 |
2071 for (std::vector<DeferredRelocInfo>::iterator it = relocations_.begin(); | 2065 for (std::vector<DeferredRelocInfo>::iterator it = relocations_.begin(); |
2072 it != relocations_.end(); it++) { | 2066 it != relocations_.end(); it++) { |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2141 } | 2135 } |
2142 | 2136 |
2143 void PatchingAssembler::FlushICache(Isolate* isolate) { | 2137 void PatchingAssembler::FlushICache(Isolate* isolate) { |
2144 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap); | 2138 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap); |
2145 } | 2139 } |
2146 | 2140 |
2147 } // namespace internal | 2141 } // namespace internal |
2148 } // namespace v8 | 2142 } // namespace v8 |
2149 | 2143 |
2150 #endif // V8_TARGET_ARCH_PPC | 2144 #endif // V8_TARGET_ARCH_PPC |
OLD | NEW |