修补gcc,将内存写入sparc fsqrts insn

修补gcc,将内存写入sparc fsqrts insn,gcc,code-generation,Gcc,Code Generation,我想修补gcc的sparc机器说明,以便 FPU SQAREOOT操作的目标寄存器fsqrts 在每次FSQRT后存储到内存中 像这样: fsqrts %f2,%f4 st %f4, -4[%fp] <= add this after every fsqrts where -4[%fp] is a slot allocated on the stack for each fsqrts insn 我想我可以在那里添加“st%f4,-

我想修补gcc的sparc机器说明,以便 FPU SQAREOOT操作的目标寄存器fsqrts 在每次FSQRT后存储到内存中

像这样:

fsqrts %f2,%f4
st %f4, -4[%fp]  <= add this after every fsqrts where -4[%fp] is
                            a slot allocated on the stack for each fsqrts insn
我想我可以在那里添加“
st%f4,-4[%fp]
”。但是现在 我的问题:

  • 在何处/何时/如何分配stackframe插槽以保存 目标fpu reg in(到%fp的偏移量)
我不太熟悉rtl表示和阶段 编辑部。因此,任何帮助都将受到感谢

也许另一个架构已经有了类似的构造 我可以为我的目的学习和使用。如果有人
你能给我指一下这样的机器描述部分吗…

再说一遍,这是我的问题gcc@gcc.gnu.org

我设法修补了.md描述以发布额外的存储,但是现在我想知道如何避免被安排到延迟槽中。发布了patched.md(带有日程安排问题):无论你想实现什么,通过一些巧妙的重新定义适当的C级函数,同样的事情不会更容易吗?
(define_insn "sqrtsf2"
 [(set (match_operand:SF 0 "register_operand" "=f")
       (sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
 "TARGET_FPU"
 "fsqrts\t%1, %0"
 [(set_attr "type" "fpsqrts")])