# HG changeset patch # User nkeynes # Date 1231207416 0 # Node ID aa80962d6439fc7df04c4fe143f43209615da052 # Parent d41ee7994db799418da77dc916c8da487abb1b5f Back out the CALL_ptr change (need to handle relocation from end-of-cache to front in overflow situations) --- a/src/sh4/ia32abi.h Tue Jan 06 01:58:08 2009 +0000 +++ b/src/sh4/ia32abi.h Tue Jan 06 02:03:36 2009 +0000 @@ -38,7 +38,8 @@ */ static inline void call_func0( void *ptr ) { - CALL_ptr(ptr); + load_imm32(R_ECX, (uint32_t)ptr); + CALL_r32(R_ECX); } #ifdef HAVE_FASTCALL @@ -47,7 +48,8 @@ if( arg1 != R_EAX ) { MOV_r32_r32( arg1, R_EAX ); } - CALL_ptr(ptr); + load_imm32(R_ECX, (uint32_t)ptr); + CALL_r32(R_ECX); } static inline void call_func1_r32( int addr_reg, int arg1 ) @@ -83,7 +85,8 @@ if( arg1 != R_EAX ) { MOV_r32_r32( arg1, R_EAX ); } - CALL_ptr(ptr); + load_imm32(R_ECX, (uint32_t)ptr); + CALL_r32(R_ECX); } static inline void call_func2_r32( int addr_reg, int arg1, int arg2 ) @@ -128,7 +131,8 @@ MOV_r32_r32( arg1, R_EAX ); } load_exc_backpatch(R_EDX); - CALL_ptr(ptr); + load_imm32(R_ECX, (uint32_t)ptr); + CALL_r32(R_ECX); } static inline void call_func2_exc( void *ptr, int arg1, int arg2, int pc ) @@ -139,8 +143,9 @@ if( arg1 != R_EAX ) { MOV_r32_r32( arg1, R_EAX ); } - load_exc_backpatch(R_ECX); - CALL_ptr(ptr); + MOV_backpatch_esp8(0); + load_imm32(R_ECX, (uint32_t)ptr); + CALL_r32(R_ECX); } #else @@ -148,7 +153,8 @@ { SUB_imm8s_r32( 12, R_ESP ); PUSH_r32(arg1); - CALL_ptr(ptr); + load_imm32(R_ECX, (uint32_t)ptr); + CALL_r32(R_ECX); ADD_imm8s_r32( 16, R_ESP ); } @@ -157,7 +163,8 @@ SUB_imm8s_r32( 8, R_ESP ); PUSH_r32(arg2); PUSH_r32(arg1); - CALL_ptr(ptr); + load_imm32(R_ECX, (uint32_t)ptr); + CALL_r32(R_ECX); ADD_imm8s_r32( 16, R_ESP ); }