Hi,
(I finally resumed the work on my microcontroller I posted about 3
months ago...)
I have a problem with the jump instructions: my direct jumps are very
limited in displacements, and I want to always generate indirect jumps
instead.
So I wrote this:
(define_insn "jump"
[(set (pc)
(label_ref (match_operand 0 "" "")))
(clobber (match_scratch:QI 1 "=w"))]
""
"ldih %1,hi(%l0)\n\tldil %1,lo(%l0)\n\tijmp (%1)"
[(set_attr "cc" "none")]
)
gcc and libgcc get compiled ok, but several testsuite tests fail because
gcc is eating all the virtual memory when compiling the file. One of
those is for example gcc.c-torture/compile/20000120-2.c .
The problem is coming from the usage of 'match_scratch' here, because
removing it makes the problem go away.
Before going deeper and trying to see if I'm hitting a bug in gcc, can
someone please advice whether my define_insn is correct ? I'm using
gcc-4.3.1.
A stack trace from gdb seems to show that gcc is looping around here:
#0 0x080f70df in df_insn_rescan (insn=0x80951c08)
at /wip/src/gcc-4.3.1/gcc/df-scan.c:1078
#1 0x0811b5ad in add_insn_after (insn=0x80951c08, after=0x80951be0,
bb=0xb7c17924)
at /wip/src/gcc-4.3.1/gcc/emit-rtl.c:3495
#2 0x0811b870 in emit_jump_insn_after_noloc (x=0x80950c58,
after=0x80951be0)
at /wip/src/gcc-4.3.1/gcc/emit-rtl.c:4085
#3 0x080da84c in try_redirect_by_replacing_jump (e=0xb7c26460,
target=0xb7c179d8, in_cfglayout=0 '\0')
at /wip/src/gcc-4.3.1/gcc/cfgrtl.c:822
#4 0x08360a08 in cleanup_cfg (mode=1)
[...]
Thanks,
--
Stelian Pop <[EMAIL PROTECTED]>