diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-11-18 16:30:50 -0800 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-11-18 16:30:50 -0800 |
commit | 1dce42c06e18ca9f98dece08a902e485128cd425 (patch) | |
tree | 094b72e79387472e7f7ff52964d3bac0789f709e /gcc | |
parent | a36a4fba58a3f04e9fa439c16e8d6e453ef6067d (diff) | |
download | riscv-gnu-toolchain-1dce42c06e18ca9f98dece08a902e485128cd425.zip riscv-gnu-toolchain-1dce42c06e18ca9f98dece08a902e485128cd425.tar.gz riscv-gnu-toolchain-1dce42c06e18ca9f98dece08a902e485128cd425.tar.bz2 |
gcc: improve codegen for reg = (float1 != float2);
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gcc/config/riscv/predicates.md | 5 | ||||
-rw-r--r-- | gcc/gcc/config/riscv/riscv.md | 15 |
2 files changed, 12 insertions, 8 deletions
diff --git a/gcc/gcc/config/riscv/predicates.md b/gcc/gcc/config/riscv/predicates.md index 1db0c4f..688c15c 100644 --- a/gcc/gcc/config/riscv/predicates.md +++ b/gcc/gcc/config/riscv/predicates.md @@ -181,7 +181,4 @@ (match_code "eq,ne,lt,ltu,le,leu,ge,geu,gt,gtu")) (define_predicate "fp_order_operator" - (match_code "eq,lt,le,gt,ge")) - -(define_predicate "fp_unorder_operator" - (match_code "ordered,unordered")) + (match_code "eq,ne,lt,le,gt,ge")) diff --git a/gcc/gcc/config/riscv/riscv.md b/gcc/gcc/config/riscv/riscv.md index af3a3c2..0ae09b9 100644 --- a/gcc/gcc/config/riscv/riscv.md +++ b/gcc/gcc/config/riscv/riscv.md @@ -2025,13 +2025,20 @@ DONE; }) -(define_insn "cstore<mode>4" - [(set (match_operand:SI 0 "register_operand" "=r") - (match_operator:SI 1 "fp_order_operator" +(define_insn_and_split "cstore<mode>4" + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operator:SI 1 "fp_order_operator" [(match_operand:SCALARF 2 "register_operand" "f") (match_operand:SCALARF 3 "register_operand" "f")]))] "TARGET_HARD_FLOAT" - "f%C1.<fmt>\t%0,%2,%3" +{ + if (GET_CODE (operands[1]) != NE) + return "f%C1.<fmt>\t%0,%2,%3"; +} + "" + [(set (match_dup 0) (eq:SI (match_dup 2) (match_dup 3))) + (set (match_dup 0) (eq:SI (match_dup 0) (const_int 0)))] + "" [(set_attr "type" "fcmp") (set_attr "mode" "<UNITMODE>")]) |