diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2024-09-14 10:12:54 +0200 |
---|---|---|
committer | Georg-Johann Lay <avr@gjlay.de> | 2024-09-14 14:54:06 +0200 |
commit | a900349485cc4753084527bf0234f173967979b0 (patch) | |
tree | c9a44f2621393d70acf2921a372de7fa9762e3b0 /gcc | |
parent | 99b8be43d7c548db127ee4f4d0918c55edc68b3f (diff) | |
download | gcc-a900349485cc4753084527bf0234f173967979b0.zip gcc-a900349485cc4753084527bf0234f173967979b0.tar.gz gcc-a900349485cc4753084527bf0234f173967979b0.tar.bz2 |
AVR: Use rtx code copysign.
gcc/
* config/avr/avr.md (UNSPEC_COPYSIGN): Remove define_enum.
(copysignsf3): Use copysign instead of UNSPEC_COPYSIGN.
Allow const_double for operand 2.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/avr/avr.md | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 429f537..2abf3c3 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -87,7 +87,6 @@ UNSPEC_FMUL UNSPEC_FMULS UNSPEC_FMULSU - UNSPEC_COPYSIGN UNSPEC_INSERT_BITS UNSPEC_ROUND ]) @@ -9272,12 +9271,18 @@ ;; Copysign (define_insn "copysignsf3" - [(set (match_operand:SF 0 "register_operand" "=r") - (unspec:SF [(match_operand:SF 1 "register_operand" "0") - (match_operand:SF 2 "register_operand" "r")] - UNSPEC_COPYSIGN))] + [(set (match_operand:SF 0 "register_operand" "=r") + (copysign:SF (match_operand:SF 1 "register_operand" "0") + (match_operand:SF 2 "nonmemory_operand" "rF")))] "" - "bst %D2,7\;bld %D0,7" + { + if (const_double_operand (operands[2], SFmode)) + { + rtx xmsb = simplify_gen_subreg (QImode, operands[2], SFmode, 3); + return INTVAL (xmsb) < 0 ? "set\;bld %D0,7" : "clt\;bld %D0,7"; + } + return "bst %D2,7\;bld %D0,7"; + } [(set_attr "length" "2")]) ;; Swap Bytes (change byte-endianness) |