URL
https://opencores.org/ocsvn/thor/thor/trunk
Subversion Repositories thor
[/] [thor/] [trunk/] [FT64v5/] [software/] [CC64/] [source/] [glo.h] - Rev 48
Compare with Previous | Blame | View Log
#ifndef _CGBLDEC_H #define _CGBLDEC_H // ============================================================================ // __ // \\__/ o\ (C) 2012-2018 Robert Finch, Waterloo // \ __ / All rights reserved. // \/_// robfinch<remove>@finitron.ca // || // // CC64 - 'C' derived language compiler // - 64 bit CPU // // This source file is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published // by the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This source file is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // // ============================================================================ // /* global ParseSpecifierarations */ #define THOR 0 #define TABLE888 888 #define RAPTOR64 64 #define W65C816 816 #define FISA64 164 #define DSD7 7 #define isThor (gCpu==THOR) #define isTable888 (gCpu==TABLE888) #define isRaptor64 (gCpu==RAPTOR64) #define is816 (gCpu==W65C816) #define isFISA64 (gCpu==FISA64) #define isDSD7 (gCpu==DSD7) //#define DOTRACE 1 #ifdef DOTRACE #define TRACE(x) x #else #define TRACE(x) #endif extern CPU cpu; extern int pass; extern int maxPn; extern int hook_predreg; extern int gCpu; extern int regGP; extern int regTP; extern int regSP; extern int regFP; extern int regLR; extern int regXLR; extern int regPC; extern int regCLP; extern int regPP; extern int regZero; extern int regFirstTemp; extern int regLastTemp; extern int regFirstRegvar; extern int regLastRegvar; extern int regFirstArg; extern int regLastArg; extern int pregGP; extern int pregTP; extern int pregSP; extern int pregFP; extern int pregLR; extern int pregXLR; extern int pregPC; extern int pregCLP; extern int pregPP; extern int pregZero; extern int pregFirstTemp; extern int pregLastTemp; extern int pregFirstRegvar; extern int pregLastRegvar; extern int pregFirstArg; extern int pregLastArg; extern int opt_vreg; extern int farcode; extern int wcharSupport; extern int verbose; extern int use_gp; extern int address_bits; extern std::ifstream *ifs; extern txtoStream ofs; extern txtoStream lfs; extern txtoStream dfs; extern int mangledNames; extern int sizeOfWord; extern int sizeOfPtr; extern int sizeOfFP; extern int sizeOfFPS; extern int sizeOfFPT; extern int sizeOfFPD; extern int sizeOfFPQ; extern int maxVL; /* extern FILE *input, *list, *output; */ extern FILE *outputG; extern int incldepth; extern int lineno; extern int nextlabel; extern int lastch; extern int lastst; extern char lastid[128]; extern char lastkw[128]; extern char laststr[MAX_STLP1]; extern int64_t ival; extern double rval; extern Float128 rval128; extern char float_precision; extern int parseEsc; //extern FloatTriple FAC1,FAC2; extern TABLE gsyms[257], lsyms; extern TABLE tagtable; extern SYM *lasthead; extern struct slit *strtab; extern struct clit *casetab; extern Float128 *quadtab; extern int lc_static; extern int lc_auto; extern int lc_thread; extern Statement *bodyptr; /* parse tree for function */ extern int global_flag; extern TABLE defsyms; extern int64_t save_mask; /* register save mask */ extern int64_t fpsave_mask; extern int bsave_mask; extern int uctran_off; extern int isKernel; extern int isPascal; extern int isOscall; extern int isInterrupt; extern int isTask; extern int isNocall; extern bool isRegister; extern int asmblock; extern int optimize; extern int opt_noregs; extern int opt_nopeep; extern int opt_noexpr; extern int opt_nocgo; extern int opt_size; extern int exceptions; extern int mixedSource; extern Function *currentFn; extern int iflevel; extern int foreverlevel; extern int looplevel; extern int loopexit; extern short int loop_active; extern int stmtdepth; extern int regmask; extern int bregmask; extern Statement *currentStmt; extern bool dogen; extern OCODE *peep_head; extern OCODE *peep_tail; extern TYP stdvoid; extern TYP stdint; extern TYP stduint; extern TYP stdlong; extern TYP stdulong; extern TYP stdshort; extern TYP stdushort; extern TYP stdchar; extern TYP stduchar; extern TYP stdbyte; extern TYP stdubyte; extern TYP stdstring; extern TYP stddbl; extern TYP stdtriple; extern TYP stdflt; extern TYP stddouble; extern TYP stdfunc; extern TYP stdexception; extern TYP stdconst; extern TYP stdquad; extern TYP stdvector; extern TYP *stdvectormask; extern std::string *declid; extern Compiler compiler; extern int64_t genst_cumulative; extern int throwlab; extern int breaklab; extern int contlab; extern int retlab; extern int lastsph; extern char *semaphores[20]; extern unsigned int ArgRegCount; extern bool isFuncBody; extern int isTypedef; extern bool isUnion; extern int isUnsigned; extern int isSigned; extern int isVolatile; extern int isVirtual; extern bool isInline; extern int isIO; extern int isConst; extern bool isRegister; extern bool isAuto; extern bool isFuncBody; extern bool isFuncPtr; extern char *stkname; extern int nparms; extern int funcdecl; extern Stringx names[20]; extern int isStructDecl; extern int worstAlignment; extern Map map; extern int optimized; // Analyze.c extern short int csendx; extern int equalnode(ENODE *node1, ENODE *node2); extern int bsort(CSE **list); // CMain.c extern void closefiles(); extern void error(int n); extern void needpunc(enum e_sym p,int); // Memmgt.c extern void *allocx(int); extern char *xalloc(int); extern SYM *allocSYM(); extern TYP *allocTYP(); extern Operand *allocOperand(); extern ENODE *allocEnode(); extern CSE *allocCSE(); extern void ReleaseGlobalMemory(); extern void ReleaseLocalMemory(); // NextToken.c extern void initsym(); extern void NextToken(); extern int getch(); extern int my_isspace(char c); extern void getbase(int64_t); extern void SkipSpaces(); // Stmt.c extern Statement *ParseCompoundStatement(); extern void GenerateDiadic(int op, int len, Operand *ap1,Operand *ap2); // Symbol.c extern SYM *gsearch(std::string na); extern SYM *search(std::string na,TABLE *thead); extern void insert(SYM* sp, TABLE *table); // ParseFunction.c extern SYM *BuildParameterList(SYM *sp, int *); extern char *my_strdup(char *); // Decl.c extern int imax(int i, int j); extern TYP *maketype(int bt, int siz); extern void dodecl(int defclass); extern int ParseParameterDeclarations(int); extern void ParseAutoDeclarations(SYM *sym, TABLE *table); extern int ParseSpecifier(TABLE *table); extern SYM* ParseDeclarationPrefix(char isUnion); extern int ParseStructDeclaration(int); extern void ParseEnumerationList(TABLE *table); extern int ParseFunction(SYM *sp); extern int declare(SYM *sym,TABLE *table,int al,int ilc,int ztype); extern void initstack(); extern int getline(int listflag); extern void compile(); // Init.c extern void doinit(SYM *sp); // Func.c extern SYM *makeint(char *); extern void funcbody(SYM *sp); // Intexpr.c extern int64_t GetIntegerExpression(ENODE **p); extern Float128 *GetFloatExpression(ENODE **pnode); // Expr.c extern SYM *makeStructPtr(std::string name); extern ENODE *makenode(int nt, ENODE *v1, ENODE *v2); extern ENODE *makeinode(int nt, int64_t v1); extern ENODE *makesnode(int nt, std::string *v1, std::string *v2, int64_t i); extern TYP *nameref(ENODE **node,int); extern TYP *forcefit(ENODE **node1,TYP *tp1,ENODE **node2,TYP *tp2,bool); extern TYP *expression(ENODE **node); extern int IsLValue(ENODE *node); extern Operand *GenerateExpression(ENODE *node, int flags, int size); extern int GetNaturalSize(ENODE *node); extern TYP *asnop(ENODE **node); extern TYP *NonCommaExpression(ENODE **); // Optimize.c extern void opt_const(ENODE **node); // GenerateStatement.c //extern void GenerateFunction(Statement *stmt); extern void GenerateIntoff(Statement *stmt); extern void GenerateInton(Statement *stmt); extern void GenerateStop(Statement *stmt); extern void gen_regrestore(); extern Operand *make_direct(int i); extern Operand *makereg(int r); extern Operand *makevreg(int r); extern Operand *makefpreg(int t); extern Operand *makebreg(int r); extern Operand *makepred(int r); extern int popcnt(int64_t m); // Outcode.c extern void gen_strlab(char *s); extern void dumplits(); extern int stringlit(char *s); extern int quadlit(Float128 *f128); extern void nl(); extern void seg(int sg, int algn); extern void cseg(); extern void dseg(); extern void tseg(); //extern void put_code(int op, int len,Operand *aps, Operand *apd, Operand *); extern void put_code(OCODE *); extern char *put_label(int lab, char*, char*, char); extern char *gen_label(int lab, char*, char*, char); extern char *put_labels(char *); extern char *opstr(int op); // Peepgen.c extern void MarkRemove(OCODE *ip); extern int PeepCount(OCODE *); extern void flush_peep(); extern void GenerateLabel(int labno); extern void GenerateZeradic(int op); extern void GenerateMonadic(int op, int len, Operand *ap1); extern void GenerateMonadicNT(int op, int len, Operand *ap1); extern void GenerateDiadic(int op, int len, Operand *ap1, Operand *ap2); extern void GenerateDiadicNT(int op, int len, Operand *ap1, Operand *ap2); extern void GenerateTriadic(int op, int len, Operand *ap1, Operand *ap2, Operand *ap3); extern void Generate4adic(int op, int len, Operand *ap1, Operand *ap2, Operand *ap3, Operand *ap4); // Gencode.c extern Operand *make_label(int lab); extern Operand *make_clabel(int lab); extern Operand *make_immed(int64_t i); extern Operand *make_indirect(int i); extern Operand *make_offset(ENODE *node); extern void swap_nodes(ENODE *node); // IdentifyKeyword.c extern int IdentifyKeyword(); // Preproc.c extern int preprocess(); // CodeGenerator.c extern Operand *make_indirect(int i); extern Operand *make_indexed(int64_t o, int i); extern Operand *make_indx(ENODE *node, int reg); extern Operand *make_string(char *s); extern void GenerateFalseJump(ENODE *node,int label, unsigned int); extern void GenerateTrueJump(ENODE *node,int label, unsigned int); extern char *GetNamespace(); extern char nmspace[20][100]; extern Operand *GenerateDereference(ENODE *, int, int, int); extern void MakeLegalOperand(Operand *ap,int flags, int size); extern void GenLoad(Operand *, Operand *, int size, int); extern void GenStore(Operand *, Operand *, int size); // List.c extern void ListTable(TABLE *t, int i); // Register.c extern Operand *GetTempReg(int); extern Operand *GetTempRegister(); extern Operand *GetTempTgtRegister(); extern Operand *GetTempBrRegister(); extern Operand *GetTempFPRegister(); extern Operand *GetTempVectorRegister(); extern Operand *GetTempVectorMaskRegister(); extern void ReleaseTempRegister(Operand *ap); extern void ReleaseTempReg(Operand *ap); extern int TempInvalidate(int *); extern void TempRevalidate(int sp, int fsp); extern int GetTempMemSpace(); extern bool IsArgumentReg(int); extern Operand *GenerateFunctionCall(ENODE *node, int flags); extern void GenerateFunction(SYM *sym); extern void GenerateReturn(Statement *stmt); extern Operand *GenerateBitfieldDereference(ENODE *node, int flags, int size); extern Operand *GenerateBitfieldAssign(ENODE *node, int flags, int size); extern void GenerateBitfieldInsert(Operand *ap1, Operand *ap2, int offset, int width); // err.c extern void fatal(char *str); extern int tmpVarSpace(); extern void tmpFreeAll(); extern void tmpReset(); extern int tmpAlloc(int); extern void tmpFree(int); extern BasicBlock *basicBlocks[10000]; extern BasicBlock *sortedBlocks[10000]; extern Forest forest; extern IGraph iGraph; extern Instruction opl[]; extern BasicBlock *RootBlock; extern BasicBlock *LastBlock; extern Instruction *GetInsn(int); #endif