OSDN Git Service

When converting from 64 to 32-bits, use the actual number of words to
authorReid Spencer <rspencer@reidspencer.com>
Thu, 22 Feb 2007 00:58:45 +0000 (00:58 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Thu, 22 Feb 2007 00:58:45 +0000 (00:58 +0000)
extract the value, not the number of words implied by the active bits.
This fixes numerous, but not all divide bugs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34484 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/APInt.cpp

index c8ab2d7..03652a8 100644 (file)
@@ -1177,7 +1177,7 @@ void APInt::divide(const APInt LHS, uint32_t lhsWords,
   uint32_t *U = new uint32_t[m + n + 1];
   memset(U, 0, (m+n+1)*sizeof(uint32_t));
   for (unsigned i = 0; i < lhsWords; ++i) {
-    uint64_t tmp = (lhsWords == 1 ? LHS.VAL : LHS.pVal[i]);
+    uint64_t tmp = (LHS.getNumWords() == 1 ? LHS.VAL : LHS.pVal[i]);
     U[i * 2] = tmp & mask;
     U[i * 2 + 1] = tmp >> (sizeof(uint32_t)*8);
   }
@@ -1186,7 +1186,7 @@ void APInt::divide(const APInt LHS, uint32_t lhsWords,
   uint32_t *V = new uint32_t[n];
   memset(V, 0, (n)*sizeof(uint32_t));
   for (unsigned i = 0; i < rhsWords; ++i) {
-    uint64_t tmp = (rhsWords == 1 ? RHS.VAL : RHS.pVal[i]);
+    uint64_t tmp = (RHS.getNumWords() == 1 ? RHS.VAL : RHS.pVal[i]);
     V[i * 2] = tmp & mask;
     V[i * 2 + 1] = tmp >> (sizeof(uint32_t)*8);
   }