Thanks a lot for your input, I think I understand some of that code better now.
I stumbled upon a solution last night, on realizing that the problem was with the DFmode powidf2 and seeing that I had not defined the movsf or movdf insns (because I thought I shouldn't need them, having no HW floating point support). Defining them solved the problem, but now I have a very similar one with the complex arithmetic __mulsc3 function in libgcc: /cygdrive/c/home/risc/src/gcc-4.1.2/gcc/libgcc2.c:1702: error: insn does not satisfy its constraints: (insn 1468 1467 1471 /cygdrive/c/home/risc/src/gcc-4.1.2/gcc/libgcc2.c:1701 (set (mem/c/i:SF (plus:SI (mem/f/c:SI (plus:SI (reg/f:SI 29 r29) (const_int -296 [0xfffffed8])) [0 D.2393+0 S4 A8]) (const_int 4 [0x4])) [0 <result>+4 S4 A8]) (reg:SF 0 r0 [orig:51 D.2338+4 ] [51])) 8 {movsf} (nil) (nil)) This time I'm not sure what to do though. Do I really have to define complex movsc-insns? I haven't found any other ports doing that, so I'm guessing there's something else I'm missing.