Make the code flushing candidate field explicit in code objects.
This way it is counted and the rounding of the size will just work without extra tweaking if you want to add an extra field to code objects. R=vegorov@chromium.org BUG= TEST= Review URL: http://codereview.chromium.org/6969037 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7872 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
bc52ed0850
commit
89278730bb
@ -2799,6 +2799,7 @@ MaybeObject* Heap::CreateCode(const CodeDesc& desc,
|
||||
code->set_check_type(RECEIVER_MAP_CHECK);
|
||||
}
|
||||
code->set_deoptimization_data(empty_fixed_array());
|
||||
code->set_next_code_flushing_candidate(undefined_value());
|
||||
// Allow self references to created code object by patching the handle to
|
||||
// point to the newly allocated Code object.
|
||||
if (!self_reference.is_null()) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Copyright 2006-2008 the V8 project authors. All rights reserved.
|
||||
// Copyright 2011 the V8 project authors. All rights reserved.
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
@ -305,13 +305,11 @@ class CodeFlusher {
|
||||
*GetNextCandidateField(candidate) = next_candidate;
|
||||
}
|
||||
|
||||
STATIC_ASSERT(kPointerSize <= Code::kHeaderSize - Code::kHeaderPaddingStart);
|
||||
|
||||
static SharedFunctionInfo** GetNextCandidateField(
|
||||
SharedFunctionInfo* candidate) {
|
||||
Code* code = candidate->unchecked_code();
|
||||
return reinterpret_cast<SharedFunctionInfo**>(
|
||||
code->address() + Code::kHeaderPaddingStart);
|
||||
code->address() + Code::kNextCodeFlushingCandidateOffset);
|
||||
}
|
||||
|
||||
static SharedFunctionInfo* GetNextCandidate(SharedFunctionInfo* candidate) {
|
||||
|
@ -3548,6 +3548,8 @@ JSMessageObject* JSMessageObject::cast(Object* obj) {
|
||||
INT_ACCESSORS(Code, instruction_size, kInstructionSizeOffset)
|
||||
ACCESSORS(Code, relocation_info, ByteArray, kRelocationInfoOffset)
|
||||
ACCESSORS(Code, deoptimization_data, FixedArray, kDeoptimizationDataOffset)
|
||||
ACCESSORS(Code, next_code_flushing_candidate,
|
||||
Object, kNextCodeFlushingCandidateOffset)
|
||||
|
||||
|
||||
byte* Code::instruction_start() {
|
||||
|
@ -3317,6 +3317,12 @@ class Code: public HeapObject {
|
||||
// [deoptimization_data]: Array containing data for deopt.
|
||||
DECL_ACCESSORS(deoptimization_data, FixedArray)
|
||||
|
||||
// [code_flushing_candidate]: Field only used during garbage
|
||||
// collection to hold code flushing candidates. The contents of this
|
||||
// field does not have to be traced during garbage collection since
|
||||
// it is only used by the garbage collector itself.
|
||||
DECL_ACCESSORS(next_code_flushing_candidate, Object)
|
||||
|
||||
// Unchecked accessors to be used during GC.
|
||||
inline ByteArray* unchecked_relocation_info();
|
||||
inline FixedArray* unchecked_deoptimization_data();
|
||||
@ -3537,9 +3543,12 @@ class Code: public HeapObject {
|
||||
static const int kRelocationInfoOffset = kInstructionSizeOffset + kIntSize;
|
||||
static const int kDeoptimizationDataOffset =
|
||||
kRelocationInfoOffset + kPointerSize;
|
||||
static const int kFlagsOffset = kDeoptimizationDataOffset + kPointerSize;
|
||||
static const int kKindSpecificFlagsOffset = kFlagsOffset + kIntSize;
|
||||
static const int kNextCodeFlushingCandidateOffset =
|
||||
kDeoptimizationDataOffset + kPointerSize;
|
||||
static const int kFlagsOffset =
|
||||
kNextCodeFlushingCandidateOffset + kPointerSize;
|
||||
|
||||
static const int kKindSpecificFlagsOffset = kFlagsOffset + kIntSize;
|
||||
static const int kKindSpecificFlagsSize = 2 * kIntSize;
|
||||
|
||||
static const int kHeaderPaddingStart = kKindSpecificFlagsOffset +
|
||||
|
Loading…
Reference in New Issue
Block a user