Lines Matching refs:ScaledNumber

1 //===- llvm/Support/ScaledNumber.h - Support for scaled numbers -*- C++ -*-===//
13 // namespace ScaledNumbers. The class ScaledNumber is useful for modelling
449 /// ScaledNumber is a number represented by digits and a scale. It uses simple
461 /// ScaledNumber is templated on the underlying integer type for digits, which
464 /// Unlike APFloat, ScaledNumber does not model architecture floating point
468 /// ScaledNumber is totally ordered. However, there is no canonical form, so
471 /// ScaledNumber(8u, 0) == ScaledNumber(4u, 1)
472 /// ScaledNumber(4u, 1) == ScaledNumber(2u, 2)
473 /// ScaledNumber(2u, 2) == ScaledNumber(1u, 3)
475 /// ScaledNumber implements most arithmetic operations. Precision is kept
493 /// 3. Allow \a ScaledNumber to represent a signed number.
494 template <class DigitsT> class ScaledNumber : ScaledNumberBase {
512 ScaledNumber() : Digits(0), Scale(0) {}
514 ScaledNumber(DigitsType Digits, int16_t Scale)
518 ScaledNumber(const std::pair<uint64_t, int16_t> &X)
522 static ScaledNumber getZero() { return ScaledNumber(0, 0); }
523 static ScaledNumber getOne() { return ScaledNumber(1, 0); }
524 static ScaledNumber getLargest() {
525 return ScaledNumber(DigitsLimits::max(), ScaledNumbers::MaxScale);
527 static ScaledNumber get(uint64_t N) { return adjustToWidth(N, 0); }
528 static ScaledNumber getInverse(uint64_t N) {
531 static ScaledNumber getFraction(DigitsType N, DigitsType D) {
569 bool operator==(const ScaledNumber &X) const { return compare(X) == 0; }
570 bool operator<(const ScaledNumber &X) const { return compare(X) < 0; }
571 bool operator!=(const ScaledNumber &X) const { return compare(X) != 0; }
572 bool operator>(const ScaledNumber &X) const { return compare(X) > 0; }
573 bool operator<=(const ScaledNumber &X) const { return compare(X) <= 0; }
574 bool operator>=(const ScaledNumber &X) const { return compare(X) >= 0; }
610 ScaledNumber &operator+=(const ScaledNumber &X) {
618 ScaledNumber &operator-=(const ScaledNumber &X) {
623 ScaledNumber &operator*=(const ScaledNumber &X);
624 ScaledNumber &operator/=(const ScaledNumber &X);
625 ScaledNumber &operator<<=(int16_t Shift) {
629 ScaledNumber &operator>>=(int16_t Shift) {
645 ScaledNumber matchScales(ScaledNumber X) {
670 int compare(const ScaledNumber &X) const {
674 ScaledNumber Scaled = get(N);
685 ScaledNumber &invert() { return *this = ScaledNumber::get(1) / *this; }
686 ScaledNumber inverse() const { return ScaledNumber(*this).invert(); }
689 static ScaledNumber getProduct(DigitsType LHS, DigitsType RHS) {
692 static ScaledNumber getQuotient(DigitsType Dividend, DigitsType Divisor) {
709 static ScaledNumber adjustToWidth(uint64_t N, int32_t Shift) {
717 static ScaledNumber getRounded(ScaledNumber P, bool Round) {
728 ScaledNumber<DigitsT> operator op(const ScaledNumber<DigitsT> &L, \
729 const ScaledNumber<DigitsT> &R) { \
730 return ScaledNumber<DigitsT>(L) base R; \
741 raw_ostream &operator<<(raw_ostream &OS, const ScaledNumber<DigitsT> &X) {
747 bool operator op(const ScaledNumber<DigitsT> &L, T1 R) { \
751 bool operator op(T1 L, const ScaledNumber<DigitsT> &R) { \
769 uint64_t ScaledNumber<DigitsT>::scale(uint64_t N) const {
774 return ScaledNumber<uint64_t>(Digits, Scale).scale(N);
779 IntT ScaledNumber<DigitsT>::toInt() const {
799 ScaledNumber<DigitsT> &ScaledNumber<DigitsT>::
800 operator*=(const ScaledNumber &X) {
816 ScaledNumber<DigitsT> &ScaledNumber<DigitsT>::
817 operator/=(const ScaledNumber &X) {
832 template <class DigitsT> void ScaledNumber<DigitsT>::shiftLeft(int32_t Shift) {
863 template <class DigitsT> void ScaledNumber<DigitsT>::shiftRight(int32_t Shift) {
891 template <typename T> struct isPodLike<ScaledNumber<T>> {