From c84e392ef8e4014e24aa4a0f97976a7a590dd24b Mon Sep 17 00:00:00 2001 From: simonmar Date: Thu, 28 Apr 2005 15:28:09 +0000 Subject: [PATCH] [project @ 2005-04-28 15:28:05 by simonmar] Small code-size optimisation: I forgot to add a specialised case for functions with no argument words (which might happen if the function takes a void argument, for example). --- ghc/compiler/codeGen/CgCallConv.hs | 2 ++ ghc/includes/StgFun.h | 57 +++++++++++++++++++----------------- ghc/utils/genapply/GenApply.hs | 1 + 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/ghc/compiler/codeGen/CgCallConv.hs b/ghc/compiler/codeGen/CgCallConv.hs index 9b73c3b..f5232a5 100644 --- a/ghc/compiler/codeGen/CgCallConv.hs +++ b/ghc/compiler/codeGen/CgCallConv.hs @@ -108,6 +108,8 @@ argBits (PtrArg : args) = False : argBits args argBits (arg : args) = take (cgRepSizeW arg) (repeat True) ++ argBits args stdPattern :: [CgRep] -> Maybe Int +stdPattern [] = Just ARG_NONE -- just void args, probably + stdPattern [PtrArg] = Just ARG_P stdPattern [FloatArg] = Just ARG_F stdPattern [DoubleArg] = Just ARG_D diff --git a/ghc/includes/StgFun.h b/ghc/includes/StgFun.h index 639f0e5..e6f9b1f 100644 --- a/ghc/includes/StgFun.h +++ b/ghc/includes/StgFun.h @@ -16,34 +16,37 @@ /* BCO - function is really a BCO */ #define ARG_BCO 2 -/* specialised function types: bitmaps and calling sequences - * for these functions are pre-generated (see ghc/utils/genapply), and - * the generated code in ghc/rts/AutoApply.hc. +/* + * Specialised function types: bitmaps and calling sequences + * for these functions are pre-generated: see ghc/utils/genapply and + * generated code in ghc/rts/AutoApply.cmm. * - * NOTE: this ordering/numbering is hard-coded into the tables - * generated by GenApply.hs which end up in AutoApply.cmm. + * NOTE: other places to change if you change this table: + * - utils/genapply/GenApply.hs: stackApplyTypes + * - compiler/codeGen/CgCallConv.lhs: stdPattern */ -#define ARG_N 3 -#define ARG_P 4 -#define ARG_F 5 -#define ARG_D 6 -#define ARG_L 7 -#define ARG_NN 8 -#define ARG_NP 9 -#define ARG_PN 10 -#define ARG_PP 11 -#define ARG_NNN 12 -#define ARG_NNP 13 -#define ARG_NPN 14 -#define ARG_NPP 15 -#define ARG_PNN 16 -#define ARG_PNP 17 -#define ARG_PPN 18 -#define ARG_PPP 19 -#define ARG_PPPP 20 -#define ARG_PPPPP 21 -#define ARG_PPPPPP 22 -#define ARG_PPPPPPP 23 -#define ARG_PPPPPPPP 24 +#define ARG_NONE 3 +#define ARG_N 4 +#define ARG_P 5 +#define ARG_F 6 +#define ARG_D 7 +#define ARG_L 8 +#define ARG_NN 9 +#define ARG_NP 10 +#define ARG_PN 11 +#define ARG_PP 12 +#define ARG_NNN 13 +#define ARG_NNP 14 +#define ARG_NPN 15 +#define ARG_NPP 16 +#define ARG_PNN 17 +#define ARG_PNP 18 +#define ARG_PPN 19 +#define ARG_PPP 20 +#define ARG_PPPP 21 +#define ARG_PPPPP 22 +#define ARG_PPPPPP 23 +#define ARG_PPPPPPP 24 +#define ARG_PPPPPPPP 25 #endif /* STGFUN_H */ diff --git a/ghc/utils/genapply/GenApply.hs b/ghc/utils/genapply/GenApply.hs index 956ef42..3f10ddf 100644 --- a/ghc/utils/genapply/GenApply.hs +++ b/ghc/utils/genapply/GenApply.hs @@ -557,6 +557,7 @@ applyTypes = [ -- between N and P (they both live in the same register), only the bitmap -- changes, so we could share the apply/save code between lots of cases. stackApplyTypes = [ + [], [N], [P], [F], -- 1.7.10.4