arch-arm: Instruction size methods in StaticInst class
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Fri, 15 Dec 2017 10:03:19 +0000 (10:03 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Tue, 19 Dec 2017 16:43:45 +0000 (16:43 +0000)
This patch is introducing some methods in StaticInst so that is possible
to get the instruction size in byte of the instruction (can be 2 bytes
in Thumb) and the correct opcode (The machInst field contains some
appended metadata)

Change-Id: I3bed4d9fd7c77feaeded40ded192afe445d306ea
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/6781
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/arch/arm/insts/static_inst.hh

index 431e81b0747975fac0f1c39a3971f2c0779cb5df..4595646cb45c1f08666f75418eabe6842c196322 100644 (file)
@@ -423,6 +423,25 @@ class ArmStaticInst : public StaticInst
     {
         return intWidth;
     }
+
+    /** Returns the byte size of current instruction */
+    ssize_t
+    instSize() const
+    {
+        return (!machInst.thumb || machInst.bigThumb) ? 4 : 2;
+    }
+
+    /**
+     * Returns the real encoding of the instruction:
+     * the machInst field is in fact always 64 bit wide and
+     * contains some instruction metadata, which means it differs
+     * from the real opcode.
+     */
+    MachInst
+    encoding() const
+    {
+        return static_cast<MachInst>(mask(instSize() * 8));
+    }
 };
 }