On Fri, Jul 17, 2020 at 04:18:55PM -0500, Peter Bergner wrote: > On 7/17/20 3:23 PM, Segher Boessenkool wrote: > > On ISA 3.0B and later you can do > > > > mffscdrni %3,7 > > drdpq %2,%1 > > mffscdrn %3,%3 > > drsp %0,%2 > > > > (saving one insn, and using somewhat cheaper insns). But that is only > > on newer machines, so is this worth it at all? :-) > > So something like the following? > > Peter > > > (define_insn "trunctdsd2" > [(set (match_operand:SD 0 "gpc_reg_operand" "=d") > (float_truncate:SD (match_operand:TD 1 "gpc_reg_operand" "d"))) > (clobber (match_scratch:TD 2 "=&d")) > (clobber (match_scratch:DF 3 "=&d"))] > "TARGET_DFP" > { > if (TARGET_MODULO) > return "mffscdrni %3,7\;drdpq %2,%1\;mffscdrn %3,%3\;drsp %0,%2"; > else > return "mffs %3\;mtfsfi 7,7,1\;drdpq %2,%1\;mtfsf 0xff,%3,1,0\;drsp > %0,%2"; > } > [(set_attr "type" "dfp") > (set (attr "length") > (if_then_else > (match_test "TARGET_MODULO") > (const_string "16") > (const_string "20")))])
Well, just make an "isa" value of "p9"? Then you can just do (define_insn "trunctdsd2" [(set (match_operand:SD 0 "gpc_reg_operand" "=d") (float_truncate:SD (match_operand:TD 1 "gpc_reg_operand" "d"))) (clobber (match_scratch:TD 2 "=&d")) (clobber (match_scratch:DF 3 "=&d"))] "TARGET_DFP" "@ mffscdrni %3,7\;drdpq %2,%1\;mffscdrn %3,%3\;drsp %0,%2 mffs %3\;mtfsfi 7,7,1\;drdpq %2,%1\;mtfsf 0xff,%3,1,0\;drsp %0,%2" [(set_attr "type" "dfp") (set_attr "isa" "p9,*") (set_attr "length" "16,20")]) Segher