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