yup,
    My first attempt to fix this was to change the way the internal java
stack was organised. stack items are 64 bits wide ( due to pointers )
rather than doubled and longs, which on a 32 bit world occupy 2 stack
slots. So while i can store a double, long, and a pointer into a 64 bit
alpha stack item, the jvm still wants to work in 32bit/slot/stack item
mode, and will allocate 2 items for a double, and long.
    Seemed simple enough at first, just fix all the code to accept 64
bit stack items. EXCEPT, it seems that the java byte-code also wants to
load, and store on 32bit offsets on the stack. fudge, and that caused
all sorts of phase problems with method calls. so had to drop the
effort, as it appears it will never work.
So I went back to assembler.
after that one finds out that the load double, and load float machine
instructions have to match the call stack signature - more work. And now
that I am writing this, i have to check be sure that double/float
returns from JNI are also stored properly.
I should have this v10 of the alpha jdk avail by late afternoon.
gat


Brett W Vasconcellos wrote:

> I have a native method:
>
> public native void foo(int a, double b, double c);
>
> When I call it: foo(2, 600, 32000) from Java,
> C reports a=2, b=600, but c=2.38778e-314.
> Let me know if you can't reproduce it.
>
> Brett



Reply via email to