/***********************************************************************/ /* */ /* Objective Caml */ /* */ /* Xavier Leroy and Damien Doligez, INRIA Rocquencourt */ /* */ /* Copyright 1996 Institut National de Recherche en Informatique et */ /* en Automatique. All rights reserved. This file is distributed */ /* under the terms of the GNU Library General Public License, with */ /* the special exception on linking described in file ../LICENSE. */ /* */ /***********************************************************************/ /* $Id$ */ #ifndef CAML_CONFIG_H #define CAML_CONFIG_H /* */ /* */ /* */ #include "../config/m.h" #include "../config/s.h" /* */ #ifndef CAML_NAME_SPACE #include "compatibility.h" #endif /* Types for signed chars, 16-bit integers, 32-bit integers, 64-bit integers */ typedef signed char schar; typedef short int16; /* FIXME -- not true on the Cray T3E */ typedef unsigned short uint16; /* FIXME -- not true on the Cray T3E */ #if SIZEOF_INT == 4 typedef int int32; typedef unsigned int uint32; #elif SIZEOF_LONG == 4 typedef long int32; typedef unsigned long uint32; #elif SIZEOF_SHORT == 4 typedef short int32; typedef unsigned short uint32; #endif #if defined(ARCH_INT64_TYPE) typedef ARCH_INT64_TYPE int64; typedef ARCH_UINT64_TYPE uint64; #else # if ARCH_BIG_ENDIAN typedef struct { uint32 h, l; } uint64, int64; # else typedef struct { uint32 l, h; } uint64, int64; # endif #endif /* Endianness of floats */ /* ARCH_FLOAT_ENDIANNESS encodes the byte order of doubles as follows: the value [0xabcdefgh] means that the least significant byte of the float is at byte offset [a], the next lsb at [b], ..., and the most significant byte at [h]. */ #if defined(__arm__) #define ARCH_FLOAT_ENDIANNESS 0x45670123 #elif defined(ARCH_BIG_ENDIAN) #define ARCH_FLOAT_ENDIANNESS 0x76543210 #else #define ARCH_FLOAT_ENDIANNESS 0x01234567 #endif /* We use threaded code interpretation if the compiler provides labels as first-class values (GCC 2.x). */ #if defined(__GNUC__) && __GNUC__ >= 2 && !defined(DEBUG) && !defined (SHRINKED_GNUC) #define THREADED_CODE #endif /* Do not change this definition. */ #define Page_size (1 << Page_log) /* Memory model parameters */ /* The size of a page for memory management (in bytes) is [1 << Page_log]. It must be a multiple of [sizeof (long)]. */ #define Page_log 12 /* A page is 4 kilobytes. */ /* Initial size of stack (bytes). */ #define Stack_size (4096 * sizeof(value)) /* Minimum free size of stack (bytes); below that, it is reallocated. */ #define Stack_threshold (256 * sizeof(value)) /* Default maximum size of the stack (words). */ #define Max_stack_def (256 * 1024) /* Maximum size of a block allocated in the young generation (words). */ /* Must be > 4 */ #define Max_young_wosize 256 /* Minimum size of the minor zone (words). This must be at least [Max_young_wosize + 1]. */ #define Minor_heap_min 4096 /* Maximum size of the minor zone (words). Must be greater than or equal to [Minor_heap_min]. */ #define Minor_heap_max (1 << 28) /* Default size of the minor zone. (words) */ #define Minor_heap_def 32768 /* Minimum size increment when growing the heap (words). Must be a multiple of [Page_size / sizeof (value)]. */ #define Heap_chunk_min (2 * Page_size / sizeof (value)) /* Default size increment when growing the heap. (words) Must be a multiple of [Page_size / sizeof (value)]. */ #define Heap_chunk_def (15 * Page_size) /* Default initial size of the major heap (words); same constraints as for Heap_chunk_def. */ #define Init_heap_def (15 * Page_size) /* Default speed setting for the major GC. The heap will grow until the dead objects and the free list represent this percentage of the total size of live objects. */ #define Percent_free_def 80 /* Default setting for the compacter: 500% (i.e. trigger the compacter when 5/6 of the heap is free or garbage) This can be set quite high because the overhead is over-estimated when fragmentation occurs. */ #define Max_percent_free_def 500 #endif /* CAML_CONFIG_H */