mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-05 19:10:19 +00:00
Oops, should be part of 41664; won't work very well without this piece.
llvm-svn: 41665
This commit is contained in:
parent
b34e6b4898
commit
b336f6207c
@ -1065,6 +1065,20 @@ APFloat::changeSign()
|
||||
sign = !sign;
|
||||
}
|
||||
|
||||
void
|
||||
APFloat::clearSign()
|
||||
{
|
||||
/* So is this one. */
|
||||
sign = 0;
|
||||
}
|
||||
|
||||
void
|
||||
APFloat::copySign(const APFloat &rhs)
|
||||
{
|
||||
/* And this one. */
|
||||
sign = rhs.sign;
|
||||
}
|
||||
|
||||
/* Normalized addition or subtraction. */
|
||||
APFloat::opStatus
|
||||
APFloat::addOrSubtract(const APFloat &rhs, roundingMode rounding_mode,
|
||||
@ -1148,6 +1162,30 @@ APFloat::divide(const APFloat &rhs, roundingMode rounding_mode)
|
||||
return fs;
|
||||
}
|
||||
|
||||
/* Normalized remainder. */
|
||||
APFloat::opStatus
|
||||
APFloat::mod(const APFloat &rhs, roundingMode rounding_mode)
|
||||
{
|
||||
opStatus fs;
|
||||
APFloat V = *this;
|
||||
fs = V.divide(rhs, rmNearestTiesToEven);
|
||||
if (fs == opDivByZero)
|
||||
return fs;
|
||||
|
||||
integerPart x;
|
||||
fs = V.convertToInteger(&x, integerPartWidth, true, rmNearestTiesToEven);
|
||||
if (fs==opInvalidOp)
|
||||
return fs;
|
||||
|
||||
fs = V.convertFromInteger(&x, integerPartWidth, true, rmNearestTiesToEven);
|
||||
assert(fs==opOK); // should always work
|
||||
fs = V.multiply(rhs, rounding_mode);
|
||||
assert(fs==opOK); // should not overflow or underflow
|
||||
fs = subtract(V, rounding_mode);
|
||||
assert(fs==opOK);
|
||||
return fs;
|
||||
}
|
||||
|
||||
/* Normalized fused-multiply-add. */
|
||||
APFloat::opStatus
|
||||
APFloat::fusedMultiplyAdd(const APFloat &multiplicand,
|
||||
|
Loading…
x
Reference in New Issue
Block a user