guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 389/437: alpha: Save correct offset if loading a vararg


From: Andy Wingo
Subject: [Guile-commits] 389/437: alpha: Save correct offset if loading a vararg double.
Date: Mon, 2 Jul 2018 05:15:01 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit d6a5a90d5a567acd4ba4b853970fe3253c9b6ced
Author: Paulo Andrade <address@hidden>
Date:   Wed May 20 23:19:16 2015 -0300

    alpha: Save correct offset if loading a vararg double.
---
 lib/jit_alpha-fpu.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/lib/jit_alpha-fpu.c b/lib/jit_alpha-fpu.c
index 9d9143b..7152e72 100644
--- a/lib/jit_alpha-fpu.c
+++ b/lib/jit_alpha-fpu.c
@@ -1550,12 +1550,13 @@ static void
 _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
 {
     jit_word_t         ge_code;
-    jit_int32_t                rg0, rg1;
+    jit_int32_t                rg0, rg1, rg2;
 
     assert(_jitc->function->self.call & jit_call_varargs);
 
     rg0 = jit_get_reg(jit_class_gpr);
     rg1 = jit_get_reg(jit_class_gpr);
+    rg2 = jit_get_reg(jit_class_gpr);
 
     /* Load the base in first temporary. */
     ldxi(rn(rg0), r1, offsetof(jit_va_list_t, base));
@@ -1563,6 +1564,9 @@ _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t 
r1)
     /* Load the offset in the second temporary. */
     ldxi(rn(rg1), r1, offsetof(jit_va_list_t, offset));
 
+    /* Remember absolute offset */
+    movr(rn(rg2), rn(rg1));
+
     /* Jump if overflowed register saved area. */
     ge_code = bgei(_jit->pc.w, rn(rg1), 48);
     /* Otherwise load from the float registers save area. */
@@ -1573,11 +1577,12 @@ _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t 
r1)
     ldxr_d(r0, rn(rg0), rn(rg1));
 
     /* No longer needed. */
+    jit_unget_reg(rg1);
     jit_unget_reg(rg0);
 
     /* Update offset. */
-    addi(rn(rg1), rn(rg1), 8);
-    stxi(offsetof(jit_va_list_t, offset), r1, rn(rg1));
-    jit_unget_reg(rg1);
+    addi(rn(rg2), rn(rg2), 8);
+    stxi(offsetof(jit_va_list_t, offset), r1, rn(rg2));
+    jit_unget_reg(rg2);
 }
 #endif



reply via email to

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