Index: src/ia32/codegen-ia32.h |
=================================================================== |
--- src/ia32/codegen-ia32.h (revision 4025) |
+++ src/ia32/codegen-ia32.h (working copy) |
@@ -496,8 +496,8 @@ |
// To prevent long attacker-controlled byte sequences, integer constants |
// from the JavaScript source are loaded in two parts if they are larger |
- // than 16 bits. |
- static const int kMaxSmiInlinedBits = 16; |
+ // than 17 bits. |
+ static const int kMaxSmiInlinedBits = 17; |
bool IsUnsafeSmi(Handle<Object> value); |
// Load an integer constant x into a register target or into the stack using |
// at most 16 bits of user-controlled data per assembly operation. |
@@ -695,7 +695,7 @@ |
GenericBinaryOpStub(Token::Value op, |
OverwriteMode mode, |
GenericBinaryFlags flags, |
- NumberInfo::Type operands_type = NumberInfo::kUnknown) |
+ NumberInfo operands_type) |
: op_(op), |
mode_(mode), |
flags_(flags), |
@@ -704,6 +704,9 @@ |
static_operands_type_(operands_type), |
runtime_operands_type_(BinaryOpIC::DEFAULT), |
name_(NULL) { |
+ if (static_operands_type_.IsSmi()) { |
+ mode_ = NO_OVERWRITE; |
+ } |
use_sse3_ = CpuFeatures::IsSupported(SSE3); |
ASSERT(OpBits::is_valid(Token::NUM_TOKENS)); |
} |
@@ -715,7 +718,7 @@ |
args_in_registers_(ArgsInRegistersBits::decode(key)), |
args_reversed_(ArgsReversedBits::decode(key)), |
use_sse3_(SSE3Bits::decode(key)), |
- static_operands_type_(StaticTypeInfoBits::decode(key)), |
+ static_operands_type_(NumberInfo::ExpandedRepresentation(StaticTypeInfoBits::decode(key))), |
runtime_operands_type_(runtime_operands_type), |
name_(NULL) { |
} |
@@ -741,7 +744,7 @@ |
bool use_sse3_; |
// Number type information of operands, determined by code generator. |
- NumberInfo::Type static_operands_type_; |
+ NumberInfo static_operands_type_; |
// Operand type information determined at runtime. |
BinaryOpIC::TypeInfo runtime_operands_type_; |
@@ -760,7 +763,7 @@ |
static_cast<int>(flags_), |
static_cast<int>(args_in_registers_), |
static_cast<int>(args_reversed_), |
- NumberInfo::ToString(static_operands_type_)); |
+ static_operands_type_.ToString()); |
} |
#endif |
@@ -771,7 +774,7 @@ |
class ArgsInRegistersBits: public BitField<bool, 10, 1> {}; |
class ArgsReversedBits: public BitField<bool, 11, 1> {}; |
class FlagBits: public BitField<GenericBinaryFlags, 12, 1> {}; |
- class StaticTypeInfoBits: public BitField<NumberInfo::Type, 13, 3> {}; |
+ class StaticTypeInfoBits: public BitField<int, 13, 3> {}; |
class RuntimeTypeInfoBits: public BitField<BinaryOpIC::TypeInfo, 16, 2> {}; |
Major MajorKey() { return GenericBinaryOp; } |
@@ -783,7 +786,7 @@ |
| SSE3Bits::encode(use_sse3_) |
| ArgsInRegistersBits::encode(args_in_registers_) |
| ArgsReversedBits::encode(args_reversed_) |
- | StaticTypeInfoBits::encode(static_operands_type_) |
+ | StaticTypeInfoBits::encode(static_operands_type_.ThreeBitRepresentation()) |
| RuntimeTypeInfoBits::encode(runtime_operands_type_); |
} |