On FreeBSD 5.4, building parrot fails for the experimental.ops part of
core_ops_cgp.c. The gcc version is 3.4.2. Here's the output from the
compile. The last time I got a successful compile for FreeBSD was on
the 8th, but there was the shared library problem then.
src/ops/core_ops_cgp.c
src/ops/experimental.ops: In function `cgp_core':
src/ops/experimental.ops:226: error: unable to find a register to spill
in class `DIREG'
src/ops/experimental.ops:226: error: this is the insn:
(insn 27898 30731 27899 2388 src/ops/string.ops:397 (parallel [
(set (reg:SI 2 cx [8556])
(unspec:SI [
(mem:BLK (reg/f:SI 8558 [ tmp ]) [0 A8])
(reg:QI 1 dx [8560])
(const_int 1 [0x1])
(reg:SI 2 cx [8559])
] 20))
(use (reg:SI 19 dirflag))
(clobber (reg/f:SI 8558 [ tmp ]))
(clobber (reg:CC 17 flags))
]) 453 {*strlenqi_1} (insn_list 27894 (insn_list 27895
(insn_list 27896 (insn_list 27897 (nil)))))
(expr_list:REG_DEAD (reg:SI 19 dirflag)
(expr_list:REG_DEAD (reg:SI 2 cx [8559])
(expr_list:REG_DEAD (reg:QI 1 dx [8560])
(expr_list:REG_DEAD (reg/f:SI 8558 [ tmp ])
(expr_list:REG_UNUSED (reg:CC 17 flags)
(expr_list:REG_UNUSED (reg/f:SI 8558 [ tmp ])
(nil))))))))
src/ops/experimental.ops:226: confused by earlier errors, bailing out
gmake: *** [src/ops/core_ops_cgp.o] Error 1
>> src/ops/experimental.ops:226: error: unable to find a register to
>> spill
I've now disabled register assignment for gcc like ...
register opcode_t *cur_opcode asm ("esi") = cur_op;
... totally. It works for some gcc 3.x versions though and can for some
extra speed be turned on by defining
PARROT_CGP_REGS or PARROT_SWITCH_REGS when compiling these runcores.
leo