2 Defines and externs of general interest
5 /* $Id: global.h,v 2.4 1994/06/24 10:47:28 ceriel Exp $ */
8 /********* PRIVATE/static *********/
10 #define PRIVATE static /* or not */
13 /********* The internal data types ********/
15 #define UNSIGNED /* the normal case */
18 /* The EM pointer is an abstract type and requires explicit conversion*/
19 typedef unsigned long ptr; /* pointer to EM address */
20 #define p2i(p) (p) /* convert pointer to index */
21 #define i2p(p) (ptr)(p) /* convert index to pointer */
25 typedef char *ptr; /* pointer to EM address */
26 #define p2i(p) (long)(p) /* convert pointer to index */
27 #define i2p(p) (ptr)(p) /* convert index to pointer */
31 /* The EM size is an integer type; a cast suffices */
35 /********* Mathematical constants ********/
39 #define I_MINS1 (-127L-1L)
41 #define I_MAXU2 65535L
42 #define I_MAXS2 32767L
43 #define I_MINS2 (-32767L-1L)
45 #define I_MAXU4 4294967295L
46 #define I_MAXS4 2147483647L
47 #define I_MINS4 (-2147483647L-1L)
49 #define FL_MAXU1 255.0
50 #define FL_MAXS1 127.0
51 #define FL_MINS1 -128.0
53 #define FL_MAXU2 65535.0
54 #define FL_MAXS2 32767.0
55 #define FL_MINS2 -32768.0
57 #define FL_MAXU4 4294967295.0
58 #define FL_MAXS4 2147483647.0
59 #define FL_MINS4 -2147483648.0
61 #define BIT(n) (1L<<(n))
63 #define SIGNBIT1 BIT(7) /* Signbit of one byte signed int */
64 #define SIGNBIT2 BIT(15) /* Signbit of two byte signed int */
65 #define SIGNBIT4 BIT(31) /* Signbit of four byte signed int */
67 #define MASK1 0xFF /* To mask one byte */
68 #define MASK2 0xFFFF /* To mask two bytes */
71 /******** Machine constants ********/
73 #define MAX_OFF2 I_MAXS2
74 #define MAX_OFF4 I_MAXS4
77 /******** EM machine data sizes ********/
79 #define FRALIMIT 8L /* Default limit */
80 #define LINSIZE 4L /* Fixed size of LIN number */
83 /******** EM Machine capacity parameters ********/
85 extern size wsize; /* wordsize */
86 extern size dwsize; /* double wordsize */
87 extern size psize; /* pointersize */
88 extern long i_minsw; /* Min. value for signed integer of wsize */
89 extern long i_maxsw; /* Max. value for signed integer of wsize */
90 extern unsigned long i_maxuw; /* Max. value for unsigned integer of wsize */
91 extern long min_off; /* Minimum offset */
92 extern long max_off; /* Maximum offset */
93 extern ptr max_addr; /* Maximum address */
94 extern size wsizem1; /* wordsize - 1 */
97 /******** EM program parameters ********/
99 extern ptr ML; /* Memory Limit */
100 extern ptr HB; /* Heap Base */
101 extern ptr DB; /* Procedure Descriptor Base, end of text */
102 extern long NProc; /* Number of Procedure Descriptors */
103 extern long PreIgnMask; /* Preset Ignore Mask, from command line */
106 /******** EM machine registers ********/
108 #define UNDEFINED (0)
111 extern long PI; /* Procedure Identifier of running proc */
112 extern ptr PC; /* Program Counter */
114 extern ptr HP; /* Heap Pointer */
115 extern ptr SP; /* Stack Pointer */
116 extern ptr LB; /* Local Base */
117 extern ptr AB; /* Actual Base */
119 extern long ES; /* program Exit Status */
120 extern int ES_def; /* set iff Exit Status legal */
125 extern int OnTrap; /* what to do upon trap */
126 extern long IgnMask; /* Ignore Mask for traps */
127 extern long TrapPI; /* Procedure Identifier of trap routine */
129 extern char *FRA; /* Function Return Area */
130 extern size FRALimit; /* Function Return Area maximum Size */
131 extern size FRASize; /* Function Return Area actual Size */
132 extern int FRA_def; /* set iff Function Return Area legal */
135 /******** The EM Machine Memory ********/
137 extern char *text; /* program text & procedure descriptors */
139 extern char *data; /* global data & heap space */
140 extern ptr HL; /* Heap Limit */
142 extern char *stack; /* stack space and local data */
143 extern char *stackML; /* stack + ML, to speed up stack accesses */
144 extern ptr SL; /* Stack Limit */
147 /********* Global inline functions ********/
149 #define btol(c) (long)((c) & MASK1)
150 #define btou(c) (unsigned int)((c) & MASK1)
153 #define max(i,j) (((i) > (j)) ? (i) : (j))
154 #define min(i,j) (((i) < (j)) ? (i) : (j))