diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-08-14 09:02:47 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-08-14 09:02:47 +0000 |
commit | bca5a9971f47cf5fe79e6595beb762539f200f46 (patch) | |
tree | 37297284d9c4420e434605cce6746d9d597990b1 /gcc/config | |
parent | a229966c9c76afe0cf18c566a3c13ddde3878288 (diff) | |
download | gcc-bca5a9971f47cf5fe79e6595beb762539f200f46.zip gcc-bca5a9971f47cf5fe79e6595beb762539f200f46.tar.gz gcc-bca5a9971f47cf5fe79e6595beb762539f200f46.tar.bz2 |
[AArch64] Add support for SVE CLS and CLZ
This patch adds support for unpredicated SVE CLS and CLZ. A later patch
will add support for predicated unary integer arithmetic.
2019-08-14 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/iterators.md (SVE_INT_UNARY): Add clrsb and clz.
(optab, sve_int_op): Handle them.
* config/aarch64/aarch64-sve.md: Expand comment.
gcc/testsuite/
* gcc.target/aarch64/vect-clz.c: Force SVE off.
* gcc.target/aarch64/sve/clrsb_1.c: New test.
* gcc.target/aarch64/sve/clrsb_1_run.c: Likewise.
* gcc.target/aarch64/sve/clz_1.c: Likewise.
* gcc.target/aarch64/sve/clz_1_run.c: Likewise.
From-SVN: r274437
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/aarch64/aarch64-sve.md | 2 | ||||
-rw-r--r-- | gcc/config/aarch64/iterators.md | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index 6fed4ef..7e696d8 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -1422,6 +1422,8 @@ ;; ------------------------------------------------------------------------- ;; Includes: ;; - ABS +;; - CLS (= clrsb) +;; - CLZ ;; - CNT (= popcount) ;; - NEG ;; - NOT diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 75e672b..bc5b96a 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -1276,7 +1276,7 @@ (define_code_iterator FAC_COMPARISONS [lt le ge gt]) ;; SVE integer unary operations. -(define_code_iterator SVE_INT_UNARY [abs neg not popcount]) +(define_code_iterator SVE_INT_UNARY [abs neg not clrsb clz popcount]) ;; SVE integer binary operations. (define_code_iterator SVE_INT_BINARY [plus minus mult smax umax smin umin @@ -1307,6 +1307,8 @@ (unsigned_fix "fixuns") (float "float") (unsigned_float "floatuns") + (clrsb "clrsb") + (clz "clz") (popcount "popcount") (and "and") (ior "ior") @@ -1474,6 +1476,8 @@ (ior "orr") (xor "eor") (not "not") + (clrsb "cls") + (clz "clz") (popcount "cnt")]) (define_code_attr sve_int_op_rev [(plus "add") |