37 RealValue(
const RealValue &);
38 RealValue(RealValue &&);
39 RealValue &operator=(
const RealValue &);
40 RealValue &operator=(RealValue &&);
42 RealValue(
int kind,
const RealValue &v) : RealValue(v) {
45 RealValue(
int kind, RealValue &&v) : RealValue(std::move(v)) {
50 RealValue(
int kind,
const Word &w);
56 RealValue(
int kind,
double x);
65 static RealValue Infinity(
int kind,
bool negative =
false);
67 void print(llvm::raw_ostream &os)
const;
69#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
70 LLVM_DUMP_METHOD
void dump()
const;
80 int bits()
const {
return bits(
kind()); }
96 bool operator==(
const RealValue &y)
const;
97 bool operator!=(
const RealValue &y)
const {
return !operator==(y); }
99 bool IsNegative()
const;
101 bool IsNotANumber()
const;
103 bool IsSignalingNaN()
const;
105 bool IsInfinite()
const;
107 bool IsFinite()
const;
111 bool IsNormal()
const;
113 RealValue ABS()
const;
115 RealValue SetSign(
bool toNegative)
const;
117 RealValue SIGN(
const RealValue &x)
const;
119 RealValue Negate()
const;
121 Relation Compare(
const RealValue &y)
const;
123 ValueWithRealFlags<RealValue> Add(
const RealValue &y,
124 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
126 ValueWithRealFlags<RealValue> Subtract(
const RealValue &y,
127 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
129 ValueWithRealFlags<RealValue> Multiply(
const RealValue &y,
130 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
132 ValueWithRealFlags<RealValue> Divide(
const RealValue &y,
133 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
135 ValueWithRealFlags<RealValue> SQRT(
136 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
139 ValueWithRealFlags<RealValue>
NEAREST(
bool upward)
const;
143 ValueWithRealFlags<RealValue>
HYPOT(
const RealValue &y,
144 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
147 ValueWithRealFlags<RealValue>
DIM(
const RealValue &y,
148 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
151 ValueWithRealFlags<RealValue>
MOD(
const RealValue &y,
152 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
155 ValueWithRealFlags<RealValue>
MODULO(
const RealValue &y,
156 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
158 ValueWithRealFlags<RealValue> KahanSummation(
const RealValue &y,
159 RealValue &correction,
160 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
162 IntegerValue EXPONENT()
const;
164 static RealValue EPSILON(
int kind);
166 static RealValue HUGE(
int kind);
168 static RealValue TINY(
int kind);
170 static int DIGITS(
int kind);
172 static int PRECISION(
int kind);
174 static int RANGE(
int kind);
176 static int MAXEXPONENT(
int kind);
178 static int MINEXPONENT(
int kind);
180 RealValue RRSPACING()
const;
182 RealValue SPACING()
const;
184 RealValue SET_EXPONENT(std::int64_t e)
const;
186 RealValue FRACTION()
const;
189 ValueWithRealFlags<RealValue>
SCALE(
const IntegerValue &by,
190 Rounding rounding = TargetCharacteristics::defaultRounding)
const;
192 RealValue FlushSubnormalToZero()
const;
195 static RealValue NotANumber(
int kind);
197 static ValueWithRealFlags<RealValue> FromInteger(
int kind,
198 const IntegerValue &n,
bool isUnsigned =
false,
199 Rounding rounding = TargetCharacteristics::defaultRounding);
203 common::RoundingMode mode = common::RoundingMode::ToZero)
const;
206 ValueWithRealFlags<IntegerValue>
ToInteger(
207 common::RoundingMode mode = common::RoundingMode::ToZero,
208 int toBits = 0)
const;
210 static ValueWithRealFlags<RealValue> Convert(
int kind,
const RealValue &from,
211 Rounding rounding = TargetCharacteristics::defaultRounding);
213 Word RawBits()
const;
218 static ValueWithRealFlags<RealValue> Read(
int kind,
const char *&pp,
219 Rounding rounding = TargetCharacteristics::defaultRounding);
221 std::string DumpHexadecimal()
const;
226 llvm::raw_ostream &o,
int kind,
bool minimal =
false)
const;
228 static RealValue FromRawBytes(
229 int kind,
const void *raw, std::size_t expectedSize);
231 void StoreRawBytes(
void *dst,
size_t size,
bool *changed =
nullptr)
const;
234 static RealValue FromImpl(
const RealValueImpl &x);
235 static RealValue FromImpl(RealValueImpl &&x);
236 static ValueWithRealFlags<RealValue> FromImpl(
237 const ValueWithRealFlags<RealValueImpl> &x);
238 static ValueWithRealFlags<RealValue> FromImpl(
239 ValueWithRealFlags<RealValueImpl> &&x);
241 RealValueImpl &impl() {
return *
reinterpret_cast<RealValueImpl *
>(
this); }
242 const RealValueImpl &impl()
const {
243 return *
reinterpret_cast<const RealValueImpl *
>(
this);
246 [[maybe_unused]]
alignas(
247 detail::kRealObjectAlign)
char opaque_[detail::kRealObjectSize];
ValueWithRealFlags< RealValue > MOD(const RealValue &y, Rounding rounding=TargetCharacteristics::defaultRounding) const
MOD(x,y) = x - AINT(x/y)*y (in the standard)
Definition real-value.cpp:133
ValueWithRealFlags< RealValue > MODULO(const RealValue &y, Rounding rounding=TargetCharacteristics::defaultRounding) const
MODULO(x,y) = x - FLOOR(x/y)*y (in the standard)
Definition real-value.cpp:137
ValueWithRealFlags< RealValue > NEAREST(bool upward) const
NEAREST(), IEEE_NEXT_AFTER(), IEEE_NEXT_UP(), and IEEE_NEXT_DOWN()
Definition real-value.cpp:122
ValueWithRealFlags< IntegerValue > ToInteger(common::RoundingMode mode=common::RoundingMode::ToZero, int toBits=0) const
Conversion to an integer (INT(), NINT(), FLOOR(), CEILING())
Definition real-value.cpp:206