Dalibor Topic schrieb:
Dalibor Topic wrote:
Robert Schuster wrote:
Hi.

Dalibor Topic schrieb:
On to the next problem: currently the jit regression test fails at a
floating point test.

The FAQ.arm says:
"From Kaffe's point of view, only 'FPA' is supported right now. Some
effort has been started to use 'VFP', and I hope we can rewrite this
section soon. For jit/jit3 engine, the support of 'FPA' is mandatory
(the internal code generation emits FPA instruction) and if you don't
have FPA (or FPA emulation by the operating system) only possibility
is to use interpreter engine."

I think that this may be the reason for the failing floating point test.

Debian arm on QEMU uses fpa (hard), so that's not causing the problem (and libffi does not help, either). It turned out that float to int conversion of NaNs was broken in some way, so I ripped that code out of the arm jit engine. Using the soft float to int conversion, the regression test on the jit engine pass, up to a hang after generating VMThrowable.fillInStackTrace and the soft_fixup_trampoline returning a value.

There is a warning related to soft_fixup_trampoline on arm (and it stretches all along the code use COMPARE_AND_EXCHANGE), so I'll try to see if using glib's atomic functions helps.

It helps fix the specific warning, but I'd like to take a closer look at locks.c, that uses COMPARE_AND_EXCHANGE, too, post 1.1.9. It wasn't the cause of the problem, anyway.

Looking a bit closer at this through gdb, it seems that we end up in an
infinite loop inside the buildStackTrace function when counting the stack traces. So the next step would be to try to figure out what's wrong with the exception frame code for arm-linux. My wild guess is that __builtin_frame_address(0) on gcc 4.1+ rears its ugly head again...
I've played a bit further with this, and now I've got a patch that changes the buildStackTrace function to stop counting frames when we start looping frames (happens on arm-linux-oabi). That fixes the jit test, and lets all but 27 regression tests pass in jit mode (gcc 4.2, libffi, etc.). I'll clean it up, and separate it from the
bits that replace COMPARE_AND_EXCHANGE with glib, and commit it.

The EABI jit test fails on returning float constant 0.0, as it gets 0x00000001 back. Any ideas from EABI folks
what may be causing that, and how to go about tracking it down?

My plan would be to look at making the interpreter pass on arm-oabi and arm-eabi without failures, and then to move on to the jits. I'd also like to see if I can rip out all the atomic* code in Kaffe's config dirs by using glib's atomic functions instead, as that would be less low level code from libc to keep around as copies in Kaffe.

Any volunteers for the arm-* interpreter failures?

cheers,
dalibor topic

_______________________________________________
kaffe mailing list
kaffe@kaffe.org
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to