All --
I've committed the patch after fixing it up based on my recent commit
of the simplified DO_OP work. Here's what just went in:
* Two new ops, trace_ic and bounds_ic that twiddle bits in
interpreter->flags and set interpreter->resume_addr.
* Two new runops core variants, so now we cover the relevant
flag space over {trace, notrace} x {boundscheck, noboundscheck}
* Runops core selection that converts the flags into an index into
a core table (runops_cores) to get the core function pointer.
* A new trace_op variant that doesn't do bounds checking (used by
the non-bounds-checking-but-tracing runops core).
* PC is passed into the cores so that they can be used when
resuming (they used to assume starting at the beginning of the
code, which would thwart resumption).
* runops() itself is changed to have a while() loop in it so that
any time we drop out of the core, we'll resume if we have an
interpreter->resume_addr set (after reselecting the core, though).
* process_opfunc.pl has a new "macro": RESUME(), that sets up
interpreter->resume_addr. This is used by the new ops. The new
ops still return the new PC as the next op (which MUST be an
'end' op to force the core loop to terminate -- *pc being false
is the only termination condition we can count on for all cores).
* New interpreter flag: PARROT_BOUNDS_FLAG, used to control
bounds checking core selection.
* test_prog now has a '-b' flag in addition to the '-t' flag. Now,
bounds checking is off by default (I saw a performance boost:
6.3 Mop/s with -b, 7.0 Mop/s without).
* A new sample/test program: t/trace.pasm that twiddles the trace
flag while it is running.
Regards,
-- Gregor
_____________________________________________________________________
/ perl -e 'srand(-2091643526); print chr rand 90 for (0..4)' \
Gregor N. Purdy [EMAIL PROTECTED]
Focus Research, Inc. http://www.focusresearch.com/
8080 Beckett Center Drive #203 513-860-3570 vox
West Chester, OH 45069 513-860-3579 fax
\_____________________________________________________________________/