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;