aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Bolton <ian.bolton@arm.com>2012-11-22 15:50:30 +0000
committerIan Bolton <ibolton@gcc.gnu.org>2012-11-22 15:50:30 +0000
commitc16c63bb99a820721467df46ad97a948c1e520c6 (patch)
treebc80a7758e96cb8edecf3c19a25c6f7da688ab0b /gcc
parent10dbfb3eb052e620e307acc774b07bc92e9bbc9b (diff)
downloadgcc-c16c63bb99a820721467df46ad97a948c1e520c6.zip
gcc-c16c63bb99a820721467df46ad97a948c1e520c6.tar.gz
gcc-c16c63bb99a820721467df46ad97a948c1e520c6.tar.bz2
Implement bswaphi2 with rev16 (AArch64)
From-SVN: r193729
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/aarch64/aarch64.md9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c18
-rw-r--r--gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c18
5 files changed, 54 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 63cb4f5..d0ede90 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2012-11-22 Ian Bolton <ian.bolton@arm.com>
+
+ * config/aarch64/aarch64.md (bswaphi2): New pattern.
+
2012-11-22 H.J. Lu <hongjiu.lu@intel.com>
PR sanitizer/55379
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 5c96c89..17f024f 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -2312,6 +2312,15 @@
(set_attr "mode" "<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 382affd..788266f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-11-22 Ian Bolton <ian.bolton@arm.com>
+
+ * gcc.target/aarch64/builtin-bswap-1.c: New test.
+ * gcc.target/aarch64/builtin-bswap-2.c: New test.
+
2012-11-22 Paolo Carlini <paolo.carlini@oracle.com>
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 0000000..a6706e6
--- /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 0000000..6018b48
--- /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);
+}