On Tue, Jan 21, 2003 at 08:21:42PM +0100, Leopold Toetsch wrote:
> >>For such a branch, imcc generates this opcode seqence:
> >>
> >> inter_cs
> >> if i, ic # or whatever
>
> >Why do we need branches to go to different code segments ?
>
>
> Because of this nasty piece of little code:
> t/syn/eval_3.imc:
>
> # #!/usr/bin/perl -w
> # my $i= 5;
> # LAB:
> # $i++;
> # eval("goto LAB if ($i==6)");
Ok. Having inter_cs call DO_OP just seems more involved than it has to be.
How about a single self-contained inter-segment jump instruction.
Since the compiler knows when a branch is non-local it can always break a
non-local conditional branch into a conditional local branch to a non-local
branch instruction.
For example
if i, nonlocal
... not taken
can be expressed as
if i, TAKEN
... not taken
...
TAKEN: inter_jump nonlocal
--
Jason