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

Side by Side Diff: src/objects.h

Issue 137403009: Adding a type vector to replace type cells. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: PORTS. Created 6 years, 10 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 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 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 V(JSObject) \ 1031 V(JSObject) \
1032 V(JSContextExtensionObject) \ 1032 V(JSContextExtensionObject) \
1033 V(JSGeneratorObject) \ 1033 V(JSGeneratorObject) \
1034 V(JSModule) \ 1034 V(JSModule) \
1035 V(Map) \ 1035 V(Map) \
1036 V(DescriptorArray) \ 1036 V(DescriptorArray) \
1037 V(TransitionArray) \ 1037 V(TransitionArray) \
1038 V(DeoptimizationInputData) \ 1038 V(DeoptimizationInputData) \
1039 V(DeoptimizationOutputData) \ 1039 V(DeoptimizationOutputData) \
1040 V(DependentCode) \ 1040 V(DependentCode) \
1041 V(TypeFeedbackCells) \
1042 V(FixedArray) \ 1041 V(FixedArray) \
1043 V(FixedDoubleArray) \ 1042 V(FixedDoubleArray) \
1044 V(ConstantPoolArray) \ 1043 V(ConstantPoolArray) \
1045 V(Context) \ 1044 V(Context) \
1046 V(NativeContext) \ 1045 V(NativeContext) \
1047 V(ScopeInfo) \ 1046 V(ScopeInfo) \
1048 V(JSFunction) \ 1047 V(JSFunction) \
1049 V(Code) \ 1048 V(Code) \
1050 V(Oddball) \ 1049 V(Oddball) \
1051 V(SharedFunctionInfo) \ 1050 V(SharedFunctionInfo) \
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 V(kDoPushArgumentNotImplementedForDoubleType, \ 1141 V(kDoPushArgumentNotImplementedForDoubleType, \
1143 "DoPushArgument not implemented for double type") \ 1142 "DoPushArgument not implemented for double type") \
1144 V(kEmitLoadRegisterUnsupportedDoubleImmediate, \ 1143 V(kEmitLoadRegisterUnsupportedDoubleImmediate, \
1145 "EmitLoadRegister: Unsupported double immediate") \ 1144 "EmitLoadRegister: Unsupported double immediate") \
1146 V(kEval, "eval") \ 1145 V(kEval, "eval") \
1147 V(kExpected0AsASmiSentinel, "Expected 0 as a Smi sentinel") \ 1146 V(kExpected0AsASmiSentinel, "Expected 0 as a Smi sentinel") \
1148 V(kExpectedAlignmentMarker, "expected alignment marker") \ 1147 V(kExpectedAlignmentMarker, "expected alignment marker") \
1149 V(kExpectedAllocationSite, "expected allocation site") \ 1148 V(kExpectedAllocationSite, "expected allocation site") \
1150 V(kExpectedPropertyCellInRegisterA2, \ 1149 V(kExpectedPropertyCellInRegisterA2, \
1151 "Expected property cell in register a2") \ 1150 "Expected property cell in register a2") \
1152 V(kExpectedPropertyCellInRegisterEbx, \ 1151 V(kExpectedFixedArrayInRegisterEbx, \
1153 "Expected property cell in register ebx") \ 1152 "Expected fixed array in register ebx") \
1154 V(kExpectedPropertyCellInRegisterRbx, \ 1153 V(kExpectedFixedArrayInRegisterR2, \
1155 "Expected property cell in register rbx") \ 1154 "Expected fixed array in register r2") \
1155 V(kExpectedFixedArrayInRegisterRbx, \
1156 "Expected fixed array in register rbx") \
1156 V(kExpectingAlignmentForCopyBytes, \ 1157 V(kExpectingAlignmentForCopyBytes, \
1157 "Expecting alignment for CopyBytes") \ 1158 "Expecting alignment for CopyBytes") \
1158 V(kExportDeclaration, "Export declaration") \ 1159 V(kExportDeclaration, "Export declaration") \
1159 V(kExternalStringExpectedButNotFound, \ 1160 V(kExternalStringExpectedButNotFound, \
1160 "External string expected, but not found") \ 1161 "External string expected, but not found") \
1161 V(kFailedBailedOutLastTime, "Failed/bailed out last time") \ 1162 V(kFailedBailedOutLastTime, "Failed/bailed out last time") \
1162 V(kForInStatementIsNotFastCase, "ForInStatement is not fast case") \ 1163 V(kForInStatementIsNotFastCase, "ForInStatement is not fast case") \
1163 V(kForInStatementOptimizationIsDisabled, \ 1164 V(kForInStatementOptimizationIsDisabled, \
1164 "ForInStatement optimization is disabled") \ 1165 "ForInStatement optimization is disabled") \
1165 V(kForInStatementWithNonLocalEachVariable, \ 1166 V(kForInStatementWithNonLocalEachVariable, \
(...skipping 3894 matching lines...) Expand 10 before | Expand all | Expand 10 after
5060 5061
5061 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER) 5062 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
5062 void DeoptimizationOutputDataPrint(FILE* out); 5063 void DeoptimizationOutputDataPrint(FILE* out);
5063 #endif 5064 #endif
5064 }; 5065 };
5065 5066
5066 5067
5067 // Forward declaration. 5068 // Forward declaration.
5068 class Cell; 5069 class Cell;
5069 class PropertyCell; 5070 class PropertyCell;
5070
5071 // TypeFeedbackCells is a fixed array used to hold the association between
5072 // cache cells and AST ids for code generated by the full compiler.
5073 // The format of the these objects is
5074 // [i * 2]: Global property cell of ith cache cell.
5075 // [i * 2 + 1]: Ast ID for ith cache cell.
5076 class TypeFeedbackCells: public FixedArray {
5077 public:
5078 int CellCount() { return length() / 2; }
5079 static int LengthOfFixedArray(int cell_count) { return cell_count * 2; }
5080
5081 // Accessors for AST ids associated with cache values.
5082 inline TypeFeedbackId AstId(int index);
5083 inline void SetAstId(int index, TypeFeedbackId id);
5084
5085 // Accessors for global property cells holding the cache values.
5086 inline Cell* GetCell(int index);
5087 inline void SetCell(int index, Cell* cell);
5088
5089 // The object that indicates an uninitialized cache.
5090 static inline Handle<Object> UninitializedSentinel(Isolate* isolate);
5091
5092 // The object that indicates a megamorphic state.
5093 static inline Handle<Object> MegamorphicSentinel(Isolate* isolate);
5094
5095 // The object that indicates a monomorphic state of Array with
5096 // ElementsKind
5097 static inline Handle<Object> MonomorphicArraySentinel(Isolate* isolate,
5098 ElementsKind elements_kind);
5099
5100 // A raw version of the uninitialized sentinel that's safe to read during
5101 // garbage collection (e.g., for patching the cache).
5102 static inline Object* RawUninitializedSentinel(Heap* heap);
5103
5104 // Casting.
5105 static inline TypeFeedbackCells* cast(Object* obj);
5106
5107 static const int kForInFastCaseMarker = 0;
5108 static const int kForInSlowCaseMarker = 1;
5109 };
5110
5111
5112 // Forward declaration.
5113 class SafepointEntry; 5071 class SafepointEntry;
5114 class TypeFeedbackInfo; 5072 class TypeFeedbackInfo;
5115 5073
5116 // Code describes objects with on-the-fly generated machine code. 5074 // Code describes objects with on-the-fly generated machine code.
5117 class Code: public HeapObject { 5075 class Code: public HeapObject {
5118 public: 5076 public:
5119 // Opaque data type for encapsulating code flags like kind, inline 5077 // Opaque data type for encapsulating code flags like kind, inline
5120 // cache state, and arguments count. 5078 // cache state, and arguments count.
5121 typedef uint32_t Flags; 5079 typedef uint32_t Flags;
5122 5080
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
5472 5430
5473 template<typename StaticVisitor> 5431 template<typename StaticVisitor>
5474 inline void CodeIterateBody(Heap* heap); 5432 inline void CodeIterateBody(Heap* heap);
5475 5433
5476 DECLARE_PRINTER(Code) 5434 DECLARE_PRINTER(Code)
5477 DECLARE_VERIFIER(Code) 5435 DECLARE_VERIFIER(Code)
5478 5436
5479 void ClearInlineCaches(); 5437 void ClearInlineCaches();
5480 void ClearInlineCaches(Kind kind); 5438 void ClearInlineCaches(Kind kind);
5481 5439
5482 void ClearTypeFeedbackCells(Heap* heap); 5440 void ClearTypeFeedbackInfo(Heap* heap);
5483 5441
5484 BailoutId TranslatePcOffsetToAstId(uint32_t pc_offset); 5442 BailoutId TranslatePcOffsetToAstId(uint32_t pc_offset);
5485 uint32_t TranslateAstIdToPcOffset(BailoutId ast_id); 5443 uint32_t TranslateAstIdToPcOffset(BailoutId ast_id);
5486 5444
5487 #define DECLARE_CODE_AGE_ENUM(X) k##X##CodeAge, 5445 #define DECLARE_CODE_AGE_ENUM(X) k##X##CodeAge,
5488 enum Age { 5446 enum Age {
5489 kNotExecutedCodeAge = -2, 5447 kNotExecutedCodeAge = -2,
5490 kExecutedOnceCodeAge = -1, 5448 kExecutedOnceCodeAge = -1,
5491 kNoAgeCodeAge = 0, 5449 kNoAgeCodeAge = 0,
5492 CODE_AGE_LIST(DECLARE_CODE_AGE_ENUM) 5450 CODE_AGE_LIST(DECLARE_CODE_AGE_ENUM)
(...skipping 2692 matching lines...) Expand 10 before | Expand all | Expand 10 after
8185 inline void change_ic_with_type_info_count(int count); 8143 inline void change_ic_with_type_info_count(int count);
8186 8144
8187 inline void initialize_storage(); 8145 inline void initialize_storage();
8188 8146
8189 inline void change_own_type_change_checksum(); 8147 inline void change_own_type_change_checksum();
8190 inline int own_type_change_checksum(); 8148 inline int own_type_change_checksum();
8191 8149
8192 inline void set_inlined_type_change_checksum(int checksum); 8150 inline void set_inlined_type_change_checksum(int checksum);
8193 inline bool matches_inlined_type_change_checksum(int checksum); 8151 inline bool matches_inlined_type_change_checksum(int checksum);
8194 8152
8195 DECL_ACCESSORS(type_feedback_cells, TypeFeedbackCells) 8153 DECL_ACCESSORS(feedback_vector, FixedArray)
8196 8154
8197 static inline TypeFeedbackInfo* cast(Object* obj); 8155 static inline TypeFeedbackInfo* cast(Object* obj);
8198 8156
8199 // Dispatched behavior. 8157 // Dispatched behavior.
8200 DECLARE_PRINTER(TypeFeedbackInfo) 8158 DECLARE_PRINTER(TypeFeedbackInfo)
8201 DECLARE_VERIFIER(TypeFeedbackInfo) 8159 DECLARE_VERIFIER(TypeFeedbackInfo)
8202 8160
8203 static const int kStorage1Offset = HeapObject::kHeaderSize; 8161 static const int kStorage1Offset = HeapObject::kHeaderSize;
8204 static const int kStorage2Offset = kStorage1Offset + kPointerSize; 8162 static const int kStorage2Offset = kStorage1Offset + kPointerSize;
8205 static const int kTypeFeedbackCellsOffset = kStorage2Offset + kPointerSize; 8163 static const int kFeedbackVectorOffset =
8206 static const int kSize = kTypeFeedbackCellsOffset + kPointerSize; 8164 kStorage2Offset + kPointerSize;
8165 static const int kSize = kFeedbackVectorOffset + kPointerSize;
8166
8167 // The object that indicates an uninitialized cache.
8168 static inline Handle<Object> UninitializedSentinel(Isolate* isolate);
8169
8170 // The object that indicates a megamorphic state.
8171 static inline Handle<Object> MegamorphicSentinel(Isolate* isolate);
8172
8173 // The object that indicates a monomorphic state of Array with
8174 // ElementsKind
8175 static inline Handle<Object> MonomorphicArraySentinel(Isolate* isolate,
8176 ElementsKind elements_kind);
8177
8178 // A raw version of the uninitialized sentinel that's safe to read during
8179 // garbage collection (e.g., for patching the cache).
8180 static inline Object* RawUninitializedSentinel(Heap* heap);
8181
8182 static const int kForInFastCaseMarker = 0;
8183 static const int kForInSlowCaseMarker = 1;
8207 8184
8208 private: 8185 private:
8209 static const int kTypeChangeChecksumBits = 7; 8186 static const int kTypeChangeChecksumBits = 7;
8210 8187
8211 class ICTotalCountField: public BitField<int, 0, 8188 class ICTotalCountField: public BitField<int, 0,
8212 kSmiValueSize - kTypeChangeChecksumBits> {}; // NOLINT 8189 kSmiValueSize - kTypeChangeChecksumBits> {}; // NOLINT
8213 class OwnTypeChangeChecksum: public BitField<int, 8190 class OwnTypeChangeChecksum: public BitField<int,
8214 kSmiValueSize - kTypeChangeChecksumBits, 8191 kSmiValueSize - kTypeChangeChecksumBits,
8215 kTypeChangeChecksumBits> {}; // NOLINT 8192 kTypeChangeChecksumBits> {}; // NOLINT
8216 class ICsWithTypeInfoCountField: public BitField<int, 0, 8193 class ICsWithTypeInfoCountField: public BitField<int, 0,
(...skipping 2550 matching lines...) Expand 10 before | Expand all | Expand 10 after
10767 } else { 10744 } else {
10768 value &= ~(1 << bit_position); 10745 value &= ~(1 << bit_position);
10769 } 10746 }
10770 return value; 10747 return value;
10771 } 10748 }
10772 }; 10749 };
10773 10750
10774 } } // namespace v8::internal 10751 } } // namespace v8::internal
10775 10752
10776 #endif // V8_OBJECTS_H_ 10753 #endif // V8_OBJECTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698