mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-20 18:50:21 +02:00
Make it simpler to add support for more than 64 registers.
* include/lightning/jit_private.h, lib/jit_arm.c, lib/jit_mips-cpu.c, lib/jit_mips.c, lib/jit_ppc-cpu.c, lib/jit_ppc.c, lib/jit_print.c, lib/jit_sparc-cpu.c, lib/jit_sparc.c, lib/jit_x86-cpu.c, lib/jit_x86.c, lib/lightning.c: Change all jit_regset macros to take a pointer argument, to avoid structure copies when adding a port to an architecture with more than 64 registers.
This commit is contained in:
parent
066db584c9
commit
7bdd22bd99
13 changed files with 310 additions and 309 deletions
|
@ -3076,12 +3076,12 @@ _prolog(jit_state_t *_jit, jit_node_t *node)
|
|||
|
||||
# if __WORDSIZE == 32
|
||||
/* save any clobbered callee save gpr register */
|
||||
regno = jit_regset_scan1(_jitc->function->regset, _R14);
|
||||
regno = jit_regset_scan1(&_jitc->function->regset, _R14);
|
||||
if (regno == ULONG_MAX || regno > _R31)
|
||||
regno = _R31; /* aka _FP_REGNO */
|
||||
STMW(rn(regno), _SP_REGNO, -fpr_save_area - (32 * 4) + rn(regno) * 4);
|
||||
for (offset = 0; offset < 8; offset++) {
|
||||
if (jit_regset_tstbit(_jitc->function->regset, _F14 + offset))
|
||||
if (jit_regset_tstbit(&_jitc->function->regset, _F14 + offset))
|
||||
stxi_d(-fpr_save_area + offset * 8, _SP_REGNO, rn(_F14 + offset));
|
||||
}
|
||||
|
||||
|
@ -3093,11 +3093,11 @@ _prolog(jit_state_t *_jit, jit_node_t *node)
|
|||
stxi(16, _SP_REGNO, _R0_REGNO);
|
||||
offset = -144;
|
||||
for (regno = 0; regno < jit_size(save); regno++, offset += 8) {
|
||||
if (jit_regset_tstbit(_jitc->function->regset, save[regno]))
|
||||
if (jit_regset_tstbit(&_jitc->function->regset, save[regno]))
|
||||
stxi(offset, _SP_REGNO, rn(save[regno]));
|
||||
}
|
||||
for (offset = 0; offset < 8; offset++) {
|
||||
if (jit_regset_tstbit(_jitc->function->regset, _F14 + offset))
|
||||
if (jit_regset_tstbit(&_jitc->function->regset, _F14 + offset))
|
||||
stxi_d(-(152 + offset * 8), _SP_REGNO, rn(_F14 + offset));
|
||||
}
|
||||
|
||||
|
@ -3119,12 +3119,12 @@ _epilog(jit_state_t *_jit, jit_node_t *node)
|
|||
|
||||
MTLR(_R0_REGNO);
|
||||
|
||||
regno = jit_regset_scan1(_jitc->function->regset, _R14);
|
||||
regno = jit_regset_scan1(&_jitc->function->regset, _R14);
|
||||
if (regno == ULONG_MAX || regno > _R31)
|
||||
regno = _R31; /* aka _FP_REGNO */
|
||||
LMW(rn(regno), _SP_REGNO, -fpr_save_area - (32 * 4) + rn(regno) * 4);
|
||||
for (offset = 0; offset < 8; offset++) {
|
||||
if (jit_regset_tstbit(_jitc->function->regset, _F14 + offset))
|
||||
if (jit_regset_tstbit(&_jitc->function->regset, _F14 + offset))
|
||||
ldxi_d(rn(_F14 + offset), _SP_REGNO, -fpr_save_area + offset * 8);
|
||||
}
|
||||
|
||||
|
@ -3133,11 +3133,11 @@ _epilog(jit_state_t *_jit, jit_node_t *node)
|
|||
ldxi(_R0_REGNO, _SP_REGNO, 16);
|
||||
offset = -144;
|
||||
for (regno = 0; regno < jit_size(save); regno++, offset += 8) {
|
||||
if (jit_regset_tstbit(_jitc->function->regset, save[regno]))
|
||||
if (jit_regset_tstbit(&_jitc->function->regset, save[regno]))
|
||||
ldxi(rn(save[regno]), _SP_REGNO, offset);
|
||||
}
|
||||
for (offset = 0; offset < 8; offset++) {
|
||||
if (jit_regset_tstbit(_jitc->function->regset, _F14 + offset))
|
||||
if (jit_regset_tstbit(&_jitc->function->regset, _F14 + offset))
|
||||
ldxi_d(rn(_F14 + offset), _SP_REGNO, -(152 + offset * 8));
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue