summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/formats
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:15 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:15 -0500
commit2d08b8de9166552a3214012ecdfb98bd8fd3eafb (patch)
tree612c5e35345bbd2e28e084abbc5ece3d1a236deb /src/arch/arm/isa/formats
parent57c4d37c102e2fb4d1c86fe1d583ee67c76945b1 (diff)
downloadgem5-2d08b8de9166552a3214012ecdfb98bd8fd3eafb.tar.xz
ARM: Implement the version of VMRS that writes to the APSR.
Diffstat (limited to 'src/arch/arm/isa/formats')
-rw-r--r--src/arch/arm/isa/formats/fp.isa12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/arch/arm/isa/formats/fp.isa b/src/arch/arm/isa/formats/fp.isa
index 83f541584..284876311 100644
--- a/src/arch/arm/isa/formats/fp.isa
+++ b/src/arch/arm/isa/formats/fp.isa
@@ -409,7 +409,17 @@ let {{
default:
return new Unknown(machInst);
}
- return new Vmrs(machInst, rt, (IntRegIndex)specReg);
+ if (rt == 0xf) {
+ CPSR cpsrMask = 0;
+ cpsrMask.n = 1;
+ cpsrMask.z = 1;
+ cpsrMask.c = 1;
+ cpsrMask.v = 1;
+ return new VmrsApsr(machInst, INTREG_CONDCODES,
+ (IntRegIndex)specReg, (uint32_t)cpsrMask);
+ } else {
+ return new Vmrs(machInst, rt, (IntRegIndex)specReg);
+ }
}
} else {
uint32_t vd = (bits(machInst, 7) << 5) |