From 01414d53cf3c062ca821de9ae48ba4c3db7d8ad7 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Wed, 26 Sep 2018 21:06:01 +0000 Subject: [PATCH] RISC-V: Add missing negate patterns. gcc/ * config/riscv/riscv.md (subsi3_extended2): Add J constraint. (negdi2, negsi2, negsi2_extended, negsi2_extended2): New. From-SVN: r264655 --- gcc/ChangeLog | 5 +++++ gcc/config/riscv/riscv.md | 41 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 69c754d8f08..b13aaa8de6f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-09-26 Jim Wilson + + * config/riscv/riscv.md (subsi3_extended2): Add J constraint. + (negdi2, negsi2, negsi2_extended, negsi2_extended2): New. + 2018-09-26 Martin Sebor * tree.c (zerop): Change return type to bool. diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 95fbb282c7c..4162dc578e8 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -514,16 +514,51 @@ (set_attr "mode" "SI")]) (define_insn "*subsi3_extended2" - [(set (match_operand:DI 0 "register_operand" "=r") + [(set (match_operand:DI 0 "register_operand" "= r") (sign_extend:DI - (subreg:SI (minus:DI (match_operand:DI 1 "reg_or_0_operand" " r") - (match_operand:DI 2 "register_operand" " r")) + (subreg:SI (minus:DI (match_operand:DI 1 "reg_or_0_operand" " rJ") + (match_operand:DI 2 "register_operand" " r")) 0)))] "TARGET_64BIT" "subw\t%0,%z1,%2" [(set_attr "type" "arith") (set_attr "mode" "SI")]) +(define_insn "negdi2" + [(set (match_operand:DI 0 "register_operand" "=r") + (neg:DI (match_operand:DI 1 "register_operand" " r")))] + "TARGET_64BIT" + "neg\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "DI")]) + +(define_insn "negsi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (neg:SI (match_operand:SI 1 "register_operand" " r")))] + "" + { return TARGET_64BIT ? "negw\t%0,%1" : "neg\t%0,%1"; } + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + +(define_insn "*negsi2_extended" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI + (neg:SI (match_operand:SI 1 "register_operand" " r"))))] + "TARGET_64BIT" + "negw\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + +(define_insn "*negsi2_extended2" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI + (subreg:SI (neg:DI (match_operand:DI 1 "register_operand" " r")) + 0)))] + "TARGET_64BIT" + "negw\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI")]) + ;; ;; .................... ;; -- 2.30.2