aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTakayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>2022-05-29 19:57:35 +0900
committerMax Filippov <jcmvbkbc@gmail.com>2022-06-09 15:07:59 -0700
commit29dc90a580bf45f503ed89eb1dc63b5676db776b (patch)
tree7f8a6051eb3d5f2d4b2048eb40555252c89f5a97 /gcc
parente44e7face13f38f9b228e2619786ba0add9ef77b (diff)
downloadgcc-29dc90a580bf45f503ed89eb1dc63b5676db776b.zip
gcc-29dc90a580bf45f503ed89eb1dc63b5676db776b.tar.gz
gcc-29dc90a580bf45f503ed89eb1dc63b5676db776b.tar.bz2
xtensa: Add clrsbsi2 insn pattern
> (clrsb:m x) > Represents the number of redundant leading sign bits in x, represented > as an integer of mode m, starting at the most significant bit position. This explanation is just what the NSA instruction (not ever emitted before) calculates in Xtensa ISA. gcc/ChangeLog: * config/xtensa/xtensa.md (clrsbsi2): New insn pattern. libgcc/ChangeLog: * config/xtensa/lib1funcs.S (__clrsbsi2): New function. * config/xtensa/t-xtensa (LIB1ASMFUNCS): Add _clrsbsi2.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/xtensa/xtensa.md12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index 3afc252..8ff6f9a 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -429,7 +429,17 @@
(set_attr "length" "3")])
-;; Count leading/trailing zeros and find first bit.
+;; Count redundant leading sign bits and leading/trailing zeros,
+;; and find first bit.
+
+(define_insn "clrsbsi2"
+ [(set (match_operand:SI 0 "register_operand" "=a")
+ (clrsb:SI (match_operand:SI 1 "register_operand" "r")))]
+ "TARGET_NSA"
+ "nsa\t%0, %1"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")
+ (set_attr "length" "3")])
(define_insn "clzsi2"
[(set (match_operand:SI 0 "register_operand" "=a")