summaryrefslogtreecommitdiff
path: root/src/cpu/nativetrace.cc
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-09-04 23:39:57 -0700
committerGabe Black <gblack@eecs.umich.edu>2007-09-04 23:39:57 -0700
commit26044dca33cb86928778a314186773b921826cdb (patch)
tree714206819490382af46e5cf169952b5de362ba6a /src/cpu/nativetrace.cc
parent760240176a8ef3198daa728f0080e41de4d9430a (diff)
downloadgem5-26044dca33cb86928778a314186773b921826cdb.tar.xz
X86/StateTrace: Make m5 and statetrace track mmx and xmm registers, and actually compare xmm.
--HG-- extra : convert_revision : 02c6641200edb133c9bc11f1fdf3c1a0b1c87e77
Diffstat (limited to 'src/cpu/nativetrace.cc')
-rw-r--r--src/cpu/nativetrace.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/cpu/nativetrace.cc b/src/cpu/nativetrace.cc
index 0db61af2c..7152602fe 100644
--- a/src/cpu/nativetrace.cc
+++ b/src/cpu/nativetrace.cc
@@ -84,6 +84,19 @@ NativeTrace::checkR11Reg(const char * name, uint64_t &mVal, uint64_t &nVal)
return true;
}
+bool
+NativeTrace::checkXMM(int num, uint64_t mXmmBuf[], uint64_t nXmmBuf[])
+{
+ if (mXmmBuf[num * 2] != nXmmBuf[num * 2] ||
+ mXmmBuf[num * 2 + 1] != nXmmBuf[num * 2 + 1]) {
+ DPRINTFN("Register xmm%d should be 0x%016x%016x but is 0x%016x%016x.\n",
+ num, nXmmBuf[num * 2 + 1], nXmmBuf[num * 2],
+ mXmmBuf[num * 2 + 1], mXmmBuf[num * 2]);
+ return false;
+ }
+ return true;
+}
+
void
Trace::NativeTraceRecord::dump()
{
@@ -127,6 +140,22 @@ Trace::NativeTrace::check(ThreadContext * tc, bool isSyscall)
checkReg("r14", mState.r14, nState.r14);
checkReg("r15", mState.r15, nState.r15);
checkReg("rip", mState.rip, nState.rip);
+ checkXMM(0, mState.xmm, nState.xmm);
+ checkXMM(1, mState.xmm, nState.xmm);
+ checkXMM(2, mState.xmm, nState.xmm);
+ checkXMM(3, mState.xmm, nState.xmm);
+ checkXMM(4, mState.xmm, nState.xmm);
+ checkXMM(5, mState.xmm, nState.xmm);
+ checkXMM(6, mState.xmm, nState.xmm);
+ checkXMM(7, mState.xmm, nState.xmm);
+ checkXMM(8, mState.xmm, nState.xmm);
+ checkXMM(9, mState.xmm, nState.xmm);
+ checkXMM(10, mState.xmm, nState.xmm);
+ checkXMM(11, mState.xmm, nState.xmm);
+ checkXMM(12, mState.xmm, nState.xmm);
+ checkXMM(13, mState.xmm, nState.xmm);
+ checkXMM(14, mState.xmm, nState.xmm);
+ checkXMM(15, mState.xmm, nState.xmm);
#if THE_ISA == SPARC_ISA
/*for(int f = 0; f <= 62; f+=2)
{