py/emitnative: Reuse need_reg_all func in need_stack_settled.
To reduce code size and code duplication. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
cc77b30639
commit
d0227d5862
|
@ -841,10 +841,13 @@ STATIC void need_reg_single(emit_t *emit, int reg_needed, int skip_stack_pos) {
|
|||
}
|
||||
}
|
||||
|
||||
// Ensures all unsettled registers that hold Python values are copied to the
|
||||
// concrete Python stack. All registers are then free to use.
|
||||
STATIC void need_reg_all(emit_t *emit) {
|
||||
for (int i = 0; i < emit->stack_size; i++) {
|
||||
stack_info_t *si = &emit->stack_info[i];
|
||||
if (si->kind == STACK_REG) {
|
||||
DEBUG_printf(" reg(%u) to local(%u)\n", si->data.u_reg, emit->stack_start + i);
|
||||
si->kind = STACK_VALUE;
|
||||
emit_native_mov_state_reg(emit, emit->stack_start + i, si->data.u_reg);
|
||||
}
|
||||
|
@ -871,16 +874,13 @@ STATIC vtype_kind_t load_reg_stack_imm(emit_t *emit, int reg_dest, const stack_i
|
|||
}
|
||||
}
|
||||
|
||||
// Copies all unsettled registers and immediates that are Python values into the
|
||||
// concrete Python stack. This ensures the concrete Python stack holds valid
|
||||
// values for the current stack_size.
|
||||
// This function may clobber REG_TEMP0.
|
||||
STATIC void need_stack_settled(emit_t *emit) {
|
||||
DEBUG_printf(" need_stack_settled; stack_size=%d\n", emit->stack_size);
|
||||
for (int i = 0; i < emit->stack_size; i++) {
|
||||
stack_info_t *si = &emit->stack_info[i];
|
||||
if (si->kind == STACK_REG) {
|
||||
DEBUG_printf(" reg(%u) to local(%u)\n", si->data.u_reg, emit->stack_start + i);
|
||||
si->kind = STACK_VALUE;
|
||||
emit_native_mov_state_reg(emit, emit->stack_start + i, si->data.u_reg);
|
||||
}
|
||||
}
|
||||
need_reg_all(emit);
|
||||
for (int i = 0; i < emit->stack_size; i++) {
|
||||
stack_info_t *si = &emit->stack_info[i];
|
||||
if (si->kind == STACK_IMM) {
|
||||
|
|
Loading…
Reference in New Issue