Index: src/register-allocator.h |
=================================================================== |
--- src/register-allocator.h (revision 3859) |
+++ src/register-allocator.h (working copy) |
@@ -29,6 +29,7 @@ |
#define V8_REGISTER_ALLOCATOR_H_ |
#include "macro-assembler.h" |
+#include "number-info.h" |
#if V8_TARGET_ARCH_IA32 |
#include "ia32/register-allocator-ia32.h" |
@@ -64,11 +65,12 @@ |
Result() { invalidate(); } |
// Construct a register Result. |
- explicit Result(Register reg); |
+ explicit Result(Register reg, NumberInfo::Type info = NumberInfo::kUnknown); |
// Construct a Result whose value is a compile-time constant. |
explicit Result(Handle<Object> value) { |
value_ = TypeField::encode(CONSTANT) |
+ | NumberInfoField::encode(NumberInfo::kUninitialized) |
| DataField::encode(ConstantList()->length()); |
ConstantList()->Add(value); |
} |
@@ -99,6 +101,14 @@ |
void invalidate() { value_ = TypeField::encode(INVALID); } |
+ NumberInfo::Type number_info(); |
+ void set_number_info(NumberInfo::Type info); |
+ bool is_number() { |
+ return (number_info() & NumberInfo::kNumber) != 0; |
+ } |
+ bool is_smi() { return number_info() == NumberInfo::kSmi; } |
+ bool is_heap_number() { return number_info() == NumberInfo::kHeapNumber; } |
+ |
bool is_valid() const { return type() != INVALID; } |
bool is_register() const { return type() == REGISTER; } |
bool is_constant() const { return type() == CONSTANT; } |
@@ -130,7 +140,8 @@ |
uint32_t value_; |
class TypeField: public BitField<Type, 0, 2> {}; |
- class DataField: public BitField<uint32_t, 2, 32 - 3> {}; |
+ class NumberInfoField : public BitField<NumberInfo::Type, 2, 3> {}; |
+ class DataField: public BitField<uint32_t, 5, 32 - 6> {}; |
inline void CopyTo(Result* destination) const; |