case MISCREG_BPIALL:
return new WarnUnimplemented(
isRead ? "mrc bpiall" : "mcr bpiall", machInst);
+
+ // Write only.
case MISCREG_TLBIALLIS:
case MISCREG_TLBIMVAIS:
case MISCREG_TLBIASIDIS:
return new Mcr15(machInst, (IntRegIndex)miscReg, rt);
}
+ // Read only in user mode.
+ case MISCREG_TPIDRURO:
+ if (isRead) {
+ return new Mrc15User(machInst, rt, (IntRegIndex)miscReg);
+ } else {
+ return new Mcr15(machInst, (IntRegIndex)miscReg, rt);
+ }
+
+ // Read/write in user mode.
+ case MISCREG_TPIDRURW:
+ if (isRead) {
+ return new Mrc15User(machInst, rt, (IntRegIndex)miscReg);
+ } else {
+ return new Mcr15User(machInst, (IntRegIndex)miscReg, rt);
+ }
+
+ // Read/write, priveleged only.
default:
if (isRead) {
return new Mrc15(machInst, rt, (IntRegIndex)miscReg);
decoder_output += RegRegOpConstructor.subst(mcr15Iop)
exec_output += PredOpExecute.subst(mcr15Iop)
+ mrc15UserIop = InstObjParams("mrc", "Mrc15User", "RegRegOp",
+ { "code": "Dest = MiscOp1;",
+ "predicate_test": predicateTest }, [])
+ header_output += RegRegOpDeclare.subst(mrc15UserIop)
+ decoder_output += RegRegOpConstructor.subst(mrc15UserIop)
+ exec_output += PredOpExecute.subst(mrc15UserIop)
+
+ mcr15UserIop = InstObjParams("mcr", "Mcr15User", "RegRegOp",
+ { "code": "MiscDest = Op1",
+ "predicate_test": predicateTest }, [])
+ header_output += RegRegOpDeclare.subst(mcr15UserIop)
+ decoder_output += RegRegOpConstructor.subst(mcr15UserIop)
+ exec_output += PredOpExecute.subst(mcr15UserIop)
+
enterxCode = '''
FNPC = NPC | (1ULL << PcJBitShift) | (1ULL << PcTBitShift);
'''