Indu Bhagat <indu.bha...@oracle.com> writes:
> Using post-index stg is a faster way of memory tagging/untagging.
>
> TBD:
>   - Currently generated by in the aarch64 backend.  Not sure if this
>     is the right way to do it.
>   - Also not clear how to weave in the generation of stzg.

Similarly to patch 4, I think we should rewrite the existing stg pattern
to use the same kind of approach that I mentioned in response to patch 2,
then extend the predicate and constraint to support PRE_MODIFY and
POST_MODIFY addresses.

Thanks,
Richard

>
> ChangeLog:
>       * gcc/config/aarch64/aarch64.md
>
> ---
>
> [New in RFC V2]
> ---
>  gcc/config/aarch64/aarch64.md | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
> index 175aed3146ac..3cb773a77ad8 100644
> --- a/gcc/config/aarch64/aarch64.md
> +++ b/gcc/config/aarch64/aarch64.md
> @@ -8475,6 +8475,21 @@
>    [(set_attr "type" "memtag")]
>  )
>  
> +;; STG with post-index writeback.
> +(define_insn "*stg_post"
> +  [(set (mem:QI (unspec:DI
> +      [(plus:DI (match_operand:DI 1 "register_operand" "=rk")
> +                (const_int 0))]
> +      UNSPEC_TAG_SPACE))
> +     (and:QI (lshiftrt:DI (match_operand:DI 0 "register_operand" "rk")
> +                          (const_int 56)) (const_int 15)))
> +    (set (match_dup 1)
> +         (plus:DI (match_dup 1) (match_operand:DI 2 
> "aarch64_granule16_simm9" "i")))]
> +  "TARGET_MEMTAG"
> +  "stg\\t%0, [%1], #%2"
> +  [(set_attr "type" "memtag")]
> +)
> +
>  ;; ST2G updates allocation tags for two memory granules (i.e. 32 bytes) at
>  ;; once, without zero initialization.
>  (define_insn "st2g"

Reply via email to