| Index: src/hydrogen-instructions.h
|
| ===================================================================
|
| --- src/hydrogen-instructions.h (revision 7047)
|
| +++ src/hydrogen-instructions.h (working copy)
|
| @@ -190,81 +190,48 @@
|
|
|
| class Range: public ZoneObject {
|
| public:
|
| - Range() : lower_(kMinInt),
|
| - upper_(kMaxInt),
|
| - next_(NULL),
|
| - can_be_minus_zero_(false) { }
|
| + Range()
|
| + : lower_(kMinInt),
|
| + upper_(kMaxInt),
|
| + next_(NULL),
|
| + can_be_minus_zero_(false) { }
|
|
|
| Range(int32_t lower, int32_t upper)
|
| - : lower_(lower), upper_(upper), next_(NULL), can_be_minus_zero_(false) { }
|
| + : lower_(lower),
|
| + upper_(upper),
|
| + next_(NULL),
|
| + can_be_minus_zero_(false) { }
|
|
|
| - bool IsInSmiRange() const {
|
| - return lower_ >= Smi::kMinValue && upper_ <= Smi::kMaxValue;
|
| - }
|
| - void KeepOrder();
|
| - void Verify() const;
|
| int32_t upper() const { return upper_; }
|
| int32_t lower() const { return lower_; }
|
| Range* next() const { return next_; }
|
| Range* CopyClearLower() const { return new Range(kMinInt, upper_); }
|
| Range* CopyClearUpper() const { return new Range(lower_, kMaxInt); }
|
| - void ClearLower() { lower_ = kMinInt; }
|
| - void ClearUpper() { upper_ = kMaxInt; }
|
| Range* Copy() const { return new Range(lower_, upper_); }
|
| - bool IsMostGeneric() const { return lower_ == kMinInt && upper_ == kMaxInt; }
|
| int32_t Mask() const;
|
| void set_can_be_minus_zero(bool b) { can_be_minus_zero_ = b; }
|
| bool CanBeMinusZero() const { return CanBeZero() && can_be_minus_zero_; }
|
| bool CanBeZero() const { return upper_ >= 0 && lower_ <= 0; }
|
| bool CanBeNegative() const { return lower_ < 0; }
|
| - bool Includes(int value) const {
|
| - return lower_ <= value && upper_ >= value;
|
| + bool Includes(int value) const { return lower_ <= value && upper_ >= value; }
|
| + bool IsMostGeneric() const { return lower_ == kMinInt && upper_ == kMaxInt; }
|
| + bool IsInSmiRange() const {
|
| + return lower_ >= Smi::kMinValue && upper_ <= Smi::kMaxValue;
|
| }
|
| + void KeepOrder();
|
| + void Verify() const;
|
|
|
| - void Sar(int32_t value) {
|
| - int32_t bits = value & 0x1F;
|
| - lower_ = lower_ >> bits;
|
| - upper_ = upper_ >> bits;
|
| - set_can_be_minus_zero(false);
|
| - }
|
| -
|
| - void Shl(int32_t value) {
|
| - int32_t bits = value & 0x1F;
|
| - int old_lower = lower_;
|
| - int old_upper = upper_;
|
| - lower_ = lower_ << bits;
|
| - upper_ = upper_ << bits;
|
| - if (old_lower != lower_ >> bits || old_upper != upper_ >> bits) {
|
| - upper_ = kMaxInt;
|
| - lower_ = kMinInt;
|
| - }
|
| - set_can_be_minus_zero(false);
|
| - }
|
| -
|
| - // Adds a constant to the lower and upper bound of the range.
|
| - void AddConstant(int32_t value);
|
| -
|
| void StackUpon(Range* other) {
|
| Intersect(other);
|
| next_ = other;
|
| }
|
|
|
| - void Intersect(Range* other) {
|
| - upper_ = Min(upper_, other->upper_);
|
| - lower_ = Max(lower_, other->lower_);
|
| - bool b = CanBeMinusZero() && other->CanBeMinusZero();
|
| - set_can_be_minus_zero(b);
|
| - }
|
| + void Intersect(Range* other);
|
| + void Union(Range* other);
|
|
|
| - void Union(Range* other) {
|
| - upper_ = Max(upper_, other->upper_);
|
| - lower_ = Min(lower_, other->lower_);
|
| - bool b = CanBeMinusZero() || other->CanBeMinusZero();
|
| - set_can_be_minus_zero(b);
|
| - }
|
| -
|
| - // Compute a new result range and return true, if the operation
|
| - // can overflow.
|
| + void AddConstant(int32_t value);
|
| + void Sar(int32_t value);
|
| + void Shl(int32_t value);
|
| bool AddAndCheckOverflow(Range* other);
|
| bool SubAndCheckOverflow(Range* other);
|
| bool MulAndCheckOverflow(Range* other);
|
|
|