Quick Search:

View

Revision:
Expand:  
Changeset: MAIN:ragge:20050917075840

Diff

Diff from 1.22 to:

Annotations

Annotate by Age | Author | Mixed | None
/fisheye/browse/pcc/pcc/arch/i386/macdefs.h

Annotated File View

ragge
1.22
1 /*      $Id: macdefs.h,v 1.22 2005/09/17 07:58:40 ragge Exp $   */
ragge
1.1
2 /*
3  * Copyright (c) 2003 Anders Magnusson (ragge@ludd.luth.se).
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. The name of the author may not be used to endorse or promote products
15  *    derived from this software without specific prior written permission
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 /*
30  * Machine-dependent defines for both passes.
31  */
32
33 /*
34  * Convert (multi-)character constant to integer.
35  * Assume: If only one value; store at left side (char size), otherwise 
36  * treat it as an integer.
37  */
ragge
1.2
38 #define makecc(val,i)   lastcon = (lastcon<<8)|((val<<24)>>24);
ragge
1.1
39
40 #define ARGINIT         64      /* # bits above fp where arguments start */
ragge
1.2
41 #define AUTOINIT        0       /* # bits below fp where automatics start */
ragge
1.1
42
43 /*
44  * Storage space requirements
45  */
46 #define SZCHAR          8
47 #define SZINT           32
48 #define SZFLOAT         32
49 #define SZDOUBLE        64
ragge
1.8
50 #define SZLDOUBLE       96
ragge
1.1
51 #define SZLONG          32
52 #define SZSHORT         16
53 #define SZLONGLONG      64
ragge
1.13
54 #define SZPOINT(t)      32
ragge
1.1
55
56 /*
57  * Alignment constraints
58  */
59 #define ALCHAR          8
60 #define ALINT           32
61 #define ALFLOAT         32
62 #define ALDOUBLE        32
ragge
1.8
63 #define ALLDOUBLE       32
ragge
1.1
64 #define ALLONG          32
65 #define ALLONGLONG      32
66 #define ALSHORT         16
67 #define ALPOINT         32
68 #define ALSTRUCT        32
69 #define ALSTACK         32 
70
71 /*
ragge
1.10
72  * Min/max values.
ragge
1.1
73  */
ragge
1.11
74 #define MIN_CHAR        -128
75 #define MAX_CHAR        127
76 #define MAX_UCHAR       255
77 #define MIN_SHORT       -32768
78 #define MAX_SHORT       32767
79 #define MAX_USHORT      65535
80 #define MIN_INT         -1
ragge
1.1
81 #define MAX_INT         0x7fffffff
82 #define MAX_UNSIGNED    0xffffffff
ragge
1.11
83 #define MIN_LONG        MIN_INT
ragge
1.1
84 #define MAX_LONG        MAX_INT
85 #define MAX_ULONG       MAX_UNSIGNED
ragge
1.10
86 #define MIN_LONGLONG    0x8000000000000000LL
ragge
1.1
87 #define MAX_LONGLONG    0x7fffffffffffffffLL
88 #define MAX_ULONGLONG   0xffffffffffffffffULL
89
90 /* Default char is unsigned */
91 #undef  CHAR_UNSIGNED
92
93 /*
ragge
1.7
94  * Use large-enough types.
ragge
1.1
95  */
96 typedef long long CONSZ;
97 typedef unsigned long long U_CONSZ;
98 typedef long long OFFSZ;
99
ragge
1.2
100 #define CONFMT  "%lld"          /* format for printing constants */
101 #define LABFMT  ".L%d"          /* format for printing labels */
ragge
1.10
102 #define STABLBL ".LL%d"         /* format for stab (debugging) labels */
ragge
1.15
103 #ifdef FORTRAN
104 #define XL 8
105 #define FLABELFMT "%s:\n"
106 #define USETEXT ".text"
107 #define USECONST ".data\t0"     /* XXX - fix */
108 #define USEBSS  ".data\t1"      /* XXX - fix */
109 #define USEINIT ".data\t2"      /* XXX - fix */
ragge
1.16
110 #define MAXREGVAR 3             /* XXX - fix */
111 #define BLANKCOMMON "_BLNK_"
ragge
1.17
112 #define MSKIREG  (M(TYSHORT)|M(TYLONG))
113 #define TYIREG TYLONG
114 #define FSZLENG  FSZLONG
115 #define FUDGEOFFSET 1
116 #define AUTOREG EBP
117 #define ARGREG  EBP
ragge
1.18
118 #define ARGOFFSET 4
ragge
1.15
119 #endif
ragge
1.1
120
121 #define BACKAUTO                /* stack grows negatively for automatics */
122 #define BACKTEMP                /* stack grows negatively for temporaries */
123
124 #define MYP2TREE(p) myp2tree(p);
125
126 #undef  FIELDOPS                /* no bit-field instructions */
127 #define RTOLBYTES               /* bytes are numbered right to left */
128
129 #define ENUMSIZE(high,low) INT  /* enums are always stored in full int */
130
131 /* Definitions mostly used in pass2 */
132
133 #define BYTEOFF(x)      ((x)&03)
134 #define wdal(k)         (BYTEOFF(k)==0)
ragge
1.4
135 #define BITOOR(x)       ((x)/SZCHAR)    /* bit offset to oreg offset */
ragge
1.1
136
137 #define STOARG(p)
138 #define STOFARG(p)
139 #define STOSTARG(p)
140 #define genfcall(a,b)   gencall(a,b)
141
142 #define szty(t) (((t) == DOUBLE || (t) == FLOAT || \
143         (t) == LONGLONG || (t) == ULONGLONG) ? 2 : 1)
144
ragge
1.22
145 #ifdef SNH_REG
146 /*
147  * The x86 has a bunch of register classes, most of them interfering
148  * with each other.
149  * Each class contains a number of registers, represented by bits in
150  * a bitmask.
151  */
152 #define EAX     0       /* Scratch and return register */
153 #define EDX     1       /* Scratch and secondary return register */
154 #define ECX     2       /* Scratch (and shift count) register */
155 #define EBX     3       /* GDT pointer or callee-saved temporary register */
156 #define ESI     4       /* Callee-saved temporary register */
157 #define EDI     5       /* Callee-saved temporary register */
158 #define EBP     6       /* Frame pointer */
159 #define ESP     7       /* Stack pointer */
160 #define AREGS   (REGBIT(EAX)|REGBIT(EDX)|REGBIT(ECX)|REGBIT(ESI)| \
161         REGBIT(EDI)|REGBIT(EBX))
162 #define TAREGS  (REGBIT(EAX)|REGBIT(EDX)|REGBIT(ECX))
163 #define AL      0       /* Scratch and return register */
164 #define AH      1       /* Scratch and secondary return register */
165 #define DL      2       /* Scratch (and shift count) register */
166 #define DH      3       /* Callee-saved temporary register */
167 #define CL      4       /* Callee-saved temporary register */
168 #define CH      5       /* GDT pointer or callee-saved temporary register */
169 #define BL      6       /* Frame pointer */
170 #define BH      7       /* Stack pointer */
171 #define BREGS   (REGBIT(AL)|REGBIT(AH)|REGBIT(DL)|REGBIT(DH)| \
172         REGBIT(CL)|REGBIT(CH)|REGBIT(BL)|REGBIT(BH))
173 #define TBREGS  (REGBIT(AL)|REGBIT(AH)|REGBIT(DL)|REGBIT(DH)| \
174         REGBIT(CL)|REGBIT(CH))
175 #define AX      0       /* Scratch and return register */
176 #define DX      1       /* Scratch and secondary return register */
177 #define CX      2       /* Scratch (and shift count) register */
178 #define BX      3       /* GDT pointer or callee-saved temporary register */
179 #define SI      4       /* Callee-saved temporary register */
180 #define DI      5       /* Callee-saved temporary register */
181 #define BP      6       /* Frame pointer */
182 #define SP      7       /* Stack pointer */
183 #define CREGS   (REGBIT(AX)|REGBIT(DX)|REGBIT(CX)|REGBIT(SI)| \
184         REGBIT(DI)|REGBIT(BX))
185 #define TCREGS  (REGBIT(AX)|REGBIT(DX)|REGBIT(CX))
186 #define EAXEDX  0
187 #define EAXECX  1
188 #define EAXEBX  2
189 #define EAXESI  3
190 #define EAXEDI  4
191 #define EDXECX  5
192 #define EDXEBX  6
193 #define EDXESI  7
194 #define EDXEDI  8
195 #define ECXEBX  9
196 #define ECXESI  10
197 #define ECXEDI  11
198 #define EBXESI  12
199 #define EBXEDI  13
200 #define ESIEDI  14
201 #define DREGS   (REGBIT(EAXEDX)|REGBIT(EAXECX)|REGBIT(EAXEBX)|REGBIT(EAXESI)| \
202         REGBIT(EAXEDI)|REGBIT(EDXECX)|REGBIT(EDXEBX)|REGBIT(EDXESI)| \
203         REGBIT(EDXEDI)|REGBIT(ECXEBX)|REGBIT(ECXESI)|REGBIT(ECXEDI)| \
204         REGBIT(EBXESI)|REGBIT(EBXEDI)|REGBIT(ESIEDI))
205 #define TDREGS  (REGBIT(EAXEDX)|REGBIT(EAXECX)|REGBIT(EAXEBX)|REGBIT(EAXESI)| \
206         REGBIT(EAXEDI)|REGBIT(EDXECX)|REGBIT(EDXEBX)|REGBIT(EDXESI)| \
207         REGBIT(EDXEDI)|REGBIT(ECXEBX)|REGBIT(ECXESI)|REGBIT(ECXEDI))
208 #define EREGS   0xff    /* float regs (currently not used) */
209
210 #define PCLASS(p) (p->n_type <= UCHAR ? SBREG : p->n_type <= USHORT ? SCREG : \
211                   (p->n_type == LONGLONG || p->n_type == ULONGLONG ? SDREG : \
212                   (p->n_type >= FLOAT && p->n_type <= LDOUBLE ? SEREG : SAREG)))
213
214 /* XXX - to die */
215 #define MINRVAR ESI     /* first register variable */
216 #define MAXRVAR EBX     /* last register variable */
217 #define REGSZ   16      /* 8 "general" and 8 floating point regs */
218 #define FPREG   EBP     /* frame pointer */
219 #define STKREG  ESP     /* stack pointer */
220 #define RETREG  EAX     /* Return (and switch) register */
221 #define NREGREG (MAXRVAR-MINRVAR+1)
222 #else
ragge
1.7
223 /*
224  * Register names.  These must match rnames[] and rstatus[] in local2.c.
225  * The crazy order of the registers are due to the current register
226  * allocations strategy and should be fixed.
227  */
228 #define EAX     0       /* Scratch and return register */
229 #define EDX     1       /* Scratch and secondary return register */
230 #define ECX     2       /* Scratch (and shift count) register */
231 #define ESI     3       /* Callee-saved temporary register */
232 #define EDI     4       /* Callee-saved temporary register */
233 #define EBX     5       /* GDT pointer or callee-saved temporary register */
234 #define EBP     6       /* Frame pointer */
235 #define ESP     7       /* Stack pointer */
236
237 #define RETREG  EAX     /* Return (and switch) register */
ragge
1.14
238 #define REGSZ   16      /* 8 "general" and 8 floating point regs */
ragge
1.7
239 #define FPREG   EBP     /* frame pointer */
240 #define STKREG  ESP     /* stack pointer */
241 #define MINRVAR ESI     /* first register variable */
242 #define MAXRVAR EBX     /* last register variable */
243
ragge
1.20
244 #define NREGREG (MAXRVAR-MINRVAR+1)
ragge
1.12
245 /*
246  * Register types are described by bitmasks.
247  */
248 #define AREGS   (REGBIT(EAX)|REGBIT(EDX)|REGBIT(ECX)|REGBIT(ESI)| \
249         REGBIT(EDI)|REGBIT(EBX))
250 #define TAREGS  (REGBIT(EAX)|REGBIT(EDX)|REGBIT(ECX))
ragge
1.14
251 #define BREGS   0xff00  /* 8-15 are just floating point regs */
ragge
1.19
252 #define BREGS_STACK 8   /* bregs is a register stack */
253 #if 0
ragge
1.14
254 #define TBREGS  BREGS   /* 8-15 are just floating point regs */
ragge
1.19
255 #else
256 #define TBREGS  0
257 #endif
ragge
1.22
258 #endif /* SNH_REG */
ragge
1.1
259
ragge
1.21
260 #define MYADDEDGE(x, t) if (t < INT) { AddEdge(x, ESI); AddEdge(x, EDI); }
ragge
1.1
261 #define MYREADER(p) myreader(p)
262 #define MYCANON(p) mycanon(p)
263 #define MYOPTIM
264
ragge
1.6
265 #define special(a, b)   SRNOPE
FishEye: Open Source License registered to PCC.
Your maintenance has expired. You can renew your license at http://www.atlassian.com/fisheye/renew
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-10-31 08:44 +0100