lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat
-rw-r--r--lib/lightning.c 23
1 files changed, 7 insertions, 16 deletions
diff --git a/lib/lightning.c b/lib/lightning.c
index 94215b8..3d98663 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -1951,10 +1951,6 @@ _jit_optimize(jit_state_t *_jit)
do_setup();
do_follow(1);
- patch_registers();
- if (simplify())
- todo = 1;
-
jit_regset_set_ui(&regmask, 0);
for (offset = 0; offset < _jitc->reglen; offset++) {
if ((jit_class(_rvs[offset].spec) & (jit_class_gpr|jit_class_fpr)) &&
@@ -1993,6 +1989,10 @@ _jit_optimize(jit_state_t *_jit)
}
}
+ patch_registers();
+ if (simplify())
+ todo = 1;
+
for (node = _jitc->head; node; node = node->next) {
mask = jit_classify(node->code);
if (mask & jit_cc_a0_reg)
@@ -3981,8 +3981,9 @@ _register_change_p(jit_state_t *_jit, jit_node_t *node, jit_node_t *link,
}
}
else if ((value & jit_cc_a0_reg) && node->u.w == regno) {
- use = 1;
- change = !!(value & jit_cc_a0_chg);
+ if (value & jit_cc_a0_chg)
+ change = 1;
+ use = !change;
}
if (!use &&
(value & jit_cc_a1_reg) && node->v.w == regno) {
@@ -4037,9 +4038,7 @@ _patch_registers(jit_state_t *_jit)
jit_int32_t spec;
jit_int32_t regno;
jit_int32_t value;
- jit_block_t *block;
- block = NULL;
_jitc->function = NULL;
jit_reglive_setup();
@@ -4067,9 +4066,6 @@ _patch_registers(jit_state_t *_jit)
((jit_class(_rvs[value].spec) & spec) &
~jit_class_arg) == spec &&
!jit_regset_tstbit(&_jitc->regarg, value) &&
- (block == NULL ||
- !(jit_regset_tstbit(&block->reglive, value) ||
- jit_regset_tstbit(&block->regmask, value))) &&
!spill_reglive_p(node, value))
break;
}
@@ -4135,15 +4131,10 @@ _patch_registers(jit_state_t *_jit)
node->w.w = _jitc->function->regoff[regno];
node->link = NULL;
break;
- case jit_code_label:
- block = _jitc->blocks.ptr + node->v.w;
- break;
case jit_code_prolog:
- block = _jitc->blocks.ptr + node->v.w;
_jitc->function = _jitc->functions.ptr + node->w.w;
break;
case jit_code_epilog:
- block = _jitc->blocks.ptr + node->v.w;
_jitc->function = NULL;
break;
default:
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月16日 15:54:25 +0000

AltStyle によって変換されたページ (->オリジナル) /