aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorPer Bothner <per@bothner.com>2001-03-01 22:55:33 -0800
committerPer Bothner <bothner@gcc.gnu.org>2001-03-01 22:55:33 -0800
commitc04278f74fd6b49f7a770ae51fd1dd0412989af7 (patch)
tree30e3d7caf1e4140d48d269c9d3049f16681a89ca /libjava/java
parentd6edb99e92ed0d198857f104e81d98c57ad5d768 (diff)
downloadgcc-c04278f74fd6b49f7a770ae51fd1dd0412989af7.zip
gcc-c04278f74fd6b49f7a770ae51fd1dd0412989af7.tar.gz
gcc-c04278f74fd6b49f7a770ae51fd1dd0412989af7.tar.bz2
Changes merged from Kawa's gnu.math.
* java/math/BigInteger.java * gnu/gcj/math/MPN.java (rshift0): New method handles zero shift count. (rshift(int[],int[],int,int): Removed - not needed. (gcd): Use rshift0 rather than rshift. * java/math/BigInteger.java (setShiftRight): Likewise. (divide): Simplify by using rshift0. (divide): Zero-extend results if high-order bit set. From-SVN: r40177
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/math/BigInteger.java25
1 files changed, 10 insertions, 15 deletions
diff --git a/libjava/java/math/BigInteger.java b/libjava/java/math/BigInteger.java
index 0d8608e..1d848d1 100644
--- a/libjava/java/math/BigInteger.java
+++ b/libjava/java/math/BigInteger.java
@@ -794,13 +794,7 @@ public class BigInteger extends Number implements Comparable
xwords[xlen++] = 0;
MPN.divide(xwords, xlen, ywords, ylen);
rlen = ylen;
- if (remainder != null || rounding_mode != TRUNCATE)
- {
- if (nshift == 0)
- System.arraycopy(xwords, 0, ywords, 0, rlen);
- else
- MPN.rshift(ywords, xwords, 0, rlen, nshift);
- }
+ MPN.rshift0 (ywords, xwords, 0, rlen, nshift);
qlen = xlen + 1 - ylen;
if (quotient != null)
@@ -810,6 +804,12 @@ public class BigInteger extends Number implements Comparable
}
}
+ if (ywords[rlen-1] < 0)
+ {
+ ywords[rlen] = 0;
+ rlen++;
+ }
+
// Now the quotient is in xwords, and the remainder is in ywords.
boolean add_one = false;
@@ -1399,15 +1399,10 @@ public class BigInteger extends Number implements Comparable
{
if (words == null || words.length < d_len)
realloc(d_len);
- if (count == 0)
- System.arraycopy(x.words, word_count, words, 0, d_len);
- else
- {
- MPN.rshift(words, x.words, word_count, d_len, count);
- if (neg)
- words[d_len-1] |= -1 << (32 - count);
- }
+ MPN.rshift0 (words, x.words, word_count, d_len, count);
ival = d_len;
+ if (neg)
+ words[d_len-1] |= -1 << (32 - count);
}
}
}