Quick Search:

View

Revision:
Expand:  
Changeset: MAIN:plunky:20110605085442

Diff

Diff from 1.14 to:

Annotations

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

Annotated File View

plunky
1.14
1 /*      $Id: macdefs.h,v 1.14 2011/06/05 08:54:42 plunky Exp $  */
2
david
1.1
3 /*
4  * Copyright (c) 2008 David Crawshaw <david@zentus.com>
5  * 
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  * 
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18
david
1.6
19
20 /*
21  * Many arithmetic instructions take 'reg_or_imm' in SPARCv9, where imm
22  * means we can use a signed 13-bit constant (simm13). This gives us a
23  * shortcut for small constants, instead of loading them into a register.
24  * Special handling is required because 13 bits lies between SSCON and SCON.
25  */
26 #define SIMM13(val) (val < 4096 && val > -4097)
27
28 /*
29  * The SPARCv9 ABI specifies a stack bias of 2047 bits. This means that the
30  * end of our call space is %fp+V9BIAS, working back towards %sp+V9BIAS+176.
31  */
32 #define V9BIAS 2047
33
34 /*
35  * The ABI requires that every frame reserve 176 bits for saving registers
36  * in the case of a spill. The stack size must be 16-bit aligned.
37  */
38 #define V9RESERVE 176
david
1.7
39 #define V9STEP(x) ALIGN(x, 0xf)
40 #define ALIGN(x, y) ((x & y) ? (x + y) & ~y : x)
david
1.6
41
42
david
1.1
43 #define makecc(val,i)   lastcon = (lastcon<<8)|((val<<24)>>24);
44
45 #define ARGINIT         (7*8) /* XXX */
46 #define AUTOINIT        (0)
47
48 /* Type sizes */
49 #define SZCHAR          8
50 #define SZBOOL          32
51 #define SZINT           32
52 #define SZFLOAT         32
53 #define SZDOUBLE        64
54 #define SZLDOUBLE       64
david
1.5
55 #define SZLONG          64
david
1.1
56 #define SZSHORT         16
57 #define SZLONGLONG      64
58 #define SZPOINT(t)      64
59
60 /* Type alignments */
61 #define ALCHAR          8
62 #define ALBOOL          32
63 #define ALINT           32
64 #define ALFLOAT         32
65 #define ALDOUBLE        64
66 #define ALLDOUBLE       64
david
1.5
67 #define ALLONG          64
david
1.1
68 #define ALLONGLONG      64
69 #define ALSHORT         16
david
1.4
70 #define ALPOINT         64
david
1.1
71 #define ALSTRUCT        32
david
1.4
72 #define ALSTACK         64
david
1.1
73
74 /* Min/max values. */
75 #define MIN_CHAR        -128
76 #define MAX_CHAR        127
77 #define MAX_UCHAR       255
78 #define MIN_SHORT       -32768
79 #define MAX_SHORT       32767
80 #define MAX_USHORT      65535
81 #define MIN_INT         -1
82 #define MAX_INT         0x7fffffff
83 #define MAX_UNSIGNED    0xffffffff
84 #define MIN_LONGLONG    0x8000000000000000LL
85 #define MAX_LONGLONG    0x7fffffffffffffffLL
86 #define MAX_ULONGLONG   0xffffffffffffffffULL
david
1.5
87 #define MIN_LONG        MIN_LONGLONG
88 #define MAX_LONG        MAX_LONGLONG
89 #define MAX_ULONG       MAX_ULONGLONG
david
1.1
90
91 #define BOOL_TYPE       INT
92
93 typedef long long CONSZ;
94 typedef unsigned long long U_CONSZ;
95 typedef long long OFFSZ;
96
97 #define CONFMT  "%lld"
98 #define LABFMT  "L%d"
99 #define STABLBL "LL%d"
100
101 #define BACKAUTO                /* Stack grows negatively for automatics. */
102 #define BACKTEMP                /* Stack grows negatively for temporaries. */
103
104 #undef  FIELDOPS
105 #define RTOLBYTES
106
107 #define BYTEOFF(x)      ((x)&03)
108 #define BITOOR(x)       (x)
109
david
1.9
110 #define szty(t) ((ISPTR(t) || (t) == DOUBLE || \
111                  (t) == LONG || (t) == ULONG || \
112                  (t) == LONGLONG || (t) == ULONGLONG) ? 2 : 1)
david
1.1
113
114
115 /* Register names. */
116
david
1.11
117 #define MAXREGS (31 + 31 + 16 + 2)
david
1.8
118 #define NUMCLASS 4
david
1.1
119
120 //define G0     -1
121 #define G1      0
122 #define G2      1
123 #define G3      2
124 #define G4      3
125 #define G5      4
126 #define G6      5
127 #define G7      6
128 #define O0      7
129 #define O1      8
130 #define O2      9
131 #define O3      10
132 #define O4      11
133 #define O5      12
134 #define O6      13
135 #define O7      14
136 #define L0      15
137 #define L1      16
138 #define L2      17
139 #define L3      18
140 #define L4      19
141 #define L5      20
142 #define L6      21
143 #define L7      22
144 #define I0      23
145 #define I1      24
146 #define I2      25
147 #define I3      26
148 #define I4      27
149 #define I5      28
150 #define I6      29
151 #define I7      30
152
david
1.10
153 #define F0      31
154 #define F1      32
155 #define F2      33
156 #define F3      34
157 #define F4      35
158 #define F5      36
159 #define F6      37
160 #define F7      38
161 #define F8      39
162 #define F9      40
163 #define F10     41
164 #define F11     42
165 #define F12     43
166 #define F13     44
167 #define F14     45
168 #define F15     46
169 #define F16     47
170 #define F17     48
171 #define F18     49
172 #define F19     50
173 #define F20     51
174 #define F21     52
175 #define F22     53
176 #define F23     54
177 #define F24     55
178 #define F25     56
179 #define F26     57
180 #define F27     58
181 #define F28     59
182 #define F29     60
183 #define F30     61
184 //define F31    XXX
185 #define D0      62
186 #define D1      63
187 #define D2      64
188 #define D3      65
189 #define D4      66
190 #define D5      67
191 #define D6      68
192 #define D7      69
193 #define D8      70
194 #define D9      71
195 #define D10     72
196 #define D11     73
197 #define D12     74
198 #define D13     75
199 #define D14     76
200 #define D15     77
david
1.8
201
david
1.10
202 #define SP      78
203 #define FP      79
david
1.1
204
205 #define FPREG   FP
206
david
1.10
207 #define RETREG(x)       ((x)==DOUBLE ? D0 : (x)==FLOAT ? F1 : O0)
208 #define RETREG_PRE(x)   ((x)==DOUBLE ? D0 : (x)==FLOAT ? F1 : I0)
david
1.2
209
david
1.1
210 #define RSTATUS \
211         /* global */ \
212                                SAREG|PERMREGSAREG|PERMREGSAREG|PERMREG, \
213                 SAREG|PERMREGSAREG|PERMREGSAREG|PERMREGSAREG|PERMREG, \
214         /* out */ \
215                 SAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREG, \
216                 SAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREG, \
217         /* local */ \
david
1.3
218                 SAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREG, \
219                 SAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREG, \
david
1.1
220         /* in */ \
221                 SAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREG, \
222                 SAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREG, \
david
1.8
223         /* 32-bit floating point */ \
david
1.1
224                 SBREGSBREGSBREGSBREGSBREGSBREGSBREGSBREG, \
225                 SBREGSBREGSBREGSBREGSBREGSBREGSBREGSBREG, \
226                 SBREGSBREGSBREGSBREGSBREGSBREGSBREGSBREG, \
david
1.8
227                 SBREGSBREGSBREGSBREGSBREGSBREGSBREG/*, SBREG */ \
david
1.10
228         /* 64-bit floating point */ \
229                 SCREGSCREGSCREGSCREGSCREGSCREGSCREGSCREG, \
david
1.8
230                 SCREGSCREGSCREGSCREGSCREGSCREGSCREGSCREG, \
david
1.10
231         /* sp */ SDREG, \
232         /* fp */ SDREG
david
1.1
233
234 #define ROVERLAP \
235                 { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \
236         { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \
237         { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \
238         { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \
david
1.8
239 /* 32-bit floating point */ \
240         {  D0, -1 }, {  D0, -1 }, {  D1, -1 }, {  D1, -1 }, \
241         {  D2, -1 }, {  D2, -1 }, {  D3, -1 }, {  D3, -1 }, \
242         {  D4, -1 }, {  D4, -1 }, {  D5, -1 }, {  D5, -1 }, \
243         {  D6, -1 }, {  D6, -1 }, {  D7, -1 }, {  D7, -1 }, \
244         {  D8, -1 }, {  D8, -1 }, {  D9, -1 }, {  D9, -1 }, \
245         { D10, -1 }, { D10, -1 }, { D11, -1 }, { D11, -1 }, \
246         { D12, -1 }, { D12, -1 }, { D13, -1 }, { D13, -1 }, \
247         { D14, -1 }, { D14, -1 }, { D15, -1 }, /* { D15, -1 }, */ \
248 /* 64-bit floating point */ \
249         {  F0,  F1, -1 }, {  F2,  F3, -1 }, {  F4,  F5, -1 }, \
250         {  F6,  F7, -1 }, {  F8,  F9, -1 }, { F10F11, -1 }, \
251         { F12F13, -1 }, { F14F15, -1 }, { F16F17, -1 }, \
252         { F18F19, -1 }, { F20F21, -1 }, { F22F23, -1 }, \
253         { F24F25, -1 }, { F26F27, -1 }, { F28F29, -1 }, \
david
1.10
254         { F30/* F31, */ -1 }, \
255         { -1 }, \
256         { -1 }
david
1.8
257
david
1.9
258 #define GCLASS(x)       (x <= I7                ? CLASSA : \
259                         (x <= F30               ? CLASSB : \
david
1.10
260                         (x <= D15               ? CLASSC : \
261                         (x == SP || x == FP     ? CLASSD : 0))))
david
1.1
262 #define PCLASS(p)       (1 << gclass((p)->n_type))
david
1.11
263 #define DECRA(x,y)      (((x) >> (y*7)) & 127)
264 #define ENCRA(x,y)      ((x) << (7+y*7))
david
1.10
265 #define ENCRD(x)        (x)
david
1.1
266
267 int COLORMAP(int cint *r);
FishEye: Open Source License registered to PCC.
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-12-22 16:38 +0100