# HG changeset patch # User nkeynes # Date 1289206571 -36000 # Node ID 76c5d10642627c966a3918e97b89096c3fb3361c # Parent 45674791c6ad984f63237566dd55e9360553f5d5 Fix 32-bit non-fastcall build --- a/src/sh4/sh4x86.in Mon Nov 08 14:33:38 2010 +1000 +++ b/src/sh4/sh4x86.in Mon Nov 08 18:56:11 2010 +1000 @@ -499,9 +499,9 @@ uint32_t sh4_translate_end_block_size() { if( sh4_x86.backpatch_posn <= 3 ) { - return EPILOGUE_SIZE + (sh4_x86.backpatch_posn*24); + return EPILOGUE_SIZE + (sh4_x86.backpatch_posn*(12+CALL1_PTR_MIN_SIZE)); } else { - return EPILOGUE_SIZE + 72 + (sh4_x86.backpatch_posn-3)*27; + return EPILOGUE_SIZE + (3*(12+CALL1_PTR_MIN_SIZE)) + (sh4_x86.backpatch_posn-3)*(15+CALL1_PTR_MIN_SIZE); } } --- a/src/xlat/x86/amd64abi.h Mon Nov 08 14:33:38 2010 +1000 +++ b/src/xlat/x86/amd64abi.h Mon Nov 08 18:56:11 2010 +1000 @@ -42,6 +42,7 @@ CALL_r32(REG_ECX); } +#define CALL1_PTR_MIN_SIZE 12 static inline void CALL1_ptr_r32( void *ptr, int arg1 ) { if( arg1 != REG_ARG1 ) { --- a/src/xlat/x86/ia32abi.h Mon Nov 08 14:33:38 2010 +1000 +++ b/src/xlat/x86/ia32abi.h Mon Nov 08 18:56:11 2010 +1000 @@ -44,6 +44,8 @@ } #ifdef HAVE_FASTCALL +#define CALL1_PTR_MIN_SIZE 7 + static inline void CALL1_ptr_r32( void *ptr, int arg1 ) { if( arg1 != REG_ARG1 ) { @@ -85,7 +87,10 @@ #define CALL3_r32disp_r32_r32_r32(preg,disp,arg1,arg2,arg3) CALL2_r32disp_r32_r32(preg,disp,arg1,arg2) #else -static inline void CALL1_ptr( void *ptr, int arg1 ) + +#define CALL1_PTR_MIN_SIZE (3+1+7+3) + +static inline void CALL1_ptr_r32( void *ptr, int arg1 ) { SUBL_imms_r32( 12, REG_ESP ); PUSH_r32(arg1); @@ -125,7 +130,7 @@ PUSH_r32(arg2); PUSH_r32(arg1); MOVL_rspdisp_r32( 16, REG_EAX ); - MOVL_r32_rspdisp( R_EAX, 8 ); + MOVL_r32_rspdisp( REG_EAX, 8 ); CALL_r32disp(preg,disp); ADDL_imms_r32( 16, REG_ESP ); }