Re: [commit: ghc] master: Start moving other constants from (Haskell)Constants to platformConstants (9b0c4ed)

Simon Marlow <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
On 14/09/2012 17:25, Ian Lynagh wrote:
> Repository : ssh://darcs.haskell.org//srv/darcs/ghc
>
> On branch  : master
>
> http://hackage.haskell.org/trac/ghc/changeset/9b0c4ed70cb4394bb293e4e6f863f877debcd655
>
>> ---------------------------------------------------------------
>
> commit 9b0c4ed70cb4394bb293e4e6f863f877debcd655
> Author: Ian Lynagh <[email protected]>
> Date:   Fri Sep 14 12:48:53 2012 +0100
>
>      Start moving other constants from (Haskell)Constants to platformConstants
>
>> ---------------------------------------------------------------
>
>   compiler/codeGen/CgExpr.lhs    |    5 ++---
>   compiler/codeGen/StgCmmBind.hs |    4 ++--
>   includes/HaskellConstants.hs   |    7 -------
>   includes/mkDerivedConstants.c  |   24 ++++++++++++++++++++++++
>   4 files changed, 28 insertions(+), 12 deletions(-)
>
> diff --git a/compiler/codeGen/CgExpr.lhs b/compiler/codeGen/CgExpr.lhs
> index d57dec1..1519476 100644
> --- a/compiler/codeGen/CgExpr.lhs
> +++ b/compiler/codeGen/CgExpr.lhs
> @@ -15,7 +15,6 @@ module CgExpr ( cgExpr ) where
>
>   #include "HsVersions.h"
>
> -import Constants
>   import StgSyn
>   import CgMonad
>
> @@ -352,7 +351,7 @@ mkRhsClosure	dflags bndr cc bi
>   			    (StgApp selectee [{-no args-}]))])
>     |  the_fv == scrutinee		-- Scrutinee is the only free variable
>     && maybeToBool maybe_offset		-- Selectee is a component of the tuple
> -  && offset_into_int <= mAX_SPEC_SELECTEE_SIZE	-- Offset is small enough
> +  && offset_into_int <= mAX_SPEC_SELECTEE_SIZE dflags -- Offset is small enough

I don't think we'll ever want to modify mAX_SPEC_SELECTEE_SIZE or 
mAX_SPEC_AP_SIZE on a per-platform basis, because it is tied to the code 
in the RTS - to change it, you would have to modify rts/StgStdThunks.cmm 
too.  It's a function of the RTS, not the platform.  So I think this 
could safely stay in Constants.hs.

Cheers,
	Simon





>     = -- NOT TRUE: ASSERT(is_single_constructor)
>       -- The simplifier may have statically determined that the single alternative
>       -- is the only possible case and eliminated the others, even if there are
> @@ -396,7 +395,7 @@ mkRhsClosure dflags bndr cc bi
>     | args `lengthIs` (arity-1)
>    	&& all isFollowableArg (map idCgRep fvs)
>    	&& isUpdatable upd_flag
> - 	&& arity <= mAX_SPEC_AP_SIZE
> + 	&& arity <= mAX_SPEC_AP_SIZE dflags
>           && not (dopt Opt_SccProfilingOn dflags)
>                                     -- not when profiling: we don't want to
>                                     -- lose information about this particular
> diff --git a/compiler/codeGen/StgCmmBind.hs b/compiler/codeGen/StgCmmBind.hs
> index 105aa0f..aac1abf 100644
> --- a/compiler/codeGen/StgCmmBind.hs
> +++ b/compiler/codeGen/StgCmmBind.hs
> @@ -243,7 +243,7 @@ mkRhsClosure    dflags bndr _cc _bi
>                               (StgApp selectee [{-no args-}]))])
>     |  the_fv == scrutinee                -- Scrutinee is the only free variable
>     && maybeToBool maybe_offset           -- Selectee is a component of the tuple
> -  && offset_into_int <= mAX_SPEC_SELECTEE_SIZE  -- Offset is small enough
> +  && offset_into_int <= mAX_SPEC_SELECTEE_SIZE dflags -- Offset is small enough
>     = -- NOT TRUE: ASSERT(is_single_constructor)
>       -- The simplifier may have statically determined that the single alternative
>       -- is the only possible case and eliminated the others, even if there are
> @@ -272,7 +272,7 @@ mkRhsClosure    dflags bndr _cc _bi
>     | args `lengthIs` (arity-1)
>           && all (isGcPtrRep . idPrimRep . stripNV) fvs
>           && isUpdatable upd_flag
> -        && arity <= mAX_SPEC_AP_SIZE
> +        && arity <= mAX_SPEC_AP_SIZE dflags
>           && not (dopt Opt_SccProfilingOn dflags)
>                                     -- not when profiling: we don't want to
>                                     -- lose information about this particular
> diff --git a/includes/HaskellConstants.hs b/includes/HaskellConstants.hs
> index 9abe717..f2a5b22 100644
> --- a/includes/HaskellConstants.hs
> +++ b/includes/HaskellConstants.hs
> @@ -34,13 +34,6 @@ mAX_CONTEXT_REDUCTION_DEPTH :: Int
>   mAX_CONTEXT_REDUCTION_DEPTH = 200
>     -- Increase to 200; see Trac #5395
>
> --- pre-compiled thunk types
> -mAX_SPEC_SELECTEE_SIZE :: Int
> -mAX_SPEC_SELECTEE_SIZE = MAX_SPEC_SELECTEE_SIZE
> -
> -mAX_SPEC_AP_SIZE :: Int
> -mAX_SPEC_AP_SIZE = MAX_SPEC_AP_SIZE
> -
>   -- closure sizes: these do NOT include the header (see below for header sizes)
>   mIN_PAYLOAD_SIZE ::Int
>   mIN_PAYLOAD_SIZE = MIN_PAYLOAD_SIZE
> diff --git a/includes/mkDerivedConstants.c b/includes/mkDerivedConstants.c
> index 69c87f0..92024d3 100644
> --- a/includes/mkDerivedConstants.c
> +++ b/includes/mkDerivedConstants.c
> @@ -293,6 +293,26 @@ enum Mode { Gen_Haskell_Type, Gen_Haskell_Value, Gen_Haskell_Wrappers, Gen_Haske
>
>   #define FUN_OFFSET(sym) (OFFSET(Capability,f.sym) - OFFSET(Capability,r))
>
> +void constantInt(char *name, intptr_t val) {
> +    switch (mode) {
> +    case Gen_Haskell_Type:
> +        printf("    , pc_%s :: Int\n", name);
> +        break;
> +    case Gen_Haskell_Value:
> +        printf("    , pc_%s = %" PRIdPTR "\n", name, val);
> +        break;
> +    case Gen_Haskell_Wrappers:
> +        printf("%s :: DynFlags -> Int\n", name);
> +        printf("%s dflags = pc_%s (sPlatformConstants (settings dflags))\n",
> +               name, name);
> +        break;
> +    case Gen_Haskell_Exports:
> +        printf("    %s,\n", name);
> +        break;
> +    case Gen_Header:
> +        break;
> +    }
> +}
>
>   int
>   main(int argc, char *argv[])
> @@ -602,6 +622,10 @@ main(int argc, char *argv[])
>       }
>   #endif
>
> +    // pre-compiled thunk types
> +    constantInt("mAX_SPEC_SELECTEE_SIZE", MAX_SPEC_SELECTEE_SIZE);
> +    constantInt("mAX_SPEC_AP_SIZE", MAX_SPEC_AP_SIZE);
> +
>       switch (mode) {
>       case Gen_Haskell_Type:
>           printf("  } deriving (Read, Show)\n");
>
>
>
> _______________________________________________
> Cvs-ghc mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/cvs-ghc
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.