[project @ 2002-11-21 11:27:05 by simonmar]
[ghc-hetmet.git] / ghc / includes / Constants.h
index 604444a..4062bca 100644 (file)
@@ -1,13 +1,17 @@
 /* ----------------------------------------------------------------------------
 /* ----------------------------------------------------------------------------
- * $Id: Constants.h,v 1.10 2000/02/01 14:08:22 sewardj Exp $
+ * $Id: Constants.h,v 1.21 2002/09/23 14:33:50 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
  * Constants
  *
  *
  * (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
 
 /* -----------------------------------------------------------------------------
 #define CONSTANTS_H
 
 /* -----------------------------------------------------------------------------
-   Header Sizes
-
-   NOTE: keep these in line with the real definitions in Closures.h
-   HWL: checked GRAN_HDR_SIZE; ok
-   -------------------------------------------------------------------------- */
-
-#define STD_HDR_SIZE   1
-#define PROF_HDR_SIZE  1
-#define GRAN_HDR_SIZE  1
-#define PAR_HDR_SIZE   0
-#define TICKY_HDR_SIZE 0
-
-#define ARR_WORDS_HDR_SIZE  1
-#define ARR_PTRS_HDR_SIZE   2
-
-/* -----------------------------------------------------------------------------
-   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, and GRAN values are *wrong*  (ToDo)
-   HWL: checked GRAN_ITBL_SIZE; ok
-   -------------------------------------------------------------------------- */
-
-#define STD_ITBL_SIZE   3
-#define PROF_ITBL_SIZE  1
-#define GRAN_ITBL_SIZE  1
-#define PAR_ITBL_SIZE   0
-#define TICKY_ITBL_SIZE 0
-
-/* -----------------------------------------------------------------------------
    Minimum closure sizes
 
    Here We define the minimum size for updatable closures. This must be at
    Minimum closure sizes
 
    Here We define the minimum size for updatable closures. This must be at
 #define MAX_SPEC_CONSTR_SIZE   2
 
 /* -----------------------------------------------------------------------------
 #define MAX_SPEC_CONSTR_SIZE   2
 
 /* -----------------------------------------------------------------------------
-   Update Frame Layout
-   GranSim uses an additional word as bitmask in the update frame; actually,
-   not really necessary, but uses standard closure layout that way
-   NB: UF_RET etc are *wrong* in a GranSim setup; should be increased by 1 
-       if compiling for GranSim (currently not used in compiler) -- HWL
-   -------------------------------------------------------------------------- */
-#define NOSCC_UF_SIZE  3
-#define GRAN_UF_SIZE   4
-#define SCC_UF_SIZE    4
-
-#define UF_RET         0
-#define UF_SU          1
-#define UF_UPDATEE     2
-#define UF_CCS         3
-
-/* -----------------------------------------------------------------------------
-   SEQ frame size
-
-   I don't think seq frames really need sccs --SDM
-   They don't need a GranSim bitmask either, but who cares anyway -- HWL
-   -------------------------------------------------------------------------- */
-
-#define NOSCC_SEQ_FRAME_SIZE 2
-#define GRAN_SEQ_FRAME_SIZE  3
-#define SCC_SEQ_FRAME_SIZE   3
-
-/* -----------------------------------------------------------------------------
    STG Registers.
 
    Note that in MachRegs.h we define how many of these registers are
    STG Registers.
 
    Note that in MachRegs.h we define how many of these registers are
 /* register is only used for returning (unboxed) 64-bit vals */
 #define MAX_LONG_REG    1
 
 /* 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
 
 /*---- 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 MIN_INTLIKE            (-16)
 
-/*---- Minimum number of words left in heap after GC to carry on */
+#define MAX_CHARLIKE           255
+#define MIN_CHARLIKE           0
 
 
-#define HEAP_HWM_WORDS 1024
+/* You can change these constants (I hope) but be sure to modify
+   rts/StgMiscClosures.hs accordingly. */
 
 /* -----------------------------------------------------------------------------
    Semi-Tagging constants
 
 /* -----------------------------------------------------------------------------
    Semi-Tagging constants
 #define INFO_FIRST_TAG         0
 
 /* -----------------------------------------------------------------------------
 #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.
    -------------------------------------------------------------------------- */
 
    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 (1024 * SIZEOF_LONG)
+#define RESERVED_C_STACK_BYTES (2048 * SIZEOF_LONG)
 
 /* -----------------------------------------------------------------------------
    How much Haskell stack space to reserve for the saving of registers
 
 /* -----------------------------------------------------------------------------
    How much Haskell stack space to reserve for the saving of registers
    Storage manager constants
    -------------------------------------------------------------------------- */
 
    Storage manager constants
    -------------------------------------------------------------------------- */
 
-/* The size of a block */
-#define BLOCK_SIZE   0x1000
+/* The size of a block (2^BLOCK_SHIFT bytes) */
 #define BLOCK_SHIFT  12
 
 #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
 #define MBLOCK_SHIFT   20
 
 /* the largest size an object can be before we give it a block of its