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

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

Issue 1307863007: Revert of [arm] Decrease the size of the assembler class by allocating buffers of pending constants on the he… (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 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/ic/access-compiler.h » ('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 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 const Instr kLdrRegFpNegOffsetPattern = 441 const Instr kLdrRegFpNegOffsetPattern =
442 al | B26 | L | NegOffset | kRegister_fp_Code * B16; 442 al | B26 | L | NegOffset | kRegister_fp_Code * B16;
443 const Instr kStrRegFpNegOffsetPattern = 443 const Instr kStrRegFpNegOffsetPattern =
444 al | B26 | NegOffset | kRegister_fp_Code * B16; 444 al | B26 | NegOffset | kRegister_fp_Code * B16;
445 const Instr kLdrStrInstrTypeMask = 0xffff0000; 445 const Instr kLdrStrInstrTypeMask = 0xffff0000;
446 446
447 447
448 Assembler::Assembler(Isolate* isolate, void* buffer, int buffer_size) 448 Assembler::Assembler(Isolate* isolate, void* buffer, int buffer_size)
449 : AssemblerBase(isolate, buffer, buffer_size), 449 : AssemblerBase(isolate, buffer, buffer_size),
450 recorded_ast_id_(TypeFeedbackId::None()), 450 recorded_ast_id_(TypeFeedbackId::None()),
451 pending_32_bit_constants_(&pending_32_bit_constants_buffer_[0]),
452 pending_64_bit_constants_(&pending_64_bit_constants_buffer_[0]),
453 constant_pool_builder_(kLdrMaxReachBits, kVldrMaxReachBits), 451 constant_pool_builder_(kLdrMaxReachBits, kVldrMaxReachBits),
454 positions_recorder_(this) { 452 positions_recorder_(this) {
455 reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_); 453 reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_);
456 num_pending_32_bit_constants_ = 0; 454 num_pending_32_bit_constants_ = 0;
457 num_pending_64_bit_constants_ = 0; 455 num_pending_64_bit_constants_ = 0;
458 next_buffer_check_ = 0; 456 next_buffer_check_ = 0;
459 const_pool_blocked_nesting_ = 0; 457 const_pool_blocked_nesting_ = 0;
460 no_const_pool_before_ = 0; 458 no_const_pool_before_ = 0;
461 first_const_pool_32_use_ = -1; 459 first_const_pool_32_use_ = -1;
462 first_const_pool_64_use_ = -1; 460 first_const_pool_64_use_ = -1;
463 last_bound_pos_ = 0; 461 last_bound_pos_ = 0;
464 ClearRecordedAstId(); 462 ClearRecordedAstId();
465 } 463 }
466 464
467 465
468 Assembler::~Assembler() { 466 Assembler::~Assembler() {
469 DCHECK(const_pool_blocked_nesting_ == 0); 467 DCHECK(const_pool_blocked_nesting_ == 0);
470 if (pending_32_bit_constants_ != &pending_32_bit_constants_buffer_[0]) {
471 delete[] pending_32_bit_constants_;
472 }
473 if (pending_64_bit_constants_ != &pending_64_bit_constants_buffer_[0]) {
474 delete[] pending_64_bit_constants_;
475 }
476 } 468 }
477 469
478 470
479 void Assembler::GetCode(CodeDesc* desc) { 471 void Assembler::GetCode(CodeDesc* desc) {
480 reloc_info_writer.Finish(); 472 reloc_info_writer.Finish();
481 473
482 // Emit constant pool if necessary. 474 // Emit constant pool if necessary.
483 int constant_pool_offset = 0; 475 int constant_pool_offset = 0;
484 if (FLAG_enable_embedded_constant_pool) { 476 if (FLAG_enable_embedded_constant_pool) {
485 constant_pool_offset = EmitEmbeddedConstantPool(); 477 constant_pool_offset = EmitEmbeddedConstantPool();
(...skipping 3179 matching lines...) Expand 10 before | Expand all | Expand 10 after
3665 rmode != RelocInfo::STATEMENT_POSITION && 3657 rmode != RelocInfo::STATEMENT_POSITION &&
3666 rmode != RelocInfo::CONST_POOL && rmode != RelocInfo::NONE64); 3658 rmode != RelocInfo::CONST_POOL && rmode != RelocInfo::NONE64);
3667 bool sharing_ok = RelocInfo::IsNone(rmode) || 3659 bool sharing_ok = RelocInfo::IsNone(rmode) ||
3668 !(serializer_enabled() || rmode < RelocInfo::CELL); 3660 !(serializer_enabled() || rmode < RelocInfo::CELL);
3669 if (FLAG_enable_embedded_constant_pool) { 3661 if (FLAG_enable_embedded_constant_pool) {
3670 return constant_pool_builder_.AddEntry(position, value, sharing_ok); 3662 return constant_pool_builder_.AddEntry(position, value, sharing_ok);
3671 } else { 3663 } else {
3672 DCHECK(num_pending_32_bit_constants_ < kMaxNumPending32Constants); 3664 DCHECK(num_pending_32_bit_constants_ < kMaxNumPending32Constants);
3673 if (num_pending_32_bit_constants_ == 0) { 3665 if (num_pending_32_bit_constants_ == 0) {
3674 first_const_pool_32_use_ = position; 3666 first_const_pool_32_use_ = position;
3675 } else if (num_pending_32_bit_constants_ == kMinNumPendingConstants &&
3676 pending_32_bit_constants_ ==
3677 &pending_32_bit_constants_buffer_[0]) {
3678 // Inline buffer is full, switch to dynamically allocated buffer.
3679 pending_32_bit_constants_ =
3680 new ConstantPoolEntry[kMaxNumPending32Constants];
3681 std::copy(&pending_32_bit_constants_buffer_[0],
3682 &pending_32_bit_constants_buffer_[kMinNumPendingConstants],
3683 &pending_32_bit_constants_[0]);
3684 } 3667 }
3685 ConstantPoolEntry entry(position, value, sharing_ok); 3668 ConstantPoolEntry entry(position, value, sharing_ok);
3686 pending_32_bit_constants_[num_pending_32_bit_constants_++] = entry; 3669 pending_32_bit_constants_[num_pending_32_bit_constants_++] = entry;
3687 3670
3688 // Make sure the constant pool is not emitted in place of the next 3671 // Make sure the constant pool is not emitted in place of the next
3689 // instruction for which we just recorded relocation info. 3672 // instruction for which we just recorded relocation info.
3690 BlockConstPoolFor(1); 3673 BlockConstPoolFor(1);
3691 return ConstantPoolEntry::REGULAR; 3674 return ConstantPoolEntry::REGULAR;
3692 } 3675 }
3693 } 3676 }
3694 3677
3695 3678
3696 ConstantPoolEntry::Access Assembler::ConstantPoolAddEntry(int position, 3679 ConstantPoolEntry::Access Assembler::ConstantPoolAddEntry(int position,
3697 double value) { 3680 double value) {
3698 if (FLAG_enable_embedded_constant_pool) { 3681 if (FLAG_enable_embedded_constant_pool) {
3699 return constant_pool_builder_.AddEntry(position, value); 3682 return constant_pool_builder_.AddEntry(position, value);
3700 } else { 3683 } else {
3701 DCHECK(num_pending_64_bit_constants_ < kMaxNumPending64Constants); 3684 DCHECK(num_pending_64_bit_constants_ < kMaxNumPending64Constants);
3702 if (num_pending_64_bit_constants_ == 0) { 3685 if (num_pending_64_bit_constants_ == 0) {
3703 first_const_pool_64_use_ = position; 3686 first_const_pool_64_use_ = position;
3704 } else if (num_pending_64_bit_constants_ == kMinNumPendingConstants &&
3705 pending_64_bit_constants_ ==
3706 &pending_64_bit_constants_buffer_[0]) {
3707 // Inline buffer is full, switch to dynamically allocated buffer.
3708 pending_64_bit_constants_ =
3709 new ConstantPoolEntry[kMaxNumPending64Constants];
3710 std::copy(&pending_64_bit_constants_buffer_[0],
3711 &pending_64_bit_constants_buffer_[kMinNumPendingConstants],
3712 &pending_64_bit_constants_[0]);
3713 } 3687 }
3714 ConstantPoolEntry entry(position, value); 3688 ConstantPoolEntry entry(position, value);
3715 pending_64_bit_constants_[num_pending_64_bit_constants_++] = entry; 3689 pending_64_bit_constants_[num_pending_64_bit_constants_++] = entry;
3716 3690
3717 // Make sure the constant pool is not emitted in place of the next 3691 // Make sure the constant pool is not emitted in place of the next
3718 // instruction for which we just recorded relocation info. 3692 // instruction for which we just recorded relocation info.
3719 BlockConstPoolFor(1); 3693 BlockConstPoolFor(1);
3720 return ConstantPoolEntry::REGULAR; 3694 return ConstantPoolEntry::REGULAR;
3721 } 3695 }
3722 } 3696 }
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
4023 DCHECK(is_uint12(offset)); 3997 DCHECK(is_uint12(offset));
4024 instr_at_put(pc, SetLdrRegisterImmediateOffset(instr, offset)); 3998 instr_at_put(pc, SetLdrRegisterImmediateOffset(instr, offset));
4025 } 3999 }
4026 } 4000 }
4027 4001
4028 4002
4029 } // namespace internal 4003 } // namespace internal
4030 } // namespace v8 4004 } // namespace v8
4031 4005
4032 #endif // V8_TARGET_ARCH_ARM 4006 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/ic/access-compiler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698