Index: src/deoptimizer.h |
diff --git a/src/deoptimizer.h b/src/deoptimizer.h |
index 1d413e6babf39f79a84528db163de3598d06a400..7fcefdc64950fd4a9a29894095b42f6f86c6027a 100644 |
--- a/src/deoptimizer.h |
+++ b/src/deoptimizer.h |
@@ -39,6 +39,7 @@ class TranslatedValue { |
kInt32, |
kUInt32, |
kBoolBit, |
+ kFloat, |
kDouble, |
kCapturedObject, // Object captured by the escape analysis. |
// The number of nested objects can be obtained |
@@ -61,6 +62,7 @@ class TranslatedValue { |
static TranslatedValue NewDeferredObject(TranslatedState* container, |
int length, int object_index); |
static TranslatedValue NewDuplicateObject(TranslatedState* container, int id); |
+ static TranslatedValue NewFloat(TranslatedState* container, float value); |
static TranslatedValue NewDouble(TranslatedState* container, double value); |
static TranslatedValue NewInt32(TranslatedState* container, int32_t value); |
static TranslatedValue NewUInt32(TranslatedState* container, uint32_t value); |
@@ -93,6 +95,8 @@ class TranslatedValue { |
uint32_t uint32_value_; |
// kind is kInt32. |
int32_t int32_value_; |
+ // kind is kFloat |
+ float float_value_; |
// kind is kDouble |
double double_value_; |
// kind is kDuplicatedObject or kArgumentsObject or kCapturedObject. |
@@ -103,6 +107,7 @@ class TranslatedValue { |
Object* raw_literal() const; |
int32_t int32_value() const; |
uint32_t uint32_value() const; |
+ float float_value() const; |
double double_value() const; |
int object_length() const; |
int object_index() const; |
@@ -738,6 +743,11 @@ class RegisterValues { |
return registers_[n]; |
} |
+ float GetFloatRegister(unsigned n) const { |
+ DCHECK(n < arraysize(float_registers_)); |
+ return float_registers_[n]; |
+ } |
+ |
double GetDoubleRegister(unsigned n) const { |
DCHECK(n < arraysize(double_registers_)); |
return double_registers_[n]; |
@@ -748,12 +758,18 @@ class RegisterValues { |
registers_[n] = value; |
} |
+ void SetFloatRegister(unsigned n, float value) { |
+ DCHECK(n < arraysize(float_registers_)); |
+ float_registers_[n] = value; |
+ } |
+ |
void SetDoubleRegister(unsigned n, double value) { |
DCHECK(n < arraysize(double_registers_)); |
double_registers_[n] = value; |
} |
intptr_t registers_[Register::kNumRegisters]; |
+ float float_registers_[FloatRegister::kMaxNumRegisters]; |
double double_registers_[DoubleRegister::kMaxNumRegisters]; |
}; |
@@ -977,11 +993,13 @@ class TranslationIterator BASE_EMBEDDED { |
V(INT32_REGISTER) \ |
V(UINT32_REGISTER) \ |
V(BOOL_REGISTER) \ |
+ V(FLOAT_REGISTER) \ |
V(DOUBLE_REGISTER) \ |
V(STACK_SLOT) \ |
V(INT32_STACK_SLOT) \ |
V(UINT32_STACK_SLOT) \ |
V(BOOL_STACK_SLOT) \ |
+ V(FLOAT_STACK_SLOT) \ |
V(DOUBLE_STACK_SLOT) \ |
V(LITERAL) |
@@ -1023,11 +1041,13 @@ class Translation BASE_EMBEDDED { |
void StoreInt32Register(Register reg); |
void StoreUint32Register(Register reg); |
void StoreBoolRegister(Register reg); |
+ void StoreFloatRegister(FloatRegister reg); |
void StoreDoubleRegister(DoubleRegister reg); |
void StoreStackSlot(int index); |
void StoreInt32StackSlot(int index); |
void StoreUint32StackSlot(int index); |
void StoreBoolStackSlot(int index); |
+ void StoreFloatStackSlot(int index); |
void StoreDoubleStackSlot(int index); |
void StoreLiteral(int literal_id); |
void StoreArgumentsObject(bool args_known, int args_index, int args_length); |