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

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

Issue 7033024: Add bit_field3 to Map objects (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: implement all three platforms Created 9 years, 7 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
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 1656 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 WRITE_FIELD(this, kHeaderSize + index * kPointerSize, heap->null_value()); 1667 WRITE_FIELD(this, kHeaderSize + index * kPointerSize, heap->null_value());
1668 } 1668 }
1669 1669
1670 1670
1671 Object** FixedArray::data_start() { 1671 Object** FixedArray::data_start() {
1672 return HeapObject::RawField(this, kHeaderSize); 1672 return HeapObject::RawField(this, kHeaderSize);
1673 } 1673 }
1674 1674
1675 1675
1676 bool DescriptorArray::IsEmpty() { 1676 bool DescriptorArray::IsEmpty() {
1677 ASSERT(this->length() > kFirstIndex || 1677 ASSERT(this->IsSmi() ||
1678 this->length() > kFirstIndex ||
1678 this == HEAP->empty_descriptor_array()); 1679 this == HEAP->empty_descriptor_array());
1679 return length() <= kFirstIndex; 1680 return this->IsSmi() || length() <= kFirstIndex;
1680 } 1681 }
1681 1682
1682 1683
1684 int DescriptorArray::bit_field3_storage() {
1685 Object* storage = READ_FIELD(this, kBitField3StorageOffset);
1686 return Smi::cast(storage)->value();
1687 }
1688
1689 void DescriptorArray::set_bit_field3_storage(int value) {
1690 !IsEmpty();
Mads Ager (chromium) 2011/05/23 10:14:51 ASSERT(!IsEmpty()) ?
danno 2011/06/01 13:15:11 Done.
1691 WRITE_FIELD(this, kBitField3StorageOffset, Smi::FromInt(value));
1692 }
1693
1694
1683 void DescriptorArray::fast_swap(FixedArray* array, int first, int second) { 1695 void DescriptorArray::fast_swap(FixedArray* array, int first, int second) {
1684 Object* tmp = array->get(first); 1696 Object* tmp = array->get(first);
1685 fast_set(array, first, array->get(second)); 1697 fast_set(array, first, array->get(second));
1686 fast_set(array, second, tmp); 1698 fast_set(array, second, tmp);
1687 } 1699 }
1688 1700
1689 1701
1690 int DescriptorArray::Search(String* name) { 1702 int DescriptorArray::Search(String* name) {
1691 SLOW_ASSERT(IsSortedNoDuplicates()); 1703 SLOW_ASSERT(IsSortedNoDuplicates());
1692 1704
(...skipping 1267 matching lines...) Expand 10 before | Expand all | Expand 10 after
2960 { MaybeObject* maybe_obj = CopyDropTransitions(); 2972 { MaybeObject* maybe_obj = CopyDropTransitions();
2961 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 2973 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
2962 } 2974 }
2963 Map* new_map = Map::cast(obj); 2975 Map* new_map = Map::cast(obj);
2964 new_map->set_has_fast_elements(false); 2976 new_map->set_has_fast_elements(false);
2965 isolate()->counters()->map_fast_to_slow_elements()->Increment(); 2977 isolate()->counters()->map_fast_to_slow_elements()->Increment();
2966 return new_map; 2978 return new_map;
2967 } 2979 }
2968 2980
2969 2981
2970 ACCESSORS(Map, instance_descriptors, DescriptorArray, 2982 DescriptorArray* Map::instance_descriptors() {
2971 kInstanceDescriptorsOffset) 2983 Object* object = READ_FIELD(this,
Mads Ager (chromium) 2011/05/23 10:14:51 Doesn't this fit on one line? Ditto for the occurr
danno 2011/06/01 13:15:11 Done.
2984 kInstanceDescriptorsOrBitField3Offset);
2985 if (object->IsSmi()) {
2986 return HEAP->empty_descriptor_array();
2987 } else {
2988 return DescriptorArray::cast(object);
2989 }
2990 }
2991
2992
2993 void Map::init_instance_descriptors() {
2994 WRITE_FIELD(this,
2995 kInstanceDescriptorsOrBitField3Offset,
2996 0);
Mads Ager (chromium) 2011/05/23 10:14:51 Smi::FromInt(0) It is the same, but makes it expl
danno 2011/06/01 13:15:11 Done.
2997 }
2998
2999
3000 void Map::clear_instance_descriptors() {
3001 Object* object = READ_FIELD(this,
3002 kInstanceDescriptorsOrBitField3Offset);
3003 if (!object->IsSmi()) {
3004 WRITE_FIELD(
3005 this,
3006 kInstanceDescriptorsOrBitField3Offset,
3007 Smi::FromInt(DescriptorArray::cast(object)->bit_field3_storage()));
3008 }
3009 }
3010
3011
3012 void Map::set_instance_descriptors(DescriptorArray* value,
3013 WriteBarrierMode mode) {
3014 Object* object = READ_FIELD(this,
3015 kInstanceDescriptorsOrBitField3Offset);
3016 if (value == HEAP->empty_descriptor_array()) {
Mads Ager (chromium) 2011/05/23 10:14:51 You shouldn't have to go through thread local stor
danno 2011/06/01 13:15:11 Done.
3017 clear_instance_descriptors();
3018 return;
3019 } else {
3020 if (object->IsSmi()) {
3021 value->set_bit_field3_storage(Smi::cast(object)->value());
3022 } else {
3023 value->set_bit_field3_storage(
3024 DescriptorArray::cast(object)->bit_field3_storage());
3025 }
3026 }
3027 ASSERT(!is_shared());
3028 WRITE_FIELD(this, kInstanceDescriptorsOrBitField3Offset, value);
3029 CONDITIONAL_WRITE_BARRIER(GetHeap(),
3030 this,
3031 kInstanceDescriptorsOrBitField3Offset,
3032 mode);
3033 }
3034
3035
3036 int Map::bit_field3() {
3037 Object* object = READ_FIELD(this,
3038 kInstanceDescriptorsOrBitField3Offset);
3039 if (object->IsSmi()) {
3040 return Smi::cast(object)->value();
3041 } else {
3042 return DescriptorArray::cast(object)->bit_field3_storage();
3043 }
3044 }
3045
3046
3047 void Map::set_bit_field3(int value) {
3048 ASSERT((value & 0x80000000) == 0); // bit_field3 can only contain smis
Mads Ager (chromium) 2011/05/23 10:14:51 ASSERT(Smi::IsValid(value))
danno 2011/06/01 13:15:11 Done.
3049 Object* object = READ_FIELD(this,
3050 kInstanceDescriptorsOrBitField3Offset);
3051 if (object->IsSmi()) {
3052 WRITE_FIELD(this,
3053 kInstanceDescriptorsOrBitField3Offset,
3054 Smi::FromInt(value));
3055 } else {
3056 DescriptorArray::cast(object)->set_bit_field3_storage(value);
3057 }
3058 }
3059
3060
2972 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) 3061 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset)
2973 ACCESSORS(Map, prototype_transitions, FixedArray, kPrototypeTransitionsOffset) 3062 ACCESSORS(Map, prototype_transitions, FixedArray, kPrototypeTransitionsOffset)
2974 ACCESSORS(Map, constructor, Object, kConstructorOffset) 3063 ACCESSORS(Map, constructor, Object, kConstructorOffset)
2975 3064
2976 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) 3065 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset)
2977 ACCESSORS(JSFunction, literals, FixedArray, kLiteralsOffset) 3066 ACCESSORS(JSFunction, literals, FixedArray, kLiteralsOffset)
2978 ACCESSORS_GCSAFE(JSFunction, next_function_link, Object, 3067 ACCESSORS_GCSAFE(JSFunction, next_function_link, Object,
2979 kNextFunctionLinkOffset) 3068 kNextFunctionLinkOffset)
2980 3069
2981 ACCESSORS(GlobalObject, builtins, JSBuiltinsObject, kBuiltinsOffset) 3070 ACCESSORS(GlobalObject, builtins, JSBuiltinsObject, kBuiltinsOffset)
(...skipping 1246 matching lines...) Expand 10 before | Expand all | Expand 10 after
4228 #undef WRITE_INT_FIELD 4317 #undef WRITE_INT_FIELD
4229 #undef READ_SHORT_FIELD 4318 #undef READ_SHORT_FIELD
4230 #undef WRITE_SHORT_FIELD 4319 #undef WRITE_SHORT_FIELD
4231 #undef READ_BYTE_FIELD 4320 #undef READ_BYTE_FIELD
4232 #undef WRITE_BYTE_FIELD 4321 #undef WRITE_BYTE_FIELD
4233 4322
4234 4323
4235 } } // namespace v8::internal 4324 } } // namespace v8::internal
4236 4325
4237 #endif // V8_OBJECTS_INL_H_ 4326 #endif // V8_OBJECTS_INL_H_
OLDNEW
« src/objects.h ('K') | « src/objects-debug.cc ('k') | src/profile-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698