Dear all, I wanted to add an instruction via a builtin to allow users to take advantage of some special instructions that are on my architecture.
However, the latency of the instruction is not 1 so I'll also need to handle it in the rtx_costs function. I had first tried to explain with the current RTL what the instruction did, but it used internally a special register and it was difficult to define exactly what it does. Second, it seemed difficult to handle the latency this way. Since I would not get a separate code for my rtl. My current solution: - Define a new rtl in rtl.def - Add the new rtl in the MD file and the generated assembly instruction However, the solution seems to work, except in O0, where I get this error: testmaca.c:25: error: unrecognizable insn: (insn 11 10 12 3 testmaca.c:16 (set (reg:DI 66 myreg) (newrtl:DI (mem/c/i:DI (plus:DI (reg/f:DI 68 virtual-stack-vars) (const_int 16 [0x10])) [0 x+0 S8 A64]) (mem/c/i:DI (plus:DI (reg/f:DI 68 virtual-stack-vars) (const_int 8 [0x8])) [0 y+0 S8 A64]))) -1 (nil)) Any ideas how I can fix this ? Here is my rtl definition : (define_insn "newrtl" [(set (reg:DI 24) (newrtl:DI (match_operand:DI 0 "register_operand" "r") (match_operand:DI 1 "register_operand" "r")))] "" "newrtl\\t%0,%1" [(set_attr "type" "arith") (set_attr "mode" "DI") (set_attr "length" "1")]) If there is a better way to do this, I'll be happy to hear it :-) Thanks in advance, Jc