fix a bug in MMX get

This commit is contained in:
dreg_fr33project 2014-11-02 01:45:41 +01:00
parent 0599f49277
commit dce958c748
1 changed files with 32 additions and 8 deletions

View File

@ -910,35 +910,59 @@ __declspec(dllexport) bool TITCALL SetContextDataEx(HANDLE hActiveThread, DWORD
}
else if(IndexOfRegister == UE_MMX0)
{
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 0)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_MMX1)
{
memcpy(&(titcontext.RegisterArea[1 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 1)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_MMX2)
{
memcpy(&(titcontext.RegisterArea[2 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 2)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_MMX3)
{
memcpy(&(titcontext.RegisterArea[3 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 3)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_MMX4)
{
memcpy(&(titcontext.RegisterArea[4 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 4)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_MMX5)
{
memcpy(&(titcontext.RegisterArea[5 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 5)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_MMX6)
{
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 6)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_MMX7)
{
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 8);
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 7)), (char*) NewRegisterValue, 8);
}
else if(IndexOfRegister == UE_x87_r0)
{