[Nestedvm] Possible to pass floats in call in NestedVM?

skinhat skinhat skinhat at hotmail.com
Thu Mar 28 00:02:12 EDT 2013


Something I'm finding that works is to use 'user_info' if you want to pass floats to and from a function. For example 

C code call tryit
char *user_info[1024];

main()
{

    float *g;
   g=(float *)(user_info[0]);

   printf("%f\n",  *g);
  *g=28;

   return 0;
}


Java code that calls tryit. It passes the float 2.5f to the nestedVM code and the nested VM function changes it to 28

public static byte [] float2ByteArray (float value)
{  

     return ByteBuffer.allocate(4).putFloat(value).array();
}

                 rt = (Runtime) Class.forName("tests.tryit").newInstance();
                   
                 rt.start();
                 font=float2ByteArray(2.5f);
                 int fontAddr = rt.malloc(font.length);
                 rt.copyout(font,fontAddr,font.length);                
                 rt.setUserInfo(0,fontAddr);

                 rt.execute();

                 int ret = rt.getUserInfo(0);
                 byte[] bytes = new byte[4];
                 rt.copyin(ret, bytes, bytes.length);     
                 float f=ByteBuffer.wrap(bytes).getFloat();  
                 System.out.println(f);  // prints 28
 

 In this example I'm using main() but should work using NestedVM calls so could create a tryit function in C and have it access user_info.



CC: nestedvm at lists.hcoop.net
From: ehrmann at gmail.com
Subject: Re: [Nestedvm] Possible to pass floats in call in NestedVM?
Date: Tue, 19 Mar 2013 17:31:16 -0700
To: skinhat at hotmail.com

Well that's...lossy.

On Mar 19, 2013, at 5:22 PM, skinhat skinhat <skinhat at hotmail.com> wrote:





I looked at the SQLLite code and looks like they convert floats to 
strings and back. For example in NestedDB.java of SQLLite source its 
got:


    synchronized int bind_double(long stmt, int pos, double v) throws SQLException {
        return bind_text(stmt, pos, Double.toString(v)); // TODO
    }


   synchronized double value_double(Function f, int arg) throws SQLException {
        return Double.parseDouble(value_text(f, arg)); // TODO
    }

I might have to do the same.

> Date: Tue, 19 Mar 2013 23:11:22 +0100
> From: fratz at inf.uni-konstanz.de
> To: skinhat at hotmail.com
> Subject: Re: [Nestedvm] Possible to pass floats in call in NestedVM?
> 
> Hi,
> 
> Thinking about it, it may be possible to do
> float foo = *((float *) &integer);
> in C to get that float back, but I never tried anything like that.
> 
> However, there is a sqlite java interface (sqlite jdbc) that uses nestedvm,
> and that thing definitely has to pass floating point values to C, so it may
> be worth having a look at the relevant code.
> 
> regards
> Matthias
> 

Date: Mon, 18 Mar 2013 14:19:36 -0700
Subject: Re: [Nestedvm] Possible to pass floats in call in NestedVM?
From: ehrmann at gmail.com
To: skinhat at hotmail.com
CC: nestedvm at lists.hcoop.net

On Mon, Mar 18, 2013 at 1:04 PM, skinhat skinhat <skinhat at hotmail.com> wrote:

I have tried converting the float into raw int bits:
ia[i]=Float.floatToRawIntBits(f);

in runtime.java but just comes out to a huge integer.
  That's probably correct. Floats are stored very differently than ints, and the int version of a float will always look nothing like the float. The only exception I can think of is positive zero looking like an int zero. Negative zero looks completely different.
 		 	   		  
_______________________________________________
Nestedvm mailing list
Nestedvm at lists.hcoop.net
https://lists.hcoop.net/listinfo/nestedvm
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.hcoop.net/pipermail/nestedvm/attachments/20130328/6da18ede/attachment.htm 


More information about the Nestedvm mailing list