extensions/tf2/criticals.cpp
changeset 2057 653c280c07dc
parent 2034 6d24764769cd
child 2058 f43380373441
     1.1 --- a/extensions/tf2/criticals.cpp	Sat May 17 05:12:52 2008 +0000
     1.2 +++ b/extensions/tf2/criticals.cpp	Sat May 17 08:30:17 2008 +0000
     1.3 @@ -88,13 +88,11 @@
     1.4  
     1.5  	//If TempDetour returns non-zero we want to load something into eax and return this value
     1.6  
     1.7 -	//IA32_Test_Rm_Reg(jit, eax, eax, something);
     1.8 -	jit->write_ubyte(0x85);
     1.9 -	jit->write_ubyte(0xC0);
    1.10 +	//test eax, eax
    1.11 +	IA32_Test_Rm_Reg(jit,  REG_EAX, REG_EAX, MOD_REG);
    1.12  
    1.13 -	//JNZ critical_callback+50
    1.14 -	jit->write_ubyte(0x75); 
    1.15 -	jit->write_ubyte(50-((jit->outptr+1)-jit->outbase));
    1.16 +	//jnz _skip
    1.17 +	call = IA32_Jump_Cond_Imm8(jit, CC_NZ, 0);
    1.18  
    1.19  	/* Patch old bytes in */
    1.20  	for (size_t i=0; i<critical_restore.bytes; i++)
    1.21 @@ -106,13 +104,11 @@
    1.22  	call = IA32_Jump_Imm32(jit, 0);
    1.23  	IA32_Write_Jump32_Abs(jit, call, (unsigned char *)critical_address + critical_restore.bytes);
    1.24  	
    1.25 -	wr.outbase = (jitcode_t)critical_callback+50;
    1.26 -	wr.outptr = wr.outbase;
    1.27 -
    1.28 -	//copy g_returnvalue into eax
    1.29 -	jit->write_ubyte(0xA1);
    1.30 -	jit->write_uint32((jit_uint32_t)&g_returnvalue);
    1.31 -
    1.32 +	//_skip:
    1.33 +	//mov eax, [g_returnvalue]
    1.34 +	//ret
    1.35 +	IA32_Send_Jump8_Here(jit, call);
    1.36 +	IA32_Mov_Eax_Mem(jit, (jit_int32_t)&g_returnvalue);
    1.37  	IA32_Return(jit);
    1.38  
    1.39  	return true;