rt/emul/mini/src/main/java/java/io/DataInputStream.java
brancharithmetic
changeset 778 6f8683517f1f
parent 772 d382dacfd73f
     1.1 --- a/rt/emul/mini/src/main/java/java/io/DataInputStream.java	Tue Feb 26 16:54:16 2013 +0100
     1.2 +++ b/rt/emul/mini/src/main/java/java/io/DataInputStream.java	Wed Feb 27 16:24:42 2013 +0100
     1.3 @@ -468,42 +468,8 @@
     1.4       * @see        java.lang.Double#longBitsToDouble(long)
     1.5       */
     1.6      public final double readDouble() throws IOException {
     1.7 -        int hi = readInt();
     1.8 -        int low = readInt();
     1.9 -        return toDouble(hi, low);
    1.10 -    }
    1.11 -    
    1.12 -    @JavaScriptBody(args={ "hi", "low" },
    1.13 -        body=
    1.14 -          "if (low == 0) {\n"
    1.15 -        + "  if (hi === 0x7ff00000) return Number.POSITIVE_INFINITY;\n"
    1.16 -        + "  if (hi === 0xfff00000) return Number.NEGATIVE_INFINITY;\n"
    1.17 -        + "}\n"
    1.18 -        + "if (hi >= 0x7ff00000 && hi <= 0x7fffffff) return Number.NaN;\n"
    1.19 -        + "if (hi >= 0xfff00000 && hi <= 0xffffffff) return Number.NaN;\n"
    1.20 -        + "var s = (hi & 0x80000000) === 0 ? 1 : -1;\n"
    1.21 -        + "var e = (hi >> 20) & 0x7ff;\n"
    1.22 -        + "var to32 = low >> 0;\n"
    1.23 -        + "if (e === 0) {\n"
    1.24 -        + "  if (to32 & 0x80000000) {\n"
    1.25 -        + "    hi = hi << 1 + 1; low = low << 1;\n"
    1.26 -        + "  } else {\n"
    1.27 -        + "    hi = hi << 1; low = low << 1;\n"
    1.28 -        + "  }\n" 
    1.29 -        + "} else {\n"
    1.30 -        + "    hi = (hi & 0xfffff) | 0x100000;\n"
    1.31 -        + "}\n"
    1.32 -        + "to32 = low >> 0;\n"
    1.33 -        + "var m = Math.pow(2.0, 32) * hi + to32;\n"
    1.34 -        + "var r = s * m * Math.pow(2.0, e - 1075);\n"
    1.35 -        + "//throw 'exp: ' + e + ' sign: ' + s + ' hi:' + hi + ' low: ' + low + ' m: ' + m + ' r: ' + r;\n"
    1.36 -        + "return r;\n"
    1.37 -    )
    1.38 -    private static double toDouble(int hi, int low) {
    1.39 -        long both = hi;
    1.40 -        both = (both << 32) & low;
    1.41 -        return Double.doubleToLongBits(both);
    1.42 -    }
    1.43 +        return Double.longBitsToDouble(readLong());
    1.44 +    }    
    1.45  
    1.46      private char lineBuffer[];
    1.47