On Friday 29 November 2002 05:59, Leopold Toetsch wrote:
> Recent changes to jit:
>
> Register usage is now kept in an array per register type and is
> calculated for non jitted sections too.
>
> Register usage can be per section (a sequence of either jitted or
> nonjitted ops not separated by branches) or per basic block. This
> allows later to avoid some register loads, when there are preserved
> registers.[1][2]
> There are some commented out trials, to optimize register load/stores,
> but we have to solve at least [1] before going on here.
>
> All allocated memory in jit.c is now freed (except for
> REQUIRES_CONSTANT_POOL, which I don't know, what it does).
>
> There are now more tunable defines in jit_emit.h, where per
> architecture settings are kept:
> - preserved registers
> - dont allocate only once used registers
> - allocate regs per section or per block
> - align jump targets[3]
>
> All have reasonable defaults, which map the old behaviour, so no
> changes to architecture files should be needed currently.
>
>
> [1] we currently have no information, that e.g. C<popi> changes the
> parrot registers. For all other ops we have the ARGDIR flags. Proposed
> change for pop opcodes: set ARGDIR_OUT on the opcode.
>
> [2] when we know, that an external opcode doesn't throw an exception,
> we could avoid saving registers too.
>
> [3] I don't know, if it would be needed. I had some drastic slow down
> in mops.pasm, when there was an odd branch target, but this was not
> the reason actually, code size (or where the loop is located) seems to
> be the culprit, s. end of jit/i386/jit_emit.h - does anyone know,
> what's goin on here?

The problem is that we do want to allocate a hardware register for a Parrot 
register that is used only once in the section since the section can be 
executed more than once, if you don't mind I want to remove 
ALLOCATE_REGISTERS_ALWAYS.

Daniel Grunblatt.

Reply via email to