Bug in Jitter

Tim Wilkinson tim at transvirtual.com
Tue Jul 7 21:27:47 PDT 1998


Okay, I don't want to get drawn into this too 'cause I'm horribly busy at the
moment but just to clairy what sync_registers() does.

1. It's only used in the JIT (obviously, since there's no register in the
interpreter)
2. It writes out the current dirty registers to the stack.
3. It *does not* clean any registers nor does it flush the floating point
stack (on the x86).

Point (3) is crucial here - sync_registers is used to optimise (or hack
depending on how you look at it) some test and branch conditions which cause
exceptions.  The exception code must flush the registers before the exception
is actually called, but the main code shouldn't suffer from the performance
hit of turning this into a basic-block.   You cannot use sync_registers() in a
position where the control flow will join another control flow 'cause it'll
break sometimes.

Yes it's a hack - what can I say ...

Cheers
Tim

Alexandre Oliva wrote:

> Godmar Back <gback at cs.utah.edu> writes:
>
> >  I bet you wrote this off the top of your head or with a non-current
> > version in mind.
>
> Ok, I confess :-)
>
> > Also, sync_register doesn't reset the modified flags.
>
> I thought it did.  At least, it should; I can't find any reason for it
> not to do it.



--
  Tim Wilkinson                         Tel:     +1 510 704 1660
  Transvirtual Technologies, Inc.,      Fax:     +1 510 704 1893
  Berkeley, CA, USA.                    Email:   tim at transvirtual.com





More information about the kaffe mailing list