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

Side by Side Diff: src/objects.h

Issue 504026: Extend the maximum size map space... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years 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/mark-compact.cc ('k') | src/objects-inl.h » ('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-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 // mark an object as live and/or overflowed: 885 // mark an object as live and/or overflowed:
886 // last bit = 0, marked as alive 886 // last bit = 0, marked as alive
887 // second bit = 1, overflowed 887 // second bit = 1, overflowed
888 // An object is only marked as overflowed when it is marked as live while 888 // An object is only marked as overflowed when it is marked as live while
889 // the marking stack is overflowed. 889 // the marking stack is overflowed.
890 static const int kMarkingBit = 0; // marking bit 890 static const int kMarkingBit = 0; // marking bit
891 static const int kMarkingMask = (1 << kMarkingBit); // marking mask 891 static const int kMarkingMask = (1 << kMarkingBit); // marking mask
892 static const int kOverflowBit = 1; // overflow bit 892 static const int kOverflowBit = 1; // overflow bit
893 static const int kOverflowMask = (1 << kOverflowBit); // overflow mask 893 static const int kOverflowMask = (1 << kOverflowBit); // overflow mask
894 894
895 // Forwarding pointers and map pointer encoding 895 // Forwarding pointers and map pointer encoding. On 32 bit all the bits are
896 // 31 21 20 10 9 0 896 // used.
897 // +-----------------+------------------+-----------------+ 897 // +-----------------+------------------+-----------------+
898 // |forwarding offset|page offset of map|page index of map| 898 // |forwarding offset|page offset of map|page index of map|
899 // +-----------------+------------------+-----------------+ 899 // +-----------------+------------------+-----------------+
900 // 11 bits 11 bits 10 bits 900 // ^ ^ ^
901 static const int kMapPageIndexBits = 10; 901 // | | |
902 static const int kMapPageOffsetBits = 11; 902 // | | kMapPageIndexBits
903 static const int kForwardingOffsetBits = 11; 903 // | kMapPageOffsetBits
904 // kForwardingOffsetBits
905 static const int kMapPageOffsetBits = kPageSizeBits - kMapAlignmentBits;
906 static const int kForwardingOffsetBits = kPageSizeBits - kObjectAlignmentBits;
907 #ifdef V8_HOST_ARCH_64_BIT
908 static const int kMapPageIndexBits = 16;
909 #else
910 // Use all the 32-bits to encode on a 32-bit platform.
911 static const int kMapPageIndexBits =
912 32 - (kMapPageOffsetBits + kForwardingOffsetBits);
913 #endif
904 914
905 static const int kMapPageIndexShift = 0; 915 static const int kMapPageIndexShift = 0;
906 static const int kMapPageOffsetShift = 916 static const int kMapPageOffsetShift =
907 kMapPageIndexShift + kMapPageIndexBits; 917 kMapPageIndexShift + kMapPageIndexBits;
908 static const int kForwardingOffsetShift = 918 static const int kForwardingOffsetShift =
909 kMapPageOffsetShift + kMapPageOffsetBits; 919 kMapPageOffsetShift + kMapPageOffsetBits;
910 920
911 // 0x000003FF 921 // Bit masks covering the different parts the encoding.
912 static const uint32_t kMapPageIndexMask = 922 static const uintptr_t kMapPageIndexMask =
913 (1 << kMapPageOffsetShift) - 1; 923 (1 << kMapPageOffsetShift) - 1;
914 924 static const uintptr_t kMapPageOffsetMask =
915 // 0x001FFC00
916 static const uint32_t kMapPageOffsetMask =
917 ((1 << kForwardingOffsetShift) - 1) & ~kMapPageIndexMask; 925 ((1 << kForwardingOffsetShift) - 1) & ~kMapPageIndexMask;
918 926 static const uintptr_t kForwardingOffsetMask =
919 // 0xFFE00000
920 static const uint32_t kForwardingOffsetMask =
921 ~(kMapPageIndexMask | kMapPageOffsetMask); 927 ~(kMapPageIndexMask | kMapPageOffsetMask);
922 928
923 private: 929 private:
924 // HeapObject calls the private constructor and directly reads the value. 930 // HeapObject calls the private constructor and directly reads the value.
925 friend class HeapObject; 931 friend class HeapObject;
926 932
927 explicit MapWord(uintptr_t value) : value_(value) {} 933 explicit MapWord(uintptr_t value) : value_(value) {}
928 934
929 uintptr_t value_; 935 uintptr_t value_;
930 }; 936 };
(...skipping 1900 matching lines...) Expand 10 before | Expand all | Expand 10 after
2831 2837
2832 // [constructor]: points back to the function responsible for this map. 2838 // [constructor]: points back to the function responsible for this map.
2833 DECL_ACCESSORS(constructor, Object) 2839 DECL_ACCESSORS(constructor, Object)
2834 2840
2835 // [instance descriptors]: describes the object. 2841 // [instance descriptors]: describes the object.
2836 DECL_ACCESSORS(instance_descriptors, DescriptorArray) 2842 DECL_ACCESSORS(instance_descriptors, DescriptorArray)
2837 2843
2838 // [stub cache]: contains stubs compiled for this map. 2844 // [stub cache]: contains stubs compiled for this map.
2839 DECL_ACCESSORS(code_cache, FixedArray) 2845 DECL_ACCESSORS(code_cache, FixedArray)
2840 2846
2841 // Returns a copy of the map.
2842 Object* CopyDropDescriptors(); 2847 Object* CopyDropDescriptors();
2843 2848
2844 // Returns a copy of the map, with all transitions dropped from the 2849 // Returns a copy of the map, with all transitions dropped from the
2845 // instance descriptors. 2850 // instance descriptors.
2846 Object* CopyDropTransitions(); 2851 Object* CopyDropTransitions();
2847 2852
2848 // Returns the property index for name (only valid for FAST MODE). 2853 // Returns the property index for name (only valid for FAST MODE).
2849 int PropertyIndexFor(String* name); 2854 int PropertyIndexFor(String* name);
2850 2855
2851 // Returns the next free property index (only valid for FAST MODE). 2856 // Returns the next free property index (only valid for FAST MODE).
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2899 static const int kMaxPreAllocatedPropertyFields = 255; 2904 static const int kMaxPreAllocatedPropertyFields = 255;
2900 2905
2901 // Layout description. 2906 // Layout description.
2902 static const int kInstanceSizesOffset = HeapObject::kHeaderSize; 2907 static const int kInstanceSizesOffset = HeapObject::kHeaderSize;
2903 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize; 2908 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize;
2904 static const int kPrototypeOffset = kInstanceAttributesOffset + kIntSize; 2909 static const int kPrototypeOffset = kInstanceAttributesOffset + kIntSize;
2905 static const int kConstructorOffset = kPrototypeOffset + kPointerSize; 2910 static const int kConstructorOffset = kPrototypeOffset + kPointerSize;
2906 static const int kInstanceDescriptorsOffset = 2911 static const int kInstanceDescriptorsOffset =
2907 kConstructorOffset + kPointerSize; 2912 kConstructorOffset + kPointerSize;
2908 static const int kCodeCacheOffset = kInstanceDescriptorsOffset + kPointerSize; 2913 static const int kCodeCacheOffset = kInstanceDescriptorsOffset + kPointerSize;
2909 static const int kSize = kCodeCacheOffset + kPointerSize; 2914 static const int kPadStart = kCodeCacheOffset + kPointerSize;
2915 static const int kSize = MAP_SIZE_ALIGN(kPadStart);
2910 2916
2911 // Byte offsets within kInstanceSizesOffset. 2917 // Byte offsets within kInstanceSizesOffset.
2912 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; 2918 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0;
2913 static const int kInObjectPropertiesByte = 1; 2919 static const int kInObjectPropertiesByte = 1;
2914 static const int kInObjectPropertiesOffset = 2920 static const int kInObjectPropertiesOffset =
2915 kInstanceSizesOffset + kInObjectPropertiesByte; 2921 kInstanceSizesOffset + kInObjectPropertiesByte;
2916 static const int kPreAllocatedPropertyFieldsByte = 2; 2922 static const int kPreAllocatedPropertyFieldsByte = 2;
2917 static const int kPreAllocatedPropertyFieldsOffset = 2923 static const int kPreAllocatedPropertyFieldsOffset =
2918 kInstanceSizesOffset + kPreAllocatedPropertyFieldsByte; 2924 kInstanceSizesOffset + kPreAllocatedPropertyFieldsByte;
2919 // The byte at position 3 is not in use at the moment. 2925 // The byte at position 3 is not in use at the moment.
(...skipping 1943 matching lines...) Expand 10 before | Expand all | Expand 10 after
4863 } else { 4869 } else {
4864 value &= ~(1 << bit_position); 4870 value &= ~(1 << bit_position);
4865 } 4871 }
4866 return value; 4872 return value;
4867 } 4873 }
4868 }; 4874 };
4869 4875
4870 } } // namespace v8::internal 4876 } } // namespace v8::internal
4871 4877
4872 #endif // V8_OBJECTS_H_ 4878 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mark-compact.cc ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698