[llvm-commits] [llvm] r41665 - /llvm/trunk/lib/Support/APFloat.cpp
Dale Johannesen
dalej at apple.com
Fri Aug 31 16:35:31 PDT 2007
Author: johannes
Date: Fri Aug 31 18:35:31 2007
New Revision: 41665
URL: http://llvm.org/viewvc/llvm-project?rev=41665&view=rev
Log:
Oops, should be part of 41664; won't work very well without this piece.
Modified:
llvm/trunk/lib/Support/APFloat.cpp
Modified: llvm/trunk/lib/Support/APFloat.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APFloat.cpp?rev=41665&r1=41664&r2=41665&view=diff
==============================================================================
--- llvm/trunk/lib/Support/APFloat.cpp (original)
+++ llvm/trunk/lib/Support/APFloat.cpp Fri Aug 31 18:35:31 2007
@@ -1065,6 +1065,20 @@
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 @@
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,
More information about the llvm-commits
mailing list