FW: RE: x86_64 port

David Brown haskell at davidb.org
Mon Mar 7 11:17:53 EST 2005


On Mon, Mar 07, 2005 at 11:47:31AM -0000, Simon Marlow wrote:

> $ cat bug.c    
> register void * R1 __asm__("%r13");
> 
> extern void g(void);
> static void f(void) {
>  R1 = g;
>  goto *R1;
> }
> $ gcc -S -O bug.c
> $
> 
> And take a look at the generated assembly for the function f:
> 
> f:
> .LFB2:
>         movl    $g, %eax
>         jmp     *%rax
> 
> Note that the assignment to the global variable R1 has been lost.  It
> works fine on x86 though: change the register variable to %esi and try
> it.

Hmm.  On gcc 3.3.5 that I have, it discards the assignment on x86 as well.

Dave


More information about the Glasgow-haskell-users mailing list