- do register allocation for JIT in imcc - use the first N registers as MAPped processor registers
The "[RFC] imcc calling conventions" didn't get any response. Should I take this fact as an implict "yep, fine"?
Here is again the relevant part, which has implications on register renumbering, used for JIT optimization:
=head1 Parrot calling conventions (NCI)
Proposed syntax:
$P0 = load_lib "libname" $P1 = dlfunc $P0, "funcname", "signature" .nciarg z # I5 .nciarg y # I6 .nciarg x # I7 ncicall $P1 # r = funcname(x, y, z) .nciresult r
A code snippet like:
set I5, I0 dlfunc P0, P1, "func", "ii" invoke set I6, I5
now comes out as:
set ri1, ri0 dlfunc P0, P1, "func", "ii" invoke set ri0, ri1
which is clearly not, what pdd03 is intending. For plain PASM at least the .nciarg/.nciresult are necessary, to mark these parrot registers as fix and to have some hint for imcc, that dlfunc is actually using these registers.
So there are some possibilities:
- disable register renumbering for all compilation units, where a B<invoke> is found
- do it right, i.e. implement above (or a similar) syntax and rewrite existing code
leo