diff options
author | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-10-04 15:18:22 +0000 |
---|---|---|
committer | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-10-04 15:18:22 +0000 |
commit | 1c7864f6d4380797b07c7149111066b61f69f689 (patch) | |
tree | 59057c26f97fdf846b0193e852eeea7e707a9e20 /lcc/src/c.h | |
parent | 91db83f0cc7c564ff6c853eeb4e790732dae81cd (diff) | |
download | ioquake3-aero-1c7864f6d4380797b07c7149111066b61f69f689.tar.gz ioquake3-aero-1c7864f6d4380797b07c7149111066b61f69f689.zip |
* Moved lcc and q3asm into code/tools
git-svn-id: svn://svn.icculus.org/quake3/trunk@134 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'lcc/src/c.h')
-rw-r--r-- | lcc/src/c.h | 723 |
1 files changed, 0 insertions, 723 deletions
diff --git a/lcc/src/c.h b/lcc/src/c.h deleted file mode 100644 index b46cf3b..0000000 --- a/lcc/src/c.h +++ /dev/null @@ -1,723 +0,0 @@ -#include <assert.h> -#include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> -#include <limits.h> -#include <string.h> - -#define NEW(p,a) ((p) = allocate(sizeof *(p), (a))) -#define NEW0(p,a) memset(NEW((p),(a)), 0, sizeof *(p)) -#define isaddrop(op) (specific(op)==ADDRG+P || specific(op)==ADDRL+P \ - || specific(op)==ADDRF+P) - -#define MAXLINE 512 -#define BUFSIZE 4096 - -#define istypename(t,tsym) (kind[t] == CHAR \ - || (t == ID && tsym && tsym->sclass == TYPEDEF)) -#define sizeop(n) ((n)<<10) -#define generic(op) ((op)&0x3F0) -#define specific(op) ((op)&0x3FF) -#define opindex(op) (((op)>>4)&0x3F) -#define opkind(op) ((op)&~0x3F0) -#define opsize(op) ((op)>>10) -#define optype(op) ((op)&0xF) -#ifdef __LCC__ -#ifndef __STDC__ -#define __STDC__ -#endif -#endif -#define NELEMS(a) ((int)(sizeof (a)/sizeof ((a)[0]))) -#undef roundup -#define roundup(x,n) (((x)+((n)-1))&(~((n)-1))) -#define mkop(op,ty) (specific((op) + ttob(ty))) - -#define extend(x,ty) ((x)&(1<<(8*(ty)->size-1)) ? (x)|((~0UL)<<(8*(ty)->size-1)) : (x)&ones(8*(ty)->size)) -#define ones(n) ((n)>=8*sizeof (unsigned long) ? ~0UL : ~((~0UL)<<(n))) - -#define isqual(t) ((t)->op >= CONST) -#define unqual(t) (isqual(t) ? (t)->type : (t)) - -#define isvolatile(t) ((t)->op == VOLATILE \ - || (t)->op == CONST+VOLATILE) -#define isconst(t) ((t)->op == CONST \ - || (t)->op == CONST+VOLATILE) -#define isarray(t) (unqual(t)->op == ARRAY) -#define isstruct(t) (unqual(t)->op == STRUCT \ - || unqual(t)->op == UNION) -#define isunion(t) (unqual(t)->op == UNION) -#define isfunc(t) (unqual(t)->op == FUNCTION) -#define isptr(t) (unqual(t)->op == POINTER) -#define ischar(t) ((t)->size == 1 && isint(t)) -#define isint(t) (unqual(t)->op == INT \ - || unqual(t)->op == UNSIGNED) -#define isfloat(t) (unqual(t)->op == FLOAT) -#define isarith(t) (unqual(t)->op <= UNSIGNED) -#define isunsigned(t) (unqual(t)->op == UNSIGNED) -#define isscalar(t) (unqual(t)->op <= POINTER \ - || unqual(t)->op == ENUM) -#define isenum(t) (unqual(t)->op == ENUM) -#define fieldsize(p) (p)->bitsize -#define fieldright(p) ((p)->lsb - 1) -#define fieldleft(p) (8*(p)->type->size - \ - fieldsize(p) - fieldright(p)) -#define fieldmask(p) (~(~(unsigned)0<<fieldsize(p))) -typedef struct node *Node; - -typedef struct list *List; - -typedef struct code *Code; - -typedef struct swtch *Swtch; - -typedef struct symbol *Symbol; - -typedef struct coord { - char *file; - unsigned x, y; -} Coordinate; -typedef struct table *Table; - -typedef union value { - long i; - unsigned long u; - long double d; - void *p; - void (*g)(void); -} Value; -typedef struct tree *Tree; - -typedef struct type *Type; - -typedef struct field *Field; - -typedef struct { - unsigned printed:1; - unsigned marked; - unsigned short typeno; - void *xt; -} Xtype; - -#include "config.h" -typedef struct metrics { - unsigned char size, align, outofline; -} Metrics; -typedef struct interface { - Metrics charmetric; - Metrics shortmetric; - Metrics intmetric; - Metrics longmetric; - Metrics longlongmetric; - Metrics floatmetric; - Metrics doublemetric; - Metrics longdoublemetric; - Metrics ptrmetric; - Metrics structmetric; - unsigned little_endian:1; - unsigned mulops_calls:1; - unsigned wants_callb:1; - unsigned wants_argb:1; - unsigned left_to_right:1; - unsigned wants_dag:1; - unsigned unsigned_char:1; -void (*address)(Symbol p, Symbol q, long n); -void (*blockbeg)(Env *); -void (*blockend)(Env *); -void (*defaddress)(Symbol); -void (*defconst) (int suffix, int size, Value v); -void (*defstring)(int n, char *s); -void (*defsymbol)(Symbol); -void (*emit) (Node); -void (*export)(Symbol); -void (*function)(Symbol, Symbol[], Symbol[], int); -Node (*gen) (Node); -void (*global)(Symbol); -void (*import)(Symbol); -void (*local)(Symbol); -void (*progbeg)(int argc, char *argv[]); -void (*progend)(void); -void (*segment)(int); -void (*space)(int); -void (*stabblock)(int, int, Symbol*); -void (*stabend) (Coordinate *, Symbol, Coordinate **, Symbol *, Symbol *); -void (*stabfend) (Symbol, int); -void (*stabinit) (char *, int, char *[]); -void (*stabline) (Coordinate *); -void (*stabsym) (Symbol); -void (*stabtype) (Symbol); - Xinterface x; -} Interface; -typedef struct binding { - char *name; - Interface *ir; -} Binding; - -extern Binding bindings[]; -extern Interface *IR; -typedef struct { - List blockentry; - List blockexit; - List entry; - List exit; - List returns; - List points; - List calls; - List end; -} Events; - -enum { -#define xx(a,b,c,d,e,f,g) a=b, -#define yy(a,b,c,d,e,f,g) -#include "token.h" - LAST -}; -struct node { - short op; - short count; - Symbol syms[3]; - Node kids[2]; - Node link; - Xnode x; -}; -enum { - F=FLOAT, - I=INT, - U=UNSIGNED, - P=POINTER, - V=VOID, - B=STRUCT -}; -#define gop(name,value) name=value<<4, -#define op(name,type,sizes) - -enum { gop(CNST,1) - op(CNST,F,fdx) - op(CNST,I,csilh) - op(CNST,P,p) - op(CNST,U,csilh) - gop(ARG,2) - op(ARG,B,-) - op(ARG,F,fdx) - op(ARG,I,ilh) - op(ARG,P,p) - op(ARG,U,ilh) - gop(ASGN,3) - op(ASGN,B,-) - op(ASGN,F,fdx) - op(ASGN,I,csilh) - op(ASGN,P,p) - op(ASGN,U,csilh) - gop(INDIR,4) - op(INDIR,B,-) - op(INDIR,F,fdx) - op(INDIR,I,csilh) - op(INDIR,P,p) - op(INDIR,U,csilh) - gop(CVF,7) - op(CVF,F,fdx) - op(CVF,I,ilh) - gop(CVI,8) - op(CVI,F,fdx) - op(CVI,I,csilh) - op(CVI,U,csilhp) - gop(CVP,9) - op(CVP,U,p) - gop(CVU,11) - op(CVU,I,csilh) - op(CVU,P,p) - op(CVU,U,csilh) - gop(NEG,12) - op(NEG,F,fdx) - op(NEG,I,ilh) - gop(CALL,13) - op(CALL,B,-) - op(CALL,F,fdx) - op(CALL,I,ilh) - op(CALL,P,p) - op(CALL,U,ilh) - op(CALL,V,-) - gop(RET,15) - op(RET,F,fdx) - op(RET,I,ilh) - op(RET,P,p) - op(RET,U,ilh) - op(RET,V,-) - gop(ADDRG,16) - op(ADDRG,P,p) - gop(ADDRF,17) - op(ADDRF,P,p) - gop(ADDRL,18) - op(ADDRL,P,p) - gop(ADD,19) - op(ADD,F,fdx) - op(ADD,I,ilh) - op(ADD,P,p) - op(ADD,U,ilhp) - gop(SUB,20) - op(SUB,F,fdx) - op(SUB,I,ilh) - op(SUB,P,p) - op(SUB,U,ilhp) - gop(LSH,21) - op(LSH,I,ilh) - op(LSH,U,ilh) - gop(MOD,22) - op(MOD,I,ilh) - op(MOD,U,ilh) - gop(RSH,23) - op(RSH,I,ilh) - op(RSH,U,ilh) - gop(BAND,24) - op(BAND,I,ilh) - op(BAND,U,ilh) - gop(BCOM,25) - op(BCOM,I,ilh) - op(BCOM,U,ilh) - gop(BOR,26) - op(BOR,I,ilh) - op(BOR,U,ilh) - gop(BXOR,27) - op(BXOR,I,ilh) - op(BXOR,U,ilh) - gop(DIV,28) - op(DIV,F,fdx) - op(DIV,I,ilh) - op(DIV,U,ilh) - gop(MUL,29) - op(MUL,F,fdx) - op(MUL,I,ilh) - op(MUL,U,ilh) - gop(EQ,30) - op(EQ,F,fdx) - op(EQ,I,ilh) - op(EQ,U,ilhp) - gop(GE,31) - op(GE,F,fdx) - op(GE,I,ilh) - op(GE,U,ilhp) - gop(GT,32) - op(GT,F,fdx) - op(GT,I,ilh) - op(GT,U,ilhp) - gop(LE,33) - op(LE,F,fdx) - op(LE,I,ilh) - op(LE,U,ilhp) - gop(LT,34) - op(LT,F,fdx) - op(LT,I,ilh) - op(LT,U,ilhp) - gop(NE,35) - op(NE,F,fdx) - op(NE,I,ilh) - op(NE,U,ilhp) - gop(JUMP,36) - op(JUMP,V,-) - gop(LABEL,37) - op(LABEL,V,-) - gop(LOAD,14) - op(LOAD,B,-) - op(LOAD,F,fdx) - op(LOAD,I,csilh) - op(LOAD,P,p) - op(LOAD,U,csilhp) LASTOP }; - -#undef gop -#undef op -enum { CODE=1, BSS, DATA, LIT }; -enum { PERM=0, FUNC, STMT }; -struct list { - void *x; - List link; -}; - -struct code { - enum { Blockbeg, Blockend, Local, Address, Defpoint, - Label, Start, Gen, Jump, Switch - } kind; - Code prev, next; - union { - struct { - int level; - Symbol *locals; - Table identifiers, types; - Env x; - } block; - Code begin; - Symbol var; - - struct { - Symbol sym; - Symbol base; - long offset; - } addr; - struct { - Coordinate src; - int point; - } point; - Node forest; - struct { - Symbol sym; - Symbol table; - Symbol deflab; - int size; - long *values; - Symbol *labels; - } swtch; - - } u; -}; -struct swtch { - Symbol sym; - int lab; - Symbol deflab; - int ncases; - int size; - long *values; - Symbol *labels; -}; -struct symbol { - char *name; - int scope; - Coordinate src; - Symbol up; - List uses; - int sclass; - unsigned structarg:1; - - unsigned addressed:1; - unsigned computed:1; - unsigned temporary:1; - unsigned generated:1; - unsigned defined:1; - Type type; - float ref; - union { - struct { - int label; - Symbol equatedto; - } l; - struct { - unsigned cfields:1; - unsigned vfields:1; - Table ftab; /* omit */ - Field flist; - } s; - int value; - Symbol *idlist; - struct { - Value min, max; - } limits; - struct { - Value v; - Symbol loc; - } c; - struct { - Coordinate pt; - int label; - int ncalls; - Symbol *callee; - } f; - int seg; - Symbol alias; - struct { - Node cse; - int replace; - Symbol next; - } t; - } u; - Xsymbol x; -}; -enum { CONSTANTS=1, LABELS, GLOBAL, PARAM, LOCAL }; -struct tree { - int op; - Type type; - Tree kids[2]; - Node node; - union { - Value v; - Symbol sym; - - Field field; - } u; -}; -enum { - AND=38<<4, - NOT=39<<4, - OR=40<<4, - COND=41<<4, - RIGHT=42<<4, - FIELD=43<<4 -}; -struct type { - int op; - Type type; - int align; - int size; - union { - Symbol sym; - struct { - unsigned oldstyle:1; - Type *proto; - } f; - } u; - Xtype x; -}; -struct field { - char *name; - Type type; - int offset; - short bitsize; - short lsb; - Field link; -}; -extern int assignargs; -extern int prunetemps; -extern int nodecount; -extern Symbol cfunc; -extern Symbol retv; -extern Tree (*optree[])(int, Tree, Tree); - -extern char kind[]; -extern int errcnt; -extern int errlimit; -extern int wflag; -extern Events events; -extern float refinc; - -extern unsigned char *cp; -extern unsigned char *limit; -extern char *firstfile; -extern char *file; -extern char *line; -extern int lineno; -extern int t; -extern char *token; -extern Symbol tsym; -extern Coordinate src; -extern int Aflag; -extern int Pflag; -extern Symbol YYnull; -extern Symbol YYcheck; -extern int glevel; -extern int xref; - -extern int ncalled; -extern int npoints; - -extern int needconst; -extern int explicitCast; -extern struct code codehead; -extern Code codelist; -extern Table stmtlabs; -extern float density; -extern Table constants; -extern Table externals; -extern Table globals; -extern Table identifiers; -extern Table labels; -extern Table types; -extern int level; - -extern List loci, symbols; - -extern List symbols; - -extern int where; -extern Type chartype; -extern Type doubletype; -extern Type floattype; -extern Type inttype; -extern Type longdouble; -extern Type longtype; -extern Type longlong; -extern Type shorttype; -extern Type signedchar; -extern Type unsignedchar; -extern Type unsignedlonglong; -extern Type unsignedlong; -extern Type unsignedshort; -extern Type unsignedtype; -extern Type charptype; -extern Type funcptype; -extern Type voidptype; -extern Type voidtype; -extern Type unsignedptr; -extern Type signedptr; -extern Type widechar; -extern void *allocate(unsigned long n, unsigned a); -extern void deallocate(unsigned a); -extern void *newarray(unsigned long m, unsigned long n, unsigned a); -extern void walk(Tree e, int tlab, int flab); -extern Node listnodes(Tree e, int tlab, int flab); -extern Node newnode(int op, Node left, Node right, Symbol p); -extern Tree cvtconst(Tree); -extern void printdag(Node, int); -extern void compound(int, Swtch, int); -extern void defglobal(Symbol, int); -extern void finalize(void); -extern void program(void); - -extern Tree vcall(Symbol func, Type ty, ...); -extern Tree addrof(Tree); -extern Tree asgn(Symbol, Tree); -extern Tree asgntree(int, Tree, Tree); -extern Type assign(Type, Tree); -extern Tree bittree(int, Tree, Tree); -extern Tree call(Tree, Type, Coordinate); -extern Tree calltree(Tree, Type, Tree, Symbol); -extern Tree condtree(Tree, Tree, Tree); -extern Tree cnsttree(Type, ...); -extern Tree consttree(unsigned int, Type); -extern Tree eqtree(int, Tree, Tree); -extern int iscallb(Tree); -extern Tree shtree(int, Tree, Tree); -extern void typeerror(int, Tree, Tree); - -extern void test(int tok, char set[]); -extern void expect(int tok); -extern void skipto(int tok, char set[]); -extern void error(const char *, ...); -extern int fatal(const char *, const char *, int); -extern void warning(const char *, ...); - -typedef void (*Apply)(void *, void *, void *); -extern void attach(Apply, void *, List *); -extern void apply(List event, void *arg1, void *arg2); -extern Tree retype(Tree p, Type ty); -extern Tree rightkid(Tree p); -extern int hascall(Tree p); -extern Type binary(Type, Type); -extern Tree cast(Tree, Type); -extern Tree cond(Tree); -extern Tree expr0(int); -extern Tree expr(int); -extern Tree expr1(int); -extern Tree field(Tree, const char *); -extern char *funcname(Tree); -extern Tree idtree(Symbol); -extern Tree incr(int, Tree, Tree); -extern Tree lvalue(Tree); -extern Tree nullcall(Type, Symbol, Tree, Tree); -extern Tree pointer(Tree); -extern Tree rvalue(Tree); -extern Tree value(Tree); - -extern void defpointer(Symbol); -extern Type initializer(Type, int); -extern void swtoseg(int); - -extern void input_init(int, char *[]); -extern void fillbuf(void); -extern void nextline(void); - -extern int getchr(void); -extern int gettok(void); - -extern void emitcode(void); -extern void gencode (Symbol[], Symbol[]); -extern void fprint(FILE *f, const char *fmt, ...); -extern char *stringf(const char *, ...); -extern void check(Node); -extern void print(const char *, ...); - -extern List append(void *x, List list); -extern int length(List list); -extern void *ltov (List *list, unsigned a); -extern void init(int, char *[]); - -extern Type typename(void); -extern void checklab(Symbol p, void *cl); -extern Type enumdcl(void); -extern void main_init(int, char *[]); -extern int main(int, char *[]); - -extern void vfprint(FILE *, char *, const char *, va_list); - -extern int process(char *); -extern int findfunc(char *, char *); -extern int findcount(char *, int, int); - -extern Tree constexpr(int); -extern int intexpr(int, int); -extern Tree simplify(int, Type, Tree, Tree); -extern int ispow2(unsigned long u); - -extern int reachable(int); - -extern void addlocal(Symbol); -extern void branch(int); -extern Code code(int); -extern void definelab(int); -extern void definept(Coordinate *); -extern void equatelab(Symbol, Symbol); -extern Node jump(int); -extern void retcode(Tree); -extern void statement(int, Swtch, int); -extern void swcode(Swtch, int *, int, int); -extern void swgen(Swtch); - -extern char * string(const char *str); -extern char *stringn(const char *str, int len); -extern char *stringd(long n); -extern Symbol relocate(const char *name, Table src, Table dst); -extern void use(Symbol p, Coordinate src); -extern void locus(Table tp, Coordinate *cp); -extern Symbol allsymbols(Table); - -extern Symbol constant(Type, Value); -extern void enterscope(void); -extern void exitscope(void); -extern Symbol findlabel(int); -extern Symbol findtype(Type); -extern void foreach(Table, int, void (*)(Symbol, void *), void *); -extern Symbol genident(int, Type, int); -extern int genlabel(int); -extern Symbol install(const char *, Table *, int, int); -extern Symbol intconst(int); -extern Symbol lookup(const char *, Table); -extern Symbol mkstr(char *); -extern Symbol mksymbol(int, const char *, Type); -extern Symbol newtemp(int, int, int); -extern Table table(Table, int); -extern Symbol temporary(int, Type); -extern char *vtoa(Type, Value); - -extern int nodeid(Tree); -extern char *opname(int); -extern int *printed(int); -extern void printtree(Tree, int); -extern Tree root(Tree); -extern Tree texpr(Tree (*)(int), int, int); -extern Tree tree(int, Type, Tree, Tree); - -extern void type_init(int, char *[]); - -extern Type signedint(Type); - -extern int hasproto(Type); -extern void outtype(Type, FILE *); -extern void printdecl (Symbol p, Type ty); -extern void printproto(Symbol p, Symbol args[]); -extern char *typestring(Type ty, char *id); -extern Field fieldref(const char *name, Type ty); -extern Type array(Type, int, int); -extern Type atop(Type); -extern Type btot(int, int); -extern Type compose(Type, Type); -extern Type deref(Type); -extern int eqtype(Type, Type, int); -extern Field fieldlist(Type); -extern Type freturn(Type); -extern Type ftype(Type, Type); -extern Type func(Type, Type *, int); -extern Field newfield(char *, Type, Type); -extern Type newstruct(int, char *); -extern void printtype(Type, int); -extern Type promote(Type); -extern Type ptr(Type); -extern Type qual(int, Type); -extern void rmtypes(int); -extern int ttob(Type); -extern int variadic(Type); - |