From af9df5faeb74331d063afc221ebc0604728b8552 Mon Sep 17 00:00:00 2001 From: Paulo Andrade Date: Fri, 26 Dec 2014 17:23:39 -0200 Subject: [PATCH] PPC: Build and pass all tests in powerpcle * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Correct some endianess issues on the powerpc le backend. --- ChangeLog | 5 +++++ lib/jit_ppc-cpu.c | 6 +++++- lib/jit_ppc.c | 6 +++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1583aa59d..ae72602e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-12-26 Paulo Andrade + + * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Correct some endianess issues + on the powerpc le backend. + 2014-12-26 Paulo Andrade * lib/jit_ppc-cpu.c: Add mcrxr instruction emulation, diff --git a/lib/jit_ppc-cpu.c b/lib/jit_ppc-cpu.c index f358bfa14..b8f60663e 100644 --- a/lib/jit_ppc-cpu.c +++ b/lib/jit_ppc-cpu.c @@ -26,7 +26,11 @@ # define fits_uint32_p(im) 1 # else # define gpr_save_area 144 /* r14~r31 = 18 * 8 */ -# define params_offset 48 +# if if ABI_ELFv2 +# define params_offset 32 +# else +# define params_offset 48 +# endif # define can_sign_extend_int_p(im) \ (((im) >= 0 && (long)(im) <= 0x7fffffffL) || \ ((im) < 0 && (long)(im) >= -0x80000000L)) diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c index 4549c99e8..d3df78c98 100644 --- a/lib/jit_ppc.c +++ b/lib/jit_ppc.c @@ -279,7 +279,7 @@ _jit_arg_f(jit_state_t *_jit) if (_jitc->function->self.argf < 13) offset = _jitc->function->self.argf++; else { -#if __WORDSIZE == 32 +#if __WORDSIZE == 32 || __BYTE_ORDER == __LITTLE_ENDIAN offset = _jitc->function->self.size; #else offset = _jitc->function->self.size + 4; @@ -502,7 +502,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) #endif } else { -#if __WORDSIZE == 32 +#if __WORDSIZE == 32 || __BYTE_ORDER == __LITTLE_ENDIAN jit_stxi_f(_jitc->function->call.size + params_offset, JIT_SP, u); #else jit_stxi_f(_jitc->function->call.size + params_offset + 4, @@ -549,7 +549,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) #endif } else { -#if __WORDSIZE == 32 +#if __WORDSIZE == 32 || __BYTE_ORDER == __LITTLE_ENDIAN jit_stxi_f(_jitc->function->call.size + params_offset, JIT_SP, regno); #else jit_stxi_f(_jitc->function->call.size + params_offset + 4,