summaryrefslogtreecommitdiff
path: root/src/arch/arm/utility.hh
diff options
context:
space:
mode:
authorWilliam Wang <William.Wang@arm.com>2011-04-04 11:42:28 -0500
committerWilliam Wang <William.Wang@arm.com>2011-04-04 11:42:28 -0500
commit16fcad3907f439b8cdbaad638a8618ee7ad6a9da (patch)
treeee8304a8947744379bdbcbd72dd4fbcc3b0fb721 /src/arch/arm/utility.hh
parenta679cd917ac4775979e23594de52f1bca407c08c (diff)
downloadgem5-16fcad3907f439b8cdbaad638a8618ee7ad6a9da.tar.xz
ARM: Cleanup and small fixes to some NEON ops to match the spec.
Only certain bits of the cpacr can be written, some must be equal. Mult instructions that write the same register should do something sane
Diffstat (limited to 'src/arch/arm/utility.hh')
-rw-r--r--src/arch/arm/utility.hh7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/arch/arm/utility.hh b/src/arch/arm/utility.hh
index 0fea44695..20cb9b426 100644
--- a/src/arch/arm/utility.hh
+++ b/src/arch/arm/utility.hh
@@ -146,7 +146,12 @@ vfpEnabled(CPACR cpacr, CPSR cpsr)
static inline bool
vfpEnabled(CPACR cpacr, CPSR cpsr, FPEXC fpexc)
{
- return fpexc.en && vfpEnabled(cpacr, cpsr);
+ if ((cpacr.cp11 == 0x3) ||
+ ((cpacr.cp11 == 0x1) && inPrivilegedMode(cpsr)))
+ return fpexc.en && vfpEnabled(cpacr, cpsr);
+ else
+ return fpexc.en && vfpEnabled(cpacr, cpsr) &&
+ (cpacr.cp11 == cpacr.cp10);
}
static inline bool