ARM: Implement the bkpt instruction.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:16 +0000 (12:58 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:16 +0000 (12:58 -0500)
src/arch/arm/isa/formats/data.isa
src/arch/arm/isa/insts/misc.isa
src/arch/arm/isa/operands.isa

index a1d0c53a29a093730de527628b0a7de41e6e6a46..e97769835fbc247809d9b56ccbad9a54bf7694ff 100644 (file)
@@ -1167,7 +1167,7 @@ def format Thumb16Misc() {{
                                   true, true, regList);
             }
           case 0xe:
-            return new WarnUnimplemented("bkpt", machInst);
+            return new BkptInst(machInst);
           case 0xf:
             if (bits(machInst, 3, 0) != 0)
                 return new ItInst(machInst);
index ddf548a1976999cfb8223c72a114d2c708d874ec..64bff6cb108df470d99d49d9b83da94564a734c7 100644 (file)
@@ -456,6 +456,12 @@ let {{
     decoder_output += RegRegRegRegOpConstructor.subst(usada8Iop)
     exec_output += PredOpExecute.subst(usada8Iop)
 
+    bkptIop = InstObjParams("bkpt", "BkptInst", "ArmStaticInst",
+            "return new PrefetchAbort(PC, ArmFault::DebugEvent);")
+    header_output += BasicDeclare.subst(bkptIop)
+    decoder_output += BasicConstructor.subst(bkptIop)
+    exec_output += BasicExecute.subst(bkptIop)
+
     nopIop = InstObjParams("nop", "NopInst", "PredOp", \
             { "code" : "", "predicate_test" : predicateTest })
     header_output += BasicDeclare.subst(nopIop)
index b041cef43b19c811900c2f9697147b5f90a56afe..0c52703e19f2c75748966a3d6792ca45af6592ad 100644 (file)
@@ -179,6 +179,7 @@ def operands {{
     'Fpexc': ('ControlReg', 'uw', 'MISCREG_FPEXC', None, 2),
     'Sctlr': ('ControlReg', 'uw', 'MISCREG_SCTLR', None, 2),
     'SevMailbox': ('ControlReg', 'uw', 'MISCREG_SEV_MAILBOX', None, 2),
+    'PC': ('PC', 'ud', None, None, 2),
     'NPC': ('NPC', 'ud', None, (None, None, 'IsControl'), 2,
             readNPC, writeNPC),
     'FNPC': ('NPC', 'ud', None, (None, None, 'IsControl'), 2,