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

Reply via email to