// natFloat.cc - Implementation of java.lang.VMFloat native methods.

/* Copyright (C) 1998, 1999, 2001, 2006  Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

#include <config.h>

#include <java/lang/Float.h>
#include <java/lang/VMFloat.h>
#include <jvm.h>

union u
{
  jint l;
  jfloat d;
};

jint 
java::lang::VMFloat::floatToIntBits(jfloat value)
{
  union u u;
  u.d = value;
  jint e = u.l & 0x7f800000;
  jint f = u.l & 0x007fffff;

  if (e == 0x7f800000 && f != 0)
    u.l = 0x7fc00000;

  return u.l;
}

jint 
java::lang::VMFloat::floatToRawIntBits(jfloat value)
{
  union u u;
  u.d = value;  
  return u.l;
}

jfloat 
java::lang::VMFloat::intBitsToFloat(jint bits)
{
  union u u;
  u.l = bits;
  return u.d;
}

