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,