1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-18 18:40:22 +02:00

Correct inconsistency with jit_regno_patch

* lib/lightning.c: Remove the jit_regno_patch bitfield
	register fields before actual emit, as it is only really
	used before emit, otherwise, on special	conditions it
	may consider live registers as dead during code emit.
This commit is contained in:
pcpa 2015-02-16 15:07:36 -02:00
parent 3a03feae5d
commit 2597bf3c13
2 changed files with 14 additions and 1 deletions

View file

@ -1501,6 +1501,13 @@ _jit_optimize(jit_state_t *_jit)
}
for (node = _jitc->head; node; node = node->next) {
mask = jit_classify(node->code);
if (mask & jit_cc_a0_reg)
node->u.w &= ~jit_regno_patch;
if (mask & jit_cc_a1_reg)
node->v.w &= ~jit_regno_patch;
if (mask & jit_cc_a2_reg)
node->w.w &= ~jit_regno_patch;
switch (node->code) {
case jit_code_prolog:
_jitc->function = _jitc->functions.ptr + node->w.w;
@ -1515,7 +1522,6 @@ _jit_optimize(jit_state_t *_jit)
redundant_store(node, 0);
break;
default:
mask = jit_classify(node->code);
#if JIT_HASH_CONSTS
if (mask & jit_cc_a1_flt) {
node->v.p = jit_data(&node->v.f, sizeof(jit_float32_t), 4);