blob: 74ab3a42727119c907a05e400b07d1af483a817b [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_INTERPRETER_BYTECODE_REGISTER_ALLOCATOR_H_
6#define V8_INTERPRETER_BYTECODE_REGISTER_ALLOCATOR_H_
7
8#include "src/zone-containers.h"
9
10namespace v8 {
11namespace internal {
12namespace interpreter {
13
14class BytecodeArrayBuilder;
15class Register;
16
17// A class than allows the instantiator to allocate temporary registers that are
18// cleaned up when scope is closed.
19class BytecodeRegisterAllocator {
20 public:
21 explicit BytecodeRegisterAllocator(BytecodeArrayBuilder* builder);
22 ~BytecodeRegisterAllocator();
23 Register NewRegister();
24
25 void PrepareForConsecutiveAllocations(size_t count);
26 Register NextConsecutiveRegister();
27
28 bool RegisterIsAllocatedInThisScope(Register reg) const;
29
30 bool HasConsecutiveAllocations() const { return next_consecutive_count_ > 0; }
31
32 private:
33 void* operator new(size_t size);
34 void operator delete(void* p);
35
36 BytecodeArrayBuilder* builder_;
37 ZoneVector<int> allocated_;
38 int next_consecutive_register_;
39 int next_consecutive_count_;
40
41 DISALLOW_COPY_AND_ASSIGN(BytecodeRegisterAllocator);
42};
43
44} // namespace interpreter
45} // namespace internal
46} // namespace v8
47
48
49#endif // V8_INTERPRETER_BYTECODE_REGISTER_ALLOCATOR_H_