Lines Matching defs:APFloat
1 //===-- APFloat.cpp - Implement APFloat class -----------------------------===//
14 #include "llvm/ADT/APFloat.h"
43 /// in a switch statement to classify how the interaction of two APFloat's
236 if (&Sem == &llvm::APFloat::IEEEhalf())
238 else if (&Sem == &llvm::APFloat::BFloat())
240 else if (&Sem == &llvm::APFloat::IEEEsingle())
242 else if (&Sem == &llvm::APFloat::IEEEdouble())
244 else if (&Sem == &llvm::APFloat::IEEEquad())
246 else if (&Sem == &llvm::APFloat::PPCDoubleDouble())
248 else if (&Sem == &llvm::APFloat::Float8E5M2())
250 else if (&Sem == &llvm::APFloat::Float8E5M2FNUZ())
252 else if (&Sem == &llvm::APFloat::Float8E4M3())
254 else if (&Sem == &llvm::APFloat::Float8E4M3FN())
256 else if (&Sem == &llvm::APFloat::Float8E4M3FNUZ())
258 else if (&Sem == &llvm::APFloat::Float8E4M3B11FNUZ())
260 else if (&Sem == &llvm::APFloat::FloatTF32())
262 else if (&Sem == &llvm::APFloat::Float6E3M2FN())
264 else if (&Sem == &llvm::APFloat::Float6E2M3FN())
266 else if (&Sem == &llvm::APFloat::Float4E2M1FN())
268 else if (&Sem == &llvm::APFloat::x87DoubleExtended())
601 D->exponent += static_cast<APFloat::ExponentType>((dot - p) - (dot > p));
603 static_cast<APFloat::ExponentType>((p - D->firstSigDigit)
3439 // Conversion from APFloat to/from host float/double. It may eventually be
3445 // Denormals have exponent minExponent in APFloat, but minExponent-1 in
3490 // Declare fltSemantics before APFloat that uses it (and
4154 // APFloat. The formula comes from "How to Print Floating-Point Numbers
4379 bool IEEEFloat::getExactInverse(APFloat *inv) const {
4403 *inv = APFloat(reciprocal, *semantics);
4685 Floats(new APFloat[2]{APFloat(semIEEEdouble), APFloat(semIEEEdouble)}) {
4691 Floats(new APFloat[2]{APFloat(semIEEEdouble, uninitialized),
4692 APFloat(semIEEEdouble, uninitialized)}) {
4697 : Semantics(&S), Floats(new APFloat[2]{APFloat(semIEEEdouble, I),
4698 APFloat(semIEEEdouble)}) {
4704 Floats(new APFloat[2]{
4705 APFloat(semIEEEdouble, APInt(64, I.getRawData()[0])),
4706 APFloat(semIEEEdouble, APInt(64, I.getRawData()[1]))}) {
4710 DoubleAPFloat::DoubleAPFloat(const fltSemantics &S, APFloat &&First,
4711 APFloat &&Second)
4713 Floats(new APFloat[2]{std::move(First), std::move(Second)}) {
4721 Floats(RHS.Floats ? new APFloat[2]{APFloat(RHS.Floats[0]),
4722 APFloat(RHS.Floats[1])}
4747 APFloat::opStatus DoubleAPFloat::addImpl(const APFloat &a, const APFloat &aa,
4748 const APFloat &c, const APFloat &cc,
4751 APFloat z = a;
4763 if (AComparedToC == APFloat::cmpGreaterThan) {
4778 APFloat zz = aa;
4780 if (AComparedToC == APFloat::cmpGreaterThan) {
4795 APFloat q = a;
4826 APFloat::opStatus DoubleAPFloat::addWithSpecial(const DoubleAPFloat &LHS,
4861 APFloat A(LHS.Floats[0]), AA(LHS.Floats[1]), C(RHS.Floats[0]),
4872 APFloat::opStatus DoubleAPFloat::add(const DoubleAPFloat &RHS,
4877 APFloat::opStatus DoubleAPFloat::subtract(const DoubleAPFloat &RHS,
4885 APFloat::opStatus DoubleAPFloat::multiply(const DoubleAPFloat &RHS,
4886 APFloat::roundingMode RM) {
4929 APFloat A = Floats[0], B = Floats[1], C = RHS.Floats[0], D = RHS.Floats[1];
4931 APFloat T = A;
4940 APFloat Tau = A;
4946 APFloat V = A;
4949 APFloat W = B;
4956 APFloat U = T;
4971 APFloat::opStatus DoubleAPFloat::divide(const DoubleAPFloat &RHS,
4972 APFloat::roundingMode RM) {
4974 APFloat Tmp(semPPCDoubleDoubleLegacy, bitcastToAPInt());
4976 Tmp.divide(APFloat(semPPCDoubleDoubleLegacy, RHS.bitcastToAPInt()), RM);
4981 APFloat::opStatus DoubleAPFloat::remainder(const DoubleAPFloat &RHS) {
4983 APFloat Tmp(semPPCDoubleDoubleLegacy, bitcastToAPInt());
4985 Tmp.remainder(APFloat(semPPCDoubleDoubleLegacy, RHS.bitcastToAPInt()));
4990 APFloat::opStatus DoubleAPFloat::mod(const DoubleAPFloat &RHS) {
4992 APFloat Tmp(semPPCDoubleDoubleLegacy, bitcastToAPInt());
4993 auto Ret = Tmp.mod(APFloat(semPPCDoubleDoubleLegacy, RHS.bitcastToAPInt()));
4998 APFloat::opStatus
5001 APFloat::roundingMode RM) {
5003 APFloat Tmp(semPPCDoubleDoubleLegacy, bitcastToAPInt());
5005 APFloat(semPPCDoubleDoubleLegacy, Multiplicand.bitcastToAPInt()),
5006 APFloat(semPPCDoubleDoubleLegacy, Addend.bitcastToAPInt()), RM);
5011 APFloat::opStatus DoubleAPFloat::roundToIntegral(APFloat::roundingMode RM) {
5013 APFloat Tmp(semPPCDoubleDoubleLegacy, bitcastToAPInt());
5024 APFloat::cmpResult
5045 APFloat::fltCategory DoubleAPFloat::getCategory() const {
5063 Floats[0] = APFloat(semIEEEdouble, APInt(64, 0x7fefffffffffffffull));
5064 Floats[1] = APFloat(semIEEEdouble, APInt(64, 0x7c8ffffffffffffeull));
5077 Floats[0] = APFloat(semIEEEdouble, APInt(64, 0x0360000000000000ull));
5088 APFloat::cmpResult DoubleAPFloat::compare(const DoubleAPFloat &RHS) const {
5091 if (Result == APFloat::cmpEqual)
5116 Expected<APFloat::opStatus> DoubleAPFloat::convertFromString(StringRef S,
5119 APFloat Tmp(semPPCDoubleDoubleLegacy);
5125 APFloat::opStatus DoubleAPFloat::next(bool nextDown) {
5127 APFloat Tmp(semPPCDoubleDoubleLegacy, bitcastToAPInt());
5133 APFloat::opStatus
5138 return APFloat(semPPCDoubleDoubleLegacy, bitcastToAPInt())
5142 APFloat::opStatus DoubleAPFloat::convertFromAPInt(const APInt &Input,
5146 APFloat Tmp(semPPCDoubleDoubleLegacy);
5152 APFloat::opStatus
5157 APFloat Tmp(semPPCDoubleDoubleLegacy);
5163 APFloat::opStatus
5168 APFloat Tmp(semPPCDoubleDoubleLegacy);
5179 return APFloat(semPPCDoubleDoubleLegacy, bitcastToAPInt())
5225 APFloat(semPPCDoubleDoubleLegacy, bitcastToAPInt())
5229 bool DoubleAPFloat::getExactInverse(APFloat *inv) const {
5231 APFloat Tmp(semPPCDoubleDoubleLegacy, bitcastToAPInt());
5234 APFloat Inv(semPPCDoubleDoubleLegacy);
5236 *inv = APFloat(semPPCDoubleDouble, Inv.bitcastToAPInt());
5251 APFloat::roundingMode RM) {
5258 APFloat::roundingMode RM) {
5260 APFloat First = frexp(Arg.Floats[0], Exp, RM);
5261 APFloat Second = Arg.Floats[1];
5262 if (Arg.getCategory() == APFloat::fcNormal)
5269 APFloat::Storage::Storage(IEEEFloat F, const fltSemantics &Semantics) {
5277 DoubleAPFloat(Semantics, APFloat(std::move(F), S),
5278 APFloat(semIEEEdouble));
5284 Expected<APFloat::opStatus> APFloat::convertFromString(StringRef Str,
5289 hash_code hash_value(const APFloat &Arg) {
5290 if (APFloat::usesLayout<detail::IEEEFloat>(Arg.getSemantics()))
5292 if (APFloat::usesLayout<detail::DoubleAPFloat>(Arg.getSemantics()))
5297 APFloat::APFloat(const fltSemantics &Semantics, StringRef S)
5298 : APFloat(Semantics) {
5304 FPClassTest APFloat::classify() const {
5317 APFloat::opStatus APFloat::convert(const fltSemantics &ToSemantics,
5330 *this = APFloat(ToSemantics, U.IEEE.bitcastToAPInt());
5336 *this = APFloat(std::move(getIEEE()), ToSemantics);
5342 APFloat APFloat::getAllOnesValue(const fltSemantics &Semantics) {
5343 return APFloat(Semantics, APInt::getAllOnes(Semantics.sizeInBits));
5346 void APFloat::print(raw_ostream &OS) const {
5353 LLVM_DUMP_METHOD void APFloat::dump() const { print(dbgs()); }
5356 void APFloat::Profile(FoldingSetNodeID &NID) const {
5364 APFloat::opStatus APFloat::convertToInteger(APSInt &result,
5376 double APFloat::convertToDouble() const {
5381 APFloat Temp = *this;
5390 float128 APFloat::convertToQuad() const {
5395 APFloat Temp = *this;
5404 float APFloat::convertToFloat() const {
5409 APFloat Temp = *this;