all fpu read done.
This commit is contained in:
parent
0705384dbe
commit
c874ee04d6
|
@ -349,18 +349,41 @@ void GetMxCsrFields(MxCsr_FIELDS_t* MxCsrFields, DWORD MxCsr)
|
|||
MxCsrFields->ZE = valmxcsrflagfromstring(MxCsr, "ZE");
|
||||
MxCsrFields->ZM = valmxcsrflagfromstring(MxCsr, "ZM");
|
||||
|
||||
//MxCsrFields->RC = valmxcsrfieldfromstring(MxCsr, "RC")
|
||||
MxCsrFields->RC = valmxcsrfieldfromstring(MxCsr, "RC");
|
||||
}
|
||||
|
||||
void Getx87ControlWordFields(x87ControlWord_FIELDS_t* x87ControlWordFields, WORD ControlWord)
|
||||
{
|
||||
x87ControlWordFields->DM = valx87controlwordflagfromstring(ControlWord, "DM");
|
||||
x87ControlWordFields->IC = valx87controlwordflagfromstring(ControlWord, "IC");
|
||||
x87ControlWordFields->IEM = valx87controlwordflagfromstring(ControlWord, "IEM");
|
||||
x87ControlWordFields->IM = valx87controlwordflagfromstring(ControlWord, "IM");
|
||||
x87ControlWordFields->OM = valx87controlwordflagfromstring(ControlWord, "OM");
|
||||
x87ControlWordFields->PM = valx87controlwordflagfromstring(ControlWord, "PM");
|
||||
x87ControlWordFields->UM = valx87controlwordflagfromstring(ControlWord, "UM");
|
||||
x87ControlWordFields->ZM = valx87controlwordflagfromstring(ControlWord, "ZM");
|
||||
|
||||
x87ControlWordFields->RC = valx87controlwordfieldfromstring(ControlWord, "RC");
|
||||
x87ControlWordFields->PC = valx87controlwordfieldfromstring(ControlWord, "PC");
|
||||
}
|
||||
|
||||
void Getx87StatusWordFields(x87StatusWord_FIELDS_t* x87StatusWordFields, WORD StatusWord)
|
||||
{
|
||||
x87StatusWordFields->B = valx87statuswordflagfromstring(StatusWord, "B");
|
||||
x87StatusWordFields->C0 = valx87statuswordflagfromstring(StatusWord, "C0");
|
||||
x87StatusWordFields->C1 = valx87statuswordflagfromstring(StatusWord, "C1");
|
||||
x87StatusWordFields->C2 = valx87statuswordflagfromstring(StatusWord, "C2");
|
||||
x87StatusWordFields->C3 = valx87statuswordflagfromstring(StatusWord, "C3");
|
||||
x87StatusWordFields->D = valx87statuswordflagfromstring(StatusWord, "D");
|
||||
x87StatusWordFields->I = valx87statuswordflagfromstring(StatusWord, "I");
|
||||
x87StatusWordFields->IR = valx87statuswordflagfromstring(StatusWord, "IR");
|
||||
x87StatusWordFields->O = valx87statuswordflagfromstring(StatusWord, "O");
|
||||
x87StatusWordFields->P = valx87statuswordflagfromstring(StatusWord, "P");
|
||||
x87StatusWordFields->SF = valx87statuswordflagfromstring(StatusWord, "SF");
|
||||
x87StatusWordFields->U = valx87statuswordflagfromstring(StatusWord, "U");
|
||||
x87StatusWordFields->Z = valx87statuswordflagfromstring(StatusWord, "Z");
|
||||
|
||||
|
||||
x87StatusWordFields->TOP = valx87statuswordfieldfromstring(StatusWord, "TOP");
|
||||
}
|
||||
|
||||
extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
||||
|
|
|
@ -258,19 +258,19 @@ static bool isregister(const char* string)
|
|||
}
|
||||
|
||||
#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
|
||||
#define MXCSRFLAG_DE 0x2
|
||||
#define MXCSRFLAG_ZE 0x4
|
||||
#define MXCSRFLAG_OE 0x8
|
||||
#define MXCSRFLAG_UE 0x10
|
||||
#define MXCSRFLAG_PE 0x20
|
||||
#define MXCSRFLAG_DAZ 0x40
|
||||
#define MXCSRFLAG_IM 0x80
|
||||
#define MXCSRFLAG_DM 0x100
|
||||
#define MXCSRFLAG_ZM 0x200
|
||||
#define MXCSRFLAG_OM 0x400
|
||||
#define MXCSRFLAG_UM 0x800
|
||||
#define MXCSRFLAG_PM 0x1000
|
||||
#define MXCSRFLAG_FZ 0x8000
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -311,6 +311,112 @@ bool valmxcsrflagfromstring(uint mxcsrflags, const char* string)
|
|||
return false;
|
||||
}
|
||||
|
||||
#define x87STATUSWORD_FLAG_I 0x1
|
||||
#define x87STATUSWORD_FLAG_D 0x2
|
||||
#define x87STATUSWORD_FLAG_Z 0x4
|
||||
#define x87STATUSWORD_FLAG_O 0x8
|
||||
#define x87STATUSWORD_FLAG_U 0x10
|
||||
#define x87STATUSWORD_FLAG_P 0x20
|
||||
#define x87STATUSWORD_FLAG_SF 0x40
|
||||
#define x87STATUSWORD_FLAG_IR 0x80
|
||||
#define x87STATUSWORD_FLAG_C0 0x100
|
||||
#define x87STATUSWORD_FLAG_C1 0x200
|
||||
#define x87STATUSWORD_FLAG_C2 0x400
|
||||
#define x87STATUSWORD_FLAG_C3 0x4000
|
||||
#define x87STATUSWORD_FLAG_B 0x8000
|
||||
|
||||
#define X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(flag_name) { #flag_name, x87STATUSWORD_FLAG_##flag_name }
|
||||
|
||||
bool valx87statuswordflagfromstring(uint statusword, const char* string)
|
||||
{
|
||||
static FLAG_NAME_VALUE_TABLE_t statuswordflagtable[] =
|
||||
{
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(I),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(D),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(Z),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(O),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(U),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(P),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(SF),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(IR),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(C0),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(C1),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(C2),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(C3),
|
||||
X87STATUSWORD_NAME_FLAG_TABLE_ENTRY(B)
|
||||
};
|
||||
int i;
|
||||
|
||||
for(i = 0; i < (sizeof(statuswordflagtable) / sizeof(*statuswordflagtable)); i++)
|
||||
{
|
||||
if(scmp(string, statuswordflagtable[i].name))
|
||||
return (bool)((int)(statusword & statuswordflagtable[i].flag) != 0);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#define x87CONTROLWORD_FLAG_IM 0x1
|
||||
#define x87CONTROLWORD_FLAG_DM 0x2
|
||||
#define x87CONTROLWORD_FLAG_ZM 0x4
|
||||
#define x87CONTROLWORD_FLAG_OM 0x8
|
||||
#define x87CONTROLWORD_FLAG_UM 0x10
|
||||
#define x87CONTROLWORD_FLAG_PM 0x20
|
||||
#define x87CONTROLWORD_FLAG_IEM 0x80
|
||||
#define x87CONTROLWORD_FLAG_IC 0x1000
|
||||
|
||||
#define X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(flag_name) { #flag_name, x87CONTROLWORD_FLAG_##flag_name }
|
||||
|
||||
bool valx87controlwordflagfromstring(uint controlword, const char* string)
|
||||
{
|
||||
static FLAG_NAME_VALUE_TABLE_t controlwordflagtable[] =
|
||||
{
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(IM),
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(DM),
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(ZM),
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(OM),
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(UM),
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(PM),
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(IEM),
|
||||
X87CONTROLWORD_NAME_FLAG_TABLE_ENTRY(IC)
|
||||
};
|
||||
int i;
|
||||
|
||||
for(i = 0; i < (sizeof(controlwordflagtable) / sizeof(*controlwordflagtable)); i++)
|
||||
{
|
||||
if(scmp(string, controlwordflagtable[i].name))
|
||||
return (bool)((int)(controlword & controlwordflagtable[i].flag) != 0);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned short valmxcsrfieldfromstring(uint mxcsrflags, const char* string)
|
||||
{
|
||||
if(scmp(string, "RC"))
|
||||
return ((mxcsrflags & 0x6000) >> 13);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned short valx87statuswordfieldfromstring(uint statusword, const char* string)
|
||||
{
|
||||
if(scmp(string, "TOP"))
|
||||
return ((statusword & 0x3800) >> 11);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned short valx87controlwordfieldfromstring(uint controlword, const char* string)
|
||||
{
|
||||
if(scmp(string, "PC"))
|
||||
return ((controlword & 0x300) >> 8);
|
||||
if(scmp(string, "RC"))
|
||||
return ((controlword & 0xC00) >> 10);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool valflagfromstring(uint eflags, const char* string)
|
||||
{
|
||||
if(scmp(string, "cf"))
|
||||
|
|
|
@ -14,5 +14,10 @@ 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);
|
||||
bool valx87statuswordflagfromstring(uint statusword, const char* string);
|
||||
bool valx87controlwordflagfromstring(uint controlword, const char* string);
|
||||
unsigned short valmxcsrfieldfromstring(uint mxcsrflags, const char* string);
|
||||
unsigned short valx87statuswordfieldfromstring(uint statusword, const char* string);
|
||||
unsigned short valx87controlwordfieldfromstring(uint controlword, const char* string);
|
||||
|
||||
#endif // _VALUE_H
|
||||
|
|
|
@ -259,6 +259,7 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
mBOOLDISPLAY.insert(x87SW_C3);
|
||||
|
||||
mFPUx87.insert(x87SW_TOP);
|
||||
mFIELDVALUE.insert(x87SW_TOP);
|
||||
|
||||
mFPUx87.insert(x87SW_C2);
|
||||
mBOOLDISPLAY.insert(x87SW_C2);
|
||||
|
@ -309,8 +310,42 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
mBOOLDISPLAY.insert(x87CW_IC);
|
||||
|
||||
mFPUx87.insert(x87CW_RC);
|
||||
mFIELDVALUE.insert(x87CW_RC);
|
||||
|
||||
mFPUx87.insert(x87TW_0);
|
||||
mFIELDVALUE.insert(x87TW_0);
|
||||
mTAGWORD.insert(x87TW_0);
|
||||
|
||||
mFPUx87.insert(x87TW_1);
|
||||
mFIELDVALUE.insert(x87TW_1);
|
||||
mTAGWORD.insert(x87TW_1);
|
||||
|
||||
mFPUx87.insert(x87TW_2);
|
||||
mFIELDVALUE.insert(x87TW_2);
|
||||
mTAGWORD.insert(x87TW_2);
|
||||
|
||||
mFPUx87.insert(x87TW_3);
|
||||
mFIELDVALUE.insert(x87TW_3);
|
||||
mTAGWORD.insert(x87TW_3);
|
||||
|
||||
mFPUx87.insert(x87TW_4);
|
||||
mFIELDVALUE.insert(x87TW_4);
|
||||
mTAGWORD.insert(x87TW_4);
|
||||
|
||||
mFPUx87.insert(x87TW_5);
|
||||
mFIELDVALUE.insert(x87TW_5);
|
||||
mTAGWORD.insert(x87TW_5);
|
||||
|
||||
mFPUx87.insert(x87TW_6);
|
||||
mFIELDVALUE.insert(x87TW_6);
|
||||
mTAGWORD.insert(x87TW_6);
|
||||
|
||||
mFPUx87.insert(x87TW_7);
|
||||
mFIELDVALUE.insert(x87TW_7);
|
||||
mTAGWORD.insert(x87TW_7);
|
||||
|
||||
mFPUx87.insert(x87CW_PC);
|
||||
mFIELDVALUE.insert(x87CW_PC);
|
||||
|
||||
mSETONEZEROTOGGLE.insert(x87CW_IEM);
|
||||
mFPUx87.insert(x87CW_IEM);
|
||||
|
@ -382,7 +417,7 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
mSETONEZEROTOGGLE.insert(MxCsr_IE);
|
||||
mBOOLDISPLAY.insert(MxCsr_IE);
|
||||
|
||||
//MxCsr_RC
|
||||
mFIELDVALUE.insert(MxCsr_RC);
|
||||
|
||||
mFPUMMX.insert(MM0);
|
||||
mFPUMMX.insert(MM1);
|
||||
|
@ -606,6 +641,28 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
mRegisterMapping.insert(x87TagWord, "x87TagWord");
|
||||
mRegisterPlaces.insert(x87TagWord, Register_Position(offset + 14, 0, 11, sizeof(WORD) * 2));
|
||||
|
||||
mRegisterMapping.insert(x87TW_0, "x87TW_0");
|
||||
mRegisterPlaces.insert(x87TW_0, Register_Position(offset + 15, 0, 8, 10));
|
||||
mRegisterMapping.insert(x87TW_1, "x87TW_1");
|
||||
mRegisterPlaces.insert(x87TW_1, Register_Position(offset + 15, 20, 8, 10));
|
||||
|
||||
mRegisterMapping.insert(x87TW_2, "x87TW_2");
|
||||
mRegisterPlaces.insert(x87TW_2, Register_Position(offset + 16, 0, 8, 10));
|
||||
mRegisterMapping.insert(x87TW_3, "x87TW_3");
|
||||
mRegisterPlaces.insert(x87TW_3, Register_Position(offset + 16, 20, 8, 10));
|
||||
|
||||
mRegisterMapping.insert(x87TW_4, "x87TW_4");
|
||||
mRegisterPlaces.insert(x87TW_4, Register_Position(offset + 17, 0, 8, 10));
|
||||
mRegisterMapping.insert(x87TW_5, "x87TW_5");
|
||||
mRegisterPlaces.insert(x87TW_5, Register_Position(offset + 17, 20, 8, 10));
|
||||
|
||||
mRegisterMapping.insert(x87TW_6, "x87TW_6");
|
||||
mRegisterPlaces.insert(x87TW_6, Register_Position(offset + 18, 0, 8, 10));
|
||||
mRegisterMapping.insert(x87TW_7, "x87TW_7");
|
||||
mRegisterPlaces.insert(x87TW_7, Register_Position(offset + 18, 20, 8, 10));
|
||||
|
||||
offset += 4;
|
||||
|
||||
offset++;
|
||||
mRegisterMapping.insert(x87StatusWord, "x87StatusWord");
|
||||
mRegisterPlaces.insert(x87StatusWord, Register_Position(offset + 15, 0, 14, sizeof(WORD) * 2));
|
||||
|
@ -641,7 +698,7 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
mRegisterMapping.insert(x87SW_I, "x87SW_I");
|
||||
mRegisterPlaces.insert(x87SW_I, Register_Position(offset + 20, 0, 9, 1));
|
||||
mRegisterMapping.insert(x87SW_TOP, "x87SW_TOP");
|
||||
mRegisterPlaces.insert(x87SW_TOP, Register_Position(offset + 20, 12, 10, 1));
|
||||
mRegisterPlaces.insert(x87SW_TOP, Register_Position(offset + 20, 12, 10, 6));
|
||||
|
||||
offset++;
|
||||
|
||||
|
@ -667,10 +724,10 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
mRegisterMapping.insert(x87CW_IM, "x87CW_IM");
|
||||
mRegisterPlaces.insert(x87CW_IM, Register_Position(offset + 24, 12, 10, 1));
|
||||
mRegisterMapping.insert(x87CW_RC, "x87CW_RC");
|
||||
mRegisterPlaces.insert(x87CW_RC, Register_Position(offset + 24, 25, 10, 1));
|
||||
mRegisterPlaces.insert(x87CW_RC, Register_Position(offset + 24, 25, 10, 13));
|
||||
|
||||
mRegisterMapping.insert(x87CW_PC, "x87CW_PC");
|
||||
mRegisterPlaces.insert(x87CW_PC, Register_Position(offset + 25, 0, 9, 1));
|
||||
mRegisterPlaces.insert(x87CW_PC, Register_Position(offset + 25, 0, 9, 13));
|
||||
|
||||
offset++;
|
||||
|
||||
|
@ -710,7 +767,7 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff
|
|||
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, 25, 10, 1));
|
||||
mRegisterPlaces.insert(MxCsr_RC, Register_Position(offset + 31, 25, 10, 13));
|
||||
|
||||
offset++;
|
||||
|
||||
|
@ -1087,6 +1144,108 @@ QString RegistersView::GetRegStringValueFromValue(REGISTER_NAME reg, char* value
|
|||
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 if(mFIELDVALUE.contains(reg))
|
||||
{
|
||||
if(mTAGWORD.contains(reg))
|
||||
{
|
||||
valueText = QString("%1").arg((* ((unsigned short*) value)), 1, 16, QChar('0')).toUpper();
|
||||
valueText += QString("(");
|
||||
valueText += GetTagWordStateString((* ((unsigned short*) value)));
|
||||
valueText += QString(")");
|
||||
}
|
||||
if(reg == MxCsr_RC)
|
||||
{
|
||||
valueText = QString("%1").arg((* ((unsigned short*) value)), 1, 16, QChar('0')).toUpper();
|
||||
valueText += QString("(");
|
||||
#define MxCsr_RC_NEAR 0
|
||||
#define MxCsr_RC_NEGATIVE 1
|
||||
#define MxCsr_RC_POSITIVE 2
|
||||
#define MxCsr_RC_TOZERO 3
|
||||
switch((* ((unsigned short*) value)))
|
||||
{
|
||||
case MxCsr_RC_NEAR:
|
||||
valueText += "round near";
|
||||
break;
|
||||
|
||||
case MxCsr_RC_NEGATIVE:
|
||||
valueText += "toward negative";
|
||||
break;
|
||||
|
||||
case MxCsr_RC_POSITIVE:
|
||||
valueText += "toward positive";
|
||||
break;
|
||||
|
||||
case MxCsr_RC_TOZERO:
|
||||
valueText += "toward zero";
|
||||
break;
|
||||
}
|
||||
|
||||
valueText += QString(")");
|
||||
}
|
||||
else if(reg == x87CW_RC)
|
||||
{
|
||||
valueText = QString("%1").arg((* ((unsigned short*) value)), 1, 16, QChar('0')).toUpper();
|
||||
valueText += QString("(");
|
||||
#define x87CW_RC_NEAR 0
|
||||
#define x87CW_RC_DOWN 1
|
||||
#define x87CW_RC_UP 2
|
||||
#define x87CW_RC_TRUNCATE 3
|
||||
switch((* ((unsigned short*) value)))
|
||||
{
|
||||
case x87CW_RC_NEAR:
|
||||
valueText += "round near";
|
||||
break;
|
||||
|
||||
case x87CW_RC_DOWN:
|
||||
valueText += "round down";
|
||||
break;
|
||||
|
||||
case x87CW_RC_UP:
|
||||
valueText += "round up";
|
||||
break;
|
||||
|
||||
case x87CW_RC_TRUNCATE:
|
||||
valueText += "truncate";
|
||||
break;
|
||||
}
|
||||
|
||||
valueText += QString(")");
|
||||
}
|
||||
else if(reg == x87CW_PC)
|
||||
{
|
||||
valueText = QString("%1").arg((* ((unsigned short*) value)), 1, 16, QChar('0')).toUpper();
|
||||
valueText += QString("(");
|
||||
#define x87CW_PC_REAL4 0
|
||||
#define x87CW_PC_NOTUSED 1
|
||||
#define x87CW_PC_REAL8 2
|
||||
#define x87CW_PC_REAL10 3
|
||||
switch((* ((unsigned short*) value)))
|
||||
{
|
||||
case x87CW_PC_REAL4:
|
||||
valueText += "real4";
|
||||
break;
|
||||
|
||||
case x87CW_PC_NOTUSED:
|
||||
valueText += "not used";
|
||||
break;
|
||||
|
||||
case x87CW_PC_REAL8:
|
||||
valueText += "real8";
|
||||
break;
|
||||
|
||||
case x87CW_PC_REAL10:
|
||||
valueText += "real10";
|
||||
break;
|
||||
}
|
||||
|
||||
valueText += QString(")");
|
||||
}
|
||||
else if(reg == x87SW_TOP)
|
||||
{
|
||||
valueText = QString("%1").arg((* ((unsigned short*) value)), 1, 16, QChar('0')).toUpper();
|
||||
valueText += QString("(ST") + valueText + QString(")");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SIZE_T size = GetSizeRegister(reg);
|
||||
|
@ -1099,6 +1258,39 @@ QString RegistersView::GetRegStringValueFromValue(REGISTER_NAME reg, char* value
|
|||
return valueText;
|
||||
}
|
||||
|
||||
QString RegistersView::GetTagWordStateString(unsigned short state)
|
||||
{
|
||||
#define X87FPU_TAGWORD_NONZERO 0
|
||||
#define X87FPU_TAGWORD_ZERO 1
|
||||
#define X87FPU_TAGWORD_SPECIAL 2
|
||||
#define X87FPU_TAGWORD_EMPTY 3
|
||||
QString string_state = "";
|
||||
switch(state)
|
||||
{
|
||||
case X87FPU_TAGWORD_NONZERO:
|
||||
string_state += QString("nonzero");
|
||||
break;
|
||||
|
||||
case X87FPU_TAGWORD_ZERO:
|
||||
string_state += QString("zero");
|
||||
break;
|
||||
|
||||
case X87FPU_TAGWORD_SPECIAL:
|
||||
string_state += QString("special");
|
||||
break;
|
||||
|
||||
case X87FPU_TAGWORD_EMPTY:
|
||||
string_state += QString("empty");
|
||||
break;
|
||||
|
||||
default:
|
||||
string_state += QString("unkown");
|
||||
break;
|
||||
}
|
||||
|
||||
return string_state;
|
||||
}
|
||||
|
||||
void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
||||
{
|
||||
// is the register-id known?
|
||||
|
@ -1154,33 +1346,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
|||
QString newText;
|
||||
newText = QString("ST%1 ").arg(((x87FPURegister_t*) registerValue(&wRegDumpStruct, reg))->st_value);
|
||||
|
||||
#define X87FPU_TAGWORD_NONZERO 0
|
||||
#define X87FPU_TAGWORD_ZERO 1
|
||||
#define X87FPU_TAGWORD_SPECIAL 2
|
||||
#define X87FPU_TAGWORD_EMPTY 3
|
||||
|
||||
switch(((x87FPURegister_t*) registerValue(&wRegDumpStruct, reg))->tag)
|
||||
{
|
||||
case X87FPU_TAGWORD_NONZERO:
|
||||
newText += QString("nonzero ");
|
||||
break;
|
||||
|
||||
case X87FPU_TAGWORD_ZERO:
|
||||
newText += QString("zero ");
|
||||
break;
|
||||
|
||||
case X87FPU_TAGWORD_SPECIAL:
|
||||
newText += QString("special ");
|
||||
break;
|
||||
|
||||
case X87FPU_TAGWORD_EMPTY:
|
||||
newText += QString("empty ");
|
||||
break;
|
||||
|
||||
default:
|
||||
newText += QString("unkown ");
|
||||
break;
|
||||
}
|
||||
newText += GetTagWordStateString(((x87FPURegister_t*) registerValue(&wRegDumpStruct, reg))->tag) + QString(" ");
|
||||
|
||||
newText += QString::number(readFloat80(((x87FPURegister_t*) registerValue(&wRegDumpStruct, reg))->data));
|
||||
width = newText.length() * mCharWidth;
|
||||
|
@ -1473,7 +1639,7 @@ SIZE_T RegistersView::GetSizeRegister(const REGISTER_NAME reg_name)
|
|||
|
||||
if(mUINTDISPLAY.contains(reg_name))
|
||||
size = sizeof(uint_t);
|
||||
else if(mUSHORTDISPLAY.contains(reg_name))
|
||||
else if(mUSHORTDISPLAY.contains(reg_name) || mFIELDVALUE.contains(reg_name))
|
||||
size = sizeof(unsigned short);
|
||||
else if(mDWORDDISPLAY.contains(reg_name))
|
||||
size = sizeof(DWORD);
|
||||
|
@ -1577,6 +1743,15 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
|
||||
if(reg == x87ControlWord) return (char*) & (regd->titcontext.x87fpu.ControlWord);
|
||||
|
||||
if(reg == x87TW_0) return (char*) & (regd->x87FPURegisters[0].tag);
|
||||
if(reg == x87TW_1) return (char*) & (regd->x87FPURegisters[1].tag);
|
||||
if(reg == x87TW_2) return (char*) & (regd->x87FPURegisters[2].tag);
|
||||
if(reg == x87TW_3) return (char*) & (regd->x87FPURegisters[3].tag);
|
||||
if(reg == x87TW_4) return (char*) & (regd->x87FPURegisters[4].tag);
|
||||
if(reg == x87TW_5) return (char*) & (regd->x87FPURegisters[5].tag);
|
||||
if(reg == x87TW_6) return (char*) & (regd->x87FPURegisters[6].tag);
|
||||
if(reg == x87TW_7) return (char*) & (regd->x87FPURegisters[7].tag);
|
||||
|
||||
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);
|
||||
|
|
|
@ -30,6 +30,9 @@ public:
|
|||
// x87 stuff
|
||||
x87r0, x87r1, x87r2, x87r3, x87r4, x87r5, x87r6, x87r7,
|
||||
x87TagWord, x87ControlWord, x87StatusWord,
|
||||
// x87 Tag Word fields
|
||||
x87TW_0, x87TW_1, x87TW_2, x87TW_3, x87TW_4, x87TW_5,
|
||||
x87TW_6, x87TW_7,
|
||||
// x87 Status Word fields
|
||||
x87SW_B, x87SW_C3, x87SW_TOP, x87SW_C2, x87SW_C1, x87SW_O,
|
||||
x87SW_IR, x87SW_SF, x87SW_P, x87SW_U, x87SW_Z,
|
||||
|
@ -120,6 +123,8 @@ protected slots:
|
|||
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);
|
||||
QString GetTagWordStateString(unsigned short);
|
||||
|
||||
private:
|
||||
int mVScrollOffset;
|
||||
int mRowsNeeded;
|
||||
|
@ -132,6 +137,8 @@ private:
|
|||
QSet<REGISTER_NAME> mONLYMODULEANDLABELDISPLAY;
|
||||
QSet<REGISTER_NAME> mSETONEZEROTOGGLE;
|
||||
QSet<REGISTER_NAME> mMODIFYDISPLAY;
|
||||
QSet<REGISTER_NAME> mFIELDVALUE;
|
||||
QSet<REGISTER_NAME> mTAGWORD;
|
||||
QSet<REGISTER_NAME> mCANSTOREADDRESS;
|
||||
QSet<REGISTER_NAME> mINCREMENTDECREMET;
|
||||
QSet<REGISTER_NAME> mFPUx87_80BITSDISPLAY;
|
||||
|
|
Loading…
Reference in New Issue