mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Add support for fpu and vfpu regs in expressions.
This way you can break based on the value.
This commit is contained in:
parent
33d6ee77cb
commit
5f3d7d5c97
4 changed files with 79 additions and 9 deletions
|
@ -26,6 +26,17 @@
|
|||
#include "../MIPS/MIPS.h"
|
||||
#include "../System.h"
|
||||
|
||||
enum ReferenceIndexType {
|
||||
REF_INDEX_PC = 32,
|
||||
REF_INDEX_HI = 33,
|
||||
REF_INDEX_LO = 34,
|
||||
REF_INDEX_FPU = 0x1000,
|
||||
REF_INDEX_FPU_INT = 0x2000,
|
||||
REF_INDEX_VFPU = 0x4000,
|
||||
REF_INDEX_VFPU_INT = 0x8000,
|
||||
REF_INDEX_IS_FLOAT = REF_INDEX_FPU | REF_INDEX_VFPU,
|
||||
};
|
||||
|
||||
|
||||
class MipsExpressionFunctions: public IExpressionFunctions
|
||||
{
|
||||
|
@ -37,20 +48,61 @@ public:
|
|||
for (int i = 0; i < 32; i++)
|
||||
{
|
||||
char reg[8];
|
||||
sprintf(reg,"r%d",i);
|
||||
sprintf(reg, "r%d", i);
|
||||
|
||||
if (strcasecmp(str,reg) == 0 || strcasecmp(str,cpu->GetRegName(0,i)) == 0)
|
||||
if (strcasecmp(str, reg) == 0 || strcasecmp(str, cpu->GetRegName(0, i)) == 0)
|
||||
{
|
||||
referenceIndex = i;
|
||||
return true;
|
||||
}
|
||||
else if (strcasecmp(str, cpu->GetRegName(1, i)) == 0)
|
||||
{
|
||||
referenceIndex = REF_INDEX_FPU | i;
|
||||
return true;
|
||||
}
|
||||
|
||||
sprintf(reg, "fi%d", i);
|
||||
if (strcasecmp(str, reg) == 0)
|
||||
{
|
||||
referenceIndex = REF_INDEX_FPU_INT | i;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (strcasecmp(str,"pc") == 0)
|
||||
for (int i = 0; i < 128; i++)
|
||||
{
|
||||
referenceIndex = 32;
|
||||
if (strcasecmp(str, cpu->GetRegName(2, i)) == 0)
|
||||
{
|
||||
referenceIndex = REF_INDEX_VFPU | i;
|
||||
return true;
|
||||
}
|
||||
|
||||
char reg[8];
|
||||
sprintf(reg, "vi%d", i);
|
||||
if (strcasecmp(str, reg) == 0)
|
||||
{
|
||||
referenceIndex = REF_INDEX_VFPU_INT | i;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (strcasecmp(str, "pc") == 0)
|
||||
{
|
||||
referenceIndex = REF_INDEX_PC;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (strcasecmp(str, "hi") == 0)
|
||||
{
|
||||
referenceIndex = REF_INDEX_HI;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (strcasecmp(str, "lo") == 0)
|
||||
{
|
||||
referenceIndex = REF_INDEX_LO;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -62,10 +114,27 @@ public:
|
|||
|
||||
virtual uint32 getReferenceValue(uint32 referenceIndex)
|
||||
{
|
||||
if (referenceIndex < 32) return cpu->GetRegValue(0,referenceIndex);
|
||||
if (referenceIndex == 32) return cpu->GetPC();
|
||||
if (referenceIndex < 32)
|
||||
return cpu->GetRegValue(0, referenceIndex);
|
||||
if (referenceIndex == REF_INDEX_PC)
|
||||
return cpu->GetPC();
|
||||
if (referenceIndex == REF_INDEX_HI)
|
||||
return cpu->GetHi();
|
||||
if (referenceIndex == REF_INDEX_LO)
|
||||
return cpu->GetLo();
|
||||
if ((referenceIndex & ~(REF_INDEX_FPU | REF_INDEX_FPU_INT)) < 32)
|
||||
return cpu->GetRegValue(1, referenceIndex & ~(REF_INDEX_FPU | REF_INDEX_FPU_INT));
|
||||
if ((referenceIndex & ~(REF_INDEX_VFPU | REF_INDEX_VFPU_INT)) < 128)
|
||||
return cpu->GetRegValue(2, referenceIndex & ~(REF_INDEX_VFPU | REF_INDEX_VFPU_INT));
|
||||
return -1;
|
||||
}
|
||||
|
||||
virtual ExpressionType getReferenceType(uint32 referenceIndex) {
|
||||
if (referenceIndex & REF_INDEX_IS_FLOAT) {
|
||||
return EXPR_TYPE_FLOAT;
|
||||
}
|
||||
return EXPR_TYPE_UINT;
|
||||
}
|
||||
|
||||
virtual bool getMemoryValue(uint32 address, int size, uint32& dest, char* error)
|
||||
{
|
||||
|
|
|
@ -103,6 +103,7 @@ public:
|
|||
{
|
||||
case 0:
|
||||
return cpu->r[index];
|
||||
|
||||
case 1:
|
||||
memcpy(&temp, &cpu->f[index], 4);
|
||||
return temp;
|
||||
|
|
|
@ -148,7 +148,7 @@ bool BreakpointWindow::fetchDialogData(HWND hwnd)
|
|||
|
||||
if (cpu->parseExpression(exp,size) == false)
|
||||
{
|
||||
sprintf(errorMessage,"Invalid expression \"%s\".",str);
|
||||
sprintf(errorMessage,"Invalid expression \"%s\".",exp);
|
||||
MessageBoxA(hwnd,errorMessage,"Error",MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
|
2
native
2
native
|
@ -1 +1 @@
|
|||
Subproject commit d6304959b0066866bb9802cf51f8ff5f623032eb
|
||||
Subproject commit d18b42427fa9c6ccb81254adcb1c45119be7b3c8
|
Loading…
Add table
Reference in a new issue