Make two simple utility functions to determine if a MiscReg index corresponding to an IPR is readable or writable.

--HG--
extra : convert_revision : 89eebba5eec01e629213997d24c734a6acad0ecb
This commit is contained in:
Gabe Black 2006-10-31 17:50:57 -05:00
parent 312a4710d7
commit fb5ba85abb
2 changed files with 11 additions and 6 deletions

View file

@ -218,6 +218,15 @@ namespace AlphaISA
NumInternalProcRegs // number of IPR registers
};
inline bool IprIsWritable(int index)
{
return index < minReadOnlyIpr || index > maxReadOnlyIpr;
}
inline bool IprIsReadable(int index)
{
return index < minWriteOnlyIpr || index > maxWriteOnlyIpr;
}
extern md_ipr_names MiscRegIndexToIpr[NumInternalProcRegs];
extern int IprToMiscRegIndex[MaxInternalProcRegs];

View file

@ -746,9 +746,7 @@ decode OPCODE default Unknown::unknown() {
format HwMoveIPR {
1: hw_mfpr({{
int miscRegIndex = IprToMiscRegIndex[ipr_index];
if(miscRegIndex < 0 ||
(miscRegIndex >= MinWriteOnlyIpr &&
miscRegIndex <= MaxWriteOnlyIpr))
if(miscRegIndex < 0 || !IprIsReadable(miscRegIndex))
fault = new UnimplementedOpcodeFault;
else
Ra = xc->readMiscRegWithEffect(miscRegIndex, fault);
@ -761,9 +759,7 @@ decode OPCODE default Unknown::unknown() {
format HwMoveIPR {
1: hw_mtpr({{
int miscRegIndex = IprToMiscRegIndex[ipr_index];
if(miscRegIndex < 0 ||
(miscRegIndex >= MinReadOnlyIpr &&
miscRegIndex <= MaxWriteOnlyIpr))
if(miscRegIndex < 0 || !IprIsWritable(miscRegIndex))
fault = new UnimplementedOpcodeFault;
else
xc->setMiscRegWithEffect(miscRegIndex, Ra);