Duncan Coutts wrote:
/tmp/ghc9727.hc: In function `s1BE_ret':
/tmp/ghc9727.hc:1688: error: unable to find a register to spill in class
`R27_REG'
/tmp/ghc9727.hc:1688: error: this is the insn:
(insn 24 23 26 1 (parallel [
(set (reg/v:DI 14 $14 [ R1 ])
(div:DI (reg:DI 24 $24 [77])
(reg:DI 25 $25 [78])))
(clobber (reg:DI 23 $23))
(clobber (reg:DI 28 $28))
]) 43 {*divmoddi_internal_er} (insn_list 22 (insn_list 21
(nil)))
(expr_list:REG_UNUSED (reg:DI 23 $23)
(expr_list:REG_UNUSED (reg:DI 28 $28)
(expr_list:REG_DEAD (reg:DI 25 $25 [78])
(expr_list:REG_DEAD (reg:DI 24 $24 [77])
(nil))))))
/tmp/ghc9727.hc:1688: confused by earlier errors, bailing out
make[2]: *** [GHC/Base.o] Error 1
make[1]: *** [all] Error 1
make[1]: Leaving directory
`/var/tmp/portage/ghc-6.4.1-r2/work/ghc-6.4.1/libraries'
make: *** [build] Error 1
I find the "divmoddi_internal_er" a bit suspicious. Things often go
wrong when gcc is using its builtin functions - you might try
-fno-builtin to gcc.
When looking at the MachRegs.h we found that the bit:
# define NCG_Reserved_I1 22
# define NCG_Reserved_I2 27
# define NCG_Reserved_F1 f29
# define NCG_Reserved_F2 f30
The old NCG register allocator needed to reserve some regs for spilling,
IIRC. The new one doesn't need to.
Cheers,
Simon
|