[project @ 2005-04-28 15:28:05 by simonmar]
authorsimonmar <unknown>
Thu, 28 Apr 2005 15:28:09 +0000 (15:28 +0000)
committersimonmar <unknown>
Thu, 28 Apr 2005 15:28:09 +0000 (15:28 +0000)
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
ghc/includes/StgFun.h
ghc/utils/genapply/GenApply.hs

index 9b73c3b..f5232a5 100644 (file)
@@ -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
index 639f0e5..e6f9b1f 100644 (file)
 /* 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 */
index 956ef42..3f10ddf 100644 (file)
@@ -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],