Ok, here is the hairy thing, discussed in the CGP thread.

hange in core.ops

This patch introduces the 1000th opcode, a asm("ret") for gcc/i386, a
noop else. This opcode is referenced directly as #2, so it should
better stay on the spot - and be documented :)

Changes in jit.c:

- The building of basic blocks now honors offsets in the fixup table.
  This is e.g. necessary for the tricky t/syn/eval_3 test in imcc,
  where a label is a jump target branched to from evaled code.

- Determination of normal vs JITted ops is a macro now. This allows
  JIT/i386 to fully use JITted vtable functions with register
  mappings.

Change in CGP core:

- for gcc the cur_opcode is kept in the %esi register. This speeds up
  unoptimized cgp_core to almost the -O3 performance and is used to
  call CGP code from JIT/i386.

JIT/i386:

- Use the CGP core for a seqence of normal (non JIT) ops. Thus the two
  fastest run loops are combined to give the best perfomance.
- do register mapping for JITed vtable calls

And

- some tests for checking the control flow JIT <-> CGP <-> normal core

And finally
- docs/dev/jit_i386.dev a document describing the inyards of code
  execution by means of an example.

Have fun,
leo

Reply via email to