diff options
author | Philipp Tomsich <philipp.tomsich@vrull.eu> | 2021-05-27 17:20:05 +0200 |
---|---|---|
committer | Philipp Tomsich <philipp.tomsich@vrull.eu> | 2022-11-14 20:03:47 +0100 |
commit | eab3d2d17dd8fedc856cf175a3f2174770ecb64d (patch) | |
tree | 8ef9edd57f27faa67aad3d70eb5a56559c0fad25 | |
parent | 1d99e09106ad08a1e060a8d3343c123c3c115bcc (diff) | |
download | gcc-eab3d2d17dd8fedc856cf175a3f2174770ecb64d.zip gcc-eab3d2d17dd8fedc856cf175a3f2174770ecb64d.tar.gz gcc-eab3d2d17dd8fedc856cf175a3f2174770ecb64d.tar.bz2 |
riscv: bitmanip: add orc.b as an unspec
As a basis for optimized string functions (e.g., the by-pieces
implementations), we need orc.b available. This adds orc.b as an
unspec, so we can expand to it.
gcc/ChangeLog:
* config/riscv/bitmanip.md (orcb<mode>2): Add orc.b as an
unspec.
* config/riscv/riscv.md: Add UNSPEC_ORC_B.
Signed-off-by: Philipp Tomsich <philipp.tomsich@vrull.eu>
-rw-r--r-- | gcc/config/riscv/bitmanip.md | 8 | ||||
-rw-r--r-- | gcc/config/riscv/riscv.md | 3 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md index d26f356..48c249f 100644 --- a/gcc/config/riscv/bitmanip.md +++ b/gcc/config/riscv/bitmanip.md @@ -255,6 +255,14 @@ "rolw\t%0,%1,%2" [(set_attr "type" "bitmanip")]) +;; orc.b (or-combine) is added as an unspec for the benefit of the support +;; for optimized string functions (such as strcmp). +(define_insn "orcb<mode>2" + [(set (match_operand:X 0 "register_operand" "=r") + (unspec:X [(match_operand:X 1 "register_operand" "r")] UNSPEC_ORC_B))] + "TARGET_ZBB" + "orc.b\t%0,%1") + (define_insn "bswap<mode>2" [(set (match_operand:X 0 "register_operand" "=r") (bswap:X (match_operand:X 1 "register_operand" "r")))] diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 798f737..532289d 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -62,6 +62,9 @@ ;; Stack tie UNSPEC_TIE + + ;; OR-COMBINE + UNSPEC_ORC_B ]) (define_c_enum "unspecv" [ |