|
Re: trying to get a registerised alpha build: msg#00147lang.haskell.glasgow.bugs
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> |
|---|---|---|
| Previous by Date: | Re: trying to get a registerised alpha build, Duncan Coutts |
|---|---|
| Next by Date: | Re: trying to get a registerised alpha build, Simon Marlow |
| Previous by Thread: | Re: trying to get a registerised alpha build, Duncan Coutts |
| Next by Thread: | Re: trying to get a registerised alpha build, Simon Marlow |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |