[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