diff options
author | Christophe Lyon <christophe.lyon@arm.com> | 2023-02-21 22:31:22 +0000 |
---|---|---|
committer | Christophe Lyon <christophe.lyon@arm.com> | 2023-05-11 21:04:09 +0200 |
commit | 1817749dedf78eb6db6448d49bb34294211fe87f (patch) | |
tree | e57c1a018574379992423a18f9b6376fbf8057ad /gcc | |
parent | 93597d92189cfe57a4e30b585492e957bf048969 (diff) | |
download | gcc-1817749dedf78eb6db6448d49bb34294211fe87f.zip gcc-1817749dedf78eb6db6448d49bb34294211fe87f.tar.gz gcc-1817749dedf78eb6db6448d49bb34294211fe87f.tar.bz2 |
arm: [MVE intrinsics] factorize vmladav vmladavx vmlsdav vmlsdavx vmladava vmladavax vmlsdava vmlsdavax
Factorize vmladav, vmladavx, vmlsdav, vmlsdavx, vmladava, vmladavax,
vmlsdava, vmlsdavax builtins so that they use the same parameterized
names.
2022-10-25 Christophe Lyon <christophe.lyon@arm.com>
gcc/
* config/arm/iterators.md (MVE_VMLxDAVQ, MVE_VMLxDAVQ_P)
(MVE_VMLxDAVAQ, MVE_VMLxDAVAQ_P): New.
(mve_insn): Add vmladava, vmladavax, vmladav, vmladavx, vmlsdava,
vmlsdavax, vmlsdav, vmlsdavx.
(supf): Add VMLADAVAXQ_P_S, VMLADAVAXQ_S, VMLADAVXQ_P_S,
VMLADAVXQ_S, VMLSDAVAQ_P_S, VMLSDAVAQ_S, VMLSDAVAXQ_P_S,
VMLSDAVAXQ_S, VMLSDAVQ_P_S, VMLSDAVQ_S, VMLSDAVXQ_P_S,
VMLSDAVXQ_S.
* config/arm/mve.md (mve_vmladavq_<supf><mode>)
(mve_vmladavxq_s<mode>, mve_vmlsdavq_s<mode>)
(mve_vmlsdavxq_s<mode>): Merge into ...
(@mve_<mve_insn>q_<supf><mode>): ... this.
(mve_vmlsdavaq_s<mode>, mve_vmladavaxq_s<mode>)
(mve_vmlsdavaxq_s<mode>, mve_vmladavaq_<supf><mode>): Merge into
...
(@mve_<mve_insn>q_<supf><mode>): ... this.
(mve_vmladavq_p_<supf><mode>, mve_vmladavxq_p_s<mode>)
(mve_vmlsdavq_p_s<mode>, mve_vmlsdavxq_p_s<mode>): Merge into ...
(@mve_<mve_insn>q_p_<supf><mode>): ... this.
(mve_vmladavaq_p_<supf><mode>, mve_vmladavaxq_p_s<mode>)
(mve_vmlsdavaq_p_s<mode>, mve_vmlsdavaxq_p_s<mode>): Merge into
...
(@mve_<mve_insn>q_p_<supf><mode>): ... this.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/arm/iterators.md | 56 | ||||
-rw-r--r-- | gcc/config/arm/mve.md | 236 |
2 files changed, 84 insertions, 208 deletions
diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index ff146af..68f5314 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -699,6 +699,34 @@ VMINAQ_M_S ]) +(define_int_iterator MVE_VMLxDAVQ [ + VMLADAVQ_S VMLADAVQ_U + VMLADAVXQ_S + VMLSDAVQ_S + VMLSDAVXQ_S + ]) + +(define_int_iterator MVE_VMLxDAVQ_P [ + VMLADAVQ_P_S VMLADAVQ_P_U + VMLADAVXQ_P_S + VMLSDAVQ_P_S + VMLSDAVXQ_P_S + ]) + +(define_int_iterator MVE_VMLxDAVAQ [ + VMLADAVAQ_S VMLADAVAQ_U + VMLSDAVAXQ_S + VMLSDAVAQ_S + VMLADAVAXQ_S + ]) + +(define_int_iterator MVE_VMLxDAVAQ_P [ + VMLADAVAQ_P_S VMLADAVAQ_P_U + VMLSDAVAXQ_P_S + VMLSDAVAQ_P_S + VMLADAVAXQ_P_S + ]) + (define_int_iterator MVE_MOVN [ VMOVNBQ_S VMOVNBQ_U VMOVNTQ_S VMOVNTQ_U @@ -817,8 +845,24 @@ (VMINQ_M_S "vmin") (VMINQ_M_U "vmin") (VMINVQ_P_S "vminv") (VMINVQ_P_U "vminv") (VMINVQ_S "vminv") (VMINVQ_U "vminv") + (VMLADAVAQ_P_S "vmladava") (VMLADAVAQ_P_U "vmladava") + (VMLADAVAQ_S "vmladava") (VMLADAVAQ_U "vmladava") + (VMLADAVAXQ_P_S "vmladavax") + (VMLADAVAXQ_S "vmladavax") + (VMLADAVQ_P_S "vmladav") (VMLADAVQ_P_U "vmladav") + (VMLADAVQ_S "vmladav") (VMLADAVQ_U "vmladav") + (VMLADAVXQ_P_S "vmladavx") + (VMLADAVXQ_S "vmladavx") (VMLAQ_M_N_S "vmla") (VMLAQ_M_N_U "vmla") (VMLASQ_M_N_S "vmlas") (VMLASQ_M_N_U "vmlas") + (VMLSDAVAQ_P_S "vmlsdava") + (VMLSDAVAQ_S "vmlsdava") + (VMLSDAVAXQ_P_S "vmlsdavax") + (VMLSDAVAXQ_S "vmlsdavax") + (VMLSDAVQ_P_S "vmlsdav") + (VMLSDAVQ_S "vmlsdav") + (VMLSDAVXQ_P_S "vmlsdavx") + (VMLSDAVXQ_S "vmlsdavx") (VMOVLBQ_M_S "vmovlb") (VMOVLBQ_M_U "vmovlb") (VMOVLBQ_S "vmovlb") (VMOVLBQ_U "vmovlb") (VMOVLTQ_M_S "vmovlt") (VMOVLTQ_M_U "vmovlt") @@ -2237,6 +2281,18 @@ (VCMPLTQ_M_S "s") (VCMPNEQ_M_N_S "s") (VCMPNEQ_M_N_U "u") (VCMPNEQ_M_S "s") (VCMPNEQ_M_U "u") + (VMLADAVAXQ_P_S "s") + (VMLADAVAXQ_S "s") + (VMLADAVXQ_P_S "s") + (VMLADAVXQ_S "s") + (VMLSDAVAQ_P_S "s") + (VMLSDAVAQ_S "s") + (VMLSDAVAXQ_P_S "s") + (VMLSDAVAXQ_S "s") + (VMLSDAVQ_P_S "s") + (VMLSDAVQ_S "s") + (VMLSDAVXQ_P_S "s") + (VMLSDAVXQ_S "s") ]) ;; Both kinds of return insn. diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index b548ece..f95525d 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -985,62 +985,20 @@ ]) ;; -;; [vmladavq_u, vmladavq_s]) +;; [vmladavq_u, vmladavq_s] +;; [vmladavxq_s] +;; [vmlsdavq_s] +;; [vmlsdavxq_s] ;; -(define_insn "mve_vmladavq_<supf><mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VMLADAVQ)) - ] - "TARGET_HAVE_MVE" - "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vmladavxq_s]) -;; -(define_insn "mve_vmladavxq_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VMLADAVXQ_S)) - ] - "TARGET_HAVE_MVE" - "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vmlsdavq_s]) -;; -(define_insn "mve_vmlsdavq_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w")] - VMLSDAVQ_S)) - ] - "TARGET_HAVE_MVE" - "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; -;; [vmlsdavxq_s]) -;; -(define_insn "mve_vmlsdavxq_s<mode>" +(define_insn "@mve_<mve_insn>q_<supf><mode>" [ (set (match_operand:SI 0 "s_register_operand" "=Te") (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") (match_operand:MVE_2 2 "s_register_operand" "w")] - VMLSDAVXQ_S)) + MVE_VMLxDAVQ)) ] "TARGET_HAVE_MVE" - "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2" + "<mve_insn>.<supf>%#<V_sz_elem>\t%0, %q1, %q2" [(set_attr "type" "mve_move") ]) @@ -2043,50 +2001,40 @@ (set_attr "length""8")]) ;; -;; [vmladavaq_u, vmladavaq_s]) +;; [vmladavaq_u, vmladavaq_s] +;; [vmladavaxq_s] +;; [vmlsdavaq_s] +;; [vmlsdavaxq_s] ;; -(define_insn "mve_vmladavaq_<supf><mode>" +(define_insn "@mve_<mve_insn>q_<supf><mode>" [ (set (match_operand:SI 0 "s_register_operand" "=Te") (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand:MVE_2 3 "s_register_operand" "w")] - VMLADAVAQ)) + MVE_VMLxDAVAQ)) ] "TARGET_HAVE_MVE" - "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3" + "<mve_insn>.<supf>%#<V_sz_elem>\t%0, %q2, %q3" [(set_attr "type" "mve_move") ]) ;; -;; [vmladavq_p_u, vmladavq_p_s]) -;; -(define_insn "mve_vmladavq_p_<supf><mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] - VMLADAVQ_P)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmladavxq_p_s]) +;; [vmladavq_p_u, vmladavq_p_s] +;; [vmladavxq_p_s] +;; [vmlsdavq_p_s] +;; [vmlsdavxq_p_s] ;; -(define_insn "mve_vmladavxq_p_s<mode>" +(define_insn "@mve_<mve_insn>q_p_<supf><mode>" [ (set (match_operand:SI 0 "s_register_operand" "=Te") (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] - VMLADAVXQ_P_S)) + MVE_VMLxDAVQ_P)) ] "TARGET_HAVE_MVE" - "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2" + "vpst\;<mve_insn>t.<supf>%#<V_sz_elem>\t%0, %q1, %q2" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -2123,38 +2071,6 @@ ]) ;; -;; [vmlsdavq_p_s]) -;; -(define_insn "mve_vmlsdavq_p_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] - VMLSDAVQ_P_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmlsdavxq_p_s]) -;; -(define_insn "mve_vmlsdavxq_p_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] - VMLSDAVXQ_P_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; ;; [vmvnq_m_s, vmvnq_m_u]) ;; (define_insn "mve_vmvnq_m_<supf><mode>" @@ -2461,54 +2377,6 @@ ]) ;; -;; [vmlsdavaxq_s]) -;; -(define_insn "mve_vmlsdavaxq_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w")] - VMLSDAVAXQ_S)) - ] - "TARGET_HAVE_MVE" - "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3" - [(set_attr "type" "mve_move") -]) - -;; -;; [vmlsdavaq_s]) -;; -(define_insn "mve_vmlsdavaq_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w")] - VMLSDAVAQ_S)) - ] - "TARGET_HAVE_MVE" - "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3" - [(set_attr "type" "mve_move") -]) - -;; -;; [vmladavaxq_s]) -;; -(define_insn "mve_vmladavaxq_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w")] - VMLADAVAXQ_S)) - ] - "TARGET_HAVE_MVE" - "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3" - [(set_attr "type" "mve_move") -]) - -;; ;; [vabsq_m_f] ;; [vnegq_m_f] ;; [vrndaq_m_f] @@ -3483,19 +3351,22 @@ ;; ;; -;; [vmladavaq_p_u, vmladavaq_p_s]) +;; [vmladavaq_p_u, vmladavaq_p_s] +;; [vmladavaxq_p_s] +;; [vmlsdavaq_p_s] +;; [vmlsdavaxq_p_s] ;; -(define_insn "mve_vmladavaq_p_<supf><mode>" +(define_insn "@mve_<mve_insn>q_p_<supf><mode>" [ (set (match_operand:SI 0 "s_register_operand" "=Te") (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") (match_operand:MVE_2 2 "s_register_operand" "w") (match_operand:MVE_2 3 "s_register_operand" "w") (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] - VMLADAVAQ_P)) + MVE_VMLxDAVAQ_P)) ] "TARGET_HAVE_MVE" - "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3" + "vpst\;<mve_insn>t.<supf>%#<V_sz_elem>\t%0, %q2, %q3" [(set_attr "type" "mve_move") (set_attr "length""8")]) @@ -3638,57 +3509,6 @@ (set_attr "length""8")]) ;; -;; [vmladavaxq_p_s]) -;; -(define_insn "mve_vmladavaxq_p_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] - VMLADAVAXQ_P_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmlsdavaq_p_s]) -;; -(define_insn "mve_vmlsdavaq_p_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] - VMLSDAVAQ_P_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; -;; [vmlsdavaxq_p_s]) -;; -(define_insn "mve_vmlsdavaxq_p_s<mode>" - [ - (set (match_operand:SI 0 "s_register_operand" "=Te") - (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") - (match_operand:MVE_2 2 "s_register_operand" "w") - (match_operand:MVE_2 3 "s_register_operand" "w") - (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] - VMLSDAVAXQ_P_S)) - ] - "TARGET_HAVE_MVE" - "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3" - [(set_attr "type" "mve_move") - (set_attr "length""8")]) - -;; ;; [vmlaldavaq_p_u, vmlaldavaq_p_s]) ;; (define_insn "mve_vmlaldavaq_p_<supf><mode>" |