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

Side by Side Diff: src/objects.h

Issue 22601003: Out-of-line constant pool on Arm: Stage 2 - Introduce ConstantPoolArray object. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Enable pointers to be stored in ConstantPoolArray and add tests Created 7 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/heap-inl.h ('k') | src/objects.cc » ('j') | src/objects-inl.h » ('J')
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 // 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 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 V(ALLOCATION_SITE_TYPE) \ 398 V(ALLOCATION_SITE_TYPE) \
399 V(SCRIPT_TYPE) \ 399 V(SCRIPT_TYPE) \
400 V(CODE_CACHE_TYPE) \ 400 V(CODE_CACHE_TYPE) \
401 V(POLYMORPHIC_CODE_CACHE_TYPE) \ 401 V(POLYMORPHIC_CODE_CACHE_TYPE) \
402 V(TYPE_FEEDBACK_INFO_TYPE) \ 402 V(TYPE_FEEDBACK_INFO_TYPE) \
403 V(ALIASED_ARGUMENTS_ENTRY_TYPE) \ 403 V(ALIASED_ARGUMENTS_ENTRY_TYPE) \
404 V(BOX_TYPE) \ 404 V(BOX_TYPE) \
405 \ 405 \
406 V(FIXED_ARRAY_TYPE) \ 406 V(FIXED_ARRAY_TYPE) \
407 V(FIXED_DOUBLE_ARRAY_TYPE) \ 407 V(FIXED_DOUBLE_ARRAY_TYPE) \
408 V(CONSTANT_POOL_ARRAY_TYPE) \
408 V(SHARED_FUNCTION_INFO_TYPE) \ 409 V(SHARED_FUNCTION_INFO_TYPE) \
409 \ 410 \
410 V(JS_MESSAGE_OBJECT_TYPE) \ 411 V(JS_MESSAGE_OBJECT_TYPE) \
411 \ 412 \
412 V(JS_VALUE_TYPE) \ 413 V(JS_VALUE_TYPE) \
413 V(JS_DATE_TYPE) \ 414 V(JS_DATE_TYPE) \
414 V(JS_OBJECT_TYPE) \ 415 V(JS_OBJECT_TYPE) \
415 V(JS_CONTEXT_EXTENSION_OBJECT_TYPE) \ 416 V(JS_CONTEXT_EXTENSION_OBJECT_TYPE) \
416 V(JS_GENERATOR_OBJECT_TYPE) \ 417 V(JS_GENERATOR_OBJECT_TYPE) \
417 V(JS_MODULE_TYPE) \ 418 V(JS_MODULE_TYPE) \
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 EXTERNAL_BYTE_ARRAY_TYPE, // FIRST_EXTERNAL_ARRAY_TYPE 719 EXTERNAL_BYTE_ARRAY_TYPE, // FIRST_EXTERNAL_ARRAY_TYPE
719 EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE, 720 EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE,
720 EXTERNAL_SHORT_ARRAY_TYPE, 721 EXTERNAL_SHORT_ARRAY_TYPE,
721 EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE, 722 EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE,
722 EXTERNAL_INT_ARRAY_TYPE, 723 EXTERNAL_INT_ARRAY_TYPE,
723 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE, 724 EXTERNAL_UNSIGNED_INT_ARRAY_TYPE,
724 EXTERNAL_FLOAT_ARRAY_TYPE, 725 EXTERNAL_FLOAT_ARRAY_TYPE,
725 EXTERNAL_DOUBLE_ARRAY_TYPE, 726 EXTERNAL_DOUBLE_ARRAY_TYPE,
726 EXTERNAL_PIXEL_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE 727 EXTERNAL_PIXEL_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE
727 FIXED_DOUBLE_ARRAY_TYPE, 728 FIXED_DOUBLE_ARRAY_TYPE,
729 CONSTANT_POOL_ARRAY_TYPE,
728 FILLER_TYPE, // LAST_DATA_TYPE 730 FILLER_TYPE, // LAST_DATA_TYPE
729 731
730 // Structs. 732 // Structs.
731 DECLARED_ACCESSOR_DESCRIPTOR_TYPE, 733 DECLARED_ACCESSOR_DESCRIPTOR_TYPE,
732 DECLARED_ACCESSOR_INFO_TYPE, 734 DECLARED_ACCESSOR_INFO_TYPE,
733 EXECUTABLE_ACCESSOR_INFO_TYPE, 735 EXECUTABLE_ACCESSOR_INFO_TYPE,
734 ACCESSOR_PAIR_TYPE, 736 ACCESSOR_PAIR_TYPE,
735 ACCESS_CHECK_INFO_TYPE, 737 ACCESS_CHECK_INFO_TYPE,
736 INTERCEPTOR_INFO_TYPE, 738 INTERCEPTOR_INFO_TYPE,
737 CALL_HANDLER_INFO_TYPE, 739 CALL_HANDLER_INFO_TYPE,
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 V(JSModule) \ 1005 V(JSModule) \
1004 V(Map) \ 1006 V(Map) \
1005 V(DescriptorArray) \ 1007 V(DescriptorArray) \
1006 V(TransitionArray) \ 1008 V(TransitionArray) \
1007 V(DeoptimizationInputData) \ 1009 V(DeoptimizationInputData) \
1008 V(DeoptimizationOutputData) \ 1010 V(DeoptimizationOutputData) \
1009 V(DependentCode) \ 1011 V(DependentCode) \
1010 V(TypeFeedbackCells) \ 1012 V(TypeFeedbackCells) \
1011 V(FixedArray) \ 1013 V(FixedArray) \
1012 V(FixedDoubleArray) \ 1014 V(FixedDoubleArray) \
1015 V(ConstantPoolArray) \
1013 V(Context) \ 1016 V(Context) \
1014 V(NativeContext) \ 1017 V(NativeContext) \
1015 V(ScopeInfo) \ 1018 V(ScopeInfo) \
1016 V(JSFunction) \ 1019 V(JSFunction) \
1017 V(Code) \ 1020 V(Code) \
1018 V(Oddball) \ 1021 V(Oddball) \
1019 V(SharedFunctionInfo) \ 1022 V(SharedFunctionInfo) \
1020 V(JSValue) \ 1023 V(JSValue) \
1021 V(JSDate) \ 1024 V(JSDate) \
1022 V(JSMessageObject) \ 1025 V(JSMessageObject) \
(...skipping 1991 matching lines...) Expand 10 before | Expand all | Expand 10 after
3014 3017
3015 // Dispatched behavior. 3018 // Dispatched behavior.
3016 DECLARE_PRINTER(FixedDoubleArray) 3019 DECLARE_PRINTER(FixedDoubleArray)
3017 DECLARE_VERIFIER(FixedDoubleArray) 3020 DECLARE_VERIFIER(FixedDoubleArray)
3018 3021
3019 private: 3022 private:
3020 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray); 3023 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray);
3021 }; 3024 };
3022 3025
3023 3026
3027 // ConstantPoolArray describes fixed-sized arrays constant pool entires.
ulan 2013/09/27 12:39:10 Did you mean: fixed-sized arrays _with_ constant p
rmcilroy 2013/10/01 11:21:52 Done.
3028 // The format of the pool is:
3029 // [0]: Field holding the first index which is a pointer entry
3030 // [1]: Field holding the first index which is a int32 entry
3031 // [2] ... [first_ptr_index() - 1]: 64 bit entries
3032 // [first_ptr_index()] ... [first_int32_index() - 1]: pointer entries
3033 // [first_int32_index()] ... [length]: 32 bit entries
ulan 2013/09/27 12:39:10 [length-1] ?
rmcilroy 2013/10/01 11:21:52 Done.
3034 class ConstantPoolArray: public FixedArrayBase {
3035 public:
3036 // Getters for the field storing the first index for different type entries.
3037 inline int first_ptr_index();
3038 inline int first_int64_index();
3039 inline int first_int32_index();
3040
3041 // Getters for counts of different type entries.
3042 inline int count_of_ptr_entries();
3043 inline int count_of_int64_entries();
3044 inline int count_of_int32_entries();
3045
3046 // Setter and getter for pool elements.
3047 inline Object* get_ptr_entry(int index);
3048 inline int64_t get_int64_entry(int index);
3049 inline int32_t get_int32_entry(int index);
3050 inline double get_int64_entry_as_double(int index);
3051
3052 MUST_USE_RESULT inline MaybeObject* get(int index);
3053
3054 inline void set(int index, Object* value);
3055 inline void set(int index, int64_t value);
3056 inline void set(int index, double value);
3057 inline void set(int index, int32_t value);
3058
3059 // Set up initial state.
3060 inline void SetEntryCounts(int number_of_int64_entries,
3061 int number_of_ptr_entries,
3062 int number_of_int32_entries);
3063
3064 // Copy operations
3065 MUST_USE_RESULT inline MaybeObject* Copy();
3066
3067 // Garbage collection support.
3068 inline static int SizeFor(int number_of_int64_entries,
3069 int number_of_ptr_entries,
3070 int number_of_int32_entries) {
3071 return RoundUp(OffsetAt(number_of_int64_entries,
3072 number_of_ptr_entries,
3073 number_of_int32_entries),
3074 kPointerSize);
3075 }
3076
3077 // Code Generation support.
3078 inline int OffsetOfElementAt(int index) {
3079 ASSERT(index < length());
3080 if (index >= first_int32_index()) {
3081 return OffsetAt(count_of_int64_entries(), count_of_ptr_entries(),
3082 index - first_int32_index());
3083 } else if (index >= first_ptr_index()) {
3084 return OffsetAt(count_of_int64_entries(), index - first_ptr_index(), 0);
3085 } else {
3086 return OffsetAt(index, 0, 0);
3087 }
3088 }
3089
3090 // Casting.
3091 static inline ConstantPoolArray* cast(Object* obj);
3092
3093 // Layout description.
3094 static const int kFirstPointerIndexOffset = FixedArray::kHeaderSize;
3095 static const int kFirstInt32IndexOffset =
3096 kFirstPointerIndexOffset + kPointerSize;
3097 static const int kFirstOffset = kFirstInt32IndexOffset + kPointerSize;
3098
3099 // Dispatched behavior.
3100 inline void ConstantPoolIterateBody(ObjectVisitor* v);
3101
3102 DECLARE_PRINTER(ConstantPoolArray)
3103 DECLARE_VERIFIER(ConstantPoolArray)
3104
3105 private:
3106 inline void set_first_ptr_index(int value);
3107 inline void set_first_int32_index(int value);
3108
3109 inline static int OffsetAt(int number_of_int64_entries,
3110 int number_of_ptr_entries,
3111 int number_of_int32_entries) {
3112 return kFirstOffset
3113 + (number_of_int64_entries * kInt64Size)
3114 + (number_of_ptr_entries * kPointerSize)
3115 + (number_of_int32_entries * kInt32Size);
3116 }
3117
3118 DISALLOW_IMPLICIT_CONSTRUCTORS(ConstantPoolArray);
3119 };
3120
3121
3024 // DescriptorArrays are fixed arrays used to hold instance descriptors. 3122 // DescriptorArrays are fixed arrays used to hold instance descriptors.
3025 // The format of the these objects is: 3123 // The format of the these objects is:
3026 // [0]: Number of descriptors 3124 // [0]: Number of descriptors
3027 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: 3125 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array:
3028 // [0]: pointer to fixed array with enum cache 3126 // [0]: pointer to fixed array with enum cache
3029 // [1]: either Smi(0) or pointer to fixed array with indices 3127 // [1]: either Smi(0) or pointer to fixed array with indices
3030 // [2]: first key 3128 // [2]: first key
3031 // [2 + number of descriptors * kDescriptorSize]: start of slack 3129 // [2 + number of descriptors * kDescriptorSize]: start of slack
3032 class DescriptorArray: public FixedArray { 3130 class DescriptorArray: public FixedArray {
3033 public: 3131 public:
(...skipping 7199 matching lines...) Expand 10 before | Expand all | Expand 10 after
10233 } else { 10331 } else {
10234 value &= ~(1 << bit_position); 10332 value &= ~(1 << bit_position);
10235 } 10333 }
10236 return value; 10334 return value;
10237 } 10335 }
10238 }; 10336 };
10239 10337
10240 } } // namespace v8::internal 10338 } } // namespace v8::internal
10241 10339
10242 #endif // V8_OBJECTS_H_ 10340 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/heap-inl.h ('k') | src/objects.cc » ('j') | src/objects-inl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698