OSDN Git Service

* java/math/BigInteger.java(divide): Handle the special case when
authorwarrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Mar 2000 09:18:12 +0000 (09:18 +0000)
committerwarrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Mar 2000 09:18:12 +0000 (09:18 +0000)
dividing by 1 and the high bit of the dividend is set.
(setShiftRight): Handle case when count == 0.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32724 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/math/BigInteger.java

index a5270f7..8cc21f7 100644 (file)
@@ -1,5 +1,11 @@
 2000-03-24  Warren Levy  <warrenl@cygnus.com>
 
+       * java/math/BigInteger.java(divide): Handle the special case when
+       dividing by 1 and the high bit of the dividend is set.
+       (setShiftRight): Handle case when count == 0.
+
+2000-03-24  Warren Levy  <warrenl@cygnus.com>
+
        * java/awt/Font.java(isBold): Fix syntax error.
        (isItalic): ditto.
        * java/awt/Frame.java(postEvent): ditto.
index 69e7f68..738680a 100644 (file)
@@ -750,6 +750,12 @@ public class BigInteger extends Number implements Comparable
     else if (ylen == 1)
       {
        qlen = xlen;
+       // Need to leave room for a word of leading zeros if dividing by 1
+       // and the dividend has the high bit set.  It might be safe to
+       // increment qlen in all cases, but it certainly is only necessary
+       // in the following case.
+       if (ywords[0] == 1 && xwords[xlen-1] < 0)
+         qlen++;
        rlen = 1;
        ywords[0] = MPN.divmod_1(xwords, xwords, xlen, ywords[0]);
       }
@@ -770,7 +776,7 @@ public class BigInteger extends Number implements Comparable
            // significant word.
            int x_high = MPN.lshift(xwords, 0, xwords, xlen, nshift);
            xwords[xlen++] = x_high;
-       }
+         }
 
        if (xlen == ylen)
          xwords[xlen++] = 0;
@@ -1381,7 +1387,10 @@ public class BigInteger extends Number implements Comparable
          {
            if (words == null || words.length < d_len)
              realloc(d_len);
-           MPN.rshift(words, x.words, word_count, d_len, count);
+           if (count == 0)
+             System.arraycopy(x.words, word_count, words, 0, d_len);
+           else
+             MPN.rshift(words, x.words, word_count, d_len, count);
            ival = d_len;
            if (neg)
              words[ival-1] |= -1 << (32 - count);