logo       

Re: trying to get a registerised alpha build: msg#00147

lang.haskell.glasgow.bugs

Subject: Re: trying to get a registerised alpha build

On Tue, 2006-03-28 at 19:06 +0100, Duncan Coutts wrote:

> register void *_procedure __asm__("$27");
>
> #define JMP_(cont) \
> do { _procedure = (void *)(cont); \
> __DISCARD__(); \
> goto *_procedure; \
> } while(0)

> By changing the register we use for _procedure we can get it to compile
> all of the base lib. That's not to say it'll work of course. I don't
> understand enough about the needs of tail calls to say if it's essential
> that we use $27 or if some other register will do.

Well the full build finished and appears to work. We're going to try
again with what I think is a better fix than just picking another fixed
register. Instead of fixing a register we could let gcc pick any
suitable register by use a local C variable. It'd be the same code as
x86/amd64 use:

#define JMP_(cont) \
{ \
void *__target; \
__DISCARD__(); \
__target = (void *)(cont); \
goto *__target; \
}

So we'll give that a go. I don't know if the do { ... } while (0) is
significant. I expect that with modern gcc versions that it is not.

So that's the alpha registerised build mostly working. Next is the
mangler.

Duncan


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise