PATCH [4/10] arm: add 'pac' instruction for Armv8.1-M pacbti extension
authorAndrea Corallo <andrea.corallo@arm.com>
Wed, 19 May 2021 07:51:40 +0000 (09:51 +0200)
committerAndrea Corallo <andrea.corallo@arm.com>
Mon, 26 Jul 2021 12:18:24 +0000 (14:18 +0200)
gas/
2021-06-11  Andrea Corallo  <andrea.corallo@arm.com>

* config/tc-arm.c (T16_32_TAB): Add '_pac'.
(insns): Add 'pac' insn.
* testsuite/gas/arm/armv8_1-m-pacbti-bad.l: Add pac tests.
* testsuite/gas/arm/armv8_1-m-pacbti-bad.s: Likewise.
* testsuite/gas/arm/armv8_1-m-pacbti.d: Likewise.
* testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.

opcodes/
2021-06-11  Andrea Corallo  <andrea.corallo@arm.com>

* arm-dis.c (thumb32_opcodes): Add 'pac'.

gas/config/tc-arm.c
gas/testsuite/gas/arm/armv8_1-m-pacbti-bad.l
gas/testsuite/gas/arm/armv8_1-m-pacbti-bad.s
gas/testsuite/gas/arm/armv8_1-m-pacbti.d
gas/testsuite/gas/arm/armv8_1-m-pacbti.s
opcodes/arm-dis.c

index b5d23357fc0a2f38dfcc804495ed8332ba91be50..6ef0cd97a5e76f64105a829dbf692c085ba98ac9 100644 (file)
@@ -11506,6 +11506,7 @@ encode_thumb32_addr_mode (int i, bool is_t, bool is_d)
   X(_negs,  4240, f1d00000), /* rsbs #0 */     \
   X(_orr,   4300, ea400000),                   \
   X(_orrs,  4300, ea500000),                   \
+  X(_pac,   0000, f3af801d),                   \
   X(_pacbti, 0000, f3af800d),                  \
   X(_pop,   bc00, e8bd0000), /* ldmia sp!,... */       \
   X(_push,  b400, e92d0000), /* stmdb sp!,... */       \
@@ -26329,6 +26330,7 @@ static const struct asm_opcode insns[] =
 #define THUMB_VARIANT & arm_ext_v8_1m_main
  toU("aut",   _aut, 3, (R12, LR, SP), t_pacbti),
  ToU("bti",   f3af800f, 0, (), noargs),
+ toU("pac",   _pac,   3, (R12, LR, SP), t_pacbti),
  toU("pacbti", _pacbti, 3, (R12, LR, SP), t_pacbti),
  toU("cinc",  _cinc,  3, (RRnpcsp, RR_ZR, COND),       t_cond),
  toU("cinv",  _cinv,  3, (RRnpcsp, RR_ZR, COND),       t_cond),
index 317e62f731b63527400a02b9470be60a8ca40f6d..f6f0d41ac71d0c960949b2bd9d30db7333e832df 100644 (file)
@@ -5,3 +5,6 @@
 .*:9: Error: operand must be r12 -- `aut r11,lr,sp'
 .*:10: Error: operand must be LR register -- `aut r12,r10,sp'
 .*:11: Error: operand must be SP register -- `aut r12,lr,r10'
+.*:12: Error: operand must be r12 -- `pac r11,lr,sp'
+.*:13: Error: operand must be LR register -- `pac r12,r10,sp'
+.*:14: Error: operand must be SP register -- `pac r12,lr,r10'
index c2ad20455c78a7623c430911ace05d3717c8ebf0..4948f855534582d92724ac4610f534326b77b445 100644 (file)
@@ -9,3 +9,6 @@
        aut     r11, lr, sp
        aut     r12, r10, sp
        aut     r12, lr, r10
+       pac     r11, lr, sp
+       pac     r12, r10, sp
+       pac     r12, lr, r10
index fe11d7eb0365acf9153b2d1834fd1349602cb085..9df123af8eb458646b83590a41e4c3fbbae8bbb7 100644 (file)
@@ -9,4 +9,5 @@ Disassembly of section .text:
 0[0-9a-f]+ <[^>]+> f3af 800f   bti
 0[0-9a-f]+ <[^>]+> f3af 800d   pacbti  r12, lr, sp
 0[0-9a-f]+ <[^>]+> f3af 802d   aut     r12, lr, sp
+0[0-9a-f]+ <[^>]+> f3af 801d   pac     r12, lr, sp
 #...
index 14b0414a59b488a91ede4e8e30d5cd3ec4878132..38000c3fc0d9399be57c5029bff70980ee65f613 100644 (file)
@@ -5,3 +5,4 @@
        bti
        pacbti  r12, lr, sp
        aut     r12, lr, sp
+       pac     r12, lr, sp
index 8eeb303630b473fa77a230e14a74d7b66b1c8fee..930fbbfa3855f4a7acbc0703edf26dc6b19acaef 100644 (file)
@@ -4658,6 +4658,8 @@ static const struct opcode32 thumb32_opcodes[] =
    0xf3af802d, 0xffffffff, "aut\tr12, lr, sp"},
   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    0xf3af800f, 0xffffffff, "bti"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
+   0xf3af801d, 0xffffffff, "pac\tr12, lr, sp"},
   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    0xf3af800d, 0xffffffff, "pacbti\tr12, lr, sp"},