1
0
Fork 0

Set FPU registers to one/zero

This commit is contained in:
torusrxxx 2018-10-10 17:22:45 +08:00 committed by Duncan Ogilvie
parent 5669e13485
commit ba7915057d
1 changed files with 28 additions and 6 deletions

View File

@ -761,6 +761,7 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
mFPUx87.insert(i);
mFPUx87_80BITSDISPLAY.insert(i);
mFPU.insert(i);
mSETONEZEROTOGGLE.insert(i);
}
for(REGISTER_NAME i = x87st0; i <= x87st7; i = (REGISTER_NAME)(i + 1))
@ -770,6 +771,7 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
mFPUx87.insert(i);
mFPUx87_80BITSDISPLAY.insert(i);
mFPU.insert(i);
mSETONEZEROTOGGLE.insert(i);
}
mSETONEZEROTOGGLE.insert(x87TagWord);
@ -2559,13 +2561,23 @@ void RegistersView::onPopAction()
void RegistersView::onZeroAction()
{
if(mSETONEZEROTOGGLE.contains(mSelected))
setRegister(mSelected, 0);
{
if(mSelected >= x87r0 && mSelected <= x87r7 || mSelected >= x87st0 && mSelected <= x87st7)
setRegister(mSelected, reinterpret_cast<duint>("\0\0\0\0\0\0\0\0\0")); //9 zeros and 1 terminating zero
else
setRegister(mSelected, 0);
}
}
void RegistersView::onSetToOneAction()
{
if(mSETONEZEROTOGGLE.contains(mSelected))
setRegister(mSelected, 1);
{
if(mSelected >= x87r0 && mSelected <= x87r7 || mSelected >= x87st0 && mSelected <= x87st7)
setRegister(mSelected, reinterpret_cast<duint>("\0\0\0\0\0\0\0\x80\xFF\x3F"));
else
setRegister(mSelected, 1);
}
}
void RegistersView::onModifyAction()
@ -2986,10 +2998,20 @@ void RegistersView::displayCustomContextMenuSlot(QPoint pos)
if(mSETONEZEROTOGGLE.contains(mSelected))
{
if((* ((duint*) registerValue(&wRegDumpStruct, mSelected))) >= 1)
wMenu.addAction(wCM_Zero);
if((* ((duint*) registerValue(&wRegDumpStruct, mSelected))) == 0)
wMenu.addAction(wCM_SetToOne);
if(mSelected >= x87r0 && mSelected <= x87r7 || mSelected >= x87st0 && mSelected <= x87st7)
{
if(memcmp(registerValue(&wRegDumpStruct, mSelected), "\0\0\0\0\0\0\0\0\0", 10) != 0)
wMenu.addAction(wCM_Zero);
if(memcmp(registerValue(&wRegDumpStruct, mSelected), "\0\0\0\0\0\0\0\x80\xFF\x3F", 10) != 0)
wMenu.addAction(wCM_SetToOne);
}
else
{
if((* ((duint*) registerValue(&wRegDumpStruct, mSelected))) != 0)
wMenu.addAction(wCM_Zero);
if((* ((duint*) registerValue(&wRegDumpStruct, mSelected))) == 0)
wMenu.addAction(wCM_SetToOne);
}
}
if(mBOOLDISPLAY.contains(mSelected))