mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-30 15:45:26 +00:00
When converting from 64 to 32-bits, use the actual number of words to
extract the value, not the number of words implied by the active bits. This fixes numerous, but not all divide bugs. llvm-svn: 34484
This commit is contained in:
parent
d51b03d452
commit
cbff120eeb
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user