merged.
On 5/25/21 6:45 PM, Geng Qi wrote:
gcc/
* config/csky/csky.md (cskyv2_sextend_ldbs): New insn.
gcc/testsuite/
* gcc/testsuite/gcc.target/csky/ldbs.c: New.
---
gcc/config/csky/csky.md | 10 ++++++++++
gcc/testsuite/gcc.target/csky/ldbs.c | 11 +++++++++++
2 files changed, 21 insertions(+)
create mode 100644 gcc/testsuite/gcc.target/csky/ldbs.c
diff --git a/gcc/config/csky/csky.md b/gcc/config/csky/csky.md
index c27d627..b980d4c 100644
--- a/gcc/config/csky/csky.md
+++ b/gcc/config/csky/csky.md
@@ -1533,6 +1533,7 @@
}"
)
+;; hi -> si
(define_insn "extendhisi2"
[(set (match_operand:SI 0 "register_operand" "=r")
(sign_extend:SI (match_operand:HI 1 "register_operand" "r")))]
@@ -1557,6 +1558,15 @@
"sextb %0, %1"
)
+(define_insn "*cskyv2_sextend_ldbs"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (sign_extend:SI (match_operand:QI 1 "csky_simple_mem_operand" "m")))]
+ "CSKY_ISA_FEATURE (E2)"
+ "ld.bs\t%0, %1"
+ [(set_attr "length" "4")
+ (set_attr "type" "load")]
+)
+
;; qi -> hi
(define_insn "extendqihi2"
[(set (match_operand:HI 0 "register_operand" "=r")
diff --git a/gcc/testsuite/gcc.target/csky/ldbs.c
b/gcc/testsuite/gcc.target/csky/ldbs.c
new file mode 100644
index 0000000..27a0254
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/ldbs.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-skip-if "" { *-*-* } { "-mcpu=ck801" "-march=ck801" } { "*" } } */
+/* { dg-csky-options "-O1" } */
+
+int foo (signed char *pb)
+{
+ return *pb;
+}
+
+/* { dg-final { scan-assembler "ld.bs" } } */
+