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

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

Issue 293023: Added infrastructure for optimizing new CanvasArray types in WebGL... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 2 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 | « src/objects-debug.cc ('k') | src/runtime.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 && HeapObject::cast(this)->map()->instance_type() == BYTE_ARRAY_TYPE; 353 && HeapObject::cast(this)->map()->instance_type() == BYTE_ARRAY_TYPE;
354 } 354 }
355 355
356 356
357 bool Object::IsPixelArray() { 357 bool Object::IsPixelArray() {
358 return Object::IsHeapObject() && 358 return Object::IsHeapObject() &&
359 HeapObject::cast(this)->map()->instance_type() == PIXEL_ARRAY_TYPE; 359 HeapObject::cast(this)->map()->instance_type() == PIXEL_ARRAY_TYPE;
360 } 360 }
361 361
362 362
363 bool Object::IsExternalArray() {
364 if (!Object::IsHeapObject())
365 return false;
366 InstanceType instance_type =
367 HeapObject::cast(this)->map()->instance_type();
368 return (instance_type >= EXTERNAL_BYTE_ARRAY_TYPE &&
369 instance_type <= EXTERNAL_FLOAT_ARRAY_TYPE);
370 }
371
372
373 bool Object::IsExternalByteArray() {
374 return Object::IsHeapObject() &&
375 HeapObject::cast(this)->map()->instance_type() ==
376 EXTERNAL_BYTE_ARRAY_TYPE;
377 }
378
379
380 bool Object::IsExternalUnsignedByteArray() {
381 return Object::IsHeapObject() &&
382 HeapObject::cast(this)->map()->instance_type() ==
383 EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE;
384 }
385
386
387 bool Object::IsExternalShortArray() {
388 return Object::IsHeapObject() &&
389 HeapObject::cast(this)->map()->instance_type() ==
390 EXTERNAL_SHORT_ARRAY_TYPE;
391 }
392
393
394 bool Object::IsExternalUnsignedShortArray() {
395 return Object::IsHeapObject() &&
396 HeapObject::cast(this)->map()->instance_type() ==
397 EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE;
398 }
399
400
401 bool Object::IsExternalIntArray() {
402 return Object::IsHeapObject() &&
403 HeapObject::cast(this)->map()->instance_type() ==
404 EXTERNAL_INT_ARRAY_TYPE;
405 }
406
407
408 bool Object::IsExternalUnsignedIntArray() {
409 return Object::IsHeapObject() &&
410 HeapObject::cast(this)->map()->instance_type() ==
411 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE;
412 }
413
414
415 bool Object::IsExternalFloatArray() {
416 return Object::IsHeapObject() &&
417 HeapObject::cast(this)->map()->instance_type() ==
418 EXTERNAL_FLOAT_ARRAY_TYPE;
419 }
420
421
363 bool Object::IsFailure() { 422 bool Object::IsFailure() {
364 return HAS_FAILURE_TAG(this); 423 return HAS_FAILURE_TAG(this);
365 } 424 }
366 425
367 426
368 bool Object::IsRetryAfterGC() { 427 bool Object::IsRetryAfterGC() {
369 return HAS_FAILURE_TAG(this) 428 return HAS_FAILURE_TAG(this)
370 && Failure::cast(this)->type() == Failure::RETRY_AFTER_GC; 429 && Failure::cast(this)->type() == Failure::RETRY_AFTER_GC;
371 } 430 }
372 431
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 WRITE_DOUBLE_FIELD(this, kValueOffset, value); 1136 WRITE_DOUBLE_FIELD(this, kValueOffset, value);
1078 } 1137 }
1079 1138
1080 1139
1081 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) 1140 ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset)
1082 1141
1083 1142
1084 Array* JSObject::elements() { 1143 Array* JSObject::elements() {
1085 Object* array = READ_FIELD(this, kElementsOffset); 1144 Object* array = READ_FIELD(this, kElementsOffset);
1086 // In the assert below Dictionary is covered under FixedArray. 1145 // In the assert below Dictionary is covered under FixedArray.
1087 ASSERT(array->IsFixedArray() || array->IsPixelArray()); 1146 ASSERT(array->IsFixedArray() || array->IsPixelArray() ||
1147 array->IsExternalArray());
1088 return reinterpret_cast<Array*>(array); 1148 return reinterpret_cast<Array*>(array);
1089 } 1149 }
1090 1150
1091 1151
1092 void JSObject::set_elements(Array* value, WriteBarrierMode mode) { 1152 void JSObject::set_elements(Array* value, WriteBarrierMode mode) {
1093 // In the assert below Dictionary is covered under FixedArray. 1153 // In the assert below Dictionary is covered under FixedArray.
1094 ASSERT(value->IsFixedArray() || value->IsPixelArray()); 1154 ASSERT(value->IsFixedArray() || value->IsPixelArray() ||
1155 value->IsExternalArray());
1095 WRITE_FIELD(this, kElementsOffset, value); 1156 WRITE_FIELD(this, kElementsOffset, value);
1096 CONDITIONAL_WRITE_BARRIER(this, kElementsOffset, mode); 1157 CONDITIONAL_WRITE_BARRIER(this, kElementsOffset, mode);
1097 } 1158 }
1098 1159
1099 1160
1100 void JSObject::initialize_properties() { 1161 void JSObject::initialize_properties() {
1101 ASSERT(!Heap::InNewSpace(Heap::empty_fixed_array())); 1162 ASSERT(!Heap::InNewSpace(Heap::empty_fixed_array()));
1102 WRITE_FIELD(this, kPropertiesOffset, Heap::empty_fixed_array()); 1163 WRITE_FIELD(this, kPropertiesOffset, Heap::empty_fixed_array());
1103 } 1164 }
1104 1165
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 CAST_ACCESSOR(GlobalObject) 1608 CAST_ACCESSOR(GlobalObject)
1548 CAST_ACCESSOR(JSGlobalProxy) 1609 CAST_ACCESSOR(JSGlobalProxy)
1549 CAST_ACCESSOR(JSGlobalObject) 1610 CAST_ACCESSOR(JSGlobalObject)
1550 CAST_ACCESSOR(JSBuiltinsObject) 1611 CAST_ACCESSOR(JSBuiltinsObject)
1551 CAST_ACCESSOR(Code) 1612 CAST_ACCESSOR(Code)
1552 CAST_ACCESSOR(JSArray) 1613 CAST_ACCESSOR(JSArray)
1553 CAST_ACCESSOR(JSRegExp) 1614 CAST_ACCESSOR(JSRegExp)
1554 CAST_ACCESSOR(Proxy) 1615 CAST_ACCESSOR(Proxy)
1555 CAST_ACCESSOR(ByteArray) 1616 CAST_ACCESSOR(ByteArray)
1556 CAST_ACCESSOR(PixelArray) 1617 CAST_ACCESSOR(PixelArray)
1618 CAST_ACCESSOR(ExternalArray)
1619 CAST_ACCESSOR(ExternalByteArray)
1620 CAST_ACCESSOR(ExternalUnsignedByteArray)
1621 CAST_ACCESSOR(ExternalShortArray)
1622 CAST_ACCESSOR(ExternalUnsignedShortArray)
1623 CAST_ACCESSOR(ExternalIntArray)
1624 CAST_ACCESSOR(ExternalUnsignedIntArray)
1625 CAST_ACCESSOR(ExternalFloatArray)
1557 CAST_ACCESSOR(Struct) 1626 CAST_ACCESSOR(Struct)
1558 1627
1559 1628
1560 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name) 1629 #define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name)
1561 STRUCT_LIST(MAKE_STRUCT_CAST) 1630 STRUCT_LIST(MAKE_STRUCT_CAST)
1562 #undef MAKE_STRUCT_CAST 1631 #undef MAKE_STRUCT_CAST
1563 1632
1564 1633
1565 template <typename Shape, typename Key> 1634 template <typename Shape, typename Key>
1566 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) { 1635 HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) {
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
1931 } 2000 }
1932 2001
1933 2002
1934 void PixelArray::set(int index, uint8_t value) { 2003 void PixelArray::set(int index, uint8_t value) {
1935 ASSERT((index >= 0) && (index < this->length())); 2004 ASSERT((index >= 0) && (index < this->length()));
1936 uint8_t* ptr = external_pointer(); 2005 uint8_t* ptr = external_pointer();
1937 ptr[index] = value; 2006 ptr[index] = value;
1938 } 2007 }
1939 2008
1940 2009
2010 void* ExternalArray::external_pointer() {
2011 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset);
2012 return reinterpret_cast<void*>(ptr);
2013 }
2014
2015
2016 void ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) {
2017 intptr_t ptr = reinterpret_cast<intptr_t>(value);
2018 WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr);
2019 }
2020
2021
2022 int8_t ExternalByteArray::get(int index) {
2023 ASSERT((index >= 0) && (index < this->length()));
2024 int8_t* ptr = static_cast<int8_t*>(external_pointer());
2025 return ptr[index];
2026 }
2027
2028
2029 void ExternalByteArray::set(int index, int8_t value) {
2030 ASSERT((index >= 0) && (index < this->length()));
2031 int8_t* ptr = static_cast<int8_t*>(external_pointer());
2032 ptr[index] = value;
2033 }
2034
2035
2036 uint8_t ExternalUnsignedByteArray::get(int index) {
2037 ASSERT((index >= 0) && (index < this->length()));
2038 uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
2039 return ptr[index];
2040 }
2041
2042
2043 void ExternalUnsignedByteArray::set(int index, uint8_t value) {
2044 ASSERT((index >= 0) && (index < this->length()));
2045 uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
2046 ptr[index] = value;
2047 }
2048
2049
2050 int16_t ExternalShortArray::get(int index) {
2051 ASSERT((index >= 0) && (index < this->length()));
2052 int16_t* ptr = static_cast<int16_t*>(external_pointer());
2053 return ptr[index];
2054 }
2055
2056
2057 void ExternalShortArray::set(int index, int16_t value) {
2058 ASSERT((index >= 0) && (index < this->length()));
2059 int16_t* ptr = static_cast<int16_t*>(external_pointer());
2060 ptr[index] = value;
2061 }
2062
2063
2064 uint16_t ExternalUnsignedShortArray::get(int index) {
2065 ASSERT((index >= 0) && (index < this->length()));
2066 uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
2067 return ptr[index];
2068 }
2069
2070
2071 void ExternalUnsignedShortArray::set(int index, uint16_t value) {
2072 ASSERT((index >= 0) && (index < this->length()));
2073 uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
2074 ptr[index] = value;
2075 }
2076
2077
2078 int32_t ExternalIntArray::get(int index) {
2079 ASSERT((index >= 0) && (index < this->length()));
2080 int32_t* ptr = static_cast<int32_t*>(external_pointer());
2081 return ptr[index];
2082 }
2083
2084
2085 void ExternalIntArray::set(int index, int32_t value) {
2086 ASSERT((index >= 0) && (index < this->length()));
2087 int32_t* ptr = static_cast<int32_t*>(external_pointer());
2088 ptr[index] = value;
2089 }
2090
2091
2092 uint32_t ExternalUnsignedIntArray::get(int index) {
2093 ASSERT((index >= 0) && (index < this->length()));
2094 uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
2095 return ptr[index];
2096 }
2097
2098
2099 void ExternalUnsignedIntArray::set(int index, uint32_t value) {
2100 ASSERT((index >= 0) && (index < this->length()));
2101 uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
2102 ptr[index] = value;
2103 }
2104
2105
2106 float ExternalFloatArray::get(int index) {
2107 ASSERT((index >= 0) && (index < this->length()));
2108 float* ptr = static_cast<float*>(external_pointer());
2109 return ptr[index];
2110 }
2111
2112
2113 void ExternalFloatArray::set(int index, float value) {
2114 ASSERT((index >= 0) && (index < this->length()));
2115 float* ptr = static_cast<float*>(external_pointer());
2116 ptr[index] = value;
2117 }
2118
2119
1941 int Map::instance_size() { 2120 int Map::instance_size() {
1942 return READ_BYTE_FIELD(this, kInstanceSizeOffset) << kPointerSizeLog2; 2121 return READ_BYTE_FIELD(this, kInstanceSizeOffset) << kPointerSizeLog2;
1943 } 2122 }
1944 2123
1945 2124
1946 int Map::inobject_properties() { 2125 int Map::inobject_properties() {
1947 return READ_BYTE_FIELD(this, kInObjectPropertiesOffset); 2126 return READ_BYTE_FIELD(this, kInObjectPropertiesOffset);
1948 } 2127 }
1949 2128
1950 2129
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after
2639 JSObject::ElementsKind JSObject::GetElementsKind() { 2818 JSObject::ElementsKind JSObject::GetElementsKind() {
2640 Array* array = elements(); 2819 Array* array = elements();
2641 if (array->IsFixedArray()) { 2820 if (array->IsFixedArray()) {
2642 // FAST_ELEMENTS or DICTIONARY_ELEMENTS are both stored in a FixedArray. 2821 // FAST_ELEMENTS or DICTIONARY_ELEMENTS are both stored in a FixedArray.
2643 if (array->map() == Heap::fixed_array_map()) { 2822 if (array->map() == Heap::fixed_array_map()) {
2644 return FAST_ELEMENTS; 2823 return FAST_ELEMENTS;
2645 } 2824 }
2646 ASSERT(array->IsDictionary()); 2825 ASSERT(array->IsDictionary());
2647 return DICTIONARY_ELEMENTS; 2826 return DICTIONARY_ELEMENTS;
2648 } 2827 }
2828 if (array->IsExternalArray()) {
2829 switch (array->map()->instance_type()) {
2830 case EXTERNAL_BYTE_ARRAY_TYPE:
2831 return EXTERNAL_BYTE_ELEMENTS;
2832 case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
2833 return EXTERNAL_UNSIGNED_BYTE_ELEMENTS;
2834 case EXTERNAL_SHORT_ARRAY_TYPE:
2835 return EXTERNAL_SHORT_ELEMENTS;
2836 case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
2837 return EXTERNAL_UNSIGNED_SHORT_ELEMENTS;
2838 case EXTERNAL_INT_ARRAY_TYPE:
2839 return EXTERNAL_INT_ELEMENTS;
2840 case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
2841 return EXTERNAL_UNSIGNED_INT_ELEMENTS;
2842 default:
2843 ASSERT(array->map()->instance_type() == EXTERNAL_FLOAT_ARRAY_TYPE);
2844 return EXTERNAL_FLOAT_ELEMENTS;
2845 }
2846 }
2649 ASSERT(array->IsPixelArray()); 2847 ASSERT(array->IsPixelArray());
2650 return PIXEL_ELEMENTS; 2848 return PIXEL_ELEMENTS;
2651 } 2849 }
2652 2850
2653 2851
2654 bool JSObject::HasFastElements() { 2852 bool JSObject::HasFastElements() {
2655 return GetElementsKind() == FAST_ELEMENTS; 2853 return GetElementsKind() == FAST_ELEMENTS;
2656 } 2854 }
2657 2855
2658 2856
2659 bool JSObject::HasDictionaryElements() { 2857 bool JSObject::HasDictionaryElements() {
2660 return GetElementsKind() == DICTIONARY_ELEMENTS; 2858 return GetElementsKind() == DICTIONARY_ELEMENTS;
2661 } 2859 }
2662 2860
2663 2861
2664 bool JSObject::HasPixelElements() { 2862 bool JSObject::HasPixelElements() {
2665 return GetElementsKind() == PIXEL_ELEMENTS; 2863 return GetElementsKind() == PIXEL_ELEMENTS;
2666 } 2864 }
2667 2865
2668 2866
2867 bool JSObject::HasExternalArrayElements() {
2868 return (HasExternalByteElements() ||
2869 HasExternalUnsignedByteElements() ||
2870 HasExternalShortElements() ||
2871 HasExternalUnsignedShortElements() ||
2872 HasExternalIntElements() ||
2873 HasExternalUnsignedIntElements() ||
2874 HasExternalFloatElements());
2875 }
2876
2877
2878 bool JSObject::HasExternalByteElements() {
2879 return GetElementsKind() == EXTERNAL_BYTE_ELEMENTS;
2880 }
2881
2882
2883 bool JSObject::HasExternalUnsignedByteElements() {
2884 return GetElementsKind() == EXTERNAL_UNSIGNED_BYTE_ELEMENTS;
2885 }
2886
2887
2888 bool JSObject::HasExternalShortElements() {
2889 return GetElementsKind() == EXTERNAL_SHORT_ELEMENTS;
2890 }
2891
2892
2893 bool JSObject::HasExternalUnsignedShortElements() {
2894 return GetElementsKind() == EXTERNAL_UNSIGNED_SHORT_ELEMENTS;
2895 }
2896
2897
2898 bool JSObject::HasExternalIntElements() {
2899 return GetElementsKind() == EXTERNAL_INT_ELEMENTS;
2900 }
2901
2902
2903 bool JSObject::HasExternalUnsignedIntElements() {
2904 return GetElementsKind() == EXTERNAL_UNSIGNED_INT_ELEMENTS;
2905 }
2906
2907
2908 bool JSObject::HasExternalFloatElements() {
2909 return GetElementsKind() == EXTERNAL_FLOAT_ELEMENTS;
2910 }
2911
2912
2669 bool JSObject::HasNamedInterceptor() { 2913 bool JSObject::HasNamedInterceptor() {
2670 return map()->has_named_interceptor(); 2914 return map()->has_named_interceptor();
2671 } 2915 }
2672 2916
2673 2917
2674 bool JSObject::HasIndexedInterceptor() { 2918 bool JSObject::HasIndexedInterceptor() {
2675 return map()->has_indexed_interceptor(); 2919 return map()->has_indexed_interceptor();
2676 } 2920 }
2677 2921
2678 2922
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2889 #undef WRITE_INT_FIELD 3133 #undef WRITE_INT_FIELD
2890 #undef READ_SHORT_FIELD 3134 #undef READ_SHORT_FIELD
2891 #undef WRITE_SHORT_FIELD 3135 #undef WRITE_SHORT_FIELD
2892 #undef READ_BYTE_FIELD 3136 #undef READ_BYTE_FIELD
2893 #undef WRITE_BYTE_FIELD 3137 #undef WRITE_BYTE_FIELD
2894 3138
2895 3139
2896 } } // namespace v8::internal 3140 } } // namespace v8::internal
2897 3141
2898 #endif // V8_OBJECTS_INL_H_ 3142 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects-debug.cc ('k') | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698