GHC Alpha port?
Simon Marlow
simonmar@microsoft.com
Wed, 11 Jul 2001 10:28:33 +0100
> > The relevant makefile code is in fptools/mk/bootstrap.mk - I'm sure
> > you'll be able to modify it to do the right thing. When=20
> you've got it
> > working we'll think about how to set up the bootstrapping system so
> > mangling is optional.
>=20
> I wonder if it matters whether PLATFORM_CC_OPTS is set to -static in
> mk/bootstrap.mk? The comments there say that the flags "should match
> the list in machdepCCOpts in ghc/compiler/DriverFlags.hs", and
> DriverFlags.hs does set -static for alpha.
I'm not sure whether -static is needed; try it without and see what
happens.
> (By the way, are *_hsc.[hc] files considered part of the ".hc
> distribution"? I needed them for compiling, say, Directory.hc.)
>=20
> Anyway, the current hurdle is that
> ghc/lib/std/PrelInt.hc doesn't compile
> because int64ToIntegerzh_fast is not declared
> because ghc/includes/PrimOps.h did not declare it
> because SUPPORT_LONG_LONGS is not defined in ghc/includes/StgTypes.h
> because SUPPORT_LONG_LONGS is defined in ghc/includes/StgTypes.h
> if and only if HAVE_LONG_LONG && SIZEOF_VOID_P < 8,
> and SIZEOF_VOID_P is 8.
>=20
> I'm not sure what the right fix is here. Why does StgTypes.h not
> define SUPPORT_LONG_LONGS if SIZEOF_VOID_P >=3D 8, anyway?
I think it's right not to define SUPPORT_LONG_LONGS - as far as I can
tell, that symbol means "we need the long long type for
StgWord64/StgInt64 on this architecture", which isn't true on Alpha.
On a 64-bit machine, int64ToIntegerzh_fast and word64ToIntegerzh_fast
are identical to intToIntegerzh_fast and wordToIntegerzh_fast
respectively (as long as GMP is using a 64-bit limb type, which
fortunately it does). The folllowing (untested) patch should be along
the right lines...
Cheers,
Simon
*** PrimOps.hc 2001/07/06 14:11:38 1.79
--- PrimOps.hc 2001/07/11 09:24:29
***************
*** 594,601 ****
FE_
}
=20
=20
! #endif /* HAVE_LONG_LONG */
=20
/* ToDo: this is shockingly inefficient */
=20
--- 594,616 ----
FE_
}
=20
+ #elif SIZEOF_VOID_P =3D=3D 8
=20
! FN_(word64ToIntegerzh_fast)
! {
! FB_
! JMP_(wordToIntegerzh_fast);
! FE_
! }
!=20
! FN_(int64ToIntegerzh_fast)
! {
! FB_
! JMP_(intToIntegerzh_fast);
! FE_
! }
!=20
! #endif /* SUPPORT_LONG_LONGS || SIZEOF_VOID_P =3D=3D 8 */
=20
/* ToDo: this is shockingly inefficient */
=20