----- Original Message -----
> While at it, also add missing Java 1.6 java/lang package constants.
>
> Signed-off-by: Pekka Enberg <penb...@kernel.org>
> ---
>  java/lang/Double.java                              |   17 ++++++-
>  java/lang/Float.java                               |   15 ++++++
>  java/lang/Math.java                                |   26 ++++++++++
>  native/fdlibm/fdlibm.h                             |    1 -
>  native/fdlibm/namespace.h                          |    1 -
>  native/jni/java-lang/Makefile.am                   |    1 +
>  .../jni/java-lang/java_lang_VMDouble_getExponent.c |   50
>  ++++++++++++++++++++
>  native/jni/java-lang/java_lang_VMFloat.c           |   10 ++++
>  scripts/math_symbols                               |    1 -
>  vm/reference/java/lang/VMDouble.java               |    2 +
>  vm/reference/java/lang/VMFloat.java                |    2 +
>  11 files changed, 122 insertions(+), 4 deletions(-)
>  create mode 100644
>  native/jni/java-lang/java_lang_VMDouble_getExponent.c
>
> diff --git a/java/lang/Double.java b/java/lang/Double.java
> index 3ae1b01..674e9f1 100644
> --- a/java/lang/Double.java
> +++ b/java/lang/Double.java
> @@ -96,7 +96,22 @@ public final class Double extends Number
> implements Comparable<Double>
>     */
>    public static final int SIZE = 64;
>
> - /**
> +  /**
> +   * @since 1.6
> +   */
> +  public static final double MIN_NORMAL = 0x1.0p-1022;
> +
> +  /**
> +   * @since 1.6
> +   */
> +  public static final int MAX_EXPONENT =
> Math.getExponent(Double.MAX_VALUE);
> +
> +  /**
> +   * @since 1.6
> +   */
> +  public static final int MIN_EXPONENT =
> Math.getExponent(Double.MIN_NORMAL);
> +
> +  /**
>     * The primitive type <code>double</code> is represented by this
>     * <code>Class</code> object.
>     * @since 1.1
> diff --git a/java/lang/Float.java b/java/lang/Float.java
> index a4a766e..06525f9 100644
> --- a/java/lang/Float.java
> +++ b/java/lang/Float.java
> @@ -104,6 +104,21 @@ public final class Float extends Number
> implements Comparable<Float>
>    public static final int SIZE = 32;
>
>    /**
> +   * @since 1.6
> +   */
> +  public static final float MIN_NORMAL = 0x1.0p-126f;
> +
> +  /**
> +   * @since 1.6
> +   */
> +  public static final int MAX_EXPONENT =
> Math.getExponent(Float.MAX_VALUE);
> +
> +  /**
> +   * @since 1.6
> +   */
> +  public static final int MIN_EXPONENT =
> Math.getExponent(Float.MIN_NORMAL);
> +
> +  /**
>     * Cache representation of 0
>     */
>    private static final Float ZERO = new Float(0.0f);
> diff --git a/java/lang/Math.java b/java/lang/Math.java
> index 6cf29b4..8dc911c 100644
> --- a/java/lang/Math.java
> +++ b/java/lang/Math.java
> @@ -1049,4 +1049,30 @@ public final class Math
>        }
>      return Float.intBitsToFloat((newExponent << mantissaBits) |
>      newMantissa);
>    }
> +
> +  /**
> +   * @since 1.6
> +   */
> +  public static int getExponent(float f)
> +  {
> +    if (Float.isNaN(f) || Float.isInfinite(f))
> +      return Float.MAX_EXPONENT + 1;
> +    else if (f == 0.0f)
> +      return Float.MIN_EXPONENT - 1;
> +    else
> +      return VMFloat.getExponent(f);
> +  }
> +
> +  /**
> +   * @since 1.6
> +   */
> +  public static int getExponent(double d)
> +  {
> +    if (Double.isNaN(d) || Double.isInfinite(d))
> +      return Double.MAX_EXPONENT + 1;
> +    else if (d == 0.0)
> +      return Double.MIN_EXPONENT - 1;
> +    else
> +      return VMDouble.getExponent(d);
> +  }
>  }
> diff --git a/native/fdlibm/fdlibm.h b/native/fdlibm/fdlibm.h
> index fc10ecc..6883808 100644
> --- a/native/fdlibm/fdlibm.h
> +++ b/native/fdlibm/fdlibm.h
> @@ -150,7 +150,6 @@ extern double sinh __P((double));
>  extern double tanh __P((double));
>
>  extern double exp __P((double));
> -extern double frexp __P((double, int *));
>  extern double ldexp __P((double, int));
>  extern double log __P((double));
>  extern double log10 __P((double));
> diff --git a/native/fdlibm/namespace.h b/native/fdlibm/namespace.h
> index 2e6e52b..c4ee642 100644
> --- a/native/fdlibm/namespace.h
> +++ b/native/fdlibm/namespace.h
> @@ -10,7 +10,6 @@
>  #define sinh ClasspathMath_sinh
>  #define tanh ClasspathMath_tanh
>  #define exp ClasspathMath_exp
> -#define frexp ClasspathMath_frexp
>  #define ldexp ClasspathMath_ldexp
>  #define expm1 ClasspathMath_expm1
>  #define log ClasspathMath_log
> diff --git a/native/jni/java-lang/Makefile.am
> b/native/jni/java-lang/Makefile.am
> index e1bc7ce..b853e72 100644
> --- a/native/jni/java-lang/Makefile.am
> +++ b/native/jni/java-lang/Makefile.am
> @@ -3,6 +3,7 @@ nativeexeclib_LTLIBRARIES = libjavalang.la
> libjavalangreflect.la libjavalangmana
>  libjavalang_la_SOURCES = java_lang_VMSystem.c \
>                        java_lang_VMFloat.c \
>                        java_lang_VMDouble.c \
> +                      java_lang_VMDouble_getExponent.c \
>                        java_lang_VMMath.c \
>                        java_lang_VMProcess.c
>
> diff --git a/native/jni/java-lang/java_lang_VMDouble_getExponent.c
> b/native/jni/java-lang/java_lang_VMDouble_getExponent.c
> new file mode 100644
> index 0000000..4f324bc
> --- /dev/null
> +++ b/native/jni/java-lang/java_lang_VMDouble_getExponent.c
> @@ -0,0 +1,50 @@
> +/* VMDouble.c - java.lang.VMDouble native functions
> +   Copyright (C) 2012  Free Software Foundation, Inc.
> +
> +This file is part of GNU Classpath.
> +
> +GNU Classpath is free software; you can redistribute it and/or
> modify
> +it under the terms of the GNU General Public License as published by
> +the Free Software Foundation; either version 2, or (at your option)
> +any later version.
> +
> +GNU Classpath is distributed in the hope that it will be useful, but
> +WITHOUT ANY WARRANTY; without even the implied warranty of
> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +General Public License for more details.
> +
> +You should have received a copy of the GNU General Public License
> +along with GNU Classpath; see the file COPYING.  If not, write to
> the
> +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
> Boston, MA
> +02110-1301 USA.
> +
> +Linking this library statically or dynamically with other modules is
> +making a combined work based on this library.  Thus, the terms and
> +conditions of the GNU General Public License cover the whole
> +combination.
> +
> +As a special exception, the copyright holders of this library give
> you
> +permission to link this library with independent modules to produce
> an
> +executable, regardless of the license terms of these independent
> +modules, and to copy and distribute the resulting executable under
> +terms of your choice, provided that you also meet, for each linked
> +independent module, the terms and conditions of the license of that
> +module.  An independent module is a module which is not derived from
> +or based on this library.  If you modify this library, you may
> extend
> +this exception to your version of the library, but you are not
> +obligated to do so.  If you do not wish to do so, delete this
> +exception statement from your version. */
> +
> +
> +#include <config.h>
> +#include <math.h>
> +
> +#include "java_lang_VMDouble.h"
> +
> +JNIEXPORT jint JNICALL
> +Java_java_lang_VMDouble_getExponent
> +  (JNIEnv *env __attribute__ ((__unused__)),
> +   jclass cls __attribute__ ((__unused__)), jdouble d)
> +{
> +  return ilogb(d);
> +}
> diff --git a/native/jni/java-lang/java_lang_VMFloat.c
> b/native/jni/java-lang/java_lang_VMFloat.c
> index acd07ff..bbebe0d 100644
> --- a/native/jni/java-lang/java_lang_VMFloat.c
> +++ b/native/jni/java-lang/java_lang_VMFloat.c
> @@ -40,6 +40,8 @@ exception statement from your version. */
>
>  #include "java_lang_VMFloat.h"
>
> +#include <math.h>
> +
>  /*
>   * Class:     java_lang_VMFloat
>   * Method:    floatToRawIntBits
> @@ -69,3 +71,11 @@ Java_java_lang_VMFloat_intBitsToFloat
>    u.i = bits;
>    return u.f;
>  }
> +
> +JNIEXPORT jint JNICALL
> +Java_java_lang_VMFloat_getExponent
> +  (JNIEnv *env __attribute__ ((__unused__)),
> +   jclass cls __attribute__ ((__unused__)), jfloat f)
> +{
> +  return ilogbf(f);
> +}
> diff --git a/scripts/math_symbols b/scripts/math_symbols
> index e676a51..6b076a9 100644
> --- a/scripts/math_symbols
> +++ b/scripts/math_symbols
> @@ -9,7 +9,6 @@ cosh
>  sinh
>  tanh
>  exp
> -frexp
>  ldexp
>  expm1
>  log
> diff --git a/vm/reference/java/lang/VMDouble.java
> b/vm/reference/java/lang/VMDouble.java
> index edfa723..6992f44 100644
> --- a/vm/reference/java/lang/VMDouble.java
> +++ b/vm/reference/java/lang/VMDouble.java
> @@ -119,4 +119,6 @@ final class VMDouble
>     * @throws NullPointerException if str is null
>     */
>    static native double parseDouble(String str);
> +
> +  static native int getExponent(double d);
>  }
> diff --git a/vm/reference/java/lang/VMFloat.java
> b/vm/reference/java/lang/VMFloat.java
> index e6e784f..03843ed 100644
> --- a/vm/reference/java/lang/VMFloat.java
> +++ b/vm/reference/java/lang/VMFloat.java
> @@ -117,4 +117,6 @@ final class VMFloat
>      // the infinitely precise decimal.
>      return (float) Double.parseDouble(str);
>    }
> +
> +  static native int getExponent(float f);
>  } // class VMFloat
> --
> 1.7.4.1
>
>
>

Couple of questions:

1.  What is the reason for the removal of frexp?
2.  How are you compiling this?  IcedTea contains a patch
which was required to make things like MIN/MAX_VALUE with hex
digits work on ecj + Classpath:

--- openjdk-ecj.orig/jdk/src/share/classes/java/lang/Double.java        
2010-05-26 09:32:38.000000000 +0100
+++ openjdk-ecj/jdk/src/share/classes/java/lang/Double.java     2010-05-26 
15:02:51.000000000 +0100
@@ -76,7 +76,7 @@
      * {@code 0x1.fffffffffffffP+1023} and also equal to
      * {@code Double.longBitsToDouble(0x7fefffffffffffffL)}.
      */
-    public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 
1.7976931348623157e+308
+    public static final double MAX_VALUE = 1.7976931348623157e+308;

We don't want to be in a situation where we can't compile ourselves!
--
Andrew :)

Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

PGP Key: 248BDC07 (https://keys.indymedia.org/)
Fingerprint = EC5A 1F5E C0AD 1D15 8F1F  8F91 3B96 A578 248B DC07


Reply via email to