aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Lawrence <alan.lawrence@arm.com>2014-12-19 17:48:15 +0000
committerAlan Lawrence <alalaw01@gcc.gnu.org>2014-12-19 17:48:15 +0000
commitfe82d1f27edc59a5c5cdb705235bd341cab2dbb9 (patch)
tree8d7747ebe7777be2fb70a60a341a6863a4ff06a5
parentf1f1391ce029d83261560db18bd9c1f442221c5e (diff)
downloadgcc-fe82d1f27edc59a5c5cdb705235bd341cab2dbb9.zip
gcc-fe82d1f27edc59a5c5cdb705235bd341cab2dbb9.tar.gz
gcc-fe82d1f27edc59a5c5cdb705235bd341cab2dbb9.tar.bz2
[AArch64 2/3] Add SIMD-reg variants of logical operators and/ior/xor/not
* config/aarch64/aarch64.md (<optab><mode>3, one_cmpl<mode>2): Add SIMD-register variant. * config/aarch64/iterators.md (Vbtype): Add value for SI. From-SVN: r218960
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/aarch64/aarch64.md25
-rw-r--r--gcc/config/aarch64/iterators.md3
3 files changed, 24 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f27d698..10b5538 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2014-12-19 Alan Lawrence <alan.lawrence@arm.com>
+ * config/aarch64/aarch64.md (<optab><mode>3, one_cmpl<mode>2):
+ Add SIMD-register variant.
+ * config/aarch64/iterators.md (Vbtype): Add value for SI.
+
+2014-12-19 Alan Lawrence <alan.lawrence@arm.com>
+
* config/aarch64/aarch64.md (subdi3, adddi3_aarch64): Don't penalize
SIMD reg variant.
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 3e84346..bc9138d 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -2866,12 +2866,16 @@
;; -------------------------------------------------------------------
(define_insn "<optab><mode>3"
- [(set (match_operand:GPI 0 "register_operand" "=r,rk")
- (LOGICAL:GPI (match_operand:GPI 1 "register_operand" "%r,r")
- (match_operand:GPI 2 "aarch64_logical_operand" "r,<lconst>")))]
+ [(set (match_operand:GPI 0 "register_operand" "=r,rk,w")
+ (LOGICAL:GPI (match_operand:GPI 1 "register_operand" "%r,r,w")
+ (match_operand:GPI 2 "aarch64_logical_operand" "r,<lconst>,w")))]
""
- "<logical>\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "logic_reg,logic_imm")]
+ "@
+ <logical>\\t%<w>0, %<w>1, %<w>2
+ <logical>\\t%<w>0, %<w>1, %<w>2
+ <logical>\\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>"
+ [(set_attr "type" "logic_reg,logic_imm,neon_logic")
+ (set_attr "simd" "*,*,yes")]
)
;; zero_extend version of above
@@ -2992,11 +2996,14 @@
)
(define_insn "one_cmpl<mode>2"
- [(set (match_operand:GPI 0 "register_operand" "=r")
- (not:GPI (match_operand:GPI 1 "register_operand" "r")))]
+ [(set (match_operand:GPI 0 "register_operand" "=r,w")
+ (not:GPI (match_operand:GPI 1 "register_operand" "r,w")))]
""
- "mvn\\t%<w>0, %<w>1"
- [(set_attr "type" "logic_reg")]
+ "@
+ mvn\\t%<w>0, %<w>1
+ mvn\\t%0.8b, %1.8b"
+ [(set_attr "type" "logic_reg,neon_logic")
+ (set_attr "simd" "*,yes")]
)
(define_insn "*one_cmpl_<optab><mode>2"
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index 16a2647..26e3ebc 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -387,7 +387,8 @@
(V2SI "8b") (V4SI "16b")
(V2DI "16b") (V2SF "8b")
(V4SF "16b") (V2DF "16b")
- (DI "8b") (DF "8b")])
+ (DI "8b") (DF "8b")
+ (SI "8b")])
;; Define element mode for each vector mode.
(define_mode_attr VEL [(V8QI "QI") (V16QI "QI")