From 316dfc6e5ee1a2468c99ff5c8890e932f6719c9b Mon Sep 17 00:00:00 2001 From: pcpa Date: Sun, 24 May 2015 14:34:16 -0300 Subject: [PATCH] aarch64: Correct va_list offsets and double load. * lib/jit_aarch64-fpu.c, lib/jit_aarch64.c: Correct base aarch64 varargs code. --- ChangeLog | 5 +++++ lib/jit_aarch64-fpu.c | 2 +- lib/jit_aarch64.c | 6 ++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index a39ed03d0..ddb7b75e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-06-24 Paulo Andrade + + * lib/jit_aarch64-fpu.c, lib/jit_aarch64.c: Correct base + aarch64 varargs code. + 2015-06-24 Paulo Andrade * check/lightning.c: Clearly run check if clang is the system diff --git a/lib/jit_aarch64-fpu.c b/lib/jit_aarch64-fpu.c index 1f13a14f1..ff6061aef 100644 --- a/lib/jit_aarch64-fpu.c +++ b/lib/jit_aarch64-fpu.c @@ -900,7 +900,7 @@ _vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) ldxi(rn(rg0), r1, offsetof(jit_va_list_t, stack)); /* Load argument. */ - ldr(r0, rn(rg0)); + ldr_d(r0, rn(rg0)); /* Update stack pointer. */ addi(rn(rg0), rn(rg0), 8); diff --git a/lib/jit_aarch64.c b/lib/jit_aarch64.c index 89c3edad6..0e1da0086 100644 --- a/lib/jit_aarch64.c +++ b/lib/jit_aarch64.c @@ -27,9 +27,7 @@ typedef struct jit_qreg { jit_float64_t h; } jit_qreg_t; -#define va_gp_min_offset -64 #define va_gp_top_offset offsetof(jit_va_list_t, q0) -#define va_fp_min_offset -128 #define va_fp_top_offset sizeof(jit_va_list_t) typedef struct jit_va_list { jit_pointer_t stack; @@ -340,13 +338,13 @@ _jit_ellipsis(jit_state_t *_jit) if (jit_arg_reg_p(_jitc->function->self.argi)) _jitc->function->vagp = (8 - _jitc->function->self.argi) * -8; else - _jitc->function->vagp = va_gp_min_offset; + _jitc->function->vagp = 0; /* Initialize fp offset in save area. */ if (jit_arg_f_reg_p(_jitc->function->self.argf)) _jitc->function->vafp = (8 - _jitc->function->self.argf) * -16; else - _jitc->function->vafp = va_fp_min_offset; + _jitc->function->vafp = 0; } }