Soft float support and casting

Simon Kagstrom
Wed Nov 29 12:34:00 GMT 2006


I'm working on adding floating point support to Cibyl, my MIPS to Java
bytecode binary translator. After having studied the MIPS FPU and
NestedVM, I've decided that it's easier to rely on GCC's -msoft-float
option and implementing efficient versions of the library routines
(normally found in libgcc).

I believe I will be able to fairly easily construct efficient
implementations by invoking Java code which works on "native" floats,
i.e., something like

   /* C implementation */
   float __addsf3(float a, float b)
     /* This is actually a call to the Java method below */
     return __addsf3_helper(a,b);

   /* Java method */
   public static int __addsf3_helper(int _a, int _b)
     float a = Float.intBitsToFloat(_a);
     float b = Float.intBitsToFloat(_b);

     return Float.floatToIntBits(a + b);

I've looked in libgcc2.c and am unfortunately a bit unsure about how
to get GCC to directly cast an integer value to a float type. For
example, I would like to do something like this:

   float __floatsisf(long i)
       return (float)0x40c00000; /* float value 6.0 */

but the cast will of course turn this into some completely different
number. Can someone quickly explain how to do this?

// Simon

More information about the Gcc-help mailing list