| OLD | NEW | 
|     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  Loading... | 
|   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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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_ | 
| OLD | NEW |