This patch adds bswaphi2 insn pattern that is one instruction less than the
default expansion.

gcc/ChangeLog:

        * config/xtensa/xtensa.md (bswaphi2): New insn pattern.
---
 gcc/config/xtensa/xtensa.md | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index 6f5cbc541d8..217879bde15 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -471,6 +471,16 @@
 
 ;; Byte swap.

+(define_insn "bswaphi2"
+  [(set (match_operand:HI 0 "register_operand" "=a")
+       (bswap:HI (match_operand:HI 1 "register_operand" "r")))
+   (clobber (match_scratch:HI 2 "=&a"))]
+  ""
+  "extui\t%2, %1, 8, 8\;slli\t%0, %1, 8\;or\t%0, %0, %2"
+   [(set_attr "type" "arith")
+    (set_attr "mode" "HI")
+    (set_attr "length"       "9")])
+
 (define_expand "bswapsi2"
   [(set (match_operand:SI 0 "register_operand" "")
         (bswap:SI (match_operand:SI 1 "register_operand" "")))]
--
2.20.1
  • [PATCH 1/4] xtensa: Implement... Takayuki 'January June' Suwa via Gcc-patches

Reply via email to