On Thu, Jun 23, 2011 at 8:56 AM, Zhe Wang <[email protected]> wrote:

> Hi,
>
>
> I am trying to run a multi-threads program on marss.  This multi-threads
> program has SSE instructions. When I test it on marss, there is an error "
> assertion fail in ooopipe.cpp: line_num 'assert(physreg->data)' ". I
> think the reason perhaps there are some SSE instructions marss does not
> implement them. Attached is the last part of logfile when running the
> application on marss. Does anybody has some idea about how to figure out
> those unimplemented SSE instructions and how to implement them on marss.
> Thanks.
>
> Its an MMX instruction 'MOVNTQ' that is not implemented. I have attached a
small patch that should work with this instruction but I have no way to test
it out right now. Please test it out and let me know if it works or not.

- Avadh


> Best
> zhe
>
> _______________________________________________
> http://www.marss86.org
> Marss86-Devel mailing list
> [email protected]
> https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel
>
>
diff --git a/ptlsim/x86/decode-sse.cpp b/ptlsim/x86/decode-sse.cpp
index 23a3e78..354b7c1 100644
--- a/ptlsim/x86/decode-sse.cpp
+++ b/ptlsim/x86/decode-sse.cpp
@@ -961,6 +961,7 @@ bool TraceDecoder::decode_sse() {
   case 0x57f: // movdqa store
   case 0x27f: // movdqu store
   case 0x5e7: // movntdq store
+  case 0x3e7: // movntq store
   case 0x52b: // movntpd store
   case 0x32b: { // movntps store
     DECODE(eform, rd, x_mode);
@@ -972,13 +973,17 @@ bool TraceDecoder::decode_sse() {
       // Store
       // This is still idempotent since if the second one was unaligned, the first one must be too
       result_store(rareg+0, REG_temp0, rd, datatype);
-      rd.mem.offset += 8;
-      result_store(rareg+1, REG_temp1, rd, datatype);
+      if(!use_mmx) {
+          rd.mem.offset += 8;
+          result_store(rareg+1, REG_temp1, rd, datatype);
+      }
     } else {
       // Move
       int rdreg = arch_pseudo_reg_to_arch_reg[rd.reg.reg];
       TransOp uoplo(OP_mov, rdreg+0, REG_zero, rareg+0, REG_zero, 3); uoplo.datatype = datatype; this << uoplo;
-      TransOp uophi(OP_mov, rdreg+1, REG_zero, rareg+1, REG_zero, 3); uophi.datatype = datatype; this << uophi;
+      if(!use_mmx) {
+          TransOp uophi(OP_mov, rdreg+1, REG_zero, rareg+1, REG_zero, 3); uophi.datatype = datatype; this << uophi;
+      }
     }
     break;
   };
_______________________________________________
http://www.marss86.org
Marss86-Devel mailing list
[email protected]
https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel

Reply via email to