summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/formats/misc.isa
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:17 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:17 -0500
commit6101e1b06276daf66e9c6c66523bb2339ccf47bf (patch)
treefedb5dbe32948c79fd9fb0d03bf175f2c2ead089 /src/arch/arm/isa/formats/misc.isa
parente91e6ff9a46ecee70c924e3548c3fa191e83099d (diff)
downloadgem5-6101e1b06276daf66e9c6c66523bb2339ccf47bf.tar.xz
ARM: Implement a version of mcr and mrc that works in user mode.
Diffstat (limited to 'src/arch/arm/isa/formats/misc.isa')
-rw-r--r--src/arch/arm/isa/formats/misc.isa19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/arch/arm/isa/formats/misc.isa b/src/arch/arm/isa/formats/misc.isa
index be0e63900..2801ebedf 100644
--- a/src/arch/arm/isa/formats/misc.isa
+++ b/src/arch/arm/isa/formats/misc.isa
@@ -137,6 +137,8 @@ let {{
case MISCREG_BPIALL:
return new WarnUnimplemented(
isRead ? "mrc bpiall" : "mcr bpiall", machInst);
+
+ // Write only.
case MISCREG_TLBIALLIS:
case MISCREG_TLBIMVAIS:
case MISCREG_TLBIASIDIS:
@@ -157,6 +159,23 @@ let {{
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);