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

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

Issue 304143002: Add support for extended constant pool arrays. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/factory.h » ('j') | src/factory.cc » ('J')
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 3569 matching lines...) Expand 10 before | Expand all | Expand 10 after
3580 return isolate->factory()->NewConstantPoolArray(count_of_64bit_, 3580 return isolate->factory()->NewConstantPoolArray(count_of_64bit_,
3581 count_of_code_ptr_, 3581 count_of_code_ptr_,
3582 count_of_heap_ptr_, 3582 count_of_heap_ptr_,
3583 count_of_32bit_); 3583 count_of_32bit_);
3584 } 3584 }
3585 } 3585 }
3586 3586
3587 3587
3588 void ConstantPoolBuilder::Populate(Assembler* assm, 3588 void ConstantPoolBuilder::Populate(Assembler* assm,
3589 ConstantPoolArray* constant_pool) { 3589 ConstantPoolArray* constant_pool) {
3590 ASSERT(constant_pool->count_of_int64_entries() == count_of_64bit_); 3590 ConstantPoolArray::LayoutSection section = ConstantPoolArray::SMALL_SECTION;
3591 ASSERT(constant_pool->count_of_code_ptr_entries() == count_of_code_ptr_); 3591 ASSERT(count_of_64bit_ ==
3592 ASSERT(constant_pool->count_of_heap_ptr_entries() == count_of_heap_ptr_); 3592 constant_pool->number_of_entries(ConstantPoolArray::INT64, section));
3593 ASSERT(constant_pool->count_of_int32_entries() == count_of_32bit_); 3593 ASSERT(count_of_code_ptr_ ==
3594 constant_pool->number_of_entries(ConstantPoolArray::CODE_PTR, section));
3595 ASSERT(count_of_heap_ptr_ ==
3596 constant_pool->number_of_entries(ConstantPoolArray::HEAP_PTR, section));
3597 ASSERT(count_of_32bit_ ==
3598 constant_pool->number_of_entries(ConstantPoolArray::INT32, section));
3594 ASSERT(entries_.size() == merged_indexes_.size()); 3599 ASSERT(entries_.size() == merged_indexes_.size());
3595 3600
3596 int index_64bit = 0; 3601 int index_64bit = 0;
3597 int index_code_ptr = count_of_64bit_; 3602 int index_code_ptr = count_of_64bit_;
3598 int index_heap_ptr = count_of_64bit_ + count_of_code_ptr_; 3603 int index_heap_ptr = count_of_64bit_ + count_of_code_ptr_;
3599 int index_32bit = count_of_64bit_ + count_of_code_ptr_ + count_of_heap_ptr_; 3604 int index_32bit = count_of_64bit_ + count_of_code_ptr_ + count_of_heap_ptr_;
3600 3605
3601 size_t i; 3606 size_t i;
3602 std::vector<RelocInfo>::const_iterator rinfo; 3607 std::vector<RelocInfo>::const_iterator rinfo;
3603 for (rinfo = entries_.begin(), i = 0; rinfo != entries_.end(); rinfo++, i++) { 3608 for (rinfo = entries_.begin(), i = 0; rinfo != entries_.end(); rinfo++, i++) {
3604 RelocInfo::Mode rmode = rinfo->rmode(); 3609 RelocInfo::Mode rmode = rinfo->rmode();
3605 3610
3606 // Update constant pool if necessary and get the entry's offset. 3611 // Update constant pool if necessary and get the entry's offset.
3607 int offset; 3612 int offset;
3608 if (merged_indexes_[i] == -1) { 3613 if (merged_indexes_[i] == -1) {
3609 if (Is64BitEntry(rmode)) { 3614 if (Is64BitEntry(rmode)) {
3610 offset = constant_pool->OffsetOfElementAt(index_64bit) - kHeapObjectTag; 3615 offset = constant_pool->OffsetOfElementAt(index_64bit) - kHeapObjectTag;
3611 constant_pool->set(index_64bit++, rinfo->data64()); 3616 constant_pool->set(index_64bit++, rinfo->data64());
3612 } else if (Is32BitEntry(rmode)) { 3617 } else if (Is32BitEntry(rmode)) {
3613 offset = constant_pool->OffsetOfElementAt(index_32bit) - kHeapObjectTag; 3618 offset = constant_pool->OffsetOfElementAt(index_32bit) - kHeapObjectTag;
3614 constant_pool->set(index_32bit++, static_cast<int32_t>(rinfo->data())); 3619 constant_pool->set(index_32bit++, static_cast<int32_t>(rinfo->data()));
3615 } else if (IsCodePtrEntry(rmode)) { 3620 } else if (IsCodePtrEntry(rmode)) {
3616 offset = constant_pool->OffsetOfElementAt(index_code_ptr) - 3621 offset = constant_pool->OffsetOfElementAt(index_code_ptr) -
3617 kHeapObjectTag; 3622 kHeapObjectTag;
3618 constant_pool->set(index_code_ptr++, 3623 constant_pool->set(index_code_ptr++,
3619 reinterpret_cast<Object *>(rinfo->data())); 3624 reinterpret_cast<Address>(rinfo->data()));
3620 } else { 3625 } else {
3621 ASSERT(IsHeapPtrEntry(rmode)); 3626 ASSERT(IsHeapPtrEntry(rmode));
3622 offset = constant_pool->OffsetOfElementAt(index_heap_ptr) - 3627 offset = constant_pool->OffsetOfElementAt(index_heap_ptr) -
3623 kHeapObjectTag; 3628 kHeapObjectTag;
3624 constant_pool->set(index_heap_ptr++, 3629 constant_pool->set(index_heap_ptr++,
3625 reinterpret_cast<Object *>(rinfo->data())); 3630 reinterpret_cast<Object *>(rinfo->data()));
3626 } 3631 }
3627 merged_indexes_[i] = offset; // Stash offset for merged entries. 3632 merged_indexes_[i] = offset; // Stash offset for merged entries.
3628 } else { 3633 } else {
3629 size_t merged_index = static_cast<size_t>(merged_indexes_[i]); 3634 size_t merged_index = static_cast<size_t>(merged_indexes_[i]);
(...skipping 23 matching lines...) Expand all
3653 ASSERT((index_64bit == count_of_64bit_) && 3658 ASSERT((index_64bit == count_of_64bit_) &&
3654 (index_code_ptr == (index_64bit + count_of_code_ptr_)) && 3659 (index_code_ptr == (index_64bit + count_of_code_ptr_)) &&
3655 (index_heap_ptr == (index_code_ptr + count_of_heap_ptr_)) && 3660 (index_heap_ptr == (index_code_ptr + count_of_heap_ptr_)) &&
3656 (index_32bit == (index_heap_ptr + count_of_32bit_))); 3661 (index_32bit == (index_heap_ptr + count_of_32bit_)));
3657 } 3662 }
3658 3663
3659 3664
3660 } } // namespace v8::internal 3665 } } // namespace v8::internal
3661 3666
3662 #endif // V8_TARGET_ARCH_ARM 3667 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/factory.h » ('j') | src/factory.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698