On 02 November 2005 13:59, Florian Weimer wrote:
> However, beginning with GCC 3.4, you can use:
>
> extern void bar();
>
> void foo()
> {
> void (*p)(void) = bar;
> p();
> }
Interesting.. though I'm not sure I'm comfortable with relying on gcc's
tail call optimisation to do the right thing. Aren't there side
conditions that might prevent it from kicking in?
> And the indirect call is turned into a direct jump. Tail recursive
> calls and really indirect tail calls are also optimzed. Together with
> -fomit-frame-pointer, this could give you what you need, without
> post-processing the generated assembler code (which is desirable
> because the asm volatile statements inhibit further optimization).
>
> Is it correct that you use indirect gotos across functions? Such
> gotos aren't supported by GCC and work only by accident.
Yes, but cross-function gotos are always to the beginning of a function.
Also, our post-processor removes the function prologue from the asm.
GHC via C has always worked "by accident" :-) But it has worked for a
long time with careful tweaking of the post-processor (known as the
mangler) for each new version of gcc. Yes, we're living dangerously,
and it's getting harder, but we're still alive (just).
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users