guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 366/437: Correct inconsistency with jit_regno_patch


From: Andy Wingo
Subject: [Guile-commits] 366/437: Correct inconsistency with jit_regno_patch
Date: Mon, 2 Jul 2018 05:14:57 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit 2597bf3c13e25907d9c8c96f9b39e711cf1f353d
Author: pcpa <address@hidden>
Date:   Mon Feb 16 15:07:36 2015 -0200

    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.
---
 ChangeLog       | 7 +++++++
 lib/lightning.c | 8 +++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 59927ef..c1e93ec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-02-16 Paulo Andrade <address@hidden>
+
+       * 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.
+
 2015-02-15 Paulo Andrade <address@hidden>
 
        * lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c:
diff --git a/lib/lightning.c b/lib/lightning.c
index aab80f8..949deea 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]