// Copyright 2011 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_STORE_BUFFER_H_ #define V8_STORE_BUFFER_H_ #include "src/allocation.h" #include "src/base/logging.h" #include "src/base/platform/platform.h" #include "src/globals.h" #include "src/heap/slot-set.h" namespace v8 { namespace internal { // Intermediate buffer that accumulates old-to-new stores from the generated // code. On buffer overflow the slots are moved to the remembered set. class StoreBuffer { public: static const int kStoreBufferSize = 1 << (14 + kPointerSizeLog2); static const int kStoreBufferMask = kStoreBufferSize - 1; static void StoreBufferOverflow(Isolate* isolate); explicit StoreBuffer(Heap* heap); void SetUp(); void TearDown(); // Used to add entries from generated code. inline Address* top_address() { return reinterpret_cast<Address*>(&top_); } void MoveEntriesToRememberedSet(); private: Heap* heap_; Address* top_; // The start and the limit of the buffer that contains store slots // added from the generated code. Address* start_; Address* limit_; base::VirtualMemory* virtual_memory_; }; } // namespace internal } // namespace v8 #endif // V8_STORE_BUFFER_H_