[kaffe] mipsel JIT3

Casey Marshall rsdio at metastatic.org
Thu Mar 4 10:17:02 PST 2004

Hash: SHA1


I've started hacking around the JIT3 sources, and have found at least
the first point of failure: spill() in jit3/register.c is being called
in such a way that reginfo[s->regno].ctype is 0, i.e. it's type field
is unset. This causes an immediate ABORT because there is (obviously)
no way to spill an untyped register. s->regno has always been 12 when
this happens, and this is the first time this register is ever

Along the culprit's trail is a call to slotAlias (jit3/machine.c),
which increments the reference count of reginfo[12], but leaves the
ctype field untouched, so when that register is requested (push_float
does this) it will be incorrectly spilled. So far I can't tell whether
or not this is the fault of the mips-specific code, since I can't
really get a stack trace far back enough.

My suspicion is that the mips code doesn't properly free a register or
slot, but I wanted to ask if anyone here has any idea why this
situation might come up.

Secondly: if I hack slotRegister() to fill in ctype if it is blank, I
get further, but then Float.isNaN returns false when given NaN,
causing toCharArrayWithPrecision to barf. This has got to be a
mips-specific bug.


- -- 
Casey Marshall || rsdio at metastatic.org
Version: GnuPG v1.2.3 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.7 <http://mailcrypt.sourceforge.net/>


More information about the kaffe mailing list