home *** CD-ROM | disk | FTP | other *** search
- /*
- * Configuration parameters that depend on computer architecture.
- * Some depend on values defined in config.h, which is always
- * included before this file.
- */
-
- #ifndef CStateSize
- #define CStateSize 15 /* size of C state for co-expressions */
- #endif /* CStateSize */
-
- /*
- * The following definitions depend on the sizes of ints and pointers.
- */
-
- /*
- * Most of the present implementations use 32-bit "words". The section
- * for 64-bit words is tentative and untested. 16-bit words are no
- * longer supported. Note that WordBits is the number of bits in an Icon
- * integer, not necessarily the number of bits in an int (given by IntBits).
- * For example, in MS-DOS an Icon integer is a long, not an int.
- *
- * MaxStrLen must not be so large as to overlap flags.
- */
-
- /*
- * 64-bit words. NOTE: This section is under construction!
- */
-
- #if WordBits == 64
-
- #ifndef MinLong
- #define MinLong ((long int)0x8000000000000000) /* smallest long integer */
- #endif
-
- #ifndef MaxLong
- #define MaxLong ((long int)0x7fffffffffffffff) /* largest long integer */
- #endif
-
- #define MaxDigits 40 /* maximum number of digits in images */
- #define MaxStrLen 017777777777L /* maximum string length */
-
- #ifndef MaxNegInt
- #define MaxNegInt "-9223372036854775808"
- #endif
-
- #ifndef F_Nqual
- #define F_Nqual 0x8000000000000000 /* set if NOT string qualifier */
- #endif
- #ifndef F_Var
- #define F_Var 0x4000000000000000 /* set if variable */
- #endif
- #ifndef F_Tvar
- #define F_Tvar 0x2000000000000000 /* set if trapped variable */
- #endif
- #ifndef F_Ptr
- #define F_Ptr 0x1000000000000000 /* set if value field is pointer */
- #endif
-
- #endif /* WordBits == 64 */
-
- /*
- * 32-bit words.
- */
-
- #if WordBits == 32
-
- #define MaxLong ((long int)017777777777L) /* largest long integer */
- #define MinLong ((long int)020000000000L) /* smallest long integer */
- #define MaxDigits 20 /* maximum number of digits in images */
-
- #define MaxNegInt "-2147483648"
-
- #define MaxStrLen 0777777777 /* maximum string length */
-
- #define F_Nqual 0x80000000 /* set if NOT string qualifier */
- #define F_Var 0x40000000 /* set if variable */
- #define F_Tvar 0x20000000 /* set if trapped variable */
- #define F_Ptr 0x10000000 /* set if value field is pointer */
- #endif /* WordBits == 32 */
-
- /* Values that depend on the number of bits in an int (not necessarily
- * the same as the number of bits in a word).
- */
-
- #if IntBits == 64
- #define LogIntBits 6 /* log of IntBits */
- #define MaxUnsigned 01777777777777777777777L /* largest unsigned integer */
- #define MaxInt 0777777777777777777777L /* largest int */
- /*
- * Cset initialization macros.
- */
- #define fwd(w0, w1, w2, w3) \
- ((w0)&0xffff | ((w1)&0xffff)<<16 | ((w2)&0xffff)<<32 | ((w3)&0xffff)<<48)
- #define cset_display(w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf) \
- {fwd(w0,w1,w2,w3),fwd(w4,w5,w6,w7),fwd(w8,w9,wa,wb),fwd(wc,wd,we,wf)}
- #endif /* IntBits == 64 */
-
- #if IntBits == 32
- #define LogIntBits 5 /* log of IntBits */
- #define MaxUnsigned 037777777777 /* largest unsigned integer */
- #define MaxInt 07777777777 /* largest int */
- /*
- * Cset initialization macros.
- */
- #define twd(w0,w1) ((w0)&0xffff | (w1)<<16)
- #define cset_display(w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf) \
- {twd(w0,w1),twd(w2,w3),twd(w4,w5),twd(w6,w7), \
- twd(w8,w9),twd(wa,wb),twd(wc,wd),twd(we,wf)}
- #endif /* IntBits == 32 */
-
- #if IntBits == 16
- #define LogIntBits 4 /* log of IntBits */
- #define MaxUnsigned ((unsigned int)0177777) /* largest unsigned integer */
- #define MaxInt 077777 /* largest int */
- /*
- * Cset initialization macro.
- */
- #define cset_display(w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf) \
- {w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf}
- #endif /* IntBits == 16 */
-
- #ifndef LogHuge
- #define LogHuge 309 /* maximum base-10 exp+1 of real */
- #endif /* LogHuge */
-
- #ifndef Big
- #define Big 9007199254740992. /* larger than 2^53 lose precision */
- #endif /* Big */
-
- #ifndef Precision
- #define Precision 10 /* digits in string from real */
- #endif /* Precision */
-
- /*
- * Parameters that configure tables and sets:
- *
- * HSlots Initial number of hash buckets; must be a power of 2.
- * LogHSlots Log to the base 2 of HSlots.
- *
- * HSegs Maximum number of hash bin segments; the maximum number of
- * hash bins is HSlots * 2 ^ (HSegs - 1).
- *
- * If Hsegs is increased above 12, the arrays log2[] and segsize[]
- * in iconx will need modification.
- *
- * MaxHLoad Maximum loading factor; more hash bins are allocated when
- * the average bin exceeds this many entries.
- *
- * MinHLoad Minimum loading factor; if a newly created table (e.g. via
- * copy()) is more lightly loaded than this, bins are combined.
- *
- * Because splitting doubles the number of hash bins, and combining halves it,
- * MaxHLoad should be at least twice MinHLoad.
- */
-
- #ifndef HSlots
- #if IntBits == 16
- #define HSlots 4
- #define LogHSlots 2
- #else
- #define HSlots 8
- #define LogHSlots 3
- #endif /* IntBits */
- #endif /* HSlots */
-
- #if ((1 << LogHSlots) != HSlots)
- Deliberate Syntax Error -- HSlots and LogHSlots are inconsistent
- #endif /* HSlots / LogHSlots consistency */
-
- #ifndef HSegs
- #if IntBits == 16
- #define HSegs 6
- #else
- #define HSegs 10
- #endif /* IntBits */
- #endif /* HSegs */
-
- #ifndef MinHLoad
- #define MinHLoad 1
- #endif /* MinHLoad */
-
- #ifndef MaxHLoad
- #define MaxHLoad 5
- #endif /* MaxHLoad */
-
- /*
- * The number of bits in each base-B digit; the type DIGIT (unsigned int)
- * in rt.h must be large enough to hold this many bits.
- * It must be at least 2 and at most WordBits / 2.
- */
-
- #define NB (WordBits / 2)
-
-