#ifndef V8_FRAME_ELEMENT_H_
#define V8_FRAME_ELEMENT_H_
-#include "register-allocator-inl.h"
+#include "macro-assembler.h"
namespace v8 {
namespace internal {
namespace v8 {
namespace internal {
+Result::Result(const Result& other) {
+ other.CopyTo(this);
+}
+
+
+Result& Result::operator=(const Result& other) {
+ if (this != &other) {
+ Unuse();
+ other.CopyTo(this);
+ }
+ return *this;
+}
+
+
Result::~Result() {
if (is_register()) {
CodeGeneratorScope::Current()->allocator()->Unuse(reg());
}
+bool RegisterAllocator::is_used(Register reg) {
+ return registers_.is_used(ToNumber(reg));
+}
+
+
+int RegisterAllocator::count(Register reg) {
+ return registers_.count(ToNumber(reg));
+}
+
+
+void RegisterAllocator::Use(Register reg) {
+ registers_.Use(ToNumber(reg));
+}
+
+
+void RegisterAllocator::Unuse(Register reg) {
+ registers_.Unuse(ToNumber(reg));
+}
+
} } // namespace v8::internal
#endif // V8_REGISTER_ALLOCATOR_INL_H_
// The copy constructor and assignment operators could each create a new
// register reference.
- Result(const Result& other) {
- other.CopyTo(this);
- }
+ inline Result(const Result& other);
- Result& operator=(const Result& other) {
- if (this != &other) {
- Unuse();
- other.CopyTo(this);
- }
- return *this;
- }
+ inline Result& operator=(const Result& other);
inline ~Result();
// Predicates and accessors for the registers' reference counts.
bool is_used(int num) { return registers_.is_used(num); }
- bool is_used(Register reg) { return registers_.is_used(ToNumber(reg)); }
+ inline bool is_used(Register reg);
int count(int num) { return registers_.count(num); }
- int count(Register reg) { return registers_.count(ToNumber(reg)); }
+ inline int count(Register reg);
// Explicitly record a reference to a register.
void Use(int num) { registers_.Use(num); }
- void Use(Register reg) { registers_.Use(ToNumber(reg)); }
+ inline void Use(Register reg);
// Explicitly record that a register will no longer be used.
void Unuse(int num) { registers_.Unuse(num); }
- void Unuse(Register reg) { registers_.Unuse(ToNumber(reg)); }
+ inline void Unuse(Register reg);
// Reset the register reference counts to free all non-reserved registers.
void Reset() { registers_.Reset(); }