~helenos-nicf/helenos/nicf

« back to all changes in this revision

Viewing changes to uspace/app/pcc/arch/nova/macdefs.h

  • Committer: Radim Vansa
  • Date: 2011-09-20 21:55:59 UTC
  • mfrom: (697.1.517 HelenOS.mainline)
  • Revision ID: radim.vansa@matfyz.cz-20110920215559-7fjpai6wt5ieurcq
Merge with mainline

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*      $Id: macdefs.h,v 1.2 2007/11/16 22:27:42 gmcgarry Exp $ */
 
2
/*
 
3
 * Copyright (c) 2006 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 Data General Nova.
 
31
 */
 
32
 
 
33
/*
 
34
 * Convert (multi-)character constant to integer.
 
35
 */
 
36
#define makecc(val,i)   lastcon = (lastcon<<8)|(val);
 
37
 
 
38
#define ARGINIT         16      /* adjusted in MD code */
 
39
#define AUTOINIT        16      /* adjusted in MD code */
 
40
 
 
41
/*
 
42
 * Storage space requirements
 
43
 */
 
44
#define SZCHAR          8
 
45
#define SZINT           16
 
46
#define SZFLOAT         32
 
47
#define SZDOUBLE        64
 
48
#define SZLDOUBLE       64
 
49
#define SZLONG          32
 
50
#define SZSHORT         16
 
51
#define SZLONGLONG      32
 
52
#define SZPOINT(t)      16      /* Actually 15 */
 
53
 
 
54
/*
 
55
 * Alignment constraints
 
56
 */
 
57
#define ALCHAR          8
 
58
#define ALINT           16
 
59
#define ALFLOAT         16
 
60
#define ALDOUBLE        16
 
61
#define ALLDOUBLE       16
 
62
#define ALLONG          16
 
63
#define ALLONGLONG      16
 
64
#define ALSHORT         16
 
65
#define ALPOINT         16
 
66
#define ALSTRUCT        16
 
67
#define ALSTACK         16 
 
68
 
 
69
/*
 
70
 * Min/max values.
 
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         MIN_SHORT
 
79
#define MAX_INT         MAX_SHORT
 
80
#define MAX_UNSIGNED    MAX_USHORT
 
81
#define MIN_LONG        0x80000000L
 
82
#define MAX_LONG        0x7fffffffL
 
83
#define MAX_ULONG       0xffffffffUL
 
84
#define MIN_LONGLONG    MIN_LONG
 
85
#define MAX_LONGLONG    MAX_LONG
 
86
#define MAX_ULONGLONG   MAX_ULONG
 
87
 
 
88
/* Default char is unsigned */
 
89
#define CHAR_UNSIGNED
 
90
 
 
91
/*
 
92
 * Use large-enough types.
 
93
 */
 
94
typedef long CONSZ;
 
95
typedef unsigned long U_CONSZ;
 
96
typedef long OFFSZ;
 
97
 
 
98
#define CONFMT  "%ld"           /* format for printing constants */
 
99
#define LABFMT  ".L%d"          /* format for printing labels */
 
100
#define STABLBL ".LL%d"         /* format for stab (debugging) labels */
 
101
#ifdef FORTRAN
 
102
#define XL 8
 
103
#define FLABELFMT "%s:\n"
 
104
#define USETEXT ".text"
 
105
#define USECONST ".data\t0"     /* XXX - fix */
 
106
#define USEBSS  ".data\t1"      /* XXX - fix */
 
107
#define USEINIT ".data\t2"      /* XXX - fix */
 
108
#define MAXREGVAR 3             /* XXX - fix */
 
109
#define BLANKCOMMON "_BLNK_"
 
110
#define MSKIREG  (M(TYSHORT)|M(TYLONG))
 
111
#define TYIREG TYLONG
 
112
#define FSZLENG  FSZLONG
 
113
#define FUDGEOFFSET 1
 
114
#define AUTOREG EBP
 
115
#define ARGREG  EBP
 
116
#define ARGOFFSET 4
 
117
#endif
 
118
 
 
119
#define BACKAUTO                /* stack grows negatively for automatics */
 
120
#define BACKTEMP                /* stack grows negatively for temporaries */
 
121
 
 
122
#undef  FIELDOPS                /* no bit-field instructions */
 
123
#define RTOLBYTES               /* bytes are numbered right to left */
 
124
 
 
125
#define ENUMSIZE(high,low) INT  /* enums are always stored in full int */
 
126
 
 
127
/* Definitions mostly used in pass2 */
 
128
 
 
129
#define BYTEOFF(x)      ((x)&01)
 
130
#define wdal(k)         (BYTEOFF(k)==0)
 
131
#define BITOOR(x)       (x)     /* bit offset to oreg offset XXX die! */
 
132
 
 
133
#define STOARG(p)
 
134
#define STOFARG(p)
 
135
#define STOSTARG(p)
 
136
#define genfcall(a,b)   gencall(a,b)
 
137
 
 
138
#define szty(t) (((t) == DOUBLE || (t) == LDOUBLE) ? 4 : \
 
139
        ((t) == LONGLONG || (t) == ULONGLONG || \
 
140
         (t) == LONG || (t) == ULONG) ? 2 : 1)
 
141
 
 
142
/*
 
143
 * The Nova has three register classes.  Note that the space used in 
 
144
 * zero page is considered registers.
 
145
 * Register 28 and 29 are FP and SP.
 
146
 *
 
147
 * The classes used on Nova are:
 
148
 *      A - AC0-AC3 (as non-index registers)    : reg 0-3
 
149
 *      B - AC2-AC3 (as index registers)        : reg 2-3
 
150
 *      C - address 50-77 in memory             : reg 4-27
 
151
 */
 
152
#define MAXREGS 30      /* 0-29 */
 
153
 
 
154
#define RSTATUS \
 
155
        SAREG|TEMPREG, SAREG|TEMPREG, SAREG|SBREG|TEMPREG, SAREG|SBREG|TEMPREG,\
 
156
        SCREG|TEMPREG, SCREG|TEMPREG, SCREG|TEMPREG, SCREG|TEMPREG,     \
 
157
        SCREG|TEMPREG, SCREG|TEMPREG, SCREG|TEMPREG, SCREG|TEMPREG,     \
 
158
        SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG,     \
 
159
        SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG,     \
 
160
        SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG,     \
 
161
        SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG, SCREG|PERMREG,     \
 
162
        0,      0
 
163
 
 
164
#define ROVERLAP \
 
165
        { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \
 
166
        { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \
 
167
        { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \
 
168
        { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 },
 
169
 
 
170
 
 
171
/* Return a register class based on the type of the node */
 
172
/* all types in all classes */
 
173
#define PCLASS(p) (SAREG|SBREG|SCREG)
 
174
 
 
175
#define NUMCLASS        4       /* highest number of reg classes used */
 
176
                                /* XXX - must be 4 */
 
177
 
 
178
int COLORMAP(int c, int *r);
 
179
#define GCLASS(x) (x < 4 ? CLASSA : CLASSC)
 
180
#define DECRA(x,y)      (((x) >> (y*6)) & 63)   /* decode encoded regs */
 
181
#define ENCRD(x)        (x)             /* Encode dest reg in n_reg */
 
182
#define ENCRA1(x)       ((x) << 6)      /* A1 */
 
183
#define ENCRA2(x)       ((x) << 12)     /* A2 */
 
184
#define ENCRA(x,y)      ((x) << (6+y*6))        /* encode regs in int */
 
185
#define RETREG(x)       (0) /* ? Sanity */
 
186
 
 
187
/* XXX - to die */
 
188
#define FPREG   28      /* frame pointer */
 
189
#define STKREG  29      /* stack pointer */