summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/templates
diff options
context:
space:
mode:
authorAli Saidi <ali.saidi@arm.com>2010-08-25 19:10:42 -0500
committerAli Saidi <ali.saidi@arm.com>2010-08-25 19:10:42 -0500
commit99fafb72b87f3b63f205bee7b20b8c19724d6305 (patch)
tree305127cadcae96140871d128525bc89c5a1486ec /src/arch/arm/isa/templates
parent63464d950ec4e8b8f3aa86802ca9fbf1e8c662b6 (diff)
downloadgem5-99fafb72b87f3b63f205bee7b20b8c19724d6305.tar.xz
ARM: Fix VFP enabled checks for mem instructions
Diffstat (limited to 'src/arch/arm/isa/templates')
-rw-r--r--src/arch/arm/isa/templates/neon.isa8
-rw-r--r--src/arch/arm/isa/templates/vfp.isa19
2 files changed, 25 insertions, 2 deletions
diff --git a/src/arch/arm/isa/templates/neon.isa b/src/arch/arm/isa/templates/neon.isa
index 20c1d26b8..0e592c6e4 100644
--- a/src/arch/arm/isa/templates/neon.isa
+++ b/src/arch/arm/isa/templates/neon.isa
@@ -37,6 +37,14 @@
//
// Authors: Gabe Black
+let {{
+ simdEnabledCheckCode = '''
+ if (!neonEnabled(Cpacr, Cpsr, Fpexc))
+ return disabledFault();
+ '''
+}};
+
+
def template NeonRegRegRegOpDeclare {{
template <class _Element>
class %(class_name)s : public %(base_class)s
diff --git a/src/arch/arm/isa/templates/vfp.isa b/src/arch/arm/isa/templates/vfp.isa
index 5de52738c..8ccfedd0d 100644
--- a/src/arch/arm/isa/templates/vfp.isa
+++ b/src/arch/arm/isa/templates/vfp.isa
@@ -43,9 +43,24 @@ let {{
return disabledFault();
'''
- vmsrrsEnabledCheckCode = '''
+ vmsrEnabledCheckCode = '''
if (!vfpEnabled(Cpacr, Cpsr))
- return disabledFault();
+ if (dest != (int)MISCREG_FPEXC && dest != (int)MISCREG_FPSID)
+ return disabledFault();
+ if (!inPrivilegedMode(Cpsr))
+ if (dest != (int)MISCREG_FPSCR)
+ return disabledFault();
+
+ '''
+
+ vmrsEnabledCheckCode = '''
+ if (!vfpEnabled(Cpacr, Cpsr))
+ if (op1 != (int)MISCREG_FPEXC && op1 != (int)MISCREG_FPSID &&
+ op1 != (int)MISCREG_MVFR0 && op1 != (int)MISCREG_MVFR1)
+ return disabledFault();
+ if (!inPrivilegedMode(Cpsr))
+ if (op1 != (int)MISCREG_FPSCR)
+ return disabledFault();
'''
}};