From: Indu Bhagat <indu.bha...@oracle.com>

Define new constants to be used by the MTE pattern definitions.

gcc/

        * config/aarch64/aarch64.md (MEMTAG_TAG_MASK): New define
        constant.
        (MEMTAG_ADDR_MASK): Likewise.
        (irg, subp, ldg): Use new constants.

Signed-off-by: Claudiu Zissulescu <claudiu.zissulescu-iancule...@oracle.com>
---
 gcc/config/aarch64/aarch64.md | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 27efc9155dc..bade8af7997 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -440,6 +440,16 @@ (define_constants
    ; must not operate on inactive inputs if doing so could induce a fault.
    (SVE_STRICT_GP 1)])
 
+;; These constants are used as a const_int in MTE instructions
+(define_constants
+  [; 0xf0ff...
+   ; Tag mask for the 4-bit tag stored in the top 8 bits of a pointer.
+   (MEMTAG_TAG_MASK -1080863910568919041)
+
+   ;  0x00ff...
+   ; Tag mask 56-bit address used by subp instruction.
+   (MEMTAG_ADDR_MASK 72057594037927935)])
+
 (include "constraints.md")
 (include "predicates.md")
 (include "iterators.md")
@@ -8556,7 +8566,7 @@ (define_insn "irg"
   [(set (match_operand:DI 0 "register_operand" "=rk")
        (ior:DI
         (and:DI (match_operand:DI 1 "register_operand" "rk")
-                (const_int -1080863910568919041)) ;; 0xf0ff...
+                (const_int MEMTAG_TAG_MASK)) ;; 0xf0ff...
         (ashift:DI (unspec:QI [(match_operand:DI 2 "register_operand" "r")]
                     UNSPEC_GEN_TAG_RND)
                    (const_int 56))))]
@@ -8599,9 +8609,9 @@ (define_insn "subp"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (minus:DI
          (and:DI (match_operand:DI 1 "register_operand" "rk")
-                 (const_int 72057594037927935)) ;; 0x00ff...
+                 (const_int MEMTAG_ADDR_MASK)) ;; 0x00ff...
          (and:DI (match_operand:DI 2 "register_operand" "rk")
-                 (const_int 72057594037927935))))] ;; 0x00ff...
+                 (const_int MEMTAG_ADDR_MASK))))] ;; 0x00ff...
   "TARGET_MEMTAG"
   "subp\\t%0, %1, %2"
   [(set_attr "type" "memtag")]
@@ -8611,7 +8621,7 @@ (define_insn "subp"
 (define_insn "ldg"
   [(set (match_operand:DI 0 "register_operand" "+r")
        (ior:DI
-        (and:DI (match_dup 0) (const_int -1080863910568919041)) ;; 0xf0ff...
+        (and:DI (match_dup 0) (const_int MEMTAG_TAG_MASK)) ;; 0xf0ff...
         (ashift:DI
          (mem:QI (unspec:DI
           [(and:DI (plus:DI (match_operand:DI 1 "register_operand" "rk")
-- 
2.50.0

Reply via email to