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

Side by Side Diff: src/objects-inl.h

Issue 1248483007: Store offset between fixed typed array base and data start in object (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years, 5 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/objects.h ('k') | src/ppc/lithium-ppc.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 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 3815 matching lines...) Expand 10 before | Expand all | Expand 10 after
3826 void ExternalFloat64Array::set(int index, double value) { 3826 void ExternalFloat64Array::set(int index, double value) {
3827 DCHECK((index >= 0) && (index < this->length())); 3827 DCHECK((index >= 0) && (index < this->length()));
3828 double* ptr = static_cast<double*>(external_pointer()); 3828 double* ptr = static_cast<double*>(external_pointer());
3829 ptr[index] = value; 3829 ptr[index] = value;
3830 } 3830 }
3831 3831
3832 3832
3833 ACCESSORS(FixedTypedArrayBase, base_pointer, Object, kBasePointerOffset) 3833 ACCESSORS(FixedTypedArrayBase, base_pointer, Object, kBasePointerOffset)
3834 3834
3835 3835
3836 void* FixedTypedArrayBase::DataPtr() { 3836 void* FixedTypedArrayBase::external_pointer() const {
3837 return FIELD_ADDR(this, kDataOffset); 3837 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset);
3838 return reinterpret_cast<void*>(ptr);
3838 } 3839 }
3839 3840
3840 3841
3842 void FixedTypedArrayBase::set_external_pointer(void* value,
3843 WriteBarrierMode mode) {
3844 intptr_t ptr = reinterpret_cast<intptr_t>(value);
3845 WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr);
3846 }
3847
3848
3849 void* FixedTypedArrayBase::DataPtr() {
3850 return reinterpret_cast<void*>(
3851 reinterpret_cast<intptr_t>(base_pointer()) +
3852 reinterpret_cast<intptr_t>(external_pointer()));
3853 }
3854
3855
3841 int FixedTypedArrayBase::ElementSize(InstanceType type) { 3856 int FixedTypedArrayBase::ElementSize(InstanceType type) {
3842 int element_size; 3857 int element_size;
3843 switch (type) { 3858 switch (type) {
3844 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 3859 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
3845 case FIXED_##TYPE##_ARRAY_TYPE: \ 3860 case FIXED_##TYPE##_ARRAY_TYPE: \
3846 element_size = size; \ 3861 element_size = size; \
3847 break; 3862 break;
3848 3863
3849 TYPED_ARRAYS(TYPED_ARRAY_CASE) 3864 TYPED_ARRAYS(TYPED_ARRAY_CASE)
3850 #undef TYPED_ARRAY_CASE 3865 #undef TYPED_ARRAY_CASE
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
3908 3923
3909 3924
3910 double Float64ArrayTraits::defaultValue() { 3925 double Float64ArrayTraits::defaultValue() {
3911 return std::numeric_limits<double>::quiet_NaN(); 3926 return std::numeric_limits<double>::quiet_NaN();
3912 } 3927 }
3913 3928
3914 3929
3915 template <class Traits> 3930 template <class Traits>
3916 typename Traits::ElementType FixedTypedArray<Traits>::get_scalar(int index) { 3931 typename Traits::ElementType FixedTypedArray<Traits>::get_scalar(int index) {
3917 DCHECK((index >= 0) && (index < this->length())); 3932 DCHECK((index >= 0) && (index < this->length()));
3918 ElementType* ptr = reinterpret_cast<ElementType*>( 3933 ElementType* ptr = reinterpret_cast<ElementType*>(DataPtr());
3919 FIELD_ADDR(this, kDataOffset));
3920 return ptr[index]; 3934 return ptr[index];
3921 } 3935 }
3922 3936
3923 3937
3924 template <class Traits> 3938 template <class Traits>
3925 void FixedTypedArray<Traits>::set(int index, ElementType value) { 3939 void FixedTypedArray<Traits>::set(int index, ElementType value) {
3926 DCHECK((index >= 0) && (index < this->length())); 3940 DCHECK((index >= 0) && (index < this->length()));
3927 ElementType* ptr = reinterpret_cast<ElementType*>( 3941 ElementType* ptr = reinterpret_cast<ElementType*>(DataPtr());
3928 FIELD_ADDR(this, kDataOffset));
3929 ptr[index] = value; 3942 ptr[index] = value;
3930 } 3943 }
3931 3944
3932 3945
3933 template <class Traits> 3946 template <class Traits>
3934 typename Traits::ElementType FixedTypedArray<Traits>::from_int(int value) { 3947 typename Traits::ElementType FixedTypedArray<Traits>::from_int(int value) {
3935 return static_cast<ElementType>(value); 3948 return static_cast<ElementType>(value);
3936 } 3949 }
3937 3950
3938 3951
(...skipping 3361 matching lines...) Expand 10 before | Expand all | Expand 10 after
7300 #undef READ_SHORT_FIELD 7313 #undef READ_SHORT_FIELD
7301 #undef WRITE_SHORT_FIELD 7314 #undef WRITE_SHORT_FIELD
7302 #undef READ_BYTE_FIELD 7315 #undef READ_BYTE_FIELD
7303 #undef WRITE_BYTE_FIELD 7316 #undef WRITE_BYTE_FIELD
7304 #undef NOBARRIER_READ_BYTE_FIELD 7317 #undef NOBARRIER_READ_BYTE_FIELD
7305 #undef NOBARRIER_WRITE_BYTE_FIELD 7318 #undef NOBARRIER_WRITE_BYTE_FIELD
7306 7319
7307 } } // namespace v8::internal 7320 } } // namespace v8::internal
7308 7321
7309 #endif // V8_OBJECTS_INL_H_ 7322 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/ppc/lithium-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698