Soft float support and casting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello!

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

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux