[project @ 2002-07-22 10:02:13 by simonmar]
[ghc-hetmet.git] / ghc / includes / Constants.h
index c521b76..7ee2a8c 100644 (file)
@@ -1,11 +1,17 @@
 /* ----------------------------------------------------------------------------
- * $Id: Constants.h,v 1.2 1998/12/02 13:21:03 simonm Exp $
+ * $Id: Constants.h,v 1.20 2001/11/28 14:31:27 simonmar Exp $
+ *
+ * (c) The GHC Team, 1998-1999
  *
  * Constants
  *
- * NOTE: this information is used by both the compiler and the RTS,
- * and *must* be kept up-to-date with respect to the rest of the
- * world.
+ * NOTE: this information is used by both the compiler and the RTS.
+ * Some of it is tweakable, and some of it must be kept up to date
+ * with various other parts of the system.
+ *
+ * Constants which are derived automatically from other definitions in
+ * the system (eg. structure sizes) are generated into the file
+ * DerivedConstants.h by a C program (mkDerivedConstantsHdr).
  *
  * -------------------------------------------------------------------------- */
 
 #define CONSTANTS_H
 
 /* -----------------------------------------------------------------------------
-   Header Sizes
-
-   NOTE: keep these in line with the real definitions in Closures.h
-   -------------------------------------------------------------------------- */
-
-#define STD_HDR_SIZE   1
-#define PROF_HDR_SIZE  1
-#define GRAN_HDR_SIZE  1
-#define TICKY_HDR_SIZE 1
-
-#define ARR_HDR_SIZE   1
-
-/* -----------------------------------------------------------------------------
-   Info Table sizes
-
-   The native code generator needs to know these things, and can't use
-   the C sizeof() function.
-  
-   NOTE: keep these in line with the real definitions in InfoTables.h
-
-   NOTE: the PROF, GRAN and TICKY values are *wrong*  (ToDo)
-   -------------------------------------------------------------------------- */
-
-#define STD_ITBL_SIZE   3
-#define PROF_ITBL_SIZE  1
-#define GRAN_ITBL_SIZE  1
-#define TICKY_ITBL_SIZE 1
-
-/* -----------------------------------------------------------------------------
    Minimum closure sizes
 
    Here We define the minimum size for updatable closures. This must be at
 
 #define MAX_SPEC_AP_SIZE       8
 
-/* -----------------------------------------------------------------------------
-   Update Frame Layout
-   -------------------------------------------------------------------------- */
-
-#define NOSCC_UF_SIZE  3
-#define SCC_UF_SIZE    4
-
-#if defined(PROFILING)
-#define UF_SIZE        SCC_UF_SIZE
-#else
-#define UF_SIZE NOSCC_UF_SIZE
-#endif
-
-#define UF_RET         0
-#define UF_SU          1
-#define UF_UPDATEE     2
-#define UF_CCS         3
+/* Specialised FUN/THUNK/CONSTR closure types */
 
-/* -----------------------------------------------------------------------------
-   SEQ frame size
-   -------------------------------------------------------------------------- */
-
-#if defined(PROFILING)
-#define SEQ_FRAME_SIZE 3
-#else
-#define SEQ_FRAME_SIZE 2
-#endif
+#define MAX_SPEC_THUNK_SIZE    2
+#define MAX_SPEC_FUN_SIZE      2
+#define MAX_SPEC_CONSTR_SIZE   2
 
 /* -----------------------------------------------------------------------------
    STG Registers.
 /* register is only used for returning (unboxed) 64-bit vals */
 #define MAX_LONG_REG    1
 
-/*---- The size of an StgDouble, in StgWords. */
-
-#if SIZEOF_VOID_P == SIZEOF_DOUBLE
-#define DOUBLE_SIZE    1
-#else
-#define DOUBLE_SIZE    2
-#endif
-
-/*---- The size of Stg{Int,Word}64e, in StgWords. */
-#if SIZEOF_VOID_P == 8
-#define WORD64_SIZE    1
-#define INT64_SIZE     1
-#else
-#define WORD64_SIZE    2
-#define INT64_SIZE     2
-#endif
-
 /*---- Maximum number of constructors in a data type for direct-returns.  */
 
 #define MAX_VECTORED_RTN 8
 
-/*---- Range of built-in table of static small int-like closures. */
+/*---- Range of built-in table of static small int-like and char-like closures. */
 
-#define MAX_INTLIKE            (16)
+#define MAX_INTLIKE            16
 #define MIN_INTLIKE            (-16)
 
+#define MAX_CHARLIKE           255
+#define MIN_CHARLIKE           0
+
+/* You can change these constants (I hope) but be sure to modify
+   rts/StgMiscClosures.hs accordingly. */
+
 /*---- Minimum number of words left in heap after GC to carry on */
 
 #define HEAP_HWM_WORDS 1024
 #define INFO_FIRST_TAG         0
 
 /* -----------------------------------------------------------------------------
-   Context switch timing constants.
-   -------------------------------------------------------------------------- */
-
-#define CS_MAX_FREQUENCY 100              /* context switches per second */
-#define CS_MIN_MILLISECS (1000/CS_MAX_FREQUENCY)/* milliseconds per slice */
-/* -----------------------------------------------------------------------------
    How much C stack to reserve for local temporaries when in the STG
    world.  Used in StgRun.S and StgCRun.c.
    -------------------------------------------------------------------------- */
 
-#define RESERVED_C_STACK_BYTES (512 * SIZEOF_LONG)
+#define RESERVED_C_STACK_BYTES (2048 * SIZEOF_LONG)
 
 /* -----------------------------------------------------------------------------
    How much Haskell stack space to reserve for the saving of registers
    Storage manager constants
    -------------------------------------------------------------------------- */
 
-/* The size of a block */
-#define BLOCK_SIZE   0x2000
-#define BLOCK_SHIFT  13
+/* The size of a block (2^BLOCK_SHIFT bytes) */
+#define BLOCK_SHIFT  12
 
-/* The size of a megablock */
-#define MBLOCK_SIZE    0x100000
+/* The size of a megablock (2^MBLOCK_SHIFT bytes) */
 #define MBLOCK_SHIFT   20
 
 /* the largest size an object can be before we give it a block of its