Quick Search:

View

Revision:
Expand:  
Changeset: MAIN:ragge:20140603201950

Diff

Diff from 1.8 to:

Annotations

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

Annotated File View

ragge
1.8
1 /*      $Id: macdefs.h,v 1.8 2014/06/03 20:19:50 ragge Exp $    */
ragge
1.1
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  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 /*
28  * Machine-dependent defines for Data General Nova.
29  */
30
31 /*
32  * Convert (multi-)character constant to integer.
33  */
34 #define makecc(val,i)   lastcon = (lastcon<<8)|(val);
35
36 /*
37  * Storage space requirements
38  */
39 #define SZCHAR          8
ragge
1.6
40 #define SZBOOL          8
ragge
1.1
41 #define SZINT           16
42 #define SZFLOAT         32
43 #define SZDOUBLE        64
44 #define SZLDOUBLE       64
45 #define SZLONG          32
46 #define SZSHORT         16
ragge
1.6
47 #define SZLONGLONG      64
ragge
1.1
48 #define SZPOINT(t)      16      /* Actually 15 */
49
50 /*
51  * Alignment constraints
52  */
53 #define ALCHAR          8
ragge
1.6
54 #define ALBOOL          8
ragge
1.1
55 #define ALINT           16
56 #define ALFLOAT         16
57 #define ALDOUBLE        16
58 #define ALLDOUBLE       16
59 #define ALLONG          16
60 #define ALLONGLONG      16
61 #define ALSHORT         16
62 #define ALPOINT         16
63 #define ALSTRUCT        16
64 #define ALSTACK         16 
65
66 /*
67  * Min/max values.
68  */
69 #define MIN_CHAR        -128
70 #define MAX_CHAR        127
71 #define MAX_UCHAR       255
72 #define MIN_SHORT       -32768
73 #define MAX_SHORT       32767
74 #define MAX_USHORT      65535
75 #define MIN_INT         MIN_SHORT
76 #define MAX_INT         MAX_SHORT
77 #define MAX_UNSIGNED    MAX_USHORT
78 #define MIN_LONG        0x80000000L
79 #define MAX_LONG        0x7fffffffL
80 #define MAX_ULONG       0xffffffffUL
ragge
1.8
81 #define MIN_LONGLONG    0x8000000000000000LL
82 #define MAX_LONGLONG    0x7fffffffffffffffLL
83 #define MAX_ULONGLONG   0xffffffffffffffffULL
ragge
1.1
84
85 /* Default char is unsigned */
86 #define CHAR_UNSIGNED
ragge
1.8
87 #define WORD_ADDRESSED
ragge
1.6
88 #define BOOL_TYPE       UCHAR
89 #define MYALIGN         /* provide private alignment function */
ragge
1.1
90
91 /*
92  * Use large-enough types.
93  */
94 typedef long CONSZ;
95 typedef unsigned long U_CONSZ;
96 typedef long OFFSZ;
97
ragge
1.8
98 #define CONFMT  "0%lo"          /* format for printing constants */
99 #define LABFMT  "L%d"           /* format for printing labels */
100 #define STABLBL "LL%d"          /* format for stab (debugging) labels */
ragge
1.1
101
102 #define BACKAUTO                /* stack grows negatively for automatics */
103 #define BACKTEMP                /* stack grows negatively for temporaries */
ragge
1.8
104 #define ARGINIT         0       /* first arg at 0 offset */
105 #define AUTOINIT        32      /* first var below 32-bit offset */
106
ragge
1.1
107
ragge
1.8
108 #undef  FIELDOPS        /* no bit-field instructions */
109 #define TARGET_ENDIAN   TARGET_BE
ragge
1.1
110
111 /* Definitions mostly used in pass2 */
112
113 #define BYTEOFF(x)      ((x)&01)
114 #define wdal(k)         (BYTEOFF(k)==0)
115
ragge
1.8
116 #define szty(t) ((t) == DOUBLE || (t) == LDOUBLE || \
117         (t) == LONGLONG || (t) == ULONGLONG ? 4 : \
118         ((t) == LONG || (t) == ULONG || (t) == FLOAT) ? 2 : 1)
ragge
1.1
119
120 /*
ragge
1.8
121  * The Nova has two register classes.  Note that the space used in 
122  * zero page is considered stack.
123  * Register 6 and 7 are FP and SP (in zero page).
ragge
1.1
124  *
125  * The classes used on Nova are:
126  *      A - AC0-AC3 (as non-index registers)    : reg 0-3
ragge
1.8
127  *      B - AC2-AC3 (as index registers)        : reg 4-5
128  * FP/SP as 6/7.
ragge
1.1
129  */
ragge
1.8
130 #define MAXREGS 8       /* 0-29 */
ragge
1.1
131
132 #define RSTATUS \
ragge
1.8
133         SAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREGSAREG|TEMPREG,     \
134         SBREG|TEMPREGSBREG|TEMPREG00
ragge
1.1
135
136 #define ROVERLAP \
ragge
1.8
137         { -1 }, { -1 }, { 4, -1 }, { 5, -1 }, { 2, -1 }, { 3, -1 },     \
138         { -1 }, { -1 }
ragge
1.1
139
140 /* Return a register class based on the type of the node */
ragge
1.8
141 /* Used in tshape, avoid matching fp/sp as reg */
142 #define PCLASS(p) (p->n_op == REG && regno(p) > 5 ? 0 : \
143         ISPTR(p->n_type) ? SBREG : SAREG)
ragge
1.1
144
ragge
1.8
145 #define NUMCLASS        2       /* highest number of reg classes used */
ragge
1.1
146
147 int COLORMAP(int cint *r);
ragge
1.8
148 #define GCLASS(x) (x < 4 ? CLASSA : CLASSB)
ragge
1.1
149 #define DECRA(x,y)      (((x) >> (y*6)) & 63)   /* decode encoded regs */
150 #define ENCRD(x)        (x)             /* Encode dest reg in n_reg */
151 #define ENCRA1(x)       ((x) << 6)      /* A1 */
152 #define ENCRA2(x)       ((x) << 12)     /* A2 */
153 #define ENCRA(x,y)      ((x) << (6+y*6))        /* encode regs in int */
154 #define RETREG(x)       (0) /* ? Sanity */
155
ragge
1.8
156 #define FPREG   6       /* frame pointer */
157 #define STKREG  7       /* stack pointer */
158
159 #define MAXZP   030     /* number of locations used as stack */
160 #define ZPOFF   050     /* offset of zero page regs */
161
162 #define MYSTOREMOD
163 #define MYLONGTEMP(p,w) {                                       \
164         if (w->r_class == 0) {                                  \
165                 w->r_color = freetemp(szty(p->n_type));         \
166                 w->r_class = FPREG;                             \
167         }                                                       \
168         if (w->r_color < MAXZP*2) { /* color in bytes */        \
169                 p->n_op = NAME;                                 \
170                 p->n_lval = w->r_color/2 + ZPOFF;               \
171                 p->n_name = "";                                 \
172                 break;                                          \
173         }                                                       \
174 }
175
176 /*
177  * special shapes for sp/fp.
178  */
179 #define SLDFPSP         (MAXSPECIAL+1)  /* load fp or sp */
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-23 06:07 +0100