diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 4ef1993..e4bfc4a 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -4652,6 +4652,21 @@ [(set_attr "type" "fp") (set_attr "isa" "*,")]) +(define_expand "add_truncdfsf3" + [(set (float_extend:DF (match_operand:SF 0 "gpc_reg_operand")) + (plus:DF (match_operand:DF 1 "gpc_reg_operand") + (match_operand:DF 2 "gpc_reg_operand")))] + "TARGET_HARD_FLOAT" + "") + +(define_insn "*add_truncdfsf3_fpr" + [(set (float_extend:DF (match_operand:SF 0 "gpc_reg_operand" "=")) + (plus:DF (match_operand:DF 1 "gpc_reg_operand" "%") + (match_operand:DF 2 "gpc_reg_operand" "")))] + "TARGET_HARD_FLOAT" + "fadd %0,%1,%2" + [(set_attr "type" "fp")]) + (define_expand "sub3" [(set (match_operand:SFDF 0 "gpc_reg_operand") (minus:SFDF (match_operand:SFDF 1 "gpc_reg_operand") diff --git a/gcc/optabs.def b/gcc/optabs.def index 4ffd0f3..45be794 100644 --- a/gcc/optabs.def +++ b/gcc/optabs.def @@ -67,6 +67,7 @@ OPTAB_CD(sfixtrunc_optab, "fix_trunc$F$b$I$a2") OPTAB_CD(ufixtrunc_optab, "fixuns_trunc$F$b$I$a2") /* Misc optabs that use two modes; model them as "conversions". */ +OPTAB_CD(fadd_optab, "add_trunc$b$a3") OPTAB_CD(smul_widen_optab, "mul$b$a3") OPTAB_CD(umul_widen_optab, "umul$b$a3") OPTAB_CD(usmul_widen_optab, "usmul$b$a3")