From c16c63bb99a820721467df46ad97a948c1e520c6 Mon Sep 17 00:00:00 2001 From: Ian Bolton Date: Thu, 22 Nov 2012 15:50:30 +0000 Subject: [PATCH] Implement bswaphi2 with rev16 (AArch64) From-SVN: r193729 --- gcc/ChangeLog | 4 ++++ gcc/config/aarch64/aarch64.md | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ .../gcc.target/aarch64/builtin-bswap-1.c | 18 ++++++++++++++++++ .../gcc.target/aarch64/builtin-bswap-2.c | 18 ++++++++++++++++++ 5 files changed, 54 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 63cb4f5cc2b..d0ede900e09 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2012-11-22 Ian Bolton + + * config/aarch64/aarch64.md (bswaphi2): New pattern. + 2012-11-22 H.J. Lu PR sanitizer/55379 diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 5c96c8925da..17f024fa40f 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -2312,6 +2312,15 @@ (set_attr "mode" "")] ) +(define_insn "bswaphi2" + [(set (match_operand:HI 0 "register_operand" "=r") + (bswap:HI (match_operand:HI 1 "register_operand" "r")))] + "" + "rev16\\t%w0, %w1" + [(set_attr "v8type" "rev") + (set_attr "mode" "HI")] +) + ;; ------------------------------------------------------------------- ;; Floating-point intrinsics ;; ------------------------------------------------------------------- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 382affd8d12..788266ffcee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-11-22 Ian Bolton + + * gcc.target/aarch64/builtin-bswap-1.c: New test. + * gcc.target/aarch64/builtin-bswap-2.c: New test. + 2012-11-22 Paolo Carlini PR c++/55432 diff --git a/gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c b/gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c new file mode 100644 index 00000000000..a6706e693e1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +/* { dg-final { scan-assembler-times "rev16\\t" 2 } } */ + +/* rev16 */ +short +swaps16 (short x) +{ + return __builtin_bswap16 (x); +} + +/* rev16 */ +unsigned short +swapu16 (unsigned short x) +{ + return __builtin_bswap16 (x); +} diff --git a/gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c b/gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c new file mode 100644 index 00000000000..6018b483479 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +/* { dg-final { scan-assembler-times "rev16\\t" 2 } } */ + +/* rev16 */ +unsigned short +swapu16_1 (unsigned short x) +{ + return (x << 8) | (x >> 8); +} + +/* rev16 */ +unsigned short +swapu16_2 (unsigned short x) +{ + return (x >> 8) | (x << 8); +} -- 2.30.2