ARM: Do something for ISB, DSB, DMB
authorAli Saidi <Ali.Saidi@ARM.com>
Wed, 23 Feb 2011 21:10:49 +0000 (15:10 -0600)
committerAli Saidi <Ali.Saidi@ARM.com>
Wed, 23 Feb 2011 21:10:49 +0000 (15:10 -0600)
src/arch/arm/isa/formats/misc.isa
src/arch/arm/isa/insts/misc.isa
src/cpu/o3/commit_impl.hh

index 3bcb5c97d020e7a60e8af00023d5b453dc2c7899..4a92005043cf3e1ed0a7f5c1b5932857e839393e 100644 (file)
@@ -120,14 +120,11 @@ let {{
             return new WarnUnimplemented(
                     isRead ? "mrc dccmvau" : "mcr dccmvau", machInst);
           case MISCREG_CP15ISB:
-            return new WarnUnimplemented(
-                    isRead ? "mrc cp15isb" : "mcr cp15isb", machInst);
+            return new Isb(machInst);
           case MISCREG_CP15DSB:
-            return new WarnUnimplemented(
-                    isRead ? "mrc cp15dsb" : "mcr cp15dsb", machInst);
+            return new Dsb(machInst);
           case MISCREG_CP15DMB:
-            return new WarnUnimplemented(
-                    isRead ? "mrc cp15dmb" : "mcr cp15dmb", machInst);
+            return new Dmb(machInst);
           case MISCREG_ICIALLUIS:
             return new WarnUnimplemented(
                     isRead ? "mrc icialluis" : "mcr icialluis", machInst);
index ad5021daf9ad14a6d9bf1254faf4ee7ba254ac7d..be51d927dd63887739eb95d127d487b176a560ea 100644 (file)
@@ -696,19 +696,23 @@ let {{
     exec_output += ClrexCompleteAcc.subst(clrexIop)
 
     isbCode = '''
+        fault = new FlushPipe;
     '''
     isbIop = InstObjParams("isb", "Isb", "PredOp",
                              {"code": isbCode,
-                               "predicate_test": predicateTest}, ['IsSerializing'])
+                               "predicate_test": predicateTest},
+                                ['IsSerializeAfter'])
     header_output += BasicDeclare.subst(isbIop)
     decoder_output += BasicConstructor.subst(isbIop)
     exec_output += PredOpExecute.subst(isbIop)
 
     dsbCode = '''
+        fault = new FlushPipe;
     '''
     dsbIop = InstObjParams("dsb", "Dsb", "PredOp",
                              {"code": dsbCode,
-                               "predicate_test": predicateTest},['IsMemBarrier'])
+                               "predicate_test": predicateTest},
+                              ['IsMemBarrier', 'IsSerializeAfter'])
     header_output += BasicDeclare.subst(dsbIop)
     decoder_output += BasicConstructor.subst(dsbIop)
     exec_output += PredOpExecute.subst(dsbIop)
@@ -717,7 +721,8 @@ let {{
     '''
     dmbIop = InstObjParams("dmb", "Dmb", "PredOp",
                              {"code": dmbCode,
-                               "predicate_test": predicateTest},['IsMemBarrier'])
+                               "predicate_test": predicateTest},
+                               ['IsMemBarrier'])
     header_output += BasicDeclare.subst(dmbIop)
     decoder_output += BasicConstructor.subst(dmbIop)
     exec_output += PredOpExecute.subst(dmbIop)
index 01e235722e7c2dbce072f0394dc049a3b0b189d0..104e7fb58db2aa6bd51876f074157044f35daa5c 100644 (file)
@@ -1177,7 +1177,8 @@ DefaultCommit<Impl>::commitHead(DynInstPtr &head_inst, unsigned inst_num)
         }
     }
 #endif
-
+    DPRINTF(Commit, "Committing instruction with [sn:%lli]\n",
+            head_inst->seqNum);
     if (head_inst->traceData) {
         head_inst->traceData->setFetchSeq(head_inst->seqNum);
         head_inst->traceData->setCPSeq(thread[tid]->numInst);