From: Manoel Trapier Date: Thu, 21 Mar 2013 15:08:18 +0000 (+0100) Subject: Converting mach ncg... X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=d853b7f2fbd609be9f66ab642c46da49b7d3995d;p=ack.git Converting mach ncg... --- diff --git a/h/con_float b/h/con_float index 903c2ce5b..844927c30 100644 --- a/h/con_float +++ b/h/con_float @@ -55,10 +55,7 @@ + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) #ifndef USE_FLT -static int -float_cst(str, sz, buf) - char *str, *buf; - int sz; +static int float_cst(char *str, int sz, char *buf) { int i; char *p; @@ -87,10 +84,7 @@ float_cst(str, sz, buf) #include #include -int -float_cst(str, sz, buf) - char *str, *buf; - int sz; +int float_cst(char *str, int sz, char *buf) { int overflow = 0; flt_arith e; @@ -237,7 +231,7 @@ float_cst(str, sz, buf) #endif /* USE_FLT */ #ifdef CODE_GENERATOR -con_float() +void con_float() { char buf[8]; int rval = float_cst(str, (int)argval, buf); @@ -260,9 +254,7 @@ con_float() #endif /* CODE_GENERATOR */ #ifdef CODE_EXPANDER -con_float(str, argval) - char *str; - arith argval; +void con_float(char *str, arith argval) { char buf[8]; int rval = float_cst(str, (int)argval, buf); diff --git a/mach/i86/ncg/mach.c b/mach/i86/ncg/mach.c index e222522ad..cc6238265 100644 --- a/mach/i86/ncg/mach.c +++ b/mach/i86/ncg/mach.c @@ -4,17 +4,12 @@ * */ -#ifndef NORCSID -static char rcs_m[]= "$Id$" ; -static char rcs_mh[]= ID_MH ; -#endif - /* * machine dependent back end routines for the Intel 8086 */ -con_part(sz,w) register sz; word w; { - +void con_part(int sz, word w) +{ while (part_size % sz) part_size++; if (part_size == TEM_WSIZE) @@ -31,7 +26,8 @@ con_part(sz,w) register sz; word w; { part_size += sz; } -con_mult(sz) word sz; { +void con_mult(word sz) +{ long l; if (sz != 4) @@ -61,8 +57,8 @@ string holstr(n) word n; { full lbytes; #endif -prolog(nlocals) full nlocals; { - +void prolog(full nlocals) +{ fputs("\tpush\tbp\n\tmov\tbp,sp\n", codefile); #ifdef REGVARS lbytes = nlocals; @@ -82,8 +78,7 @@ long si_off; long di_off; int firstreg; -regscore(off, size, typ, score, totyp) - long off; +int regscore(long off, int size, int typ, int score, int totyp) { if (size != 2) return -1; score -= 1; @@ -94,14 +89,14 @@ regscore(off, size, typ, score, totyp) return score; } -i_regsave() +void i_regsave() { si_off = -1; di_off = -1; firstreg = 0; } -f_regsave() +void f_regsave() { if (si_off != di_off) { if (di_off == -lbytes) lbytes -= 2; @@ -129,9 +124,7 @@ f_regsave() fprintf(codefile, "mov si,%ld(bp)\n", si_off); } -regsave(regstr, off, size) - char *regstr; - long off; +void regsave(char *regstr, long off, int size) { if (strcmp(regstr, "si") == 0) { if (! firstreg) firstreg = -1; @@ -143,7 +136,7 @@ regsave(regstr, off, size) } } -regreturn() +void regreturn() { if (firstreg == 1) { if (si_off != -1) fputs("jmp .sdret\n", codefile); @@ -157,7 +150,8 @@ regreturn() } #endif /* REGVARS */ -mes(type) word type ; { +void mes(word type) +{ int argt ; switch ( (int)type ) { diff --git a/mach/proto/ncg/assert.h b/mach/proto/ncg/assert.h index 5d1adada8..8b0ba078f 100644 --- a/mach/proto/ncg/assert.h +++ b/mach/proto/ncg/assert.h @@ -4,8 +4,13 @@ */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_ASSERT_H +#define MACH_PROTO_NCG_ASSERT_H + #ifndef NDEBUG #define assert(x) if(!(x)) badassertion("x",__FILE__,__LINE__) #else #define assert(x) /* nothing */ #endif + +#endif /* MACH_PROTO_NCG_ASSERT_H */ \ No newline at end of file diff --git a/mach/proto/ncg/codegen.c b/mach/proto/ncg/codegen.c index 30d4c25db..6c7da7f41 100644 --- a/mach/proto/ncg/codegen.c +++ b/mach/proto/ncg/codegen.c @@ -1,7 +1,9 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include "assert.h" #include "param.h" #include "tables.h" @@ -12,26 +14,24 @@ static char rcsid[] = "$Id$"; #include "state.h" #include "equiv.h" #include "extern.h" - -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ +#include "codegen.h" +#include "utils.h" +#include "salloc.h" +#include "subr.h" +#include "nextem.h" +#include "fillem.h" +#include "reg.h" +#include "move.h" +#include "gencode.h" +#include "compute.h" +#include "codegen.h" +#include "mach_dep.h" #define ALLOW_NEXTEM /* code generator is allowed new try of NEXTEM in exceptional cases */ byte startupcode[] = { DO_NEXTEM }; -byte *nextem(); -unsigned costcalc(); -unsigned docoerc(); -unsigned stackupto(); -string tostring(); -string ad2str(); - #ifdef NDEBUG #define DEBUG(string) #else @@ -50,7 +50,8 @@ short *set_val; char *set_flag; #endif -unsigned codegen(codep,ply,toplevel,costlimit,forced) byte *codep; unsigned costlimit; { +unsigned codegen(byte *codep, int ply, int toplevel, unsigned int costlimit, int forced) +{ #ifndef NDEBUG byte *origcp=codep; static int level=0; @@ -102,7 +103,7 @@ unsigned codegen(codep,ply,toplevel,costlimit,forced) byte *codep; unsigned cost byte *bp; int n; unsigned mindistance,dist; - register i; + int i; int cindex; int npos,pos[MAXRULE]; unsigned mincost,t; @@ -243,7 +244,7 @@ if (Debug) case DO_XXMATCH: DEBUG("XXMATCH"); case DO_XMATCH: { - register i; + int i; int temp; DEBUG("XMATCH"); @@ -253,7 +254,7 @@ if (Debug) break; /* match already checked by distance() */ } case DO_MATCH: { - register i; + int i; int j; unsigned mincost,t; token_p tp; @@ -263,12 +264,12 @@ if (Debug) token_p regtp[MAXCREG]; c3_p regcp[MAXCREG]; rl_p regls[MAXCREG]; - c3_p cp,findcoerc(); + c3_p cp; #ifdef MAXSPLIT int sret; #endif int stackpad = 0; - struct perm *tup,*ntup,*besttup,*tuples(); + struct perm *tup,*ntup,*besttup; DEBUG("MATCH"); tokpatlen=(codep[-1]>>5)&07; @@ -500,7 +501,7 @@ normalfailed: if (stackpad!=tokpatlen) { } case DO_KILLREG: case DO_RREMOVE: { /* register remove */ - register i; + int i; int nodeno; token_p tp; tkdef_p tdp; @@ -542,7 +543,7 @@ normalfailed: if (stackpad!=tokpatlen) { break; } case DO_DEALLOCATE: { - register i; + int i; tkdef_p tdp; int tinstno; token_t token; @@ -572,7 +573,7 @@ normalfailed: if (stackpad!=tokpatlen) { break; } case DO_ALLOCATE: { - register i; + int i; int j; int tinstno; int npos,npos2,pos[NREGS],pos2[NREGS]; @@ -596,7 +597,7 @@ normalfailed: if (stackpad!=tokpatlen) { if (!forced) { do { npos=exactmatch=0; - for(rpp=reglist[propno];rp= *rpp; rpp++) + for(rpp=reglist[propno] ; (rp= *rpp) ; rpp++) if (getrefcount((int)(rp-machregs), FALSE)==0) { pos[npos++] = rp-machregs; if (eqtoken(&rp->r_contents,&token)) @@ -705,7 +706,7 @@ normalfailed: if (stackpad!=tokpatlen) { break; } case DO_INSTR: { - register i; + int i; int n; int tinstno; token_t token; @@ -782,7 +783,7 @@ normalfailed: if (stackpad!=tokpatlen) { break; } case DO_TOKREPLACE: { - register i; + int i; int tinstno; int repllen; token_t reptoken[MAXREPLLEN]; @@ -814,7 +815,7 @@ normalfailed: if (stackpad!=tokpatlen) { break; } case DO_EMREPLACE: { - register i; + int i; int j; int nodeno; result_t result[MAXEMREPLLEN]; @@ -927,9 +928,10 @@ normalfailed: if (stackpad!=tokpatlen) { return(totalcost); } -readcodebytes() { +void readcodebytes() +{ #ifndef CODEINC - register fd; + int fd; extern int ncodebytes; if ((fd=open("code",0))<0) { @@ -943,9 +945,8 @@ readcodebytes() { } #ifdef TABLEDEBUG -initlset(f) char *f; { - extern char *myalloc(); - +void initlset(char *f) +{ set_flag = f; if ((set_fd=open(f+1,2))<0) error("Can't open %s rw",f+1); @@ -954,14 +955,14 @@ initlset(f) char *f; { read(set_fd,set_val,set_size); } -termlset() { - +void termlset() +{ if (set_fd) { lseek(set_fd,(long) sizeof(int),0); write(set_fd,set_val,set_size); close(set_fd); if (set_flag[0]=='u') { - register i; + int i; fprintf(stderr,"Unused code rules:\n\n"); for(i=0;i<8*set_size;i++) diff --git a/mach/proto/ncg/codegen.h b/mach/proto/ncg/codegen.h new file mode 100644 index 000000000..955a1fe19 --- /dev/null +++ b/mach/proto/ncg/codegen.h @@ -0,0 +1,18 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_CODEGEN_H +#define MACH_PROTO_NCG_CODEGEN_H + +/* mach/proto/ncg/codegen.c */ +unsigned codegen(byte *codep, int ply, int toplevel, unsigned int costlimit, int forced); +void readcodebytes(void); + +#ifdef TABLEDEBUG +void initlset(char *f); +void termlset(); +#endif + +#endif /* MACH_PROTO_NCG_CODEGEN_H */ + diff --git a/mach/proto/ncg/compute.c b/mach/proto/ncg/compute.c index f407aa8ae..a40bdfed0 100644 --- a/mach/proto/ncg/compute.c +++ b/mach/proto/ncg/compute.c @@ -1,7 +1,9 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include #include #include @@ -14,16 +16,13 @@ static char rcsid[] = "$Id$"; #include "result.h" #include "glosym.h" #include "extern.h" +#include "salloc.h" +#include "utils.h" +#include "regvar.h" #ifdef USE_TES #include "label.h" #endif - -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ +#include "compute.h" #define LLEAF 01 #define LDEF 02 @@ -70,24 +69,23 @@ char opdesc[] = { LLDEF, /* EX_TOSTRING */ LLDEF, /* EX_UMINUS */ 0, /* EX_REG */ - 0, /* EX_LOWW */ - 0, /* EX_HIGHW */ - LLDEF, /* EX_INREG */ - LLDEF, /* EX_REGVAR */ - LLDEF|RLDEF, /* EX_OR */ - LLDEF|RLDEF, /* EX_XOR */ - LLDEF|RLDEF, /* EX_AND */ - 0, /* EX_ISROM */ + 0, /* EX_LOWW */ + 0, /* EX_HIGHW */ + LLDEF, /* EX_INREG */ + LLDEF, /* EX_REGVAR */ + LLDEF|RLDEF, /* EX_OR */ + LLDEF|RLDEF, /* EX_XOR */ + LLDEF|RLDEF, /* EX_AND */ + 0, /* EX_ISROM */ #ifdef USE_TES - 0, /* EX_TOPELTSIZE */ - 0, /* EX_FALLTHROUGH */ + 0, /* EX_TOPELTSIZE */ + 0, /* EX_FALLTHROUGH */ #endif }; -string salloc(),strcpy(),strcat(); - -string mycat(s1,s2) register string s1,s2; { - register string s; +string mycat(string s1, string s2) +{ + string s; if (s1==0 || *s1=='\0') return(s2); if (s2==0 || *s2=='\0') return(s1); @@ -98,8 +96,9 @@ string mycat(s1,s2) register string s1,s2; { return(s); } -string mystrcpy(s) register string s; { - register string r; +string mystrcpy(string s) +{ + string r; r=salloc(strlen(s)); strcpy(r,s); @@ -108,7 +107,8 @@ string mystrcpy(s) register string s; { char digstr[21][15]; -string tostring(n) register word n; { +string tostring(word n) +{ char buf[25]; if (n>=-20 && n<=20 && (n&1)==0) { @@ -120,9 +120,10 @@ string tostring(n) register word n; { return(mystrcpy(buf)); } -compute(node, presult) register node_p node; register result_t *presult; { +void compute(node_p node, result_t *presult) +{ result_t leaf1,leaf2; - register token_p tp; + token_p tp; int desc; long mask,tmp; int i,tmpreg; diff --git a/mach/proto/ncg/compute.h b/mach/proto/ncg/compute.h new file mode 100644 index 000000000..d3e941a56 --- /dev/null +++ b/mach/proto/ncg/compute.h @@ -0,0 +1,15 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_COMPUTE_H +#define MACH_PROTO_NCG_COMPUTE_H + +/* mach/proto/ncg/compute.c */ +string mycat(string s1, string s2); +string mystrcpy(string s); +string tostring(long n); +void compute(node_p node, result_t *presult); + +#endif /* MACH_PROTO_NCG_COMPUTE_H */ + diff --git a/mach/proto/ncg/data.h b/mach/proto/ncg/data.h index c1d0e183e..e9d732db3 100644 --- a/mach/proto/ncg/data.h +++ b/mach/proto/ncg/data.h @@ -4,6 +4,9 @@ */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_DATA_H +#define MACH_PROTO_NCG_DATA_H + typedef struct cost { short ct_space; short ct_time; @@ -69,3 +72,5 @@ typedef struct { int rl_n; /* number in list */ int rl_list[NREGS]; } rl_t,*rl_p; + +#endif /* MACH_PROTO_NCG_DATA_H */ \ No newline at end of file diff --git a/mach/proto/ncg/equiv.c b/mach/proto/ncg/equiv.c index e375a73c8..0a874a9c8 100644 --- a/mach/proto/ncg/equiv.c +++ b/mach/proto/ncg/equiv.c @@ -1,9 +1,10 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include "assert.h" -#include "equiv.h" #include "param.h" #include "tables.h" #include "types.h" @@ -11,15 +12,11 @@ static char rcsid[] = "$Id$"; #include "data.h" #include "result.h" #include "extern.h" - -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ - -extern string myalloc(); +#include "salloc.h" +#include "reg.h" +#include "subr.h" +#include "utils.h" +#include "equiv.h" int rar[MAXCREG]; rl_p *lar; @@ -27,11 +24,11 @@ int maxindex; int regclass[NREGS]; struct perm *perms; -struct perm * -tuples(regls,nregneeded) rl_p *regls; { +struct perm *tuples(rl_p *regls, int nregneeded) +{ int class=0; - register i,j; - register struct reginfo *rp; + int i,j; + struct reginfo *rp; /* * First compute equivalence classes of registers. @@ -62,10 +59,11 @@ tuples(regls,nregneeded) rl_p *regls; { return(perms); } -permute(index) { - register struct perm *pp; - register rl_p rlp; - register i,j; +void permute(int index) +{ + struct perm *pp; + rl_p rlp; + int i,j; if (index == maxindex) { for (pp=perms; pp != 0; pp=pp->p_next) { diff --git a/mach/proto/ncg/equiv.h b/mach/proto/ncg/equiv.h index fcd7971da..729ed609b 100644 --- a/mach/proto/ncg/equiv.h +++ b/mach/proto/ncg/equiv.h @@ -3,6 +3,8 @@ * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_EQUIV_H +#define MACH_PROTO_NCG_EQUIV_H #define MAXCREG 4 @@ -10,3 +12,8 @@ struct perm { struct perm *p_next; int p_rar[MAXCREG]; }; + +struct perm *tuples(rl_p *regls, int nregneeded); +void permute(int index); + +#endif /* MACH_PROTO_NCG_EQUIV_H */ \ No newline at end of file diff --git a/mach/proto/ncg/extern.h b/mach/proto/ncg/extern.h index 4b1480a93..cfa03c718 100644 --- a/mach/proto/ncg/extern.h +++ b/mach/proto/ncg/extern.h @@ -4,6 +4,9 @@ */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_EXTERN_H +#define MACH_PROTO_NCG_EXTERN_H + extern int maxply; /* amount of lookahead allowed */ extern int stackheight; /* # of tokens on fakestack */ extern token_t fakestack[]; /* fakestack itself */ @@ -52,3 +55,5 @@ extern struct reginfo **reglist[]; /* lists of registers per property */ extern int nregvar[]; /* # of register variables per type */ extern int *rvnumbers[]; /* lists of numbers */ #endif + +#endif /* MACH_PROTO_NCG_EXTERN_H */ \ No newline at end of file diff --git a/mach/proto/ncg/fillem.c b/mach/proto/ncg/fillem.c index 97b7a5081..d4a1ff684 100644 --- a/mach/proto/ncg/fillem.c +++ b/mach/proto/ncg/fillem.c @@ -1,7 +1,9 @@ -#ifndef NORCSID -static char rcsid2[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include #include #include @@ -18,34 +20,34 @@ static char rcsid2[] = "$Id$"; #include #include "data.h" #include "result.h" +#include "salloc.h" +#include "utils.h" #ifdef REGVARS #include "regvar.h" #include #endif +#include "fillem.h" +#include "gencode.h" +#include "glosym.h" +#include "label.h" +#include "reg.h" +#include "mach_dep.h" +#include "compute.h" #include "extern.h" -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ - #ifndef newplb /* retrofit for older mach.h */ #define newplb newilb #endif #ifdef fmt_id #ifdef id_first -It is an error to define both fmt_id and id_first. -Read the documentation. +#error It is an error to define both fmt_id and id_first. Read the documentation. #endif #endif #ifdef fmt_ilb #ifdef ilb_fmt -It is an error to define both fmt_ilb and ilb_fmt. -Read the documentation. +#error It is an error to define both fmt_ilb and ilb_fmt. Read the documentation. #endif #endif @@ -55,13 +57,10 @@ Read the documentation. #define SEGROM 2 #define SEGBSS 3 -long con(); - #define get8() getc(emfile) FILE *emfile; extern FILE *codefile; -extern FILE *freopen(); int nextispseu,savetab1; int opcode; @@ -82,16 +81,14 @@ int regallowed=0; extern char em_flag[]; extern short em_ptyp[]; -extern double atof(); /* Own version of atol that continues computing on overflow. We don't know that about the ANSI C one. */ -long our_atol(s) -register char *s; +long our_atol(char *s) { - register long total = 0; - register unsigned digit; + long total = 0; + unsigned digit; int minus = 0; while (*s == ' ' || *s == '\t') s++; @@ -110,15 +107,8 @@ register char *s; #define sp_cstx sp_cst2 -string tostring(); -string holstr(); -string strarg(); -string mystrcpy(); -string myalloc(); -long get32(); - -in_init(filename) char *filename; { - +void in_init(char *filename) +{ emfile = stdin; if (filename && (emfile=freopen(filename,"r",stdin))==NULL) error("Can't open %s",filename); @@ -127,18 +117,21 @@ in_init(filename) char *filename; { str = myalloc(maxstrsiz=256); } -in_start() { +void in_start() +{ #ifdef modhead fprintf(codefile,"%s",modhead) ; #endif } -in_finish() { +void in_finish() +{ } -fillemlines() { - register int t,i; - register struct emline *lp; +void fillemlines() +{ + int t,i; + struct emline *lp; while ((emlines+nemlines)-emp0) error("No table entry for %d",emlines[0].em_instr); @@ -445,8 +437,9 @@ int getarg(int typset) return(argtyp); } -int table1() { - register i; +int table1() +{ + int i; i = get8(); if (i < sp_fmnem+sp_nmnem && i >= sp_fmnem) { @@ -464,8 +457,9 @@ int table1() { return(table3(i)); } -int table2() { - register i; +int table2() +{ + int i; i = get8(); if (i < sp_fcst0+sp_ncst0 && i >= sp_fcst0) { @@ -475,7 +469,8 @@ int table2() { return(table3(i)); } -int table3(i) { +int table3(int i) +{ word consiz; switch(i) { @@ -518,8 +513,9 @@ int table3(i) { return(i); } -int get16() { - register int l_byte, h_byte; +int get16() +{ + int l_byte, h_byte; l_byte = get8(); h_byte = get8(); @@ -527,9 +523,10 @@ int get16() { return l_byte | (h_byte*256) ; } -long get32() { - register long l; - register int h_byte; +long get32() +{ + long l; + int h_byte; l = get8(); l |= ((unsigned) get8())*256 ; @@ -539,9 +536,10 @@ long get32() { return l | (h_byte*256L*256*256L) ; } -getstring() { - register char *p; - register n; +void getstring() +{ + char *p; + int n; getarg(cst_ptyp); if (argval < 0) @@ -558,8 +556,9 @@ getstring() { *p++ = '\0'; } -char *strarg(t) { - register char *p; +char *strarg(int t) +{ + char *p; switch (t) { case sp_ilb1: @@ -606,8 +605,9 @@ char *strarg(t) { return(mystrcpy(argstr)); } -bss(n,t,b) full n; { - register long s = 0; +void bss(full n, int t, int b) +{ + long s = 0; if (n % TEM_WSIZE) fatal("bad BSS size"); @@ -629,8 +629,9 @@ bss(n,t,b) full n; { fatal("bad BSS initializer"); } -long con(t) { - register i; +long con(int t) +{ + int i; strarg(t); switch (t) { @@ -670,16 +671,18 @@ long con(t) { } assert(FALSE); /* NOTREACHED */ + return 0; } extern char *segname[]; -swtxt() { +void swtxt() +{ switchseg(SEGTXT); } -switchseg(s) { - +void switchseg(int s) +{ if (s == curseg) return; part_flush(); @@ -687,8 +690,9 @@ switchseg(s) { fprintf(codefile,"%s\n",segname[s]); } -savelab() { - register char *p,*q; +void savelab() +{ + char *p,*q; part_flush(); if (labstr[0]) { @@ -697,12 +701,12 @@ savelab() { } p = argstr; q = labstr; - while (*q++ = *p++) + while ( (*q++ = *p++) ) ; } -dumplab() { - +void dumplab() +{ if (labstr[0] == 0) return; assert(part_size == 0); @@ -710,16 +714,16 @@ dumplab() { labstr[0] = 0; } -xdumplab() { - +void xdumplab() +{ if (labstr[0] == 0) return; assert(part_size == 0); newdlb(labstr); } -part_flush() { - +void part_flush() +{ /* * Each new data fragment and each data label starts at * a new target machine word @@ -731,8 +735,8 @@ part_flush() { part_word = 0; } -string holstr(n) word n; { - +string holstr(word n) +{ sprintf(str,hol_off,n,holno); return(mystrcpy(str)); } diff --git a/mach/proto/ncg/fillem.h b/mach/proto/ncg/fillem.h new file mode 100644 index 000000000..0e4aa6bf1 --- /dev/null +++ b/mach/proto/ncg/fillem.h @@ -0,0 +1,34 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_FILLEM_H +#define MACH_PROTO_NCG_FILLEM_H + +/* mach/proto/ncg/fillem.c */ +long our_atol(char *s); +void in_init(char *filename); +void in_start(void); +void in_finish(void); +void fillemlines(void); +void dopseudo(void); +int getarg(int typset); +int table1(void); +int table2(void); +int table3(int i); +int get16(void); +long get32(void); +void getstring(void); +char *strarg(int t); +void bss(int n, int t, int b); +long con(int t); +void swtxt(void); +void switchseg(int s); +void savelab(void); +void dumplab(void); +void xdumplab(void); +void part_flush(void); +string holstr(long n); + +#endif /* MACH_PROTO_NCG_FILLEM_H */ + diff --git a/mach/proto/ncg/gencode.c b/mach/proto/ncg/gencode.c index b9b89022c..ef73fa470 100644 --- a/mach/proto/ncg/gencode.c +++ b/mach/proto/ncg/gencode.c @@ -1,8 +1,11 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include "assert.h" +#include #include #include "param.h" #include "tables.h" @@ -11,24 +14,17 @@ static char rcsid[] = "$Id$"; #include "data.h" #include "result.h" #include "extern.h" +#include "compute.h" +#include "utils.h" +#include "gencode.h" #ifdef USE_TES #include "mach.h" #endif -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ - -string mystrcpy(); - FILE *codefile; -extern FILE *freopen(); - -out_init(filename) char *filename; { +void out_init(char *filename) +{ #ifndef NDEBUG static char stderrbuff[BUFSIZ]; @@ -48,8 +44,8 @@ out_init(filename) char *filename; { #endif } -out_finish() { - +void out_finish() +{ #ifndef NDEBUG if (Debug) fflush(stderr); @@ -61,18 +57,19 @@ out_finish() { #endif } -tstoutput() { - +void tstoutput() +{ if (ferror(codefile)) error("Write error on output"); } -genstr(stringno) { - +void genstr(int stringno) +{ fputs(codestrings[stringno],codefile); } -string ad2str(ad) addr_t ad; { +string ad2str(addr_t ad) +{ static char buf[100]; if (ad.ea_str==0) @@ -87,8 +84,8 @@ string ad2str(ad) addr_t ad; { return(mystrcpy(buf)); } -praddr(ad) addr_t ad; { - +void praddr(addr_t ad) +{ if (ad.ea_str==0 || *(ad.ea_str) == '\0') fprintf(codefile,WRD_FMT,ad.ea_off); else { @@ -104,14 +101,16 @@ praddr(ad) addr_t ad; { } } -gennl() { +void gennl() +{ putc('\n',codefile); } -prtoken(tp,leadingchar) token_p tp; { - register c; - register char *code; - register tkdef_p tdp; +void prtoken(token_p tp, int leadingchar) +{ + int c; + char *code; + tkdef_p tdp; putc(leadingchar,codefile); if (tp->t_token == -1) { @@ -144,8 +143,7 @@ prtoken(tp,leadingchar) token_p tp; { } #ifdef USE_TES -printlabel(labnum) -int labnum; +void printlabel(int labnum) { newilb(dollar[labnum].e_v.e_addr.ea_str); } diff --git a/mach/proto/ncg/gencode.h b/mach/proto/ncg/gencode.h new file mode 100644 index 000000000..bb5ead420 --- /dev/null +++ b/mach/proto/ncg/gencode.h @@ -0,0 +1,20 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_GENCODE_H +#define MACH_PROTO_NCG_GENCODE_H + +/* mach/proto/ncg/gencode.c */ +void out_init(char *filename); +void out_finish(void); +void tstoutput(void); +void genstr(int stringno); +string ad2str(addr_t ad); +void praddr(addr_t ad); +void gennl(void); +void prtoken(token_p tp, int leadingchar); +void printlabel(int labnum); + +#endif /* MACH_PROTO_NCG_GENCODE_H */ + diff --git a/mach/proto/ncg/glosym.c b/mach/proto/ncg/glosym.c index 4052c1bfe..bbebdf87c 100644 --- a/mach/proto/ncg/glosym.c +++ b/mach/proto/ncg/glosym.c @@ -1,28 +1,24 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - -#include -#include -#include "param.h" -#include "tables.h" -#include "types.h" -#include "glosym.h" - /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * * Author: Hans van Staveren */ - -extern string myalloc(); +#include +#include +#include "param.h" +#include "tables.h" +#include "types.h" +#include "glosym.h" +#include "salloc.h" +#include "glosym.h" glosym_p glolist= (glosym_p) 0; -enterglo(name,romp) string name; word *romp; { - register glosym_p gp; - register i; +void enterglo(string name, word *romp) +{ + glosym_p gp; + int i; gp = (glosym_p) myalloc(sizeof *gp); gp->gl_next = glolist; @@ -33,8 +29,9 @@ enterglo(name,romp) string name; word *romp; { glolist = gp; } -glosym_p lookglo(name) string name; { - register glosym_p gp; +glosym_p lookglo(string name) +{ + glosym_p gp; for (gp=glolist;gp != (glosym_p) 0; gp=gp->gl_next) if (strcmp(gp->gl_name,name)==0) diff --git a/mach/proto/ncg/glosym.h b/mach/proto/ncg/glosym.h index 1449b9b1b..3ffe4a0f7 100644 --- a/mach/proto/ncg/glosym.h +++ b/mach/proto/ncg/glosym.h @@ -3,6 +3,8 @@ * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_GLOSYM_H +#define MACH_PROTO_NCG_GLOSYM_H typedef struct glosym { struct glosym *gl_next; @@ -10,4 +12,7 @@ typedef struct glosym { word gl_rom[MAXROM+1]; } glosym_t,*glosym_p; -glosym_p lookglo(); +void enterglo(string name, word *romp); +glosym_p lookglo(string name); + +#endif /* MACH_PROTO_NCG_GLOSYM_H */ \ No newline at end of file diff --git a/mach/proto/ncg/label.c b/mach/proto/ncg/label.c index 88e36ee2e..aed24b32a 100644 --- a/mach/proto/ncg/label.c +++ b/mach/proto/ncg/label.c @@ -3,13 +3,15 @@ #include "types.h" #include "param.h" #include "label.h" +#include "salloc.h" +#include "utils.h" +#include "label.h" static label_p label_list = (label_p)0; -extern char *myalloc(); -add_label(num, height, flth) +void add_label(int num, int height, int flth) { - register label_p lbl = (label_p)0; + label_p lbl = (label_p)0; if (height <= 0) return; if (flth != TRUE && flth != FALSE) @@ -23,10 +25,9 @@ add_label(num, height, flth) label_list = lbl; } -label_p get_label(num) -register word num; +label_p get_label(word num) { - register label_p tmp = label_list; + label_p tmp = label_list; while (tmp != (label_p)0) { if (tmp->lb_number == num) return tmp; @@ -35,7 +36,7 @@ register word num; return (label_p)0; } -kill_labels() +void kill_labels() { label_p tmp; diff --git a/mach/proto/ncg/label.h b/mach/proto/ncg/label.h index 96c290be6..90da6bf9d 100644 --- a/mach/proto/ncg/label.h +++ b/mach/proto/ncg/label.h @@ -4,6 +4,8 @@ * * Author: Hans van Eck. */ +#ifndef MACH_PROTO_NCG_LABEL_H +#define MACH_PROTO_NCG_LABEL_H typedef struct label *label_p; @@ -14,4 +16,8 @@ struct label { short lb_fallthrough; }; -extern label_p get_label(); +void add_label(int num, int height, int flth); +label_p get_label(word num); +void kill_labels(); + +#endif /* MACH_PROTO_NCG_LABEL_H */ \ No newline at end of file diff --git a/mach/proto/ncg/mach_dep.h b/mach/proto/ncg/mach_dep.h new file mode 100644 index 000000000..658c4d808 --- /dev/null +++ b/mach/proto/ncg/mach_dep.h @@ -0,0 +1,21 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_MACH_DEP_H +#define MACH_PROTO_NCG_MACH_DEP_H + +/* Function prototypes that must be exported by specific machines */ +void regreturn(void); +void mes(word type); +void prolog(full nlocals); +void con_part(int sz, word w); +void con_mult(word sz); +void con_float(void); +int regscore(long off, int size, int typ, int score, int totyp); +void i_regsave(); +void f_regsave(); +void regsave(char *regstr, long off, int size); +void regreturn(); + +#endif /* MACH_PROTO_NCG_MACH_DEP_H */ diff --git a/mach/proto/ncg/main.c b/mach/proto/ncg/main.c index 7f214f349..7f24415d3 100644 --- a/mach/proto/ncg/main.c +++ b/mach/proto/ncg/main.c @@ -1,31 +1,47 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - -#include "param.h" -#include "tables.h" -#include "mach.h" - /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * * Author: Hans van Staveren */ +#include +#include "mach.h" +#include "param.h" +#include "tables.h" +#include "types.h" +#include "param.h" +#include "data.h" +#include +#include "tables.h" +#include "mach.h" +#include "fillem.h" +#include "gencode.h" +#include "codegen.h" +#include "subr.h" +#include "utils.h" char *progname; extern char startupcode[]; -extern unsigned codegen(); int maxply=1; #ifndef NDEBUG int Debug=0; char *strtdebug=""; #endif -main(argc,argv) char **argv; { - register unsigned n; +static unsigned int ggd(unsigned int a, unsigned int b) +{ + unsigned int c; + + do { + c = a%b; a=b; b=c; + } while (c!=0); + return(a); +} + +int main(int argc, char *argv[]) +{ + unsigned n; extern unsigned cc1,cc2,cc3,cc4; - unsigned ggd(); progname = argv[0]; while (--argc && **++argv == '-') { @@ -83,12 +99,3 @@ main(argc,argv) char **argv; { codegen(startupcode,maxply,TRUE,MAXINT,0); error("Bombed out of codegen"); } - -unsigned ggd(a,b) register unsigned a,b; { - register unsigned c; - - do { - c = a%b; a=b; b=c; - } while (c!=0); - return(a); -} diff --git a/mach/proto/ncg/move.c b/mach/proto/ncg/move.c index 65e448ecb..8eddcd012 100644 --- a/mach/proto/ncg/move.c +++ b/mach/proto/ncg/move.c @@ -1,7 +1,9 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include "assert.h" #include "param.h" #include "tables.h" @@ -10,21 +12,20 @@ static char rcsid[] = "$Id$"; #include "data.h" #include "result.h" #include "extern.h" +#include "subr.h" +#include "reg.h" +#include "utils.h" +#include "codegen.h" -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ +#include "move.h" -move(tp1,tp2,ply,toplevel,maxcost) token_p tp1,tp2; unsigned maxcost; { - register move_p mp; - unsigned t; - register struct reginfo *rp; - register byte *tdpb; +int move(token_p tp1, token_p tp2, int ply, int toplevel, unsigned int maxcost) +{ + move_p mp; + unsigned int t; + struct reginfo *rp; + byte *tdpb; int i; - unsigned codegen(); if (eqtoken(tp1,tp2)) return(0); @@ -95,15 +96,15 @@ move(tp1,tp2,ply,toplevel,maxcost) token_p tp1,tp2; unsigned maxcost; { #define cocoreg machregs[0].r_contents -setcc(tp) token_p tp; { - +void setcc(token_p tp) +{ cocoreg = *tp; } -test(tp,ply,toplevel,maxcost) token_p tp; unsigned maxcost; { - register test_p mp; - unsigned t; - unsigned codegen(); +int test(token_p tp, int ply, int toplevel, unsigned int maxcost) +{ + test_p mp; + unsigned int t; if (cocoreg.t_token!=0) { if (eqtoken(tp,&cocoreg)) diff --git a/mach/proto/ncg/move.h b/mach/proto/ncg/move.h new file mode 100644 index 000000000..32308c7ec --- /dev/null +++ b/mach/proto/ncg/move.h @@ -0,0 +1,14 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_MOVE_H +#define MACH_PROTO_NCG_MOVE_H + +/* mach/proto/ncg/move.c */ +int move(token_p tp1, token_p tp2, int ply, int toplevel, unsigned int maxcost); +void setcc(token_p tp); +int test(token_p tp, int ply, int toplevel, unsigned int maxcost); + +#endif /* MACH_PROTO_NCG_MOVE_H */ + diff --git a/mach/proto/ncg/nextem.c b/mach/proto/ncg/nextem.c index 2c76e3ced..33ad3f3e4 100644 --- a/mach/proto/ncg/nextem.c +++ b/mach/proto/ncg/nextem.c @@ -1,7 +1,9 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include #include #include "assert.h" @@ -12,21 +14,18 @@ static char rcsid[] = "$Id$"; #include "data.h" #include "result.h" #include "extern.h" - -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ +#include "compute.h" +#include "fillem.h" +#include "nextem.h" #ifndef NDEBUG #include extern char em_mnem[][4]; #endif -byte *trypat(bp,len) register byte *bp; { - register patlen,i; +byte *trypat(byte *bp, int len) +{ + int patlen,i; result_t result; getint(patlen,bp); @@ -83,8 +82,8 @@ byte *trypat(bp,len) register byte *bp; { extern char em_flag[]; -argtyp(mn) { - +int argtyp(int mn) +{ switch(em_flag[mn-sp_fmnem]&EM_PAR) { case PAR_W: case PAR_S: @@ -101,13 +100,14 @@ argtyp(mn) { } } -byte *nextem(toplevel) { - register i; +byte *nextem(int toplevel) +{ + int i; short hash[3]; - register byte *bp; + byte *bp; byte *cp; int index; - register struct emline *ep; + struct emline *ep; if (toplevel) { if (nemlines && emp>emlines) { diff --git a/mach/proto/ncg/nextem.h b/mach/proto/ncg/nextem.h new file mode 100644 index 000000000..4734b3aca --- /dev/null +++ b/mach/proto/ncg/nextem.h @@ -0,0 +1,14 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_NEXTEM_H +#define MACH_PROTO_NCG_NEXTEM_H + +/* mach/proto/ncg/nextem.c */ +byte *trypat(byte *bp, int len); +int argtyp(int mn); +byte *nextem(int toplevel); + +#endif /* MACH_PROTO_NCG_NEXTEM_H */ + diff --git a/mach/proto/ncg/param.h b/mach/proto/ncg/param.h index 1a6c84415..3a60ec520 100644 --- a/mach/proto/ncg/param.h +++ b/mach/proto/ncg/param.h @@ -3,6 +3,8 @@ * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_PARAM_H +#define MACH_PROTO_NCG_PARAM_H #define BMASK 0377 #define BSHIFT 8 @@ -24,3 +26,5 @@ #define MAXEMLINES 20 #define MAXFSTACK 20 #define MAXTDBUG 32 + +#endif /* MACH_PROTO_NCG_PARAM_H */ \ No newline at end of file diff --git a/mach/proto/ncg/pmfile b/mach/proto/ncg/pmfile index 1a047b669..1c23b801b 100644 --- a/mach/proto/ncg/pmfile +++ b/mach/proto/ncg/pmfile @@ -41,6 +41,7 @@ proto_ncg = cprogram { cfile_with_tables (d.."state.c"), cfile_with_tables (d.."subr.c"), cfile_with_tables (d.."var.c"), + cfile_with_tables (d.."utils.c"), cfile { ith { make_tables, i = 1 }, diff --git a/mach/proto/ncg/reg.c b/mach/proto/ncg/reg.c index 50a1b87b5..8ebd9ba36 100644 --- a/mach/proto/ncg/reg.c +++ b/mach/proto/ncg/reg.c @@ -1,7 +1,9 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include "assert.h" #include "param.h" #include "tables.h" @@ -10,18 +12,15 @@ static char rcsid[] = "$Id$"; #include "data.h" #include "result.h" #include "extern.h" +#include "utils.h" -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ +#include "reg.h" -chrefcount(regno,amount,tflag) { - register struct reginfo *rp; +void chrefcount(int regno, int amount, int tflag) +{ + struct reginfo *rp; #if MAXMEMBERS != 0 - register i, tmp; + int i, tmp; #endif rp= &machregs[regno]; @@ -40,10 +39,11 @@ chrefcount(regno,amount,tflag) { #endif } -getrefcount(regno, tflag) { - register struct reginfo *rp; +int getrefcount(int regno, int tflag) +{ + struct reginfo *rp; #if MAXMEMBERS != 0 - register i,maxcount, tmp; + int i,maxcount, tmp; #endif rp= &machregs[regno]; @@ -61,13 +61,15 @@ getrefcount(regno, tflag) { } return(maxcount); } + return 0; #endif } -erasereg(regno) { - register struct reginfo *rp = &machregs[regno]; - register int i; - register byte *tdpb; +void erasereg(int regno) +{ + struct reginfo *rp = &machregs[regno]; + int i; + byte *tdpb; #if MAXMEMBERS==0 rp->r_contents.t_token = 0; @@ -106,7 +108,7 @@ erasereg(regno) { } #else extern short clashlist[]; - register short *sp = &clashlist[rp->r_iclash]; + short *sp = &clashlist[rp->r_iclash]; rp->r_contents.t_token = 0; while (*sp) { @@ -149,9 +151,10 @@ erasereg(regno) { #endif } -cleanregs() { - register struct reginfo *rp; - register i; +void cleanregs() +{ + struct reginfo *rp; + int i; for (rp=machregs;rpr_contents.t_token = 0; @@ -161,9 +164,10 @@ cleanregs() { } #ifndef NDEBUG -inctcount(regno) { - register struct reginfo *rp; - register i; +void inctcount(int regno) +{ + struct reginfo *rp; + int i; rp = &machregs[regno]; #if MAXMEMBERS!=0 @@ -179,10 +183,11 @@ inctcount(regno) { #endif } -chkregs() { - register struct reginfo *rp; - register token_p tp; - register byte *tdpb; +void chkregs() +{ + struct reginfo *rp; + token_p tp; + byte *tdpb; int i; for (rp=machregs+1;rp #include "data.h" @@ -15,19 +17,17 @@ static char rcsid[] = "$Id$"; #include #include "result.h" #include "extern.h" +#include "utils.h" +#include "salloc.h" +#include "reg.h" +#include "fillem.h" +#include "mach_dep.h" -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ -extern string myalloc(); struct regvar *rvlist; -struct regvar * -linkreg(of,sz,tp,sc) long of; { - register struct regvar *rvlp; +struct regvar *linkreg(long of, int sz, int tp, int sc) +{ + struct regvar *rvlp; rvlp= (struct regvar *) myalloc(sizeof *rvlp); rvlp->rv_next = rvlist; @@ -40,10 +40,11 @@ linkreg(of,sz,tp,sc) long of; { return(rvlp); } -tryreg(rvlp,typ) register struct regvar *rvlp; { +void tryreg(struct regvar *rvlp, int typ) +{ int score; - register i; - register struct regassigned *ra; + int i; + struct regassigned *ra; struct regvar *save; if (typ != reg_any && nregvar[typ]!=0) { @@ -85,10 +86,11 @@ tryreg(rvlp,typ) register struct regvar *rvlp; { } } -fixregvars(saveall) { - register struct regvar *rv; - register rvtyp,i; - +void fixregvars(int saveall) +{ + struct regvar *rv; + int rvtyp,i; + swtxt(); i_regsave(); /* machine dependent initialization */ for (rvtyp=reg_any;rvtyp<=reg_float;rvtyp++) { @@ -108,8 +110,9 @@ fixregvars(saveall) { f_regsave(); } -isregvar(off) long off; { - register struct regvar *rvlp; +int isregvar(long off) +{ + struct regvar *rvlp; for(rvlp=rvlist;rvlp!=0;rvlp=rvlp->rv_next) if(rvlp->rv_off == off) @@ -117,8 +120,9 @@ isregvar(off) long off; { return(-1); } -isregtyp(off) long off; { - register struct regvar *rvlp; +int isregtyp(long off) +{ + struct regvar *rvlp; for(rvlp=rvlist;rvlp!=0;rvlp=rvlp->rv_next) if(rvlp->rv_off == off) @@ -126,9 +130,10 @@ isregtyp(off) long off; { return(-1); } -unlinkregs() { - register struct regvar *rvlp,*t; - register struct regassigned *ra; +void unlinkregs() +{ + struct regvar *rvlp,*t; + struct regassigned *ra; int rvtyp,i; for(rvlp=rvlist;rvlp!=0;rvlp=t) { diff --git a/mach/proto/ncg/regvar.h b/mach/proto/ncg/regvar.h index e04350356..583efd4ee 100644 --- a/mach/proto/ncg/regvar.h +++ b/mach/proto/ncg/regvar.h @@ -3,6 +3,8 @@ * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_REGVAR_H +#define MACH_PROTO_NCG_REGVAR_H struct regvar { struct regvar *rv_next; @@ -21,3 +23,12 @@ struct regassigned { extern struct regvar *rvlist; extern int nregvar[]; extern struct regassigned *regassigned[]; + +struct regvar *linkreg(long of, int sz, int tp, int sc); +void tryreg(struct regvar *rvlp, int typ); +void fixregvars(int saveall); +int isregvar(long off); +int isregtyp(long off); +void unlinkregs(); + +#endif /* MACH_PROTO_NCG_REGVAR_H */ \ No newline at end of file diff --git a/mach/proto/ncg/result.h b/mach/proto/ncg/result.h index 7ceb2f114..ee23d5d7e 100644 --- a/mach/proto/ncg/result.h +++ b/mach/proto/ncg/result.h @@ -4,6 +4,9 @@ */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_RESULT_H +#define MACH_PROTO_NCG_RESULT_H + struct result { int e_typ; /* EV_INT,EV_REG,EV_STR */ union { @@ -19,3 +22,5 @@ struct result { #define EV_ADDR 3 typedef struct result result_t; + +#endif /* MACH_PROTO_NCG_RESULT_H */ \ No newline at end of file diff --git a/mach/proto/ncg/salloc.c b/mach/proto/ncg/salloc.c index 2bafb3fd0..03b4bf5e9 100644 --- a/mach/proto/ncg/salloc.c +++ b/mach/proto/ncg/salloc.c @@ -1,17 +1,3 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - -#include -#include "assert.h" -#include "param.h" -#include "tables.h" -#include "types.h" -#include -#include "data.h" -#include "result.h" -#include "extern.h" - /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". @@ -24,6 +10,18 @@ static char rcsid[] = "$Id$"; * Call salloc(size) to get room for string. * Every now and then call garbage_collect() from toplevel. */ +#include +#include "assert.h" +#include "param.h" +#include "tables.h" +#include "types.h" +#include +#include "data.h" +#include "result.h" +#include "extern.h" +#include "utils.h" + +#include "salloc.h" #define MAXSTAB 1500 #define THRESHOLD 200 @@ -31,8 +29,9 @@ static char rcsid[] = "$Id$"; char *stab[MAXSTAB]; int nstab=0; -string myalloc(size) { - register string p; +string myalloc(int size) +{ + string p; p = (string) malloc((unsigned)size); if (p==0) @@ -40,21 +39,23 @@ string myalloc(size) { return(p); } -myfree(p) string p; { - +void myfree(string p) +{ free(p); } -popstr(nnstab) { - register i; +void popstr(int nnstab) +{ + int i; for (i=nnstab;ilow) { diff --git a/mach/proto/ncg/salloc.h b/mach/proto/ncg/salloc.h new file mode 100644 index 000000000..c30a6ca91 --- /dev/null +++ b/mach/proto/ncg/salloc.h @@ -0,0 +1,18 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_SALLOC_H +#define MACH_PROTO_NCG_SALLOC_H + +/* mach/proto/ncg/salloc.c */ +string myalloc(int size); +void myfree(string p); +void popstr(int nnstab); +char *salloc(int size); +int compar(const void *vp1, const void *vp2); +void garbage_collect(void); +void chkstr(string str, char used[]); + +#endif /* MACH_PROTO_NCG_SALLOC_H */ + diff --git a/mach/proto/ncg/state.c b/mach/proto/ncg/state.c index b65748ac7..dc23e1e5a 100644 --- a/mach/proto/ncg/state.c +++ b/mach/proto/ncg/state.c @@ -1,7 +1,9 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include "assert.h" #include "param.h" #include "tables.h" @@ -11,18 +13,15 @@ static char rcsid[] = "$Id$"; #include "result.h" #include "state.h" #include "extern.h" +#include "salloc.h" +#include "utils.h" -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ +#include "state.h" extern int nstab; /* salloc.c */ -savestatus(sp) register state_p sp; { - +void savestatus(state_p sp) +{ sp->st_sh = stackheight; bmove((short *)fakestack,(short *)sp->st_fs,stackheight*sizeof(token_t)); sp->st_na = nallreg; @@ -38,8 +37,8 @@ savestatus(sp) register state_p sp; { sp->st_ns = nstab; } -restorestatus(sp) register state_p sp; { - +void restorestatus(state_p sp) +{ stackheight = sp->st_sh; bmove((short *)sp->st_fs,(short *)fakestack,stackheight*sizeof(token_t)); nallreg = sp->st_na; @@ -55,8 +54,8 @@ restorestatus(sp) register state_p sp; { popstr(sp->st_ns); } -bmove(from,to,nbytes) register short *from,*to; register nbytes; { - +void bmove(short *from, short *to, int nbytes) +{ if (nbytes<=0) return; assert(sizeof(short)==2 && (nbytes&1)==0); diff --git a/mach/proto/ncg/state.h b/mach/proto/ncg/state.h index 962fd35f8..d69ce1c58 100644 --- a/mach/proto/ncg/state.h +++ b/mach/proto/ncg/state.h @@ -3,6 +3,8 @@ * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_STATE_H +#define MACH_PROTO_NCG_STATE_H typedef struct state { struct state *st_next; /* for linked list */ @@ -20,3 +22,9 @@ typedef struct state { int st_tl; /* tokpatlen */ int st_ns; /* nstab */ } state_t,*state_p; + +void savestatus(state_p sp); +void restorestatus(state_p sp); +void bmove(short *from, short *to, int nbytes); + +#endif /* MACH_PROTO_NCG_STATE_H */ \ No newline at end of file diff --git a/mach/proto/ncg/subr.c b/mach/proto/ncg/subr.c index 7d99ebcee..ecc1cbaaf 100644 --- a/mach/proto/ncg/subr.c +++ b/mach/proto/ncg/subr.c @@ -1,9 +1,12 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Hans van Staveren + */ #include #include +#include #include "assert.h" #include "param.h" #include "tables.h" @@ -12,19 +15,17 @@ static char rcsid[] = "$Id$"; #include "data.h" #include "result.h" #include "extern.h" - -/* - * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. - * See the copyright notice in the ACK home directory, in the file "Copyright". - * - * Author: Hans van Staveren - */ - -string myalloc(); -unsigned codegen(); - -match(tp,tep,optexp) register token_p tp; register set_p tep; { - register bitno; +#include "utils.h" +#include "compute.h" +#include "reg.h" +#include "regvar.h" +#include "codegen.h" +#include "salloc.h" +#include "subr.h" + +int match(token_p tp, set_p tep, int optexp) +{ + int bitno; token_p ct; result_t result; @@ -49,10 +50,11 @@ match(tp,tep,optexp) register token_p tp; register set_p tep; { return(result.e_v.e_con); } -instance(instno,token) register token_p token; { - register inst_p inp; +void instance(int instno, token_p token) +{ + inst_p inp; int i; - register token_p tp; + token_p tp; #if MAXMEMBERS != 0 struct reginfo *rp; #endif @@ -145,8 +147,9 @@ instance(instno,token) register token_p token; { } } -cinstance(instno,token,tp,regno) register token_p token,tp; { - register inst_p inp; +void cinstance(int instno,token_p token, token_p tp, int regno) +{ + inst_p inp; int i; #if MAXMEMBERS != 0 struct reginfo *rp; @@ -240,9 +243,10 @@ cinstance(instno,token,tp,regno) register token_p token,tp; { } } -eqtoken(tp1,tp2) token_p tp1,tp2; { - register i; - register tkdef_p tdp; +int eqtoken(token_p tp1, token_p tp2) +{ + int i; + tkdef_p tdp; if (tp1->t_token!=tp2->t_token) return(0); @@ -276,10 +280,11 @@ eqtoken(tp1,tp2) token_p tp1,tp2; { return(1); } -distance(cindex) { - register char *bp; - register i; - register token_p tp; +int distance(int cindex) +{ + char *bp; + int i; + token_p tp; int tokexp,tpl; int expsize,toksize,exact; int xsekt=0; @@ -355,37 +360,38 @@ distance(cindex) { extern set_t unstackset; -int from_stack(s1) - register set_p s1; +int from_stack(set_p s1) { - register set_p s2 = &unstackset; - register int i; + set_p s2 = &unstackset; + int i; for (i = 0; i < SETSIZE; i++) { if ((s1->set_val[i] & s2->set_val[i]) != 0) return 1; } return 0; } -unsigned costcalc(cost) cost_t cost; { +unsigned int costcalc(cost_t cost) +{ extern unsigned cc1,cc2,cc3,cc4; return(cost.ct_space*cc1/cc2 + cost.ct_time*cc3/cc4); } -ssize(tokexpno) { - +int ssize(int tokexpno) +{ return(machsets[tokexpno].set_size); } -tsize(tp) register token_p tp; { - +int tsize(token_p tp) +{ if (tp->t_token==-1) return(machregs[tp->t_att[0].ar].r_size); return(tokens[tp->t_token].t_size); } #ifdef MAXSPLIT -instsize(tinstno,tp) token_p tp; { +int instsize(int tinstno, token_p tp) +{ inst_p inp; struct reginfo *rp; @@ -418,9 +424,10 @@ instsize(tinstno,tp) token_p tp; { } #endif /* MAXSPLIT */ -tref(tp,amount) register token_p tp; { - register i; - register byte *tdpb; +void tref(token_p tp, int amount) +{ + int i; + byte *tdpb; if (tp->t_token==-1) chrefcount(tp->t_att[0].ar,amount,FALSE); @@ -440,7 +447,8 @@ tref(tp,amount) register token_p tp; { token_t aside[MAXSAVE] ; int aside_length = -1 ; -save_stack(tp) register token_p tp ; { +void save_stack(token_p tp) +{ int i ; token_p tmp = &fakestack[stackheight - 1]; @@ -458,10 +466,11 @@ save_stack(tp) register token_p tp ; { stackheight -= aside_length; } -in_stack(reg) { - register token_p tp ; - register i ; - register tkdef_p tdp ; +int in_stack(int reg) +{ + token_p tp ; + int i ; + tkdef_p tdp ; for ( i=0, tp=aside ; it_token==-1) { @@ -484,8 +493,9 @@ gotone: return 1 ; } -rest_stack() { - register int i ; +void rest_stack() +{ + int i ; assert(aside_length!= -1); #ifndef NDEBUG @@ -499,11 +509,12 @@ rest_stack() { } #ifdef MAXSPLIT -split(tp,ip,ply,toplevel) token_p tp; register int *ip; { - register c2_p cp; +voir split(token_p tp, int *ip, int ply, int toplevel) +{ + c2_p cp; token_t savestack[MAXSAVE]; int ok; - register i; + int i; int diff; token_p stp; int tpl; @@ -533,8 +544,9 @@ found: } #endif /* MAXSPLIT */ -unsigned docoerc(tp,cp,ply,toplevel,forced) token_p tp; register c3_p cp; { - unsigned cost; +unsigned int docoerc(token_p tp, c3_p cp, int ply, int toplevel, int forced) +{ + unsigned int cost; int tpl; /* saved tokpatlen */ save_stack(tp) ; @@ -547,16 +559,17 @@ unsigned docoerc(tp,cp,ply,toplevel,forced) token_p tp; register c3_p cp; { return(cost); } -unsigned stackupto(limit,ply,toplevel) token_p limit; { +unsigned int stackupto(token_p limit, int ply, int toplevel) +{ token_t savestack[MAXFSTACK]; token_p stp; int i,diff; int tpl; /* saved tokpatlen */ int nareg; /* saved nareg */ int areg[MAXALLREG]; - register c1_p cp; - register token_p tp; - unsigned totalcost=0; + c1_p cp; + token_p tp; + int totalcost=0; struct reginfo *rp,**rpp; for (tp=fakestack;tp<=limit;limit--) { @@ -611,11 +624,12 @@ unsigned stackupto(limit,ply,toplevel) token_p limit; { return(totalcost); } -c3_p findcoerc(tp,tep) token_p tp; set_p tep; { - register c3_p cp; +c3_p findcoerc(token_p tp, set_p tep) +{ + c3_p cp; token_t rtoken; - register i; - register struct reginfo **rpp; + int i; + struct reginfo **rpp; for (cp=c3coercs;cp->c3_texpno>=0; cp++) { if (tp!=(token_p) 0) { @@ -648,63 +662,10 @@ c3_p findcoerc(tp,tep) token_p tp; set_p tep; { return(0); /* nothing found */ } -itokcost() { - register tkdef_p tdp; +void itokcost() +{ + tkdef_p tdp; for(tdp=tokens+1;tdp->t_size!=0;tdp++) tdp->t_cost.ct_space = costcalc(tdp->t_cost); } - -/*VARARGS1*/ -error(s,a1,a2,a3,a4,a5,a6,a7,a8) char *s; { - - fprintf(stderr,"Error: "); - fprintf(stderr,s,a1,a2,a3,a4,a5,a6,a7,a8); - fprintf(stderr,"\n"); -#ifdef TABLEDEBUG - ruletrace(); -#endif - out_finish(); - exit(-1); -} - -/*VARARGS1*/ -fatal(s,a1,a2,a3,a4,a5,a6,a7,a8) char *s; { - - fprintf(stderr,"Fatal: "); - fprintf(stderr,s,a1,a2,a3,a4,a5,a6,a7,a8); - fprintf(stderr,"\n"); -#ifdef TABLEDEBUG - ruletrace(); -#endif - out_finish(); - abort(); - exit(-1); -} - -#ifdef TABLEDEBUG - -ruletrace() { - register i; - extern int tablelines[MAXTDBUG]; - extern int ntableline; - extern char *tablename; - - fprintf(stderr,"Last code rules used\n"); - i=ntableline-1; - while(i!=ntableline) { - if (i<0) - i += MAXTDBUG; - if (tablelines[i]!=0) - fprintf(stderr,"\%d: \"%s\", line %d\n",i,tablename,tablelines[i]); - i--; - } -} -#endif - -#ifndef NDEBUG -badassertion(asstr,file,line) char *asstr, *file; { - - fatal("\"%s\", line %d:Assertion \"%s\" failed",file,line,asstr); -} -#endif diff --git a/mach/proto/ncg/subr.h b/mach/proto/ncg/subr.h new file mode 100644 index 000000000..b72235b7d --- /dev/null +++ b/mach/proto/ncg/subr.h @@ -0,0 +1,28 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_SUBR_H +#define MACH_PROTO_NCG_SUBR_H + +/* mach/proto/ncg/subr.c */ +int match(token_p tp, set_p tep, int optexp); +void instance(int instno, token_p token); +void cinstance(int instno, token_p token, token_p tp, int regno); +int eqtoken(token_p tp1, token_p tp2); +int distance(int cindex); +int from_stack(set_p s1); +unsigned int costcalc(cost_t cost); +int ssize(int tokexpno); +int tsize(token_p p); +void tref(token_p tp, int amount); +void save_stack(token_p tp); +int in_stack(int reg); +void rest_stack(void); +unsigned int docoerc(token_p tp, c3_p cp, int ply, int toplevel, int forced); +unsigned int stackupto(token_p limit, int ply, int toplevel); +c3_p findcoerc(token_p tp, set_p tep); +void itokcost(void); + +#endif /* MACH_PROTO_NCG_SUBR_H */ + diff --git a/mach/proto/ncg/types.h b/mach/proto/ncg/types.h index 50fc1aecd..6f0055a15 100644 --- a/mach/proto/ncg/types.h +++ b/mach/proto/ncg/types.h @@ -4,15 +4,17 @@ */ /* $Id$ */ +#ifndef MACH_PROTO_NCG_TYPES_H +#define MACH_PROTO_NCG_TYPES_H + #ifndef TEM_WSIZE -TEM_WSIZE should be defined at this point +#warning TEM_WSIZE should be defined at this point #endif #ifndef TEM_PSIZE -TEM_PSIZE should be defined at this point +#warning TEM_PSIZE should be defined at this point #endif #if TEM_WSIZE>4 || TEM_PSIZE>4 -Implementation will not be correct unless a long integer -has more then 4 bytes of precision. +#error Implementation will not be correct unless a long integer has more then 4 bytes of precision. #endif typedef char byte; @@ -21,10 +23,12 @@ typedef char * string; #if TEM_WSIZE>2 || TEM_PSIZE>2 #define full long #else -#define full int +#define full int #endif #define word long #ifndef WRD_FMT #define WRD_FMT "%ld" #endif /* WRD_FMT */ + +#endif /* MACH_PROTO_NCG_TYPES_H */ \ No newline at end of file diff --git a/mach/proto/ncg/utils.c b/mach/proto/ncg/utils.c new file mode 100644 index 000000000..5154e28b4 --- /dev/null +++ b/mach/proto/ncg/utils.c @@ -0,0 +1,81 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + * + * Author: Manoel Trapier + */ +#include +#include +#include +#include "param.h" +#include "tables.h" +#include "types.h" +#include "data.h" + +#include "gencode.h" + +#include "utils.h" + +#ifdef TABLEDEBUG +static void ruletrace(); +#endif + +/*VARARGS1*/ +void error(char *s, ...) +{ + va_list ap; + fprintf(stderr,"Error: "); + va_start(ap, s); + vfprintf(stderr, s, ap); + va_end(ap); + fprintf(stderr,"\n"); +#ifdef TABLEDEBUG + ruletrace(); +#endif + out_finish(); + exit(-1); +} + +/*VARARGS1*/ +void fatal(char *s, ...) +{ + va_list ap; + fprintf(stderr,"Fatal: "); + va_start(ap, s); + vfprintf(stderr, s, ap); + va_end(ap); + fprintf(stderr,"\n"); +#ifdef TABLEDEBUG + ruletrace(); +#endif + out_finish(); + abort(); + exit(-1); +} + +#ifdef TABLEDEBUG +static void ruletrace() +{ + int i; + extern int tablelines[MAXTDBUG]; + extern int ntableline; + extern char *tablename; + + fprintf(stderr,"Last code rules used\n"); + i=ntableline-1; + while(i!=ntableline) { + if (i<0) + i += MAXTDBUG; + if (tablelines[i]!=0) + fprintf(stderr,"\"%d: \"%s\", line %d\n",i,tablename,tablelines[i]); + i--; + } +} +#endif + +#ifndef NDEBUG +void badassertion(char *asstr, char *file, int line) +{ + fatal("\"%s\", line %d:Assertion \"%s\" failed", file, line, asstr); +} +#endif diff --git a/mach/proto/ncg/utils.h b/mach/proto/ncg/utils.h new file mode 100644 index 000000000..649384deb --- /dev/null +++ b/mach/proto/ncg/utils.h @@ -0,0 +1,14 @@ +/* + * The Amsterdam Compiler Kit + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +#ifndef MACH_PROTO_NCG_UTILS_H +#define MACH_PROTO_NCG_UTILS_H + +/* mach/proto/ncg/utils.c */ +void error(char *s, ...); +void fatal(char *s, ...); +void badassertion(char *asstr, char *file, int line); + +#endif /* MACH_PROTO_NCG_UTILS_H */ + diff --git a/mach/proto/ncg/var.c b/mach/proto/ncg/var.c index f97964835..da6244384 100644 --- a/mach/proto/ncg/var.c +++ b/mach/proto/ncg/var.c @@ -1,20 +1,15 @@ -#ifndef NORCSID -static char rcsid[] = "$Id$"; -#endif - -#include "param.h" -#include "tables.h" -#include "types.h" -#include -#include "data.h" -#include "result.h" - /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * * Author: Hans van Staveren */ +#include "param.h" +#include "tables.h" +#include "types.h" +#include +#include "data.h" +#include "result.h" int stackheight = 0; token_t fakestack[MAXFSTACK];