This commit adds the pointer authentication instructions from the Arm
v8.1-m PACBTI extension.
While the instructions are properly recognized, they are all NOPs.

Signed-off-by: Torbjörn SVENSSON <[email protected]>
---
 target/arm/tcg/t32.decode  | 21 +++++++++++++---
 target/arm/tcg/translate.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+), 3 deletions(-)

diff --git a/target/arm/tcg/t32.decode b/target/arm/tcg/t32.decode
index 49b8d0037e..a885eed101 100644
--- a/target/arm/tcg/t32.decode
+++ b/target/arm/tcg/t32.decode
@@ -263,6 +263,7 @@ BFCI             1111 0011 011 0 .... 0 ... .... ..0.....   
  @bfi
 @s0_rnadm        .... .... .... rn:4 ra:4 rd:4 .... rm:4      &s_rrrr s=0
 @s0_rn0dm        .... .... .... rn:4 .... rd:4 .... rm:4      &s_rrrr ra=0 s=0
 @rnadm           .... .... .... rn:4 ra:4 rd:4 .... rm:4      &rrrr
+@rna0m           .... .... .... rn:4 ra:4 .... .... rm:4      &rrrr rd=0
 @rn0dm           .... .... .... rn:4 .... rd:4 .... rm:4      &rrrr ra=0
 @rndm            .... .... .... rn:4 .... rd:4 .... rm:4      &rrr
 @rdm             .... .... .... .... .... rd:4 .... rm:4      &rr
@@ -319,9 +320,18 @@ SMLALDX          1111 1011 1100 .... .... .... 1101 ....   
   @rnadm
 SMLSLD           1111 1011 1101 .... .... .... 1100 ....      @rnadm
 SMLSLDX          1111 1011 1101 .... .... .... 1101 ....      @rnadm
 
-SMMLA            1111 1011 0101 .... .... .... 0000 ....      @rnadm
-SMMLAR           1111 1011 0101 .... .... .... 0001 ....      @rnadm
-SMMLS            1111 1011 0110 .... .... .... 0000 ....      @rnadm
+{
+  AUTG           1111 1011 0101 .... .... 1111 0000 ....      @rna0m
+  SMMLA          1111 1011 0101 .... .... .... 0000 ....      @rnadm
+}
+{
+  BXAUT          1111 1011 0101 .... .... 1111 0001 ....      @rna0m
+  SMMLAR         1111 1011 0101 .... .... .... 0001 ....      @rnadm
+}
+{
+  PACG           1111 1011 0110 .... 1111 .... 0000 ....      @rndm
+  SMMLS          1111 1011 0110 .... .... .... 0000 ....      @rnadm
+}
 SMMLSR           1111 1011 0110 .... .... .... 0001 ....      @rnadm
 
 SDIV             1111 1011 1001 .... 1111 .... 1111 ....      @rndm
@@ -375,6 +385,11 @@ CLZ              1111 1010 1011 ---- 1111 .... 1000 ....   
   @rdm
         # SEVL   1111 0011 1010 1111 1000 0000 0000 0101
 
         ESB      1111 0011 1010 1111 1000 0000 0001 0000
+
+        # v8.1-m PACBTI extention
+        AUT      1111 0011 1010 1111 1000 0000 0010 1101
+        PAC      1111 0011 1010 1111 1000 0000 0001 1101
+        PACBTI   1111 0011 1010 1111 1000 0000 0000 1101
       ]
 
       # The canonical nop ends in 0000 0000, but the whole rest
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index c744b16345..ae1351ef03 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -5012,6 +5012,68 @@ static bool trans_SMMLSR(DisasContext *s, arg_rrrr *a)
     return op_smmla(s, a, true, true);
 }
 
+static bool trans_PAC(DisasContext *s, arg_empty *a)
+{
+    if (!arm_dc_feature(s, ARM_FEATURE_V8_1M)) {
+        return false;
+    }
+
+    /* Handle as if PACBTI is disabled. */
+    return true;
+}
+
+static bool trans_PACBTI(DisasContext *s, arg_empty *a)
+{
+    if (!arm_dc_feature(s, ARM_FEATURE_V8_1M)) {
+        return false;
+    }
+
+    /* todo: reset EPSR.B to 0 */
+
+    /* Handle as if PACBTI is disabled. */
+    return true;
+}
+
+static bool trans_PACG(DisasContext *s, arg_rrr *a)
+{
+    if (!arm_dc_feature(s, ARM_FEATURE_V8_1M)) {
+        return false;
+    }
+
+    /* Handle as if PACBTI is disabled. */
+    return true;
+}
+
+static bool trans_BXAUT(DisasContext *s, arg_rrrr *a)
+{
+    if (!arm_dc_feature(s, ARM_FEATURE_V8_1M)) {
+        return false;
+    }
+
+    /* Handle as if PACBTI is disabled. */
+    return true;
+}
+
+static bool trans_AUT(DisasContext *s, arg_empty *a)
+{
+    if (!arm_dc_feature(s, ARM_FEATURE_V8_1M)) {
+        return false;
+    }
+
+    /* Handle as if PACBTI is disabled. */
+    return true;
+}
+
+static bool trans_AUTG(DisasContext *s, arg_rrrr *a)
+{
+    if (!arm_dc_feature(s, ARM_FEATURE_V8_1M)) {
+        return false;
+    }
+
+    /* Handle as if PACBTI is disabled. */
+    return true;
+}
+
 static bool op_div(DisasContext *s, arg_rrr *a, bool u)
 {
     TCGv_i32 t1, t2;

-- 
2.43.0


Reply via email to