On Mon, Aug 12, 2019 at 11:01:11PM +0530, Tejas Joshi wrote: > I have the following code in my rs6000.md (I haven't used new TARGET_* yet) : > > (define_expand "add_truncdfsf3" > [(set (match_operand:SF 0 "gpc_reg_operand") > (float_truncate:SF > (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 (match_operand:SF 0 "gpc_reg_operand" "=f,wa") > (float_truncate:SF > (plus:DF (match_operand:DF 1 "gpc_reg_operand" "%d,wa") > (match_operand:DF 2 "gpc_reg_operand" "d,wa"))))] > "TARGET_HARD_FLOAT" > "@ > fadds %0,%1,%2 > xsaddsp %x0,%x1,%x2" > [(set_attr "type" "fp")])
Those look fine. You can also merge them into one: (define_insn "add_truncdfsf3" [(set (match_operand:SF 0 "gpc_reg_operand" "=f,wa") (float_truncate:SF (plus:DF (match_operand:DF 1 "gpc_reg_operand" "%d,wa") (match_operand:DF 2 "gpc_reg_operand" "d,wa"))))] "TARGET_HARD_FLOAT" "@ fadds %0,%1,%2 xsaddsp %x0,%x1,%x2" [(set_attr "type" "fp")]) > with following optab in optabs.def : > > OPTAB_CD(fadd_optab, "add_trunc$b$a3") (what is the > difference between $b$a and $a$b?) Which of the two modes becomes $a and which becomes $b? It depends on the definition of fadd_optab what order is expected, I think. Segher