| 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 |