From 5f2ca3b2fd13489418ea36a6ef3fdffc6e2d3293 Mon Sep 17 00:00:00 2001 From: Matthew Wahab Date: Wed, 16 Dec 2015 11:56:21 +0000 Subject: [PATCH] [ARM] Add patterns for new instructions * config/arm/iterators.md (VQRDMLH_AS): New. (neon_rdma_as): New. * config/arm/neon.md (neon_vqrdmlh): New. (neon_vqrdmlh_lane): New. * config/arm/unspecs.md (UNSPEC_VQRDMLAH): New. (UNSPEC_VQRDMLSH): New. From-SVN: r231681 --- gcc/ChangeLog | 10 +++++++++ gcc/config/arm/iterators.md | 5 +++++ gcc/config/arm/neon.md | 45 +++++++++++++++++++++++++++++++++++++ gcc/config/arm/unspecs.md | 2 ++ 4 files changed, 62 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7f43a766bb5..b4e86189d1e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2015-12-16 Matthew Wahab + + * config/arm/iterators.md (VQRDMLH_AS): New. + (neon_rdma_as): New. + * config/arm/neon.md + (neon_vqrdmlh): New. + (neon_vqrdmlh_lane): New. + * config/arm/unspecs.md (UNSPEC_VQRDMLAH): New. + (UNSPEC_VQRDMLSH): New. + 2015-12-16 Matthew Wahab * config/arm/t-aprofile: Make "armv8.1-a" and "armv8.1-a+crc" diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 6a541251ed1..c7a688044e9 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -362,6 +362,8 @@ (define_int_iterator CRYPTO_SELECTING [UNSPEC_SHA1C UNSPEC_SHA1M UNSPEC_SHA1P]) +(define_int_iterator VQRDMLH_AS [UNSPEC_VQRDMLAH UNSPEC_VQRDMLSH]) + ;;---------------------------------------------------------------------------- ;; Mode attributes ;;---------------------------------------------------------------------------- @@ -831,3 +833,6 @@ (simple_return " && use_simple_return_p ()")]) (define_code_attr return_cond_true [(return " && USE_RETURN_INSN (TRUE)") (simple_return " && use_simple_return_p ()")]) + +;; Attributes for VQRDMLAH/VQRDMLSH +(define_int_attr neon_rdma_as [(UNSPEC_VQRDMLAH "a") (UNSPEC_VQRDMLSH "s")]) diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 62fb6daae99..844ef5eb2f3 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -2014,6 +2014,18 @@ [(set_attr "type" "neon_sat_mul_")] ) +;; vqrdmlah, vqrdmlsh +(define_insn "neon_vqrdmlh" + [(set (match_operand:VMDQI 0 "s_register_operand" "=w") + (unspec:VMDQI [(match_operand:VMDQI 1 "s_register_operand" "0") + (match_operand:VMDQI 2 "s_register_operand" "w") + (match_operand:VMDQI 3 "s_register_operand" "w")] + VQRDMLH_AS))] + "TARGET_NEON_RDMA" + "vqrdmlh.\t%0, %2, %3" + [(set_attr "type" "neon_sat_mla__long")] +) + (define_insn "neon_vqdmlal" [(set (match_operand: 0 "s_register_operand" "=w") (unspec: [(match_operand: 1 "s_register_operand" "0") @@ -3176,6 +3188,39 @@ if (BYTES_BIG_ENDIAN) [(set_attr "type" "neon_sat_mul__scalar_q")] ) +;; vqrdmlah_lane, vqrdmlsh_lane +(define_insn "neon_vqrdmlh_lane" + [(set (match_operand:VMQI 0 "s_register_operand" "=w") + (unspec:VMQI [(match_operand:VMQI 1 "s_register_operand" "0") + (match_operand:VMQI 2 "s_register_operand" "w") + (match_operand: 3 "s_register_operand" + "") + (match_operand:SI 4 "immediate_operand" "i")] + VQRDMLH_AS))] + "TARGET_NEON_RDMA" +{ + return + "vqrdmlh.\t%q0, %q2, %P3[%c4]"; +} + [(set_attr "type" "neon_mla__scalar")] +) + +(define_insn "neon_vqrdmlh_lane" + [(set (match_operand:VMDI 0 "s_register_operand" "=w") + (unspec:VMDI [(match_operand:VMDI 1 "s_register_operand" "0") + (match_operand:VMDI 2 "s_register_operand" "w") + (match_operand:VMDI 3 "s_register_operand" + "") + (match_operand:SI 4 "immediate_operand" "i")] + VQRDMLH_AS))] + "TARGET_NEON_RDMA" +{ + return + "vqrdmlh.\t%P0, %P2, %P3[%c4]"; +} + [(set_attr "type" "neon_mla__scalar")] +) + (define_insn "neon_vmla_lane" [(set (match_operand:VMD 0 "s_register_operand" "=w") (unspec:VMD [(match_operand:VMD 1 "s_register_operand" "0") diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md index 67acafd075f..ffe703c3ee8 100644 --- a/gcc/config/arm/unspecs.md +++ b/gcc/config/arm/unspecs.md @@ -360,5 +360,7 @@ UNSPEC_NVRINTX UNSPEC_NVRINTA UNSPEC_NVRINTN + UNSPEC_VQRDMLAH + UNSPEC_VQRDMLSH ]) -- 2.30.2