source: mainline/uspace/app/pcc/arch/hppa/macdefs.h@ 0395a7b

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 0395a7b was a7de7182, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 14 years ago

Added pcc source tree (contents of pcc-1.0.0.tgz)

  • Property mode set to 100644
File size: 12.4 KB
Line 
1/* $OpenBSD$ */
2
3/*
4 * Copyright (c) 2007 Michael Shalayeff
5 * Copyright (c) 2003 Anders Magnusson (ragge@ludd.luth.se).
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31/*
32 * Convert (multi-)character constant to integer.
33 */
34#define makecc(val,i) (lastcon = (lastcon<<8)|((val<<24)>>24))
35
36#define ARGINIT (32*8) /* bits below fp where args start */
37#define AUTOINIT (4*8) /* bits above fp where locals start */
38
39/*
40 * storage sizes
41 */
42#define SZCHAR 8
43#define SZBOOL 8
44#define SZINT 32
45#define SZFLOAT 32
46#define SZDOUBLE 64
47#define SZLDOUBLE 64 /* or later 128 */
48#define SZLONG 32
49#define SZSHORT 16
50#define SZLONGLONG 64
51#define SZPOINT(t) 32
52
53/*
54 * alignment requirements
55 */
56#define ALCHAR 8
57#define ALBOOL 8
58#define ALINT 32
59#define ALFLOAT 32
60#define ALDOUBLE 64
61#define ALLDOUBLE 64 /* 128 later */
62#define ALLONG 32
63#define ALLONGLONG 32
64#define ALSHORT 16
65#define ALPOINT 32
66#define ALSTRUCT 32
67#define ALSTACK 64
68
69/*
70 * type value limits
71 */
72#define MIN_CHAR -128
73#define MAX_CHAR 127
74#define MAX_UCHAR 255
75#define MIN_SHORT -32768
76#define MAX_SHORT 32767
77#define MAX_USHORT 65535
78#define MIN_INT (-0x7fffffff-1)
79#define MAX_INT 0x7fffffff
80#define MAX_UNSIGNED 0xffffffff
81#define MIN_LONG MIN_INT
82#define MAX_LONG MAX_INT
83#define MAX_ULONG MAX_UNSIGNED
84#define MIN_LONGLONG (-0x7fffffffffffffffLL-1)
85#define MAX_LONGLONG 0x7fffffffffffffffLL
86#define MAX_ULONGLONG 0xffffffffffffffffULL
87
88#undef CHAR_UNSIGNED
89#define BOOL_TYPE CHAR
90#define ENUMSIZE(high,low) INT
91
92typedef long long CONSZ;
93typedef unsigned long long U_CONSZ;
94typedef long long OFFSZ;
95
96#define CONFMT "%lld" /* format for printing constants */
97#define LABFMT ".L%d" /* format for printing labels */
98#define STABLBL ".LL%d" /* format for stab (debugging) labels */
99
100#undef BACKAUTO /* stack grows upwards */
101#undef BACKTEMP /* stack grows upwards */
102
103#define FIELDOPS /* have bit field ops */
104#define LTORBYTES /* big endian */
105
106#define BYTEOFF(x) ((x)&03)
107#define wdal(k) (BYTEOFF(k)==0)
108#define BITOOR(x) (x) /* bit offset to oreg offset XXX die! */
109
110#define STOARG(p)
111#define STOFARG(p)
112#define STOSTARG(p)
113
114#define szty(t) (((t) == DOUBLE || (t) == LONGLONG || (t) == ULONGLONG) ? 2 : \
115 (t) == LDOUBLE ? 2 : 1)
116
117#define R0 0
118#define R1 1
119#define RP 2
120#define FP 3
121#define R4 4
122#define R5 5
123#define R6 6
124#define R7 7
125#define R8 8
126#define R9 9
127#define R10 10
128#define R11 11
129#define R12 12
130#define R13 13
131#define R14 14
132#define R15 15
133#define R16 16
134#define R17 17
135#define R18 18
136#define T4 19
137#define T3 20
138#define T2 21
139#define T1 22
140#define ARG3 23
141#define ARG2 24
142#define ARG1 25
143#define ARG0 26
144#define DP 27
145#define RET0 28
146#define RET1 29
147#define SP 30
148#define R31 31
149
150/* double regs overlay */
151#define RD0 32 /* r0:r0 */
152#define RD1 33 /* r1:r31 */
153#define RD2 34 /* r1:t4 */
154#define RD3 35 /* r1:t3 */
155#define RD4 36 /* r1:t2 */
156#define RD5 37 /* r1:t1 */
157#define RD6 38 /* r31:t4 */
158#define RD7 39 /* r31:t3 */
159#define RD8 40 /* r31:t2 */
160#define RD9 41 /* r31:t1 */
161#define RD10 42 /* r4:r18 */
162#define RD11 43 /* r5:r4 */
163#define RD12 44 /* r6:r5 */
164#define RD13 45 /* r7:r6 */
165#define RD14 46 /* r8:r7 */
166#define RD15 47 /* r9:r8 */
167#define RD16 48 /* r10:r9 */
168#define RD17 49 /* r11:r10 */
169#define RD18 50 /* r12:r11 */
170#define RD19 51 /* r13:r12 */
171#define RD20 52 /* r14:r13 */
172#define RD21 53 /* r15:r14 */
173#define RD22 54 /* r16:r15 */
174#define RD23 55 /* r17:r16 */
175#define RD24 56 /* r18:r17 */
176#define TD4 57 /* t1:t4 */
177#define TD3 58 /* t4:t3 */
178#define TD2 59 /* t3:t2 */
179#define TD1 60 /* t2:t1 */
180#define AD2 61 /* arg3:arg2 */
181#define AD1 62 /* arg1:arg0 */
182#define RETD0 63 /* ret1:ret0 */
183
184/* FPU regs */
185#define FR0 64
186#define FR4 65
187#define FR5 66
188#define FR6 67
189#define FR7 68
190#define FR8 69
191#define FR9 70
192#define FR10 71
193#define FR11 72
194#define FR12 73
195#define FR13 74
196#define FR14 75
197#define FR15 76
198#define FR16 77
199#define FR17 78
200#define FR18 79
201#define FR19 80
202#define FR20 81
203#define FR21 82
204#define FR22 83
205#define FR23 84
206#define FR24 85
207#define FR25 86
208#define FR26 87
209#define FR27 88
210#define FR28 89
211#define FR29 90
212#define FR30 91
213#define FR31 92
214
215#define FR0L 93
216#define FR0R 94
217#define FR4L 95
218#define FR4R 96
219#define FR5L 97
220#define FR5R 98
221#define FR6L 99
222#define FR6R 100
223#define FR7L 101
224#define FR7R 102
225#define FR8L 103
226#define FR8R 104
227#define FR9L 105
228#define FR9R 106
229#define FR10L 107
230#define FR10R 108
231#define FR11L 109
232#define FR11R 110
233#define FR12L 111
234#define FR12R 112
235#define FR13L 113
236#define FR13R 114
237#define FR14L 115
238#define FR14R 116
239#define FR15L 117
240#define FR15R 118
241#define FR16L 119
242#define FR16R 120
243#define FR17L 121
244#define FR17R 122
245#define FR18L 123
246#define FR18R 124
247#ifdef __hppa64__
248#define FR19L 125
249#define FR19R 126
250#define FR20L 127
251#define FR20R 128
252#define FR21L 129
253#define FR21R 130
254#define FR22L 131
255#define FR22R 132
256#define FR23L 133
257#define FR23R 134
258#define FR24L 135
259#define FR24R 136
260#define FR25L 137
261#define FR25R 138
262#define FR26L 139
263#define FR26R 140
264#define FR27L 141
265#define FR27R 142
266#define FR28L 143
267#define FR28R 144
268#define FR29L 145
269#define FR29R 146
270#define FR30L 147
271#define FR30R 148
272#define FR31L 149
273#define FR31R 150
274
275#define MAXREGS 151
276#else
277#define MAXREGS 125
278#endif
279
280#define RSTATUS \
281 0, SAREG|TEMPREG, 0, 0, SAREG|PERMREG, SAREG|PERMREG, \
282 SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, \
283 SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, \
284 SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, \
285 SAREG|PERMREG, \
286 SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \
287 SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \
288 0, SAREG|TEMPREG, SAREG|TEMPREG, 0, SAREG|TEMPREG, \
289 /* double overlays */ \
290 0, \
291 SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, \
292 SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, \
293 SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, \
294 SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, \
295 /* double-precision floats */ \
296 0, \
297 SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, \
298 SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, \
299 SDREG|PERMREG, SDREG|PERMREG, SDREG|PERMREG, SDREG|PERMREG, \
300 SDREG|PERMREG, SDREG|PERMREG, SDREG|PERMREG, SDREG|PERMREG, \
301 SDREG|PERMREG, SDREG|PERMREG, \
302 SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, \
303 SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, SDREG|TEMPREG, \
304 SDREG|TEMPREG, SDREG|TEMPREG, \
305 /* single-precision floats */ \
306 0, 0, \
307 SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, \
308 SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, \
309 SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, \
310 SCREG, SCREG, SCREG, SCREG, SCREG, SCREG,
311#ifdef __hppa64__
312 SCREG, SCREG, \
313 SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, \
314 SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, \
315 SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG,
316#endif
317
318#define ROVERLAP \
319 { -1 }, \
320 { RD1, RD2, RD3, RD4, RD5, -1 },\
321 { -1 }, { -1 }, \
322 { RD10, RD11, -1 }, \
323 { RD11, RD12, -1 }, \
324 { RD12, RD13, -1 }, \
325 { RD13, RD14, -1 }, \
326 { RD14, RD15, -1 }, \
327 { RD15, RD16, -1 }, \
328 { RD16, RD17, -1 }, \
329 { RD17, RD18, -1 }, \
330 { RD18, RD19, -1 }, \
331 { RD19, RD20, -1 }, \
332 { RD20, RD21, -1 }, \
333 { RD21, RD22, -1 }, \
334 { RD22, RD23, -1 }, \
335 { RD23, RD24, -1 }, \
336 { RD24, RD10, -1 }, \
337 { TD1, TD4, -1 }, \
338 { TD3, TD2, -1 }, \
339 { TD1, TD2, -1 }, \
340 { TD1, TD4, -1 }, \
341 { AD2, -1 }, { AD2, -1 }, \
342 { AD1, -1 }, { AD1, -1 }, \
343 { -1 }, \
344 { RETD0, -1 }, { RETD0, -1 }, \
345 { -1 }, \
346 { RD1, RD5, RD6, RD7, RD8, -1 },\
347 { -1 }, \
348 { R1, R31, -1 }, \
349 { R1, T4, -1 }, \
350 { R1, T3, -1 }, \
351 { R1, T2, -1 }, \
352 { R1, T1, -1 }, \
353 { R31, T4, -1 }, \
354 { R31, T3, -1 }, \
355 { R31, T2, -1 }, \
356 { R31, T1, -1 }, \
357 { R4, R18, -1 }, \
358 { R5, R4, -1 }, \
359 { R6, R5, -1 }, \
360 { R7, R6, -1 }, \
361 { R8, R7, -1 }, \
362 { R9, R8, -1 }, \
363 { R10, R9, -1 }, \
364 { R11, R10, -1 }, \
365 { R12, R11, -1 }, \
366 { R13, R12, -1 }, \
367 { R14, R15, -1 }, \
368 { R15, R14, -1 }, \
369 { R16, R15, -1 }, \
370 { R17, R16, -1 }, \
371 { R18, R17, -1 }, \
372 { T1, T4, -1 }, \
373 { T4, T3, -1 }, \
374 { T3, T2, -1 }, \
375 { T2, T1, -1 }, \
376 { ARG3, ARG2, -1 }, \
377 { ARG1, ARG0, -1 }, \
378 { RET1, RET0, -1 }, \
379 { -1 }, \
380 { FR4L, FR4R, -1 }, \
381 { FR5L, FR5R, -1 }, \
382 { FR6L, FR6R, -1 }, \
383 { FR7L, FR7R, -1 }, \
384 { FR8L, FR8R, -1 }, \
385 { FR9L, FR9R, -1 }, \
386 { FR10L, FR10R, -1 }, \
387 { FR11L, FR11R, -1 }, \
388 { FR12L, FR12R, -1 }, \
389 { FR13L, FR13R, -1 }, \
390 { FR14L, FR14R, -1 }, \
391 { FR15L, FR15R, -1 }, \
392 { FR16L, FR16R, -1 }, \
393 { FR17L, FR17R, -1 }, \
394 { FR18L, FR18R, -1 }, \
395 { -1 }, \
396 { -1 }, \
397 { -1 }, \
398 { -1 }, \
399 { -1 }, \
400 { -1 }, \
401 { -1 }, \
402 { -1 }, \
403 { -1 }, \
404 { -1 }, \
405 { -1 }, \
406 { -1 }, \
407 { -1 }, \
408 { -1 }, { -1 }, \
409 { FR4, -1 }, { FR4, -1 }, \
410 { FR5, -1 }, { FR5, -1 }, \
411 { FR6, -1 }, { FR6, -1 }, \
412 { FR7, -1 }, { FR7, -1 }, \
413 { FR8, -1 }, { FR8, -1 }, \
414 { FR9, -1 }, { FR9, -1 }, \
415 { FR10, -1 }, { FR10, -1 }, \
416 { FR11, -1 }, { FR11, -1 }, \
417 { FR12, -1 }, { FR12, -1 }, \
418 { FR13, -1 }, { FR13, -1 }, \
419 { FR14, -1 }, { FR14, -1 }, \
420 { FR15, -1 }, { FR15, -1 }, \
421 { FR16, -1 }, { FR16, -1 }, \
422 { FR17, -1 }, { FR17, -1 }, \
423 { FR18, -1 }, { FR18, -1 },
424#ifdef __hppa64__
425 { FR19, -1 }, { FR19, -1 }, \
426 { FR20, -1 }, { FR20, -1 }, \
427 { FR21, -1 }, { FR21, -1 }, \
428 { FR22, -1 }, { FR22, -1 }, \
429 { FR23, -1 }, { FR23, -1 }, \
430 { FR24, -1 }, { FR24, -1 }, \
431 { FR25, -1 }, { FR25, -1 }, \
432 { FR26, -1 }, { FR26, -1 }, \
433 { FR27, -1 }, { FR27, -1 }, \
434 { FR28, -1 }, { FR28, -1 }, \
435 { FR29, -1 }, { FR29, -1 }, \
436 { FR30, -1 }, { FR30, -1 }, \
437 { FR31, -1 }, { FR31, -1 },
438#endif
439
440#define PCLASS(p) \
441 (p->n_type == LONGLONG || p->n_type == ULONGLONG ? SBREG : \
442 (p->n_type == FLOAT ? SCREG : \
443 (p->n_type == DOUBLE || p->n_type == LDOUBLE ? SDREG : SAREG)))
444
445#define NUMCLASS 4 /* highest number of reg classes used */
446
447int COLORMAP(int c, int *r);
448#define PERMTYPE(x) ((x) < 32? INT : ((x) < 64? LONGLONG : ((x) < 93? LDOUBLE : FLOAT)))
449#define GCLASS(x) ((x) < 32? CLASSA : ((x) < 64? CLASSB : ((x) < 93? CLASSD : CLASSC)))
450#define DECRA(x,y) (((x) >> (y*8)) & 255) /* decode encoded regs */
451#define ENCRD(x) (x) /* Encode dest reg in n_reg */
452#define ENCRA1(x) ((x) << 8) /* A1 */
453#define ENCRA2(x) ((x) << 16) /* A2 */
454#define ENCRA(x,y) ((x) << (8+y*8)) /* encode regs in int */
455#define RETREG(x) (x == LONGLONG || x == ULONGLONG ? RETD0 : \
456 x == FLOAT? FR4L : \
457 x == DOUBLE || x == LDOUBLE ? FR4 : RET0)
458
459#define FPREG FP /* frame pointer */
460#define STKREG SP /* stack pointer */
461
462#define MYREADER(p) myreader(p)
463#define MYCANON(p) mycanon(p)
464#define MYOPTIM
465
466#define SFUNCALL (MAXSPECIAL+1) /* struct assign after function call */
467#define SPCNHI (MAXSPECIAL+2) /* high 21bits constant */
468#define SPCON (MAXSPECIAL+3) /* smaller constant */
469#define SPICON (MAXSPECIAL+4) /* even smaller constant */
470#define SPCNHW (MAXSPECIAL+5) /* LL const w/ 0 in low word */
471#define SPCNLW (MAXSPECIAL+6) /* LL const w/ 0 in high word */
472#define SPIMM (MAXSPECIAL+7) /* immidiate const for depi/comib */
473#define SPNAME (MAXSPECIAL+8) /* ext symbol reference load/store */
Note: See TracBrowser for help on using the repository browser.