diff --git a/pcsx2/x86/iCore.cpp b/pcsx2/x86/iCore.cpp index 629371ad68..e0bf5001f1 100644 --- a/pcsx2/x86/iCore.cpp +++ b/pcsx2/x86/iCore.cpp @@ -236,11 +236,19 @@ int _allocTempXMMreg(XMMSSEType type, int xmmreg) else _freeXMMreg(xmmreg); - xmmregs[xmmreg].inuse = 1; - xmmregs[xmmreg].type = XMMTYPE_TEMP; - xmmregs[xmmreg].needed = 1; - xmmregs[xmmreg].counter = g_xmmAllocCounter++; - g_xmmtypes[xmmreg] = type; + if (xmmreg == -1) + { + pxFailDev("*PCSX2*: XMM Reg Allocation Error in _allocTempXMMreg()!"); + throw Exception::FailedToAllocateRegister(); + } + else + { + xmmregs[xmmreg].inuse = 1; + xmmregs[xmmreg].type = XMMTYPE_TEMP; + xmmregs[xmmreg].needed = 1; + xmmregs[xmmreg].counter = g_xmmAllocCounter++; + g_xmmtypes[xmmreg] = type; + } return xmmreg; } @@ -317,13 +325,21 @@ int _allocFPtoXMMreg(int xmmreg, int fpreg, int mode) if (xmmreg == -1) xmmreg = _getFreeXMMreg(); - g_xmmtypes[xmmreg] = XMMT_FPS; - xmmregs[xmmreg].inuse = 1; - xmmregs[xmmreg].type = XMMTYPE_FPREG; - xmmregs[xmmreg].reg = fpreg; - xmmregs[xmmreg].mode = mode; - xmmregs[xmmreg].needed = 1; - xmmregs[xmmreg].counter = g_xmmAllocCounter++; + if (xmmreg == -1) + { + pxFailDev("*PCSX2*: XMM Reg Allocation Error in _allocFPtoXMMreg()!"); + throw Exception::FailedToAllocateRegister(); + } + else + { + g_xmmtypes[xmmreg] = XMMT_FPS; + xmmregs[xmmreg].inuse = 1; + xmmregs[xmmreg].type = XMMTYPE_FPREG; + xmmregs[xmmreg].reg = fpreg; + xmmregs[xmmreg].mode = mode; + xmmregs[xmmreg].needed = 1; + xmmregs[xmmreg].counter = g_xmmAllocCounter++; + } if (mode & MODE_READ) xMOVSSZX(xRegisterSSE(xmmreg), ptr[&fpuRegs.fpr[fpreg].f]); @@ -438,13 +454,21 @@ int _allocFPACCtoXMMreg(int xmmreg, int mode) if (xmmreg == -1) xmmreg = _getFreeXMMreg(); - g_xmmtypes[xmmreg] = XMMT_FPS; - xmmregs[xmmreg].inuse = 1; - xmmregs[xmmreg].type = XMMTYPE_FPACC; - xmmregs[xmmreg].mode = mode; - xmmregs[xmmreg].needed = 1; - xmmregs[xmmreg].reg = 0; - xmmregs[xmmreg].counter = g_xmmAllocCounter++; + if (xmmreg == -1) + { + pxFailDev("*PCSX2*: XMM Reg Allocation Error in _allocFPACCtoXMMreg()!"); + throw Exception::FailedToAllocateRegister(); + } + else + { + g_xmmtypes[xmmreg] = XMMT_FPS; + xmmregs[xmmreg].inuse = 1; + xmmregs[xmmreg].type = XMMTYPE_FPACC; + xmmregs[xmmreg].mode = mode; + xmmregs[xmmreg].needed = 1; + xmmregs[xmmreg].reg = 0; + xmmregs[xmmreg].counter = g_xmmAllocCounter++; + } if (mode & MODE_READ) {