Hi Faisal, On Fri, Jul 12, 2019 at 10:47:10AM +0530, Faisal Riyaz wrote: > (define_expand "mul<mode>3" > [(match_operand:ANYF 0 "register_operand" "=f") > (match_operand:ANYF 1 "register_operand" " f") > (match_operand:ANYF 2 "register_operand" " f")] > "TARGET_HARD_FLOAT" > { > rtx reg = gen_reg_rtx (SImode); > emit_insn (gen_modfloatmul (operands[0], operands[1], operands[2])); > if( fpexception == 3) > { emit_insn(gen_riscv_frflags(reg));} > DONE; > }) > > (define_insn "modfloatmul" > [(set (match_operand:ANYF 0 "register_operand" "=f") > (mult:ANYF (match_operand:ANYF 1 "register_operand" " f") > (match_operand:ANYF 2 "register_operand" " f")))(use (match_operand:SI > 3 ""))] > "TARGET_HARD_FLOAT" > "fmul.<fmt>\t%0,%1,%2" > [(set_attr "type" "fmul") > (set_attr "mode" "<UNITMODE>")]) > > The build fails with the message: > ../../../riscv-gcc/gcc/config/riscv/riscv.md:578:1: duplicate definition of > 'modfloatmul'. An iterator like ANYF creates multiple patterns, one for each mode in this case. You should name the patterns starting with a * so that the name is just a comment, and/or use <mode> in the pattern name. So you'll have something like (define_insn "*mul<mode>3" ... But if you want to call its gen_, you can do something like (define_insn "@mul<mode>3_insn" ... where you then would call gen_mul3_insn (mode, rest of arguments); Segher