OpenCores
URL https://opencores.org/ocsvn/thor/thor/trunk

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64v5/] [software/] [CC64/] [source/] [glo.h] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 robfinch
#ifndef _CGBLDEC_H
2
#define _CGBLDEC_H
3
 
4
// ============================================================================
5
//        __
6
//   \\__/ o\    (C) 2012-2018  Robert Finch, Waterloo
7
//    \  __ /    All rights reserved.
8
//     \/_//     robfinch<remove>@finitron.ca
9
//       ||
10
//
11
// CC64 - 'C' derived language compiler
12
//  - 64 bit CPU
13
//
14
// This source file is free software: you can redistribute it and/or modify 
15
// it under the terms of the GNU Lesser General Public License as published 
16
// by the Free Software Foundation, either version 3 of the License, or     
17
// (at your option) any later version.                                      
18
//                                                                          
19
// This source file is distributed in the hope that it will be useful,      
20
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
21
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
22
// GNU General Public License for more details.                             
23
//                                                                          
24
// You should have received a copy of the GNU General Public License        
25
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
26
//                                                                          
27
// ============================================================================
28
//
29
/*      global ParseSpecifierarations     */
30
#define THOR            0
31
#define TABLE888        888
32
#define RAPTOR64        64
33
#define W65C816     816
34
#define FISA64      164
35
#define DSD7        7
36
#define isThor          (gCpu==THOR)
37
#define isTable888      (gCpu==TABLE888)
38
#define isRaptor64      (gCpu==RAPTOR64)
39
#define is816       (gCpu==W65C816)
40
#define isFISA64    (gCpu==FISA64)
41
#define isDSD7      (gCpu==DSD7)
42
//#define DOTRACE       1
43
#ifdef DOTRACE
44
#define TRACE(x)        x
45
#else
46
#define TRACE(x)
47
#endif
48
 
49
extern CPU cpu;
50
extern int pass;
51
extern int maxPn;
52
extern int hook_predreg;
53
extern int gCpu;
54
extern int regGP;
55
extern int regTP;
56
extern int regSP;
57
extern int regFP;
58
extern int regLR;
59
extern int regXLR;
60
extern int regPC;
61
extern int regCLP;
62
extern int regPP;
63
extern int regZero;
64
extern int regFirstTemp;
65
extern int regLastTemp;
66
extern int regFirstRegvar;
67
extern int regLastRegvar;
68
extern int regFirstArg;
69
extern int regLastArg;
70
extern int pregGP;
71
extern int pregTP;
72
extern int pregSP;
73
extern int pregFP;
74
extern int pregLR;
75
extern int pregXLR;
76
extern int pregPC;
77
extern int pregCLP;
78
extern int pregPP;
79
extern int pregZero;
80
extern int pregFirstTemp;
81
extern int pregLastTemp;
82
extern int pregFirstRegvar;
83
extern int pregLastRegvar;
84
extern int pregFirstArg;
85
extern int pregLastArg;
86
extern int opt_vreg;
87
extern int farcode;
88
extern int wcharSupport;
89
extern int verbose;
90
extern int use_gp;
91
extern int address_bits;
92
extern std::ifstream *ifs;
93
extern txtoStream ofs;
94
extern txtoStream lfs;
95
extern txtoStream dfs;
96
extern int mangledNames;
97
extern int sizeOfWord;
98
extern int sizeOfPtr;
99
extern int sizeOfFP;
100
extern int sizeOfFPS;
101
extern int sizeOfFPT;
102
extern int sizeOfFPD;
103
extern int sizeOfFPQ;
104
extern int maxVL;
105
 
106
/*
107
extern FILE             *input,
108
                        *list,
109
                        *output;
110
*/
111
extern FILE *outputG;
112
extern int incldepth;
113
extern int              lineno;
114
extern int              nextlabel;
115
extern int              lastch;
116
extern int              lastst;
117
extern char             lastid[128];
118
extern char             lastkw[128];
119
extern char             laststr[MAX_STLP1];
120
extern int64_t  ival;
121
extern double           rval;
122
extern Float128                 rval128;
123
extern char float_precision;
124
extern int parseEsc;
125
//extern FloatTriple      FAC1,FAC2;
126
 
127
extern TABLE            gsyms[257],
128
                        lsyms;
129
extern TABLE            tagtable;
130
extern SYM              *lasthead;
131
extern struct slit      *strtab;
132
extern struct clit              *casetab;
133
extern Float128             *quadtab;
134
extern int              lc_static;
135
extern int              lc_auto;
136
extern int                              lc_thread;
137
extern Statement     *bodyptr;       /* parse tree for function */
138
extern int              global_flag;
139
extern TABLE            defsyms;
140
extern int64_t          save_mask;      /* register save mask */
141
extern int64_t          fpsave_mask;
142
extern int                              bsave_mask;
143
extern int uctran_off;
144
extern int isKernel;
145
extern int isPascal;
146
extern int isOscall;
147
extern int isInterrupt;
148
extern int isTask;
149
extern int isNocall;
150
extern bool isRegister;
151
extern int asmblock;
152
extern int optimize;
153
extern int opt_noregs;
154
extern int opt_nopeep;
155
extern int opt_noexpr;
156
extern int opt_nocgo;
157
extern int opt_size;
158
extern int exceptions;
159
extern int mixedSource;
160
extern Function *currentFn;
161
extern int iflevel;
162
extern int foreverlevel;
163
extern int looplevel;
164
extern int loopexit;
165
extern short int loop_active;
166
extern int stmtdepth;
167
extern int regmask;
168
extern int bregmask;
169
extern Statement *currentStmt;
170
extern bool dogen;
171
extern OCODE *peep_head;
172
extern OCODE *peep_tail;
173
 
174
extern TYP stdvoid;
175
extern TYP stdint;
176
extern TYP stduint;
177
extern TYP stdlong;
178
extern TYP stdulong;
179
extern TYP stdshort;
180
extern TYP stdushort;
181
extern TYP stdchar;
182
extern TYP stduchar;
183
extern TYP stdbyte;
184
extern TYP stdubyte;
185
extern TYP stdstring;
186
extern TYP stddbl;
187
extern TYP stdtriple;
188
extern TYP stdflt;
189
extern TYP stddouble;
190
extern TYP stdfunc;
191
extern TYP stdexception;
192
extern TYP stdconst;
193
extern TYP stdquad;
194
extern TYP stdvector;
195
extern TYP *stdvectormask;
196
 
197
extern std::string *declid;
198
extern Compiler compiler;
199
extern int64_t genst_cumulative;
200
 
201
extern int throwlab;
202
extern int breaklab;
203
extern int contlab;
204
extern int retlab;
205
extern int lastsph;
206
extern char *semaphores[20];
207
extern unsigned int ArgRegCount;
208
extern bool isFuncBody;
209
extern int isTypedef;
210
extern bool isUnion;
211
extern int isUnsigned;
212
extern int isSigned;
213
extern int isVolatile;
214
extern int isVirtual;
215
extern bool isInline;
216
extern int isIO;
217
extern int isConst;
218
extern bool isRegister;
219
extern bool isAuto;
220
extern bool isFuncBody;
221
extern bool isFuncPtr;
222
extern char *stkname;
223
extern int nparms;
224
extern int funcdecl;
225
extern Stringx names[20];
226
extern int isStructDecl;
227
extern int worstAlignment;
228
extern Map map;
229
extern int optimized;
230
 
231
// Analyze.c
232
extern short int csendx;
233
extern int equalnode(ENODE *node1, ENODE *node2);
234
extern int bsort(CSE **list);
235
// CMain.c
236
extern void closefiles();
237
 
238
extern void error(int n);
239
extern void needpunc(enum e_sym p,int);
240
// Memmgt.c
241
extern void *allocx(int);
242
extern char *xalloc(int);
243
extern SYM *allocSYM();
244
extern TYP *allocTYP();
245
extern Operand *allocOperand();
246
extern ENODE *allocEnode();
247
extern CSE *allocCSE();
248
extern void ReleaseGlobalMemory();
249
extern void ReleaseLocalMemory();
250
 
251
// NextToken.c
252
extern void initsym();
253
extern void NextToken();
254
extern int getch();
255
extern int my_isspace(char c);
256
extern void getbase(int64_t);
257
extern void SkipSpaces();
258
 
259
// Stmt.c
260
extern Statement *ParseCompoundStatement();
261
 
262
extern void GenerateDiadic(int op, int len, Operand *ap1,Operand *ap2);
263
// Symbol.c
264
extern SYM *gsearch(std::string na);
265
extern SYM *search(std::string na,TABLE *thead);
266
extern void insert(SYM* sp, TABLE *table);
267
 
268
// ParseFunction.c
269
extern SYM *BuildParameterList(SYM *sp, int *);
270
 
271
extern char *my_strdup(char *);
272
// Decl.c
273
extern int imax(int i, int j);
274
extern TYP *maketype(int bt, int siz);
275
extern void dodecl(int defclass);
276
extern int ParseParameterDeclarations(int);
277
extern void ParseAutoDeclarations(SYM *sym, TABLE *table);
278
extern int ParseSpecifier(TABLE *table);
279
extern SYM* ParseDeclarationPrefix(char isUnion);
280
extern int ParseStructDeclaration(int);
281
extern void ParseEnumerationList(TABLE *table);
282
extern int ParseFunction(SYM *sp);
283
extern int declare(SYM *sym,TABLE *table,int al,int ilc,int ztype);
284
extern void initstack();
285
extern int getline(int listflag);
286
extern void compile();
287
 
288
// Init.c
289
extern void doinit(SYM *sp);
290
// Func.c
291
extern SYM *makeint(char *);
292
extern void funcbody(SYM *sp);
293
// Intexpr.c
294
extern int64_t GetIntegerExpression(ENODE **p);
295
extern Float128 *GetFloatExpression(ENODE **pnode);
296
// Expr.c
297
extern SYM *makeStructPtr(std::string name);
298
extern ENODE *makenode(int nt, ENODE *v1, ENODE *v2);
299
extern ENODE *makeinode(int nt, int64_t v1);
300
extern ENODE *makesnode(int nt, std::string *v1, std::string *v2, int64_t i);
301
extern TYP *nameref(ENODE **node,int);
302
extern TYP *forcefit(ENODE **node1,TYP *tp1,ENODE **node2,TYP *tp2,bool);
303
extern TYP *expression(ENODE **node);
304
extern int IsLValue(ENODE *node);
305
extern Operand *GenerateExpression(ENODE *node, int flags, int size);
306
extern int GetNaturalSize(ENODE *node);
307
extern TYP *asnop(ENODE **node);
308
extern TYP *NonCommaExpression(ENODE **);
309
// Optimize.c
310
extern void opt_const(ENODE **node);
311
// GenerateStatement.c
312
//extern void GenerateFunction(Statement *stmt);
313
extern void GenerateIntoff(Statement *stmt);
314
extern void GenerateInton(Statement *stmt);
315
extern void GenerateStop(Statement *stmt);
316
extern void gen_regrestore();
317
extern Operand *make_direct(int i);
318
extern Operand *makereg(int r);
319
extern Operand *makevreg(int r);
320
extern Operand *makefpreg(int t);
321
extern Operand *makebreg(int r);
322
extern Operand *makepred(int r);
323
extern int popcnt(int64_t m);
324
// Outcode.c
325
extern void gen_strlab(char *s);
326
extern void dumplits();
327
extern int  stringlit(char *s);
328
extern int quadlit(Float128 *f128);
329
extern void nl();
330
extern void seg(int sg, int algn);
331
extern void cseg();
332
extern void dseg();
333
extern void tseg();
334
//extern void put_code(int op, int len,Operand *aps, Operand *apd, Operand *);
335
extern void put_code(OCODE *);
336
extern char *put_label(int lab, char*, char*, char);
337
extern char *gen_label(int lab, char*, char*, char);
338
extern char *put_labels(char *);
339
extern char *opstr(int op);
340
// Peepgen.c
341
extern void MarkRemove(OCODE *ip);
342
extern int PeepCount(OCODE *);
343
extern void flush_peep();
344
extern void GenerateLabel(int labno);
345
extern void GenerateZeradic(int op);
346
extern void GenerateMonadic(int op, int len, Operand *ap1);
347
extern void GenerateMonadicNT(int op, int len, Operand *ap1);
348
extern void GenerateDiadic(int op, int len, Operand *ap1, Operand *ap2);
349
extern void GenerateDiadicNT(int op, int len, Operand *ap1, Operand *ap2);
350
extern void GenerateTriadic(int op, int len, Operand *ap1, Operand *ap2, Operand *ap3);
351
extern void Generate4adic(int op, int len, Operand *ap1, Operand *ap2, Operand *ap3, Operand *ap4);
352
// Gencode.c
353
extern Operand *make_label(int lab);
354
extern Operand *make_clabel(int lab);
355
extern Operand *make_immed(int64_t i);
356
extern Operand *make_indirect(int i);
357
extern Operand *make_offset(ENODE *node);
358
extern void swap_nodes(ENODE *node);
359
 
360
// IdentifyKeyword.c
361
extern int IdentifyKeyword();
362
// Preproc.c
363
extern int preprocess();
364
// CodeGenerator.c
365
extern Operand *make_indirect(int i);
366
extern Operand *make_indexed(int64_t o, int i);
367
extern Operand *make_indx(ENODE *node, int reg);
368
extern Operand *make_string(char *s);
369
extern void GenerateFalseJump(ENODE *node,int label, unsigned int);
370
extern void GenerateTrueJump(ENODE *node,int label, unsigned int);
371
extern char *GetNamespace();
372
extern char nmspace[20][100];
373
extern Operand *GenerateDereference(ENODE *, int, int, int);
374
extern void MakeLegalOperand(Operand *ap,int flags, int size);
375
extern void GenLoad(Operand *, Operand *, int size, int);
376
extern void GenStore(Operand *, Operand *, int size);
377
// List.c
378
extern void ListTable(TABLE *t, int i);
379
// Register.c
380
extern Operand *GetTempReg(int);
381
extern Operand *GetTempRegister();
382
extern Operand *GetTempTgtRegister();
383
extern Operand *GetTempBrRegister();
384
extern Operand *GetTempFPRegister();
385
extern Operand *GetTempVectorRegister();
386
extern Operand *GetTempVectorMaskRegister();
387
extern void ReleaseTempRegister(Operand *ap);
388
extern void ReleaseTempReg(Operand *ap);
389
extern int TempInvalidate(int *);
390
extern void TempRevalidate(int sp, int fsp);
391
extern int GetTempMemSpace();
392
extern bool IsArgumentReg(int);
393
extern Operand *GenerateFunctionCall(ENODE *node, int flags);
394
 
395
extern void GenerateFunction(SYM *sym);
396
extern void GenerateReturn(Statement *stmt);
397
 
398
extern Operand *GenerateBitfieldDereference(ENODE *node, int flags, int size);
399
extern Operand *GenerateBitfieldAssign(ENODE *node, int flags, int size);
400
extern void GenerateBitfieldInsert(Operand *ap1, Operand *ap2, int offset, int width);
401
 
402
// err.c
403
extern void fatal(char *str);
404
 
405
extern int tmpVarSpace();
406
extern void tmpFreeAll();
407
extern void tmpReset();
408
extern int tmpAlloc(int);
409
extern void tmpFree(int);
410
extern BasicBlock *basicBlocks[10000];
411
extern BasicBlock *sortedBlocks[10000];
412
extern Forest forest;
413
extern IGraph iGraph;
414
extern Instruction opl[];
415
extern BasicBlock *RootBlock;
416
extern BasicBlock *LastBlock;
417
extern Instruction *GetInsn(int);
418
 
419
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.