| 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 } | 163 } |
| 164 | 164 |
| 165 | 165 |
| 166 bool Object::IsHeapObject() const { | 166 bool Object::IsHeapObject() const { |
| 167 return Internals::HasHeapObjectTag(this); | 167 return Internals::HasHeapObjectTag(this); |
| 168 } | 168 } |
| 169 | 169 |
| 170 | 170 |
| 171 TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) | 171 TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) |
| 172 TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) | 172 TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) |
| 173 TYPE_CHECKER(Float32x4, FLOAT32X4_TYPE) |
| 173 TYPE_CHECKER(Symbol, SYMBOL_TYPE) | 174 TYPE_CHECKER(Symbol, SYMBOL_TYPE) |
| 174 | 175 |
| 175 | 176 |
| 176 bool Object::IsString() const { | 177 bool Object::IsString() const { |
| 177 return Object::IsHeapObject() | 178 return Object::IsHeapObject() |
| 178 && HeapObject::cast(this)->map()->instance_type() < FIRST_NONSTRING_TYPE; | 179 && HeapObject::cast(this)->map()->instance_type() < FIRST_NONSTRING_TYPE; |
| 179 } | 180 } |
| 180 | 181 |
| 181 | 182 |
| 182 bool Object::IsName() const { | 183 bool Object::IsName() const { |
| (...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1314 | 1315 |
| 1315 #define WRITE_UINT32_FIELD(p, offset, value) \ | 1316 #define WRITE_UINT32_FIELD(p, offset, value) \ |
| 1316 (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset)) = value) | 1317 (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset)) = value) |
| 1317 | 1318 |
| 1318 #define READ_INT32_FIELD(p, offset) \ | 1319 #define READ_INT32_FIELD(p, offset) \ |
| 1319 (*reinterpret_cast<const int32_t*>(FIELD_ADDR_CONST(p, offset))) | 1320 (*reinterpret_cast<const int32_t*>(FIELD_ADDR_CONST(p, offset))) |
| 1320 | 1321 |
| 1321 #define WRITE_INT32_FIELD(p, offset, value) \ | 1322 #define WRITE_INT32_FIELD(p, offset, value) \ |
| 1322 (*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset)) = value) | 1323 (*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset)) = value) |
| 1323 | 1324 |
| 1325 #define READ_FLOAT_FIELD(p, offset) \ |
| 1326 (*reinterpret_cast<const float*>(FIELD_ADDR_CONST(p, offset))) |
| 1327 |
| 1328 #define WRITE_FLOAT_FIELD(p, offset, value) \ |
| 1329 (*reinterpret_cast<float*>(FIELD_ADDR(p, offset)) = value) |
| 1330 |
| 1324 #define READ_UINT64_FIELD(p, offset) \ | 1331 #define READ_UINT64_FIELD(p, offset) \ |
| 1325 (*reinterpret_cast<const uint64_t*>(FIELD_ADDR_CONST(p, offset))) | 1332 (*reinterpret_cast<const uint64_t*>(FIELD_ADDR_CONST(p, offset))) |
| 1326 | 1333 |
| 1327 #define WRITE_UINT64_FIELD(p, offset, value) \ | 1334 #define WRITE_UINT64_FIELD(p, offset, value) \ |
| 1328 (*reinterpret_cast<uint64_t*>(FIELD_ADDR(p, offset)) = value) | 1335 (*reinterpret_cast<uint64_t*>(FIELD_ADDR(p, offset)) = value) |
| 1329 | 1336 |
| 1330 #define READ_INT64_FIELD(p, offset) \ | 1337 #define READ_INT64_FIELD(p, offset) \ |
| 1331 (*reinterpret_cast<const int64_t*>(FIELD_ADDR_CONST(p, offset))) | 1338 (*reinterpret_cast<const int64_t*>(FIELD_ADDR_CONST(p, offset))) |
| 1332 | 1339 |
| 1333 #define WRITE_INT64_FIELD(p, offset, value) \ | 1340 #define WRITE_INT64_FIELD(p, offset, value) \ |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1572 return ((READ_INT_FIELD(this, kExponentOffset) & kExponentMask) >> | 1579 return ((READ_INT_FIELD(this, kExponentOffset) & kExponentMask) >> |
| 1573 kExponentShift) - kExponentBias; | 1580 kExponentShift) - kExponentBias; |
| 1574 } | 1581 } |
| 1575 | 1582 |
| 1576 | 1583 |
| 1577 int HeapNumber::get_sign() { | 1584 int HeapNumber::get_sign() { |
| 1578 return READ_INT_FIELD(this, kExponentOffset) & kSignMask; | 1585 return READ_INT_FIELD(this, kExponentOffset) & kSignMask; |
| 1579 } | 1586 } |
| 1580 | 1587 |
| 1581 | 1588 |
| 1589 float Float32x4::get_lane(int lane) const { |
| 1590 DCHECK(lane < 4 && lane >= 0); |
| 1591 #if defined(V8_TARGET_LITTLE_ENDIAN) |
| 1592 return READ_FLOAT_FIELD(this, kValueOffset + lane * kFloatSize); |
| 1593 #elif defined(V8_TARGET_BIG_ENDIAN) |
| 1594 return READ_FLOAT_FIELD(this, kValueOffset + (3 - lane) * kFloatSize); |
| 1595 #else |
| 1596 #error Unknown byte ordering |
| 1597 #endif |
| 1598 } |
| 1599 |
| 1600 |
| 1601 void Float32x4::set_lane(int lane, float value) { |
| 1602 DCHECK(lane < 4 && lane >= 0); |
| 1603 #if defined(V8_TARGET_LITTLE_ENDIAN) |
| 1604 WRITE_FLOAT_FIELD(this, kValueOffset + lane * kFloatSize, value); |
| 1605 #elif defined(V8_TARGET_BIG_ENDIAN) |
| 1606 WRITE_FLOAT_FIELD(this, kValueOffset + (3 - lane) * kFloatSize, value); |
| 1607 #else |
| 1608 #error Unknown byte ordering |
| 1609 #endif |
| 1610 } |
| 1611 |
| 1612 |
| 1582 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) | 1613 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) |
| 1583 | 1614 |
| 1584 | 1615 |
| 1585 Object** FixedArray::GetFirstElementAddress() { | 1616 Object** FixedArray::GetFirstElementAddress() { |
| 1586 return reinterpret_cast<Object**>(FIELD_ADDR(this, OffsetOfElementAt(0))); | 1617 return reinterpret_cast<Object**>(FIELD_ADDR(this, OffsetOfElementAt(0))); |
| 1587 } | 1618 } |
| 1588 | 1619 |
| 1589 | 1620 |
| 1590 bool FixedArray::ContainsOnlySmisOrHoles() { | 1621 bool FixedArray::ContainsOnlySmisOrHoles() { |
| 1591 Object* the_hole = GetHeap()->the_hole_value(); | 1622 Object* the_hole = GetHeap()->the_hole_value(); |
| (...skipping 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2811 | 2842 |
| 2812 | 2843 |
| 2813 AllocationAlignment HeapObject::RequiredAlignment() { | 2844 AllocationAlignment HeapObject::RequiredAlignment() { |
| 2814 #ifdef V8_HOST_ARCH_32_BIT | 2845 #ifdef V8_HOST_ARCH_32_BIT |
| 2815 if ((IsFixedFloat64Array() || IsFixedDoubleArray() || | 2846 if ((IsFixedFloat64Array() || IsFixedDoubleArray() || |
| 2816 IsConstantPoolArray()) && | 2847 IsConstantPoolArray()) && |
| 2817 FixedArrayBase::cast(this)->length() != 0) { | 2848 FixedArrayBase::cast(this)->length() != 0) { |
| 2818 return kDoubleAligned; | 2849 return kDoubleAligned; |
| 2819 } | 2850 } |
| 2820 if (IsHeapNumber()) return kDoubleUnaligned; | 2851 if (IsHeapNumber()) return kDoubleUnaligned; |
| 2852 if (IsFloat32x4()) return kSimd128Unaligned; |
| 2821 #endif // V8_HOST_ARCH_32_BIT | 2853 #endif // V8_HOST_ARCH_32_BIT |
| 2822 return kWordAligned; | 2854 return kWordAligned; |
| 2823 } | 2855 } |
| 2824 | 2856 |
| 2825 | 2857 |
| 2826 void FixedArray::set(int index, | 2858 void FixedArray::set(int index, |
| 2827 Object* value, | 2859 Object* value, |
| 2828 WriteBarrierMode mode) { | 2860 WriteBarrierMode mode) { |
| 2829 DCHECK(map() != GetHeap()->fixed_cow_array_map()); | 2861 DCHECK(map() != GetHeap()->fixed_cow_array_map()); |
| 2830 DCHECK(index >= 0 && index < this->length()); | 2862 DCHECK(index >= 0 && index < this->length()); |
| (...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3352 CAST_ACCESSOR(ExternalString) | 3384 CAST_ACCESSOR(ExternalString) |
| 3353 CAST_ACCESSOR(ExternalTwoByteString) | 3385 CAST_ACCESSOR(ExternalTwoByteString) |
| 3354 CAST_ACCESSOR(ExternalUint16Array) | 3386 CAST_ACCESSOR(ExternalUint16Array) |
| 3355 CAST_ACCESSOR(ExternalUint32Array) | 3387 CAST_ACCESSOR(ExternalUint32Array) |
| 3356 CAST_ACCESSOR(ExternalUint8Array) | 3388 CAST_ACCESSOR(ExternalUint8Array) |
| 3357 CAST_ACCESSOR(ExternalUint8ClampedArray) | 3389 CAST_ACCESSOR(ExternalUint8ClampedArray) |
| 3358 CAST_ACCESSOR(FixedArray) | 3390 CAST_ACCESSOR(FixedArray) |
| 3359 CAST_ACCESSOR(FixedArrayBase) | 3391 CAST_ACCESSOR(FixedArrayBase) |
| 3360 CAST_ACCESSOR(FixedDoubleArray) | 3392 CAST_ACCESSOR(FixedDoubleArray) |
| 3361 CAST_ACCESSOR(FixedTypedArrayBase) | 3393 CAST_ACCESSOR(FixedTypedArrayBase) |
| 3394 CAST_ACCESSOR(Float32x4) |
| 3362 CAST_ACCESSOR(Foreign) | 3395 CAST_ACCESSOR(Foreign) |
| 3363 CAST_ACCESSOR(GlobalDictionary) | 3396 CAST_ACCESSOR(GlobalDictionary) |
| 3364 CAST_ACCESSOR(GlobalObject) | 3397 CAST_ACCESSOR(GlobalObject) |
| 3365 CAST_ACCESSOR(HandlerTable) | 3398 CAST_ACCESSOR(HandlerTable) |
| 3366 CAST_ACCESSOR(HeapObject) | 3399 CAST_ACCESSOR(HeapObject) |
| 3367 CAST_ACCESSOR(JSArray) | 3400 CAST_ACCESSOR(JSArray) |
| 3368 CAST_ACCESSOR(JSArrayBuffer) | 3401 CAST_ACCESSOR(JSArrayBuffer) |
| 3369 CAST_ACCESSOR(JSArrayBufferView) | 3402 CAST_ACCESSOR(JSArrayBufferView) |
| 3370 CAST_ACCESSOR(JSBuiltinsObject) | 3403 CAST_ACCESSOR(JSBuiltinsObject) |
| 3371 CAST_ACCESSOR(JSDataView) | 3404 CAST_ACCESSOR(JSDataView) |
| (...skipping 4343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7715 #undef READ_SHORT_FIELD | 7748 #undef READ_SHORT_FIELD |
| 7716 #undef WRITE_SHORT_FIELD | 7749 #undef WRITE_SHORT_FIELD |
| 7717 #undef READ_BYTE_FIELD | 7750 #undef READ_BYTE_FIELD |
| 7718 #undef WRITE_BYTE_FIELD | 7751 #undef WRITE_BYTE_FIELD |
| 7719 #undef NOBARRIER_READ_BYTE_FIELD | 7752 #undef NOBARRIER_READ_BYTE_FIELD |
| 7720 #undef NOBARRIER_WRITE_BYTE_FIELD | 7753 #undef NOBARRIER_WRITE_BYTE_FIELD |
| 7721 | 7754 |
| 7722 } } // namespace v8::internal | 7755 } } // namespace v8::internal |
| 7723 | 7756 |
| 7724 #endif // V8_OBJECTS_INL_H_ | 7757 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |