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

Side by Side Diff: src/arm/assembler-arm.cc

Issue 2922433002: [arm] Clean up disabling of sharing code target entries. (Closed)
Patch Set: 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/arm/assembler-arm.h ('k') | src/compiler/arm/code-generator-arm.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 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 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 550
551 Assembler::Assembler(IsolateData isolate_data, void* buffer, int buffer_size) 551 Assembler::Assembler(IsolateData isolate_data, void* buffer, int buffer_size)
552 : AssemblerBase(isolate_data, buffer, buffer_size), 552 : AssemblerBase(isolate_data, buffer, buffer_size),
553 recorded_ast_id_(TypeFeedbackId::None()), 553 recorded_ast_id_(TypeFeedbackId::None()),
554 pending_32_bit_constants_(), 554 pending_32_bit_constants_(),
555 pending_64_bit_constants_() { 555 pending_64_bit_constants_() {
556 pending_32_bit_constants_.reserve(kMinNumPendingConstants); 556 pending_32_bit_constants_.reserve(kMinNumPendingConstants);
557 pending_64_bit_constants_.reserve(kMinNumPendingConstants); 557 pending_64_bit_constants_.reserve(kMinNumPendingConstants);
558 reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_); 558 reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_);
559 next_buffer_check_ = 0; 559 next_buffer_check_ = 0;
560 code_target_sharing_blocked_nesting_ = 0;
560 const_pool_blocked_nesting_ = 0; 561 const_pool_blocked_nesting_ = 0;
561 no_const_pool_before_ = 0; 562 no_const_pool_before_ = 0;
562 first_const_pool_32_use_ = -1; 563 first_const_pool_32_use_ = -1;
563 first_const_pool_64_use_ = -1; 564 first_const_pool_64_use_ = -1;
564 last_bound_pos_ = 0; 565 last_bound_pos_ = 0;
565 ClearRecordedAstId(); 566 ClearRecordedAstId();
566 if (CpuFeatures::IsSupported(VFP32DREGS)) { 567 if (CpuFeatures::IsSupported(VFP32DREGS)) {
567 // Register objects tend to be abstracted and survive between scopes, so 568 // Register objects tend to be abstracted and survive between scopes, so
568 // it's awkward to use CpuFeatures::VFP32DREGS with CpuFeatureScope. To make 569 // it's awkward to use CpuFeatures::VFP32DREGS with CpuFeatureScope. To make
569 // its use consistent with other features, we always enable it if we can. 570 // its use consistent with other features, we always enable it if we can.
570 EnableCpuFeature(VFP32DREGS); 571 EnableCpuFeature(VFP32DREGS);
571 } 572 }
572 } 573 }
573 574
574 575
575 Assembler::~Assembler() { 576 Assembler::~Assembler() {
576 DCHECK(const_pool_blocked_nesting_ == 0); 577 DCHECK_EQ(const_pool_blocked_nesting_, 0);
578 DCHECK_EQ(code_target_sharing_blocked_nesting_, 0);
577 } 579 }
578 580
579 void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) { 581 void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) {
580 // Emit constant pool if necessary. 582 // Emit constant pool if necessary.
581 int constant_pool_offset = 0; 583 int constant_pool_offset = 0;
582 CheckConstPool(true, false); 584 CheckConstPool(true, false);
583 DCHECK(pending_32_bit_constants_.empty()); 585 DCHECK(pending_32_bit_constants_.empty());
584 DCHECK(pending_64_bit_constants_.empty()); 586 DCHECK(pending_64_bit_constants_.empty());
585 587
586 AllocateRequestedHeapNumbers(isolate); 588 AllocateRequestedHeapNumbers(isolate);
(...skipping 4461 matching lines...) Expand 10 before | Expand all | Expand 10 after
5048 void Assembler::ConstantPoolAddEntry(int position, RelocInfo::Mode rmode, 5050 void Assembler::ConstantPoolAddEntry(int position, RelocInfo::Mode rmode,
5049 intptr_t value) { 5051 intptr_t value) {
5050 DCHECK(rmode != RelocInfo::COMMENT && rmode != RelocInfo::CONST_POOL && 5052 DCHECK(rmode != RelocInfo::COMMENT && rmode != RelocInfo::CONST_POOL &&
5051 rmode != RelocInfo::NONE64); 5053 rmode != RelocInfo::NONE64);
5052 bool sharing_ok = RelocInfo::IsNone(rmode) || 5054 bool sharing_ok = RelocInfo::IsNone(rmode) ||
5053 (rmode >= RelocInfo::FIRST_SHAREABLE_RELOC_MODE); 5055 (rmode >= RelocInfo::FIRST_SHAREABLE_RELOC_MODE);
5054 DCHECK(pending_32_bit_constants_.size() < kMaxNumPending32Constants); 5056 DCHECK(pending_32_bit_constants_.size() < kMaxNumPending32Constants);
5055 if (pending_32_bit_constants_.empty()) { 5057 if (pending_32_bit_constants_.empty()) {
5056 first_const_pool_32_use_ = position; 5058 first_const_pool_32_use_ = position;
5057 } 5059 }
5058 ConstantPoolEntry entry( 5060 ConstantPoolEntry entry(position, value,
5059 position, value, 5061 sharing_ok || (rmode == RelocInfo::CODE_TARGET &&
5060 sharing_ok || (rmode == RelocInfo::CODE_TARGET && serializer_enabled())); 5062 IsCodeTargetSharingAllowed()));
5061 5063
5062 bool shared = false; 5064 bool shared = false;
5063 if (sharing_ok) { 5065 if (sharing_ok) {
5064 // Merge the constant, if possible. 5066 // Merge the constant, if possible.
5065 for (size_t i = 0; i < pending_32_bit_constants_.size(); i++) { 5067 for (size_t i = 0; i < pending_32_bit_constants_.size(); i++) {
5066 ConstantPoolEntry& current_entry = pending_32_bit_constants_[i]; 5068 ConstantPoolEntry& current_entry = pending_32_bit_constants_[i];
5067 if (!current_entry.sharing_ok()) continue; 5069 if (!current_entry.sharing_ok()) continue;
5068 if (entry.value() == current_entry.value()) { 5070 if (entry.value() == current_entry.value()) {
5069 entry.set_merged_index(i); 5071 entry.set_merged_index(i);
5070 shared = true; 5072 shared = true;
5071 break; 5073 break;
5072 } 5074 }
5073 } 5075 }
5074 } 5076 }
5075 5077
5076 if (rmode == RelocInfo::CODE_TARGET && serializer_enabled()) { 5078 if (rmode == RelocInfo::CODE_TARGET && IsCodeTargetSharingAllowed()) {
5077 // TODO(all): We only do this in the serializer, for now, because
5078 // full-codegen relies on RelocInfo for translating PCs between full-codegen
5079 // normal and debug code.
5080 // Sharing entries here relies on canonicalized handles - without them, we 5079 // Sharing entries here relies on canonicalized handles - without them, we
5081 // will miss the optimisation opportunity. 5080 // will miss the optimisation opportunity.
5082 Address handle_address = reinterpret_cast<Address>(value); 5081 Address handle_address = reinterpret_cast<Address>(value);
5083 auto existing = handle_to_index_map_.find(handle_address); 5082 auto existing = handle_to_index_map_.find(handle_address);
5084 if (existing != handle_to_index_map_.end()) { 5083 if (existing != handle_to_index_map_.end()) {
5085 int index = existing->second; 5084 int index = existing->second;
5086 entry.set_merged_index(index); 5085 entry.set_merged_index(index);
5087 shared = true; 5086 shared = true;
5088 } else { 5087 } else {
5089 // Keep track of this code handle. 5088 // Keep track of this code handle.
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
5369 } 5368 }
5370 5369
5371 void PatchingAssembler::FlushICache(Isolate* isolate) { 5370 void PatchingAssembler::FlushICache(Isolate* isolate) {
5372 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap); 5371 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap);
5373 } 5372 }
5374 5373
5375 } // namespace internal 5374 } // namespace internal
5376 } // namespace v8 5375 } // namespace v8
5377 5376
5378 #endif // V8_TARGET_ARCH_ARM 5377 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/compiler/arm/code-generator-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698