OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Review notes: | 5 // Review notes: |
6 // | 6 // |
7 // - The use of macros in these inline functions may seem superfluous | 7 // - The use of macros in these inline functions may seem superfluous |
8 // but it is absolutely needed to make sure gcc generates optimal | 8 // but it is absolutely needed to make sure gcc generates optimal |
9 // code. gcc is not happy when attempting to inline too deep. | 9 // code. gcc is not happy when attempting to inline too deep. |
10 // | 10 // |
(...skipping 2444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2455 offset += kExtendedInt32CountOffset; | 2455 offset += kExtendedInt32CountOffset; |
2456 break; | 2456 break; |
2457 default: | 2457 default: |
2458 UNREACHABLE(); | 2458 UNREACHABLE(); |
2459 } | 2459 } |
2460 return READ_INT_FIELD(this, offset); | 2460 return READ_INT_FIELD(this, offset); |
2461 } | 2461 } |
2462 } | 2462 } |
2463 | 2463 |
2464 | 2464 |
| 2465 bool ConstantPoolArray::offset_is_type(int offset, Type type) { |
| 2466 return (offset >= OffsetOfElementAt(first_index(type, SMALL_SECTION)) && |
| 2467 offset <= OffsetOfElementAt(last_index(type, SMALL_SECTION))) || |
| 2468 (is_extended_layout() && |
| 2469 offset >= OffsetOfElementAt(first_index(type, EXTENDED_SECTION)) && |
| 2470 offset <= OffsetOfElementAt(last_index(type, EXTENDED_SECTION))); |
| 2471 } |
| 2472 |
| 2473 |
2465 ConstantPoolArray::Type ConstantPoolArray::get_type(int index) { | 2474 ConstantPoolArray::Type ConstantPoolArray::get_type(int index) { |
2466 LayoutSection section; | 2475 LayoutSection section; |
2467 if (is_extended_layout() && index >= first_extended_section_index()) { | 2476 if (is_extended_layout() && index >= first_extended_section_index()) { |
2468 section = EXTENDED_SECTION; | 2477 section = EXTENDED_SECTION; |
2469 } else { | 2478 } else { |
2470 section = SMALL_SECTION; | 2479 section = SMALL_SECTION; |
2471 } | 2480 } |
2472 | 2481 |
2473 Type type = FIRST_TYPE; | 2482 Type type = FIRST_TYPE; |
2474 while (index > last_index(type, section)) { | 2483 while (index > last_index(type, section)) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2545 } | 2554 } |
2546 | 2555 |
2547 | 2556 |
2548 void ConstantPoolArray::set(int index, int32_t value) { | 2557 void ConstantPoolArray::set(int index, int32_t value) { |
2549 ASSERT(map() == GetHeap()->constant_pool_array_map()); | 2558 ASSERT(map() == GetHeap()->constant_pool_array_map()); |
2550 ASSERT(get_type(index) == INT32); | 2559 ASSERT(get_type(index) == INT32); |
2551 WRITE_INT32_FIELD(this, OffsetOfElementAt(index), value); | 2560 WRITE_INT32_FIELD(this, OffsetOfElementAt(index), value); |
2552 } | 2561 } |
2553 | 2562 |
2554 | 2563 |
| 2564 void ConstantPoolArray::set_at_offset(int offset, int32_t value) { |
| 2565 ASSERT(map() == GetHeap()->constant_pool_array_map()); |
| 2566 ASSERT(offset_is_type(offset, INT32)); |
| 2567 WRITE_INT32_FIELD(this, offset, value); |
| 2568 } |
| 2569 |
| 2570 |
| 2571 void ConstantPoolArray::set_at_offset(int offset, int64_t value) { |
| 2572 ASSERT(map() == GetHeap()->constant_pool_array_map()); |
| 2573 ASSERT(offset_is_type(offset, INT64)); |
| 2574 WRITE_INT64_FIELD(this, offset, value); |
| 2575 } |
| 2576 |
| 2577 |
| 2578 void ConstantPoolArray::set_at_offset(int offset, double value) { |
| 2579 ASSERT(map() == GetHeap()->constant_pool_array_map()); |
| 2580 ASSERT(offset_is_type(offset, INT64)); |
| 2581 WRITE_DOUBLE_FIELD(this, offset, value); |
| 2582 } |
| 2583 |
| 2584 |
| 2585 void ConstantPoolArray::set_at_offset(int offset, Address value) { |
| 2586 ASSERT(map() == GetHeap()->constant_pool_array_map()); |
| 2587 ASSERT(offset_is_type(offset, CODE_PTR)); |
| 2588 WRITE_FIELD(this, offset, reinterpret_cast<Object*>(value)); |
| 2589 WRITE_BARRIER(GetHeap(), this, offset, reinterpret_cast<Object*>(value)); |
| 2590 } |
| 2591 |
| 2592 |
| 2593 void ConstantPoolArray::set_at_offset(int offset, Object* value) { |
| 2594 ASSERT(map() == GetHeap()->constant_pool_array_map()); |
| 2595 ASSERT(offset_is_type(offset, HEAP_PTR)); |
| 2596 WRITE_FIELD(this, offset, value); |
| 2597 WRITE_BARRIER(GetHeap(), this, offset, value); |
| 2598 } |
| 2599 |
| 2600 |
2555 void ConstantPoolArray::Init(const NumberOfEntries& small) { | 2601 void ConstantPoolArray::Init(const NumberOfEntries& small) { |
2556 uint32_t small_layout_1 = | 2602 uint32_t small_layout_1 = |
2557 Int64CountField::encode(small.count_of(INT64)) | | 2603 Int64CountField::encode(small.count_of(INT64)) | |
2558 CodePtrCountField::encode(small.count_of(CODE_PTR)) | | 2604 CodePtrCountField::encode(small.count_of(CODE_PTR)) | |
2559 HeapPtrCountField::encode(small.count_of(HEAP_PTR)) | | 2605 HeapPtrCountField::encode(small.count_of(HEAP_PTR)) | |
2560 IsExtendedField::encode(false); | 2606 IsExtendedField::encode(false); |
2561 uint32_t small_layout_2 = | 2607 uint32_t small_layout_2 = |
2562 Int32CountField::encode(small.count_of(INT32)) | | 2608 Int32CountField::encode(small.count_of(INT32)) | |
2563 TotalCountField::encode(small.total_count()) | | 2609 TotalCountField::encode(small.total_count()) | |
2564 WeakObjectStateField::encode(NO_WEAK_OBJECTS); | 2610 WeakObjectStateField::encode(NO_WEAK_OBJECTS); |
(...skipping 4576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7141 #undef READ_SHORT_FIELD | 7187 #undef READ_SHORT_FIELD |
7142 #undef WRITE_SHORT_FIELD | 7188 #undef WRITE_SHORT_FIELD |
7143 #undef READ_BYTE_FIELD | 7189 #undef READ_BYTE_FIELD |
7144 #undef WRITE_BYTE_FIELD | 7190 #undef WRITE_BYTE_FIELD |
7145 #undef NOBARRIER_READ_BYTE_FIELD | 7191 #undef NOBARRIER_READ_BYTE_FIELD |
7146 #undef NOBARRIER_WRITE_BYTE_FIELD | 7192 #undef NOBARRIER_WRITE_BYTE_FIELD |
7147 | 7193 |
7148 } } // namespace v8::internal | 7194 } } // namespace v8::internal |
7149 | 7195 |
7150 #endif // V8_OBJECTS_INL_H_ | 7196 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |