On Tue, Jun 28, 2005 at 12:14:08PM +0100, Simon Marlow wrote:
> On 27 June 2005 17:53, Michiel Buddingh' wrote:
> 
> > Commented out:
> > 
> > #if alpha_TARGET_ARCH
> > checkFEDArgs arg_tys
> >   = check (integral_args <= 32) err
> >   where
> >     integral_args = sum [ machRepByteWidth rep
> >                         | (rep,hint) <- map typeMachRepRep arg_tys,
> >                           hint /= FloatHint ]
> >     err = ptext SLIT("On Alpha, I can only handle 4 non-floating-point
> > arguments
> >  to foreign export dynamic")
> > 
> > from TcForeign.lhs. typeMachRepRep was nowhere to be found (not in
> > ghc-6.4, or any earlier released version), and I wasn't able to
> > figure out what, exactly, it does.  It seemed like an RTS thing, so I
> > decided to comment it out, and the build proceded.  Not sure if that
> > was such a wise idea now. 
> 
> That looks like a sanity check that has bitrotted.  You can ignore it
> until you need to get 'foreign import "wrapper"' working.

This works (or at least compiles!) on Linux/Alpha:

--- ghc6-6.4.orig/ghc/compiler/typecheck/TcForeign.lhs
+++ ghc6-6.4/ghc/compiler/typecheck/TcForeign.lhs
@@ -29,8 +29,8 @@
 import ErrUtils                ( Message )
 import Id              ( Id, mkLocalId, mkExportedLocalId )
 #if alpha_TARGET_ARCH
-import PrimRep         ( getPrimRepSize, isFloatingRep )
 import Type            ( typePrimRep )
+import SMRep           ( argMachRep, primRepToCgRep, primRepHint )
 #endif
 import OccName         ( mkForeignExportOcc )
 import Name            ( Name, NamedThing(..), mkExternalName )
@@ -52,7 +52,7 @@
 import Bag             ( consBag )
 
 #if alpha_TARGET_ARCH
-import MachOp          ( machRepByteWidth )
+import MachOp          ( machRepByteWidth, MachHint(FloatHint) )
 #endif
 \end{code}
 
@@ -185,10 +185,10 @@
 checkFEDArgs arg_tys
   = check (integral_args <= 32) err
   where
-    integral_args = sum [ machRepByteWidth rep
-                       | (rep,hint) <- map typeMachRepRep arg_tys,
-                         hint /= FloatHint ]
-    err = ptext SLIT("On Alpha, I can only handle 4 non-floating-point 
arguments to foreign export dynamic")
+    integral_args = sum [ (machRepByteWidth . argMachRep . primRepToCgRep) 
prim_rep
+                       | prim_rep <- map typePrimRep arg_tys,
+                         primRepHint prim_rep /= FloatHint ]
+    err = ptext SLIT("On Alpha, I can only handle 32 bytes of 
non-floating-point arguments to foreign export dynamic")
 #else
 checkFEDArgs arg_tys = returnM ()
 #endif


Thanks
Ian

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to