last fpu changes
This commit is contained in:
parent
a1a0d02c8b
commit
0705384dbe
|
@ -368,12 +368,71 @@ typedef struct
|
|||
bool o;
|
||||
} FLAGS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
bool FZ;
|
||||
bool PM;
|
||||
bool UM;
|
||||
bool OM;
|
||||
bool ZM;
|
||||
bool IM;
|
||||
bool DM;
|
||||
bool DAZ;
|
||||
bool PE;
|
||||
bool UE;
|
||||
bool OE;
|
||||
bool ZE;
|
||||
bool DE;
|
||||
bool IE;
|
||||
|
||||
unsigned short RC;
|
||||
} MxCsr_FIELDS_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
bool B;
|
||||
bool C3;
|
||||
bool C2;
|
||||
bool C1;
|
||||
bool C0;
|
||||
bool IR;
|
||||
bool SF;
|
||||
bool P;
|
||||
bool U;
|
||||
bool O;
|
||||
bool Z;
|
||||
bool D;
|
||||
bool I;
|
||||
|
||||
unsigned short TOP;
|
||||
|
||||
} x87StatusWord_FIELDS_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
bool IC;
|
||||
bool IEM;
|
||||
bool PM;
|
||||
bool UM;
|
||||
bool OM;
|
||||
bool ZM;
|
||||
bool DM;
|
||||
bool IM;
|
||||
|
||||
unsigned short RC;
|
||||
unsigned short PC;
|
||||
|
||||
} x87ControlWord_FIELDS_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TITAN_ENGINE_CONTEXT_t titcontext;
|
||||
FLAGS flags;
|
||||
x87FPURegister_t x87FPURegisters[8];
|
||||
uint64_t mmx[8];
|
||||
MxCsr_FIELDS_t MxCsrFields;
|
||||
x87StatusWord_FIELDS_t x87StatusWordFields;
|
||||
x87ControlWord_FIELDS_t x87ControlWordFields;
|
||||
} REGDUMP;
|
||||
|
||||
typedef struct
|
||||
|
|
Binary file not shown.
|
@ -332,6 +332,37 @@ extern "C" DLL_EXPORT int _dbg_bpgettypeat(duint addr)
|
|||
return cacheResult;
|
||||
}
|
||||
|
||||
void GetMxCsrFields(MxCsr_FIELDS_t* MxCsrFields, DWORD MxCsr)
|
||||
{
|
||||
MxCsrFields->DAZ = valmxcsrflagfromstring(MxCsr, "DAZ");
|
||||
MxCsrFields->DE = valmxcsrflagfromstring(MxCsr, "DE");
|
||||
MxCsrFields->FZ = valmxcsrflagfromstring(MxCsr, "FZ");
|
||||
MxCsrFields->IE = valmxcsrflagfromstring(MxCsr, "IE");
|
||||
MxCsrFields->IM = valmxcsrflagfromstring(MxCsr, "IM");
|
||||
MxCsrFields->DM = valmxcsrflagfromstring(MxCsr, "DM");
|
||||
MxCsrFields->OE = valmxcsrflagfromstring(MxCsr, "OE");
|
||||
MxCsrFields->OM = valmxcsrflagfromstring(MxCsr, "OM");
|
||||
MxCsrFields->PE = valmxcsrflagfromstring(MxCsr, "PE");
|
||||
MxCsrFields->PM = valmxcsrflagfromstring(MxCsr, "PM");
|
||||
MxCsrFields->UE = valmxcsrflagfromstring(MxCsr, "UE");
|
||||
MxCsrFields->UM = valmxcsrflagfromstring(MxCsr, "UM");
|
||||
MxCsrFields->ZE = valmxcsrflagfromstring(MxCsr, "ZE");
|
||||
MxCsrFields->ZM = valmxcsrflagfromstring(MxCsr, "ZM");
|
||||
|
||||
//MxCsrFields->RC = valmxcsrfieldfromstring(MxCsr, "RC")
|
||||
}
|
||||
|
||||
void Getx87ControlWordFields(x87ControlWord_FIELDS_t* x87ControlWordFields, WORD ControlWord)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Getx87StatusWordFields(x87StatusWord_FIELDS_t* x87StatusWordFields, WORD StatusWord)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
||||
{
|
||||
if(!DbgIsDebugging())
|
||||
|
@ -356,6 +387,10 @@ extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
|||
|
||||
Getx87FPURegisters(regdump->x87FPURegisters, & (regdump->titcontext));
|
||||
GetMMXRegisters(regdump->mmx, & (regdump->titcontext));
|
||||
GetMxCsrFields(& (regdump->MxCsrFields), regdump->titcontext.MxCsr);
|
||||
Getx87ControlWordFields(& (regdump->x87ControlWordFields), regdump->titcontext.x87fpu.ControlWord);
|
||||
Getx87StatusWordFields(& (regdump->x87StatusWordFields), regdump->titcontext.x87fpu.StatusWord);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -257,6 +257,60 @@ static bool isregister(const char* string)
|
|||
return false;
|
||||
}
|
||||
|
||||
#define MXCSRFLAG_IE 0x1
|
||||
#define MXCSRFLAG_DE 0x4
|
||||
#define MXCSRFLAG_ZE 0x8
|
||||
#define MXCSRFLAG_OE 0x10
|
||||
#define MXCSRFLAG_UE 0x20
|
||||
#define MXCSRFLAG_PE 0x40
|
||||
#define MXCSRFLAG_DAZ 0x80
|
||||
#define MXCSRFLAG_IM 0x100
|
||||
#define MXCSRFLAG_DM 0x200
|
||||
#define MXCSRFLAG_ZM 0x400
|
||||
#define MXCSRFLAG_OM 0x800
|
||||
#define MXCSRFLAG_UM 0x1000
|
||||
#define MXCSRFLAG_PM 0x2000
|
||||
#define MXCSRFLAG_FZ 0x4000
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char* name;
|
||||
uint flag;
|
||||
|
||||
} FLAG_NAME_VALUE_TABLE_t;
|
||||
|
||||
#define MXCSR_NAME_FLAG_TABLE_ENTRY(flag_name) { #flag_name, MXCSRFLAG_##flag_name }
|
||||
|
||||
bool valmxcsrflagfromstring(uint mxcsrflags, const char* string)
|
||||
{
|
||||
static FLAG_NAME_VALUE_TABLE_t mxcsrnameflagtable[] =
|
||||
{
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(IE),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(DE),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(ZE),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(OE),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(UE),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(PE),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(DAZ),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(IM),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(DM),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(ZM),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(OM),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(UM),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(PM),
|
||||
MXCSR_NAME_FLAG_TABLE_ENTRY(FZ)
|
||||
};
|
||||
int i;
|
||||
|
||||
for(i = 0; i < (sizeof(mxcsrnameflagtable) / sizeof(*mxcsrnameflagtable)); i++)
|
||||
{
|
||||
if(scmp(string, mxcsrnameflagtable[i].name))
|
||||
return (bool)((int)(mxcsrflags & mxcsrnameflagtable[i].flag) != 0);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool valflagfromstring(uint eflags, const char* string)
|
||||
{
|
||||
if(scmp(string, "cf"))
|
||||
|
|
|
@ -13,5 +13,6 @@ bool valfromstring(const char* string, uint* value, bool silent);
|
|||
bool valfromstring(const char* string, uint* value);
|
||||
bool valflagfromstring(uint eflags, const char* string);
|
||||
bool valtostring(const char* string, uint* value, bool silent);
|
||||
bool valmxcsrflagfromstring(uint mxcsrflags, const char* string);
|
||||
|
||||
#endif // _VALUE_H
|
||||
|
|
|
@ -37,167 +37,349 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
|
||||
// general purposes register (we allow the user to modify the value)
|
||||
mGPR.insert(CAX);
|
||||
mCANSTOREADDRESS.insert(CAX);
|
||||
mUINTDISPLAY.insert(CAX);
|
||||
mLABELDISPLAY.insert(CAX);
|
||||
mMODIFYDISPLAY.insert(CAX);
|
||||
mINCREMENTDECREMET.insert(CAX);
|
||||
mSETONEZEROTOGGLE.insert(CAX);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(CBX);
|
||||
mINCREMENTDECREMET.insert(CBX);
|
||||
mGPR.insert(CBX);
|
||||
mUINTDISPLAY.insert(CBX);
|
||||
mLABELDISPLAY.insert(CBX);
|
||||
mMODIFYDISPLAY.insert(CBX);
|
||||
mCANSTOREADDRESS.insert(CBX);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(CCX);
|
||||
mINCREMENTDECREMET.insert(CCX);
|
||||
mGPR.insert(CCX);
|
||||
mUINTDISPLAY.insert(CCX);
|
||||
mLABELDISPLAY.insert(CCX);
|
||||
mMODIFYDISPLAY.insert(CCX);
|
||||
mCANSTOREADDRESS.insert(CCX);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(CDX);
|
||||
mINCREMENTDECREMET.insert(CDX);
|
||||
mGPR.insert(CDX);
|
||||
mUINTDISPLAY.insert(CDX);
|
||||
mLABELDISPLAY.insert(CDX);
|
||||
mMODIFYDISPLAY.insert(CDX);
|
||||
mCANSTOREADDRESS.insert(CCX);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(CBP);
|
||||
mINCREMENTDECREMET.insert(CBP);
|
||||
mCANSTOREADDRESS.insert(CBP);
|
||||
mGPR.insert(CBP);
|
||||
mUINTDISPLAY.insert(CBP);
|
||||
mLABELDISPLAY.insert(CBP);
|
||||
mMODIFYDISPLAY.insert(CBP);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(CSP);
|
||||
mINCREMENTDECREMET.insert(CSP);
|
||||
mCANSTOREADDRESS.insert(CSP);
|
||||
mGPR.insert(CSP);
|
||||
mUINTDISPLAY.insert(CSP);
|
||||
mLABELDISPLAY.insert(CSP);
|
||||
mMODIFYDISPLAY.insert(CSP);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(CSI);
|
||||
mINCREMENTDECREMET.insert(CSI);
|
||||
mCANSTOREADDRESS.insert(CSI);
|
||||
mGPR.insert(CSI);
|
||||
mUINTDISPLAY.insert(CSI);
|
||||
mLABELDISPLAY.insert(CSI);
|
||||
mMODIFYDISPLAY.insert(CSI);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(CDI);
|
||||
mINCREMENTDECREMET.insert(CDI);
|
||||
mCANSTOREADDRESS.insert(CDI);
|
||||
mGPR.insert(CDI);
|
||||
mUINTDISPLAY.insert(CDI);
|
||||
mLABELDISPLAY.insert(CDI);
|
||||
mMODIFYDISPLAY.insert(CDI);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R8);
|
||||
mINCREMENTDECREMET.insert(R8);
|
||||
mCANSTOREADDRESS.insert(R8);
|
||||
mGPR.insert(R8);
|
||||
mLABELDISPLAY.insert(R8);
|
||||
mUINTDISPLAY.insert(R8);
|
||||
mMODIFYDISPLAY.insert(R8);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R9);
|
||||
mINCREMENTDECREMET.insert(R9);
|
||||
mCANSTOREADDRESS.insert(R9);
|
||||
mGPR.insert(R9);
|
||||
mLABELDISPLAY.insert(R9);
|
||||
mUINTDISPLAY.insert(R9);
|
||||
mMODIFYDISPLAY.insert(R9);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R10);
|
||||
mINCREMENTDECREMET.insert(R10);
|
||||
mCANSTOREADDRESS.insert(R10);
|
||||
mGPR.insert(R10);
|
||||
mMODIFYDISPLAY.insert(R10);
|
||||
mUINTDISPLAY.insert(R10);
|
||||
mLABELDISPLAY.insert(R10);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R11);
|
||||
mINCREMENTDECREMET.insert(R11);
|
||||
mCANSTOREADDRESS.insert(R11);
|
||||
mGPR.insert(R11);
|
||||
mMODIFYDISPLAY.insert(R11);
|
||||
mUINTDISPLAY.insert(R11);
|
||||
mLABELDISPLAY.insert(R11);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R12);
|
||||
mINCREMENTDECREMET.insert(R12);
|
||||
mCANSTOREADDRESS.insert(R12);
|
||||
mGPR.insert(R12);
|
||||
mMODIFYDISPLAY.insert(R12);
|
||||
mUINTDISPLAY.insert(R12);
|
||||
mLABELDISPLAY.insert(R12);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R13);
|
||||
mINCREMENTDECREMET.insert(R13);
|
||||
mCANSTOREADDRESS.insert(R13);
|
||||
mGPR.insert(R13);
|
||||
mMODIFYDISPLAY.insert(R13);
|
||||
mUINTDISPLAY.insert(R13);
|
||||
mLABELDISPLAY.insert(R13);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R14);
|
||||
mINCREMENTDECREMET.insert(R14);
|
||||
mCANSTOREADDRESS.insert(R14);
|
||||
mGPR.insert(R14);
|
||||
mMODIFYDISPLAY.insert(R14);
|
||||
mUINTDISPLAY.insert(R14);
|
||||
mLABELDISPLAY.insert(R14);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(R15);
|
||||
mINCREMENTDECREMET.insert(R15);
|
||||
mCANSTOREADDRESS.insert(R15);
|
||||
mGPR.insert(R15);
|
||||
mMODIFYDISPLAY.insert(R15);
|
||||
mUINTDISPLAY.insert(R15);
|
||||
mLABELDISPLAY.insert(R15);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(EFLAGS);
|
||||
mINCREMENTDECREMET.insert(EFLAGS);
|
||||
mGPR.insert(EFLAGS);
|
||||
mMODIFYDISPLAY.insert(EFLAGS);
|
||||
mUINTDISPLAY.insert(EFLAGS);
|
||||
|
||||
// flags (we allow the user to toggle them)
|
||||
mFlags.insert(CF);
|
||||
mBOOLDISPLAY.insert(CF);
|
||||
mSETONEZEROTOGGLE.insert(CF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(PF);
|
||||
mFlags.insert(PF);
|
||||
mBOOLDISPLAY.insert(PF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(AF);
|
||||
mFlags.insert(AF);
|
||||
mBOOLDISPLAY.insert(AF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(ZF);
|
||||
mFlags.insert(ZF);
|
||||
mBOOLDISPLAY.insert(ZF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(SF);
|
||||
mFlags.insert(SF);
|
||||
mBOOLDISPLAY.insert(SF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(TF);
|
||||
mFlags.insert(TF);
|
||||
mBOOLDISPLAY.insert(TF);
|
||||
|
||||
mFlags.insert(IF);
|
||||
mBOOLDISPLAY.insert(IF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(DF);
|
||||
mFlags.insert(DF);
|
||||
mBOOLDISPLAY.insert(DF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(OF);
|
||||
mFlags.insert(OF);
|
||||
mBOOLDISPLAY.insert(OF);
|
||||
|
||||
// FPU: XMM, x87 and MMX registers
|
||||
mSETONEZEROTOGGLE.insert(MxCsr);
|
||||
mDWORDDISPLAY.insert(MxCsr);
|
||||
mMODIFYDISPLAY.insert(MxCsr);
|
||||
|
||||
mFPUx87.insert(x87r0);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r0);
|
||||
|
||||
mFPUx87.insert(x87r1);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r1);
|
||||
|
||||
mFPUx87.insert(x87r2);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r2);
|
||||
|
||||
mFPUx87.insert(x87r3);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r3);
|
||||
|
||||
mFPUx87.insert(x87r4);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r4);
|
||||
|
||||
mFPUx87.insert(x87r5);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r5);
|
||||
|
||||
mFPUx87.insert(x87r6);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r6);
|
||||
|
||||
mFPUx87.insert(x87r7);
|
||||
mFPUx87_80BITSDISPLAY.insert(x87r7);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87TagWord);
|
||||
mFPUx87.insert(x87TagWord);
|
||||
mMODIFYDISPLAY.insert(x87TagWord);
|
||||
mUSHORTDISPLAY.insert(x87TagWord);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87StatusWord);
|
||||
mUSHORTDISPLAY.insert(x87StatusWord);
|
||||
mMODIFYDISPLAY.insert(x87StatusWord);
|
||||
mFPUx87.insert(x87StatusWord);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87ControlWord);
|
||||
mFPUx87.insert(x87ControlWord);
|
||||
mMODIFYDISPLAY.insert(x87ControlWord);
|
||||
mUSHORTDISPLAY.insert(x87ControlWord);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_B);
|
||||
mFPUx87.insert(x87SW_B);
|
||||
mBOOLDISPLAY.insert(x87SW_B);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_C3);
|
||||
mFPUx87.insert(x87SW_C3);
|
||||
mBOOLDISPLAY.insert(x87SW_C3);
|
||||
|
||||
mFPUx87.insert(x87SW_TOP);
|
||||
|
||||
mFPUx87.insert(x87SW_C2);
|
||||
mBOOLDISPLAY.insert(x87SW_C2);
|
||||
mFPUx87.insert(x87SW_C2);
|
||||
mBOOLDISPLAY.insert(x87SW_C2);
|
||||
mSETONEZEROTOGGLE.insert(x87SW_C2);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_C1);
|
||||
mFPUx87.insert(x87SW_C1);
|
||||
mBOOLDISPLAY.insert(x87SW_C1);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_C0);
|
||||
mFPUx87.insert(x87SW_C0);
|
||||
mBOOLDISPLAY.insert(x87SW_C0);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_IR);
|
||||
mFPUx87.insert(x87SW_IR);
|
||||
mBOOLDISPLAY.insert(x87SW_IR);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_SF);
|
||||
mFPUx87.insert(x87SW_SF);
|
||||
mBOOLDISPLAY.insert(x87SW_SF);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_P);
|
||||
mFPUx87.insert(x87SW_P);
|
||||
mBOOLDISPLAY.insert(x87SW_P);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_U);
|
||||
mFPUx87.insert(x87SW_U);
|
||||
mBOOLDISPLAY.insert(x87SW_U);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_O);
|
||||
mFPUx87.insert(x87SW_O);
|
||||
mBOOLDISPLAY.insert(x87SW_O);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_Z);
|
||||
mFPUx87.insert(x87SW_Z);
|
||||
mBOOLDISPLAY.insert(x87SW_Z);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_D);
|
||||
mFPUx87.insert(x87SW_D);
|
||||
mBOOLDISPLAY.insert(x87SW_D);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87SW_I);
|
||||
mFPUx87.insert(x87SW_I);
|
||||
mBOOLDISPLAY.insert(x87SW_I);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_IC);
|
||||
mFPUx87.insert(x87CW_IC);
|
||||
mBOOLDISPLAY.insert(x87CW_IC);
|
||||
|
||||
mFPUx87.insert(x87CW_RC);
|
||||
|
||||
mFPUx87.insert(x87CW_PC);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_IEM);
|
||||
mFPUx87.insert(x87CW_IEM);
|
||||
mBOOLDISPLAY.insert(x87CW_IEM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_PM);
|
||||
mFPUx87.insert(x87CW_PM);
|
||||
mBOOLDISPLAY.insert(x87CW_PM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_UM);
|
||||
mFPUx87.insert(x87CW_UM);
|
||||
mBOOLDISPLAY.insert(x87CW_UM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_OM);
|
||||
mFPUx87.insert(x87CW_OM);
|
||||
mBOOLDISPLAY.insert(x87CW_OM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_ZM);
|
||||
mFPUx87.insert(x87CW_ZM);
|
||||
mBOOLDISPLAY.insert(x87CW_ZM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_DM);
|
||||
mFPUx87.insert(x87CW_DM);
|
||||
mBOOLDISPLAY.insert(x87CW_DM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_IM);
|
||||
mFPUx87.insert(x87CW_IM);
|
||||
mBOOLDISPLAY.insert(x87CW_IM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_FZ);
|
||||
mBOOLDISPLAY.insert(MxCsr_FZ);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_PM);
|
||||
mBOOLDISPLAY.insert(MxCsr_PM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_UM);
|
||||
mBOOLDISPLAY.insert(MxCsr_UM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_OM);
|
||||
mBOOLDISPLAY.insert(MxCsr_OM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_ZM);
|
||||
mBOOLDISPLAY.insert(MxCsr_ZM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_IM);
|
||||
mBOOLDISPLAY.insert(MxCsr_IM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_DM);
|
||||
mBOOLDISPLAY.insert(MxCsr_DM);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_DAZ);
|
||||
mBOOLDISPLAY.insert(MxCsr_DAZ);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_PE);
|
||||
mBOOLDISPLAY.insert(MxCsr_PE);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_UE);
|
||||
mBOOLDISPLAY.insert(MxCsr_UE);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_OE);
|
||||
mBOOLDISPLAY.insert(MxCsr_OE);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_ZE);
|
||||
mBOOLDISPLAY.insert(MxCsr_ZE);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_DE);
|
||||
mBOOLDISPLAY.insert(MxCsr_DE);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(MxCsr_IE);
|
||||
mBOOLDISPLAY.insert(MxCsr_IE);
|
||||
|
||||
//MxCsr_RC
|
||||
|
@ -233,14 +415,19 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
//registers that should not be changed
|
||||
mNoChange.insert(GS);
|
||||
mUSHORTDISPLAY.insert(GS);
|
||||
|
||||
mNoChange.insert(FS);
|
||||
mUSHORTDISPLAY.insert(FS);
|
||||
|
||||
mNoChange.insert(ES);
|
||||
mUSHORTDISPLAY.insert(ES);
|
||||
|
||||
mNoChange.insert(DS);
|
||||
mUSHORTDISPLAY.insert(DS);
|
||||
|
||||
mNoChange.insert(CS);
|
||||
mUSHORTDISPLAY.insert(CS);
|
||||
|
||||
mNoChange.insert(SS);
|
||||
mUSHORTDISPLAY.insert(SS);
|
||||
|
||||
|
@ -248,29 +435,42 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
mUINTDISPLAY.insert(DR0);
|
||||
mLABELDISPLAY.insert(DR0);
|
||||
mONLYMODULEANDLABELDISPLAY.insert(DR0);
|
||||
mCANSTOREADDRESS.insert(DR0);
|
||||
|
||||
mNoChange.insert(DR1);
|
||||
mONLYMODULEANDLABELDISPLAY.insert(DR1);
|
||||
mUINTDISPLAY.insert(DR1);
|
||||
mCANSTOREADDRESS.insert(DR1);
|
||||
|
||||
mLABELDISPLAY.insert(DR2);
|
||||
mONLYMODULEANDLABELDISPLAY.insert(DR2);
|
||||
mNoChange.insert(DR2);
|
||||
mUINTDISPLAY.insert(DR2);
|
||||
mCANSTOREADDRESS.insert(DR2);
|
||||
|
||||
mNoChange.insert(DR3);
|
||||
mONLYMODULEANDLABELDISPLAY.insert(DR3);
|
||||
mLABELDISPLAY.insert(DR3);
|
||||
mUINTDISPLAY.insert(DR3);
|
||||
mCANSTOREADDRESS.insert(DR3);
|
||||
|
||||
mNoChange.insert(DR6);
|
||||
mLABELDISPLAY.insert(DR6);
|
||||
mONLYMODULEANDLABELDISPLAY.insert(DR6);
|
||||
mUINTDISPLAY.insert(DR6);
|
||||
mCANSTOREADDRESS.insert(DR6);
|
||||
|
||||
mNoChange.insert(DR7);
|
||||
mUINTDISPLAY.insert(DR7);
|
||||
mONLYMODULEANDLABELDISPLAY.insert(DR7);
|
||||
mCANSTOREADDRESS.insert(DR7);
|
||||
mLABELDISPLAY.insert(DR7);
|
||||
|
||||
mNoChange.insert(CIP);
|
||||
mUINTDISPLAY.insert(CIP);
|
||||
mLABELDISPLAY.insert(CIP);
|
||||
mONLYMODULEANDLABELDISPLAY.insert(CIP);
|
||||
mCANSTOREADDRESS.insert(CIP);
|
||||
|
||||
// create mapping from internal id to name
|
||||
mRegisterMapping.clear();
|
||||
|
@ -507,8 +707,10 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
|
||||
mRegisterMapping.insert(MxCsr_IE, "MxCsr_IE");
|
||||
mRegisterPlaces.insert(MxCsr_IE, Register_Position(offset + 31, 0, 9, 1));
|
||||
mRegisterMapping.insert(MxCsr_DM, "MxCsr_DM");
|
||||
mRegisterPlaces.insert(MxCsr_DM, Register_Position(offset + 31, 12, 10, 1));
|
||||
mRegisterMapping.insert(MxCsr_RC, "MxCsr_RC");
|
||||
mRegisterPlaces.insert(MxCsr_RC, Register_Position(offset + 31, 12, 10, 1));
|
||||
mRegisterPlaces.insert(MxCsr_RC, Register_Position(offset + 31, 25, 10, 1));
|
||||
|
||||
offset++;
|
||||
|
||||
|
@ -711,11 +913,11 @@ void RegistersView::mouseDoubleClickEvent(QMouseEvent* event)
|
|||
if(!identifyRegister(y, x, 0))
|
||||
return;
|
||||
// is current register general purposes register or FPU register?
|
||||
if(mGPR.contains(mSelected) || mFPUx87.contains(mSelected) || mFPUMMX.contains(mSelected))
|
||||
if(mMODIFYDISPLAY.contains(mSelected))
|
||||
{
|
||||
wCM_Modify->trigger();
|
||||
}
|
||||
else if(mFlags.contains(mSelected)) // is flag ?
|
||||
else if(mBOOLDISPLAY.contains(mSelected)) // is flag ?
|
||||
wCM_ToggleValue->trigger();
|
||||
else if(mSelected == CIP) //double clicked on CIP register
|
||||
DbgCmdExec("disasm cip");
|
||||
|
@ -873,6 +1075,30 @@ double readFloat80(const uint8_t buffer[10])
|
|||
return sign * ldexp(significand, exponent - EXP_BIAS);
|
||||
}
|
||||
|
||||
QString RegistersView::GetRegStringValueFromValue(REGISTER_NAME reg, char* value)
|
||||
{
|
||||
QString valueText;
|
||||
|
||||
if(mUINTDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((uint_t*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else if(mUSHORTDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((unsigned short*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else if(mDWORDDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((DWORD*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else if(mBOOLDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((bool*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else
|
||||
{
|
||||
SIZE_T size = GetSizeRegister(reg);
|
||||
if(size != 0)
|
||||
valueText = QString(QByteArray(value, size).toHex()).toUpper();
|
||||
else
|
||||
valueText = QString("???");
|
||||
}
|
||||
|
||||
return valueText;
|
||||
}
|
||||
|
||||
void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
||||
{
|
||||
// is the register-id known?
|
||||
|
@ -915,22 +1141,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
|||
|
||||
QString valueText;
|
||||
// draw value
|
||||
if(mUINTDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((uint_t*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else if(mUSHORTDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((unsigned short*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else if(mDWORDDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((DWORD*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else if(mBOOLDISPLAY.contains(reg))
|
||||
valueText = QString("%1").arg((* ((bool*) value)), mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper();
|
||||
else
|
||||
{
|
||||
SIZE_T size = GetSizeRegister(reg);
|
||||
if(size != 0)
|
||||
valueText = QString(QByteArray(value, size).toHex()).toUpper();
|
||||
else
|
||||
valueText = QString("???");
|
||||
}
|
||||
valueText = GetRegStringValueFromValue(reg, value);
|
||||
width = mCharWidth * valueText.length();
|
||||
p->drawText(x, y, width, mRowHeight, Qt::AlignVCenter, valueText);
|
||||
//p->drawText(x + (mRegisterPlaces[reg].labelwidth)*mCharWidth ,mRowHeight*(mRegisterPlaces[reg].line+1),QString("%1").arg(value, mRegisterPlaces[reg].valuesize, 16, QChar('0')).toUpper());
|
||||
|
@ -1008,7 +1219,7 @@ void RegistersView::updateRegistersSlot()
|
|||
|
||||
void RegistersView::displayEditDialog()
|
||||
{
|
||||
if(!mFPUx87.contains(mSelected) && !mFPUMMX.contains(mSelected))
|
||||
if(1)
|
||||
{
|
||||
WordEditDialog wEditDial(this);
|
||||
wEditDial.setup(QString("Edit"), (* ((uint_t*) registerValue(&wRegDumpStruct, mSelected))), sizeof(int_t));
|
||||
|
@ -1040,47 +1251,50 @@ void RegistersView::displayEditDialog()
|
|||
|
||||
void RegistersView::onIncrementAction()
|
||||
{
|
||||
if(mGPR.contains(mSelected))
|
||||
if(mINCREMENTDECREMET.contains(mSelected))
|
||||
setRegister(mSelected, (* ((uint_t*) registerValue(&wRegDumpStruct, mSelected))) + 1);
|
||||
}
|
||||
|
||||
void RegistersView::onDecrementAction()
|
||||
{
|
||||
if(mGPR.contains(mSelected))
|
||||
if(mINCREMENTDECREMET.contains(mSelected))
|
||||
setRegister(mSelected, (* ((uint_t*) registerValue(&wRegDumpStruct, mSelected))) - 1);
|
||||
}
|
||||
|
||||
void RegistersView::onZeroAction()
|
||||
{
|
||||
if(!mNoChange.contains(mSelected))
|
||||
if(mSETONEZEROTOGGLE.contains(mSelected))
|
||||
setRegister(mSelected, 0);
|
||||
}
|
||||
|
||||
void RegistersView::onSetToOneAction()
|
||||
{
|
||||
if(!mNoChange.contains(mSelected))
|
||||
if(mSETONEZEROTOGGLE.contains(mSelected))
|
||||
setRegister(mSelected, 1);
|
||||
}
|
||||
|
||||
void RegistersView::onModifyAction()
|
||||
{
|
||||
if(mGPR.contains(mSelected) || mFPUx87.contains(mSelected) || mFPUMMX.contains(mSelected))
|
||||
if(mMODIFYDISPLAY.contains(mSelected))
|
||||
displayEditDialog();
|
||||
}
|
||||
|
||||
void RegistersView::onToggleValueAction()
|
||||
{
|
||||
if(mFlags.contains(mSelected))
|
||||
if(mSETONEZEROTOGGLE.contains(mSelected))
|
||||
{
|
||||
int value = (int)(* (bool*) registerValue(&wRegDumpStruct, mSelected));
|
||||
setRegister(mSelected, value ^ 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
int_t val = (* ((uint_t*) registerValue(&wRegDumpStruct, mSelected)));
|
||||
val++;
|
||||
val *= -1;
|
||||
setRegister(mSelected, val);
|
||||
if(mBOOLDISPLAY.contains(mSelected))
|
||||
{
|
||||
int value = (int)(* (bool*) registerValue(&wRegDumpStruct, mSelected));
|
||||
setRegister(mSelected, value ^ 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
int_t val = (* ((uint_t*) registerValue(&wRegDumpStruct, mSelected)));
|
||||
val++;
|
||||
val *= -1;
|
||||
setRegister(mSelected, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1122,7 +1336,7 @@ void RegistersView::onCopySymbolToClipboardAction()
|
|||
|
||||
void RegistersView::onFollowInDisassembly()
|
||||
{
|
||||
if(mGPR.contains(mSelected))
|
||||
if(mCANSTOREADDRESS.contains(mSelected))
|
||||
{
|
||||
QString addr = QString("%1").arg((* ((uint_t*) registerValue(&wRegDumpStruct, mSelected))), mRegisterPlaces[mSelected].valuesize, 16, QChar('0')).toUpper();
|
||||
if(DbgMemIsValidReadPtr((* ((uint_t*) registerValue(&wRegDumpStruct, mSelected)))))
|
||||
|
@ -1132,7 +1346,7 @@ void RegistersView::onFollowInDisassembly()
|
|||
|
||||
void RegistersView::onFollowInDump()
|
||||
{
|
||||
if(mGPR.contains(mSelected))
|
||||
if(mCANSTOREADDRESS.contains(mSelected))
|
||||
{
|
||||
QString addr = QString("%1").arg((* ((uint_t*) registerValue(&wRegDumpStruct, mSelected))), mRegisterPlaces[mSelected].valuesize, 16, QChar('0')).toUpper();
|
||||
if(DbgMemIsValidReadPtr((* ((uint_t*) registerValue(&wRegDumpStruct, mSelected)))))
|
||||
|
@ -1142,7 +1356,7 @@ void RegistersView::onFollowInDump()
|
|||
|
||||
void RegistersView::onFollowInStack()
|
||||
{
|
||||
if(mGPR.contains(mSelected))
|
||||
if(mCANSTOREADDRESS.contains(mSelected))
|
||||
{
|
||||
QString addr = QString("%1").arg((* ((uint_t*) registerValue(&wRegDumpStruct, mSelected))), mRegisterPlaces[mSelected].valuesize, 16, QChar('0')).toUpper();
|
||||
if(DbgMemIsValidReadPtr((* ((uint_t*) registerValue(&wRegDumpStruct, mSelected)))))
|
||||
|
@ -1158,7 +1372,7 @@ void RegistersView::displayCustomContextMenuSlot(QPoint pos)
|
|||
|
||||
if(mSelected != UNKNOWN)
|
||||
{
|
||||
if(!mNoChange.contains(mSelected) && !mFPUx87.contains(mSelected) && !mFPUMMX.contains(mSelected))
|
||||
if(mSETONEZEROTOGGLE.contains(mSelected))
|
||||
{
|
||||
if((* ((uint_t*) registerValue(&wRegDumpStruct, mSelected))) >= 1)
|
||||
wMenu.addAction(wCM_Zero);
|
||||
|
@ -1167,31 +1381,40 @@ void RegistersView::displayCustomContextMenuSlot(QPoint pos)
|
|||
wMenu.addAction(wCM_ToggleValue);
|
||||
}
|
||||
|
||||
if(mGPR.contains(mSelected) || mFPUx87.contains(mSelected) || mFPUMMX.contains(mSelected))
|
||||
if(mINCREMENTDECREMET.contains(mSelected))
|
||||
{
|
||||
wMenu.addAction(wCM_Increment);
|
||||
wMenu.addAction(wCM_Decrement);
|
||||
}
|
||||
|
||||
if(mMODIFYDISPLAY.contains(mSelected))
|
||||
{
|
||||
wMenu.addAction(wCM_Modify);
|
||||
}
|
||||
|
||||
if(mGPR.contains(mSelected))
|
||||
if(mCANSTOREADDRESS.contains(mSelected))
|
||||
{
|
||||
uint_t addr = (* ((uint_t*) registerValue(&wRegDumpStruct, mSelected)));
|
||||
if(DbgMemIsValidReadPtr(addr))
|
||||
{
|
||||
wMenu.addAction(wCM_Increment);
|
||||
wMenu.addAction(wCM_Decrement);
|
||||
|
||||
uint_t addr = (* ((uint_t*) registerValue(&wRegDumpStruct, mSelected)));
|
||||
if(DbgMemIsValidReadPtr(addr))
|
||||
{
|
||||
wMenu.addAction(wCM_FollowInDump);
|
||||
wMenu.addAction(wCM_FollowInDisassembly);
|
||||
duint size = 0;
|
||||
duint base = DbgMemFindBaseAddr(DbgValFromString("csp"), &size);
|
||||
if(addr >= base && addr < base + size)
|
||||
wMenu.addAction(wCM_FollowInStack);
|
||||
}
|
||||
wMenu.addAction(wCM_FollowInDump);
|
||||
wMenu.addAction(wCM_FollowInDisassembly);
|
||||
duint size = 0;
|
||||
duint base = DbgMemFindBaseAddr(DbgValFromString("csp"), &size);
|
||||
if(addr >= base && addr < base + size)
|
||||
wMenu.addAction(wCM_FollowInStack);
|
||||
}
|
||||
}
|
||||
|
||||
if(mLABELDISPLAY.contains(mSelected))
|
||||
{
|
||||
QString symbol = getRegisterLabel(mSelected);
|
||||
if(symbol != "")
|
||||
wMenu.addAction(wCM_CopySymbolToClipboard);
|
||||
}
|
||||
|
||||
wMenu.addAction(wCM_CopyToClipboard);
|
||||
QString symbol = getRegisterLabel(mSelected);
|
||||
if(symbol != "")
|
||||
wMenu.addAction(wCM_CopySymbolToClipboard);
|
||||
|
||||
wMenu.exec(this->mapToGlobal(pos));
|
||||
}
|
||||
else
|
||||
|
@ -1350,12 +1573,56 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
if(reg == x87r6) return (char*) & (regd->x87FPURegisters[6]);
|
||||
if(reg == x87r7) return (char*) & (regd->x87FPURegisters[7]);
|
||||
|
||||
if(reg == x87ControlWord) return (char*) & (regd->titcontext.x87fpu.ControlWord);
|
||||
if(reg == x87StatusWord) return (char*) & (regd->titcontext.x87fpu.StatusWord);
|
||||
if(reg == x87TagWord) return (char*) & (regd->titcontext.x87fpu.TagWord);
|
||||
|
||||
if(reg == x87ControlWord) return (char*) & (regd->titcontext.x87fpu.ControlWord);
|
||||
|
||||
if(reg == x87CW_IC) return (char*) & (regd->x87ControlWordFields.IC);
|
||||
if(reg == x87CW_IEM) return (char*) & (regd->x87ControlWordFields.IEM);
|
||||
if(reg == x87CW_PM) return (char*) & (regd->x87ControlWordFields.PM);
|
||||
if(reg == x87CW_UM) return (char*) & (regd->x87ControlWordFields.UM);
|
||||
if(reg == x87CW_OM) return (char*) & (regd->x87ControlWordFields.OM);
|
||||
if(reg == x87CW_ZM) return (char*) & (regd->x87ControlWordFields.ZM);
|
||||
if(reg == x87CW_DM) return (char*) & (regd->x87ControlWordFields.DM);
|
||||
if(reg == x87CW_IM) return (char*) & (regd->x87ControlWordFields.IM);
|
||||
if(reg == x87CW_RC) return (char*) & (regd->x87ControlWordFields.RC);
|
||||
if(reg == x87CW_PC) return (char*) & (regd->x87ControlWordFields.PC);
|
||||
|
||||
if(reg == x87StatusWord) return (char*) & (regd->titcontext.x87fpu.StatusWord);
|
||||
|
||||
if(reg == x87SW_B) return (char*) & (regd->x87StatusWordFields.B);
|
||||
if(reg == x87SW_C3) return (char*) & (regd->x87StatusWordFields.C3);
|
||||
if(reg == x87SW_C2) return (char*) & (regd->x87StatusWordFields.C2);
|
||||
if(reg == x87SW_C1) return (char*) & (regd->x87StatusWordFields.C1);
|
||||
if(reg == x87SW_O) return (char*) & (regd->x87StatusWordFields.O);
|
||||
if(reg == x87SW_IR) return (char*) & (regd->x87StatusWordFields.IR);
|
||||
if(reg == x87SW_SF) return (char*) & (regd->x87StatusWordFields.SF);
|
||||
if(reg == x87SW_P) return (char*) & (regd->x87StatusWordFields.P);
|
||||
if(reg == x87SW_U) return (char*) & (regd->x87StatusWordFields.U);
|
||||
if(reg == x87SW_Z) return (char*) & (regd->x87StatusWordFields.Z);
|
||||
if(reg == x87SW_D) return (char*) & (regd->x87StatusWordFields.D);
|
||||
if(reg == x87SW_I) return (char*) & (regd->x87StatusWordFields.I);
|
||||
if(reg == x87SW_C0) return (char*) & (regd->x87StatusWordFields.C0);
|
||||
if(reg == x87SW_TOP) return (char*) & (regd->x87StatusWordFields.TOP);
|
||||
|
||||
if(reg == MxCsr) return (char*) & (regd->titcontext.MxCsr);
|
||||
|
||||
if(reg == MxCsr_FZ) return (char*) & (regd->MxCsrFields.FZ);
|
||||
if(reg == MxCsr_PM) return (char*) & (regd->MxCsrFields.PM);
|
||||
if(reg == MxCsr_UM) return (char*) & (regd->MxCsrFields.UM);
|
||||
if(reg == MxCsr_OM) return (char*) & (regd->MxCsrFields.OM);
|
||||
if(reg == MxCsr_ZM) return (char*) & (regd->MxCsrFields.ZM);
|
||||
if(reg == MxCsr_IM) return (char*) & (regd->MxCsrFields.IM);
|
||||
if(reg == MxCsr_DM) return (char*) & (regd->MxCsrFields.DM);
|
||||
if(reg == MxCsr_DAZ) return (char*) & (regd->MxCsrFields.DAZ);
|
||||
if(reg == MxCsr_PE) return (char*) & (regd->MxCsrFields.PE);
|
||||
if(reg == MxCsr_UE) return (char*) & (regd->MxCsrFields.UE);
|
||||
if(reg == MxCsr_OE) return (char*) & (regd->MxCsrFields.OE);
|
||||
if(reg == MxCsr_ZE) return (char*) & (regd->MxCsrFields.ZE);
|
||||
if(reg == MxCsr_DE) return (char*) & (regd->MxCsrFields.DE);
|
||||
if(reg == MxCsr_IE) return (char*) & (regd->MxCsrFields.IE);
|
||||
if(reg == MxCsr_RC) return (char*) & (regd->MxCsrFields.RC);
|
||||
|
||||
if(reg == XMM0) return (char*) & (regd->titcontext.XmmRegisters[0]);
|
||||
if(reg == XMM1) return (char*) & (regd->titcontext.XmmRegisters[1]);
|
||||
if(reg == XMM2) return (char*) & (regd->titcontext.XmmRegisters[2]);
|
||||
|
|
|
@ -39,7 +39,7 @@ public:
|
|||
x87CW_UM, x87CW_OM, x87CW_ZM, x87CW_DM, x87CW_IM,
|
||||
//MxCsr
|
||||
MxCsr, MxCsr_FZ, MxCsr_PM, MxCsr_UM, MxCsr_OM, MxCsr_ZM,
|
||||
MxCsr_IM, MxCsr_DAZ, MxCsr_PE, MxCsr_UE, MxCsr_OE,
|
||||
MxCsr_IM, MxCsr_DM, MxCsr_DAZ, MxCsr_PE, MxCsr_UE, MxCsr_OE,
|
||||
MxCsr_ZE, MxCsr_DE, MxCsr_IE, MxCsr_RC,
|
||||
// MMX and XMM
|
||||
MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7,
|
||||
|
@ -119,6 +119,7 @@ protected slots:
|
|||
QString getRegisterLabel(REGISTER_NAME);
|
||||
int CompareRegisters(const REGISTER_NAME reg_name, REGDUMP* regdump1, REGDUMP* regdump2);
|
||||
SIZE_T GetSizeRegister(const REGISTER_NAME reg_name);
|
||||
QString GetRegStringValueFromValue(REGISTER_NAME reg , char* value);
|
||||
private:
|
||||
int mVScrollOffset;
|
||||
int mRowsNeeded;
|
||||
|
@ -129,6 +130,10 @@ private:
|
|||
QSet<REGISTER_NAME> mBOOLDISPLAY;
|
||||
QSet<REGISTER_NAME> mLABELDISPLAY;
|
||||
QSet<REGISTER_NAME> mONLYMODULEANDLABELDISPLAY;
|
||||
QSet<REGISTER_NAME> mSETONEZEROTOGGLE;
|
||||
QSet<REGISTER_NAME> mMODIFYDISPLAY;
|
||||
QSet<REGISTER_NAME> mCANSTOREADDRESS;
|
||||
QSet<REGISTER_NAME> mINCREMENTDECREMET;
|
||||
QSet<REGISTER_NAME> mFPUx87_80BITSDISPLAY;
|
||||
// holds current selected register
|
||||
REGISTER_NAME mSelected;
|
||||
|
|
Loading…
Reference in New Issue