Lines Matching refs:rhs
85 SignExtendedNumber SignExtendedNumber::operator&(const SignExtendedNumber& rhs) const
87 return SignExtendedNumber(value & rhs.value);
90 SignExtendedNumber SignExtendedNumber::operator|(const SignExtendedNumber& rhs) const
92 return SignExtendedNumber(value | rhs.value);
95 SignExtendedNumber SignExtendedNumber::operator^(const SignExtendedNumber& rhs) const
97 return SignExtendedNumber(value ^ rhs.value);
100 SignExtendedNumber SignExtendedNumber::operator+(const SignExtendedNumber& rhs) const
102 uinteger_t sum = value + rhs.value;
103 bool carry = sum < value && sum < rhs.value;
104 if (negative != rhs.negative)
112 SignExtendedNumber SignExtendedNumber::operator-(const SignExtendedNumber& rhs) const
114 if (rhs.isMinimum())
117 return *this + (-rhs);
120 SignExtendedNumber SignExtendedNumber::operator*(const SignExtendedNumber& rhs) const
135 else if (rhs.negative)
138 return rhs.value == 0 ? rhs : *this;
140 else if (rhs.value == 0)
141 return rhs * *this; // don't duplicate the symmetric case.
146 uinteger_t aAbs = copySign(rhs.value, rhs.negative);
147 rv.negative = negative != rhs.negative;
155 SignExtendedNumber SignExtendedNumber::operator/(const SignExtendedNumber& rhs) const
163 if (rhs.value == 0)
165 if (rhs.negative)
171 uinteger_t aAbs = copySign(rhs.value, rhs.negative);
184 return extreme(!rhs.negative);
194 bool rvNeg = negative != rhs.negative;
200 SignExtendedNumber SignExtendedNumber::operator%(const SignExtendedNumber& rhs) const
202 if (rhs.value == 0)
203 return !rhs.negative ? rhs : isMinimum() ? SignExtendedNumber(0) : *this;
205 uinteger_t aAbs = copySign(rhs.value, rhs.negative);
223 SignExtendedNumber SignExtendedNumber::operator<<(const SignExtendedNumber& rhs) const
229 else if (rhs.negative)
248 if (rhs.value > allowableShift)
251 return SignExtendedNumber(value << rhs.value, negative);
254 SignExtendedNumber SignExtendedNumber::operator>>(const SignExtendedNumber& rhs) const
256 if (rhs.negative || rhs.value > 63)
259 return rhs.value == 0 ? *this : SignExtendedNumber(-1ULL << (64 - rhs.value), true);
262 x >>= rhs.value;
483 IntRange IntRange::operator&(const IntRange& rhs) const
486 if ((imin.negative ^ imax.negative) != 1 && (rhs.imin.negative ^ rhs.imax.negative) != 1)
488 return IntRange(minAnd(*this, rhs), maxAnd(*this, rhs));
492 IntRange r = IntRange(rhs);
528 IntRange IntRange::operator|(const IntRange& rhs) const
531 if ((imin.negative ^ imax.negative) == 0 && (rhs.imin.negative ^ rhs.imax.negative) == 0)
533 return IntRange(minOr(*this, rhs), maxOr(*this, rhs));
537 IntRange r = IntRange(rhs);
573 IntRange IntRange::operator^(const IntRange& rhs) const
575 return (*this & (~rhs)) | (~(*this) & rhs);
578 IntRange IntRange::operator+(const IntRange& rhs) const
580 return IntRange(imin + rhs.imin, imax + rhs.imax);
583 IntRange IntRange::operator-(const IntRange& rhs) const
585 return IntRange(imin - rhs.imax, imax - rhs.imin);
588 IntRange IntRange::operator*(const IntRange& rhs) const
592 bdy[0] = imin * rhs.imin;
593 bdy[1] = imin * rhs.imax;
594 bdy[2] = imax * rhs.imin;
595 bdy[3] = imax * rhs.imax;
599 IntRange IntRange::operator/(const IntRange& rhs) const
602 if (rhs.imax.value == 0 && rhs.imin.value == 0)
605 IntRange r = IntRange(rhs);
635 IntRange IntRange::operator%(const IntRange& rhs) const
638 IntRange irDen = rhs.absNeg();
680 IntRange IntRange::operator<<(const IntRange& rhs) const
682 IntRange r = IntRange(rhs);
694 IntRange IntRange::operator>>(const IntRange& rhs) const
696 IntRange r = IntRange(rhs);
708 SignExtendedNumber IntRange::maxOr(const IntRange& lhs, const IntRange& rhs) in maxOr() argument
712 uinteger_t xorvalue = lhs.imax.value ^ rhs.imax.value; in maxOr()
713 uinteger_t andvalue = lhs.imax.value & rhs.imax.value; in maxOr()
715 IntRange rhsc = IntRange(rhs); in maxOr()
776 SignExtendedNumber IntRange::minOr(const IntRange& lhs, const IntRange& rhs) in minOr() argument
778 return ~maxAnd(~lhs, ~rhs); in minOr()
781 SignExtendedNumber IntRange::maxAnd(const IntRange& lhs, const IntRange& rhs) in maxAnd() argument
786 IntRange rhsc = IntRange(rhs); in maxAnd()
820 SignExtendedNumber IntRange::minAnd(const IntRange& lhs, const IntRange& rhs) in minAnd() argument
822 return ~maxOr(~lhs, ~rhs); in minAnd()