Merge pull request #211 from kernigh/kernigh-warn

Fewer clang warnings
This commit is contained in:
David Given 2019-11-09 23:52:44 +01:00 committed by GitHub
commit 0bcbaf848a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
192 changed files with 1286 additions and 1006 deletions

View file

@ -97,8 +97,7 @@ int sz;
#include <ctype.h>
#include <flt_arith.h>
int float_cst(str, sz, buf) char *str, *buf;
int sz;
static int float_cst(const char *float_str, int sz, char *buf)
{
int overflow = 0;
flt_arith e;
@ -107,7 +106,7 @@ int sz;
{
return 1;
}
flt_str2flt(str, &e);
flt_str2flt(float_str, &e);
#ifdef IEEEFLOAT
if (sz == 4)
{
@ -115,7 +114,7 @@ int sz;
#ifdef PDPFLOAT
e.flt_exp += 129;
#else
e.flt_exp += 127;
e.flt_exp += 127;
#endif
if (e.flt_mantissa.flt_h_32 == 0)
e.flt_exp = 0;

View file

@ -16,7 +16,7 @@ static char rcs_mh[]= ID_MH ;
*/
void
con_part(sz,w) register sz; word w; {
con_part(int sz, word w) {
while (part_size % sz)
part_size++;

View file

@ -14,7 +14,7 @@ static char rcs_mh[]= ID_MH ;
*/
void
con_part(sz,w) register sz; word w; {
con_part(int sz, word w) {
while (part_size % sz)
part_size++;

View file

@ -18,7 +18,7 @@
#include <stb.h>
void
con_part(sz,w) register sz; word w; {
con_part(int sz, word w) {
while (part_size % sz)
part_size++;
@ -88,7 +88,7 @@ regscore(off,size,typ,score,totyp)
return score;
}
struct regsav_t {
char *rs_reg; /* e.g. "a3" or "d5" */
const char *rs_reg; /* e.g. "a3" or "d5" */
long rs_off; /* offset of variable */
int rs_size; /* 2 or 4 bytes */
} regsav[9];

View file

@ -25,7 +25,7 @@ Something very wrong here!
#define SYNTAX_68020 1
#endif
/* #define FANCY_MODES 1
/* #define FANCY_MODES 1 */
/* On the M68020, there are some real fancy addressing modes.
Their use makes the code a bit shorter, but also much slower.
The FANCY_MODES #define enables the use of these addressing

View file

@ -4,6 +4,10 @@
MAXOP 5;
LABEL_STARTER '.';
{
int plus(const char *, const char *, char *);
}
%%;
X, Y, Z { TRUE };
@ -27,7 +31,7 @@ static int fits16(long l) {
}
/* Tries sum = a + b with signed 16-bit integers. */
int plus(const char *a, const char *b, const char *sum)
int plus(const char *a, const char *b, char *sum)
{
long la, lb, lsum;
char *end;

View file

@ -6,6 +6,13 @@ MAXOP 2;
LABEL_STARTER 'I';
OPC_TERMINATOR ' ';
{
int no_side_effects(char *);
int is_register(char *);
int is_scratchreg(char *);
int carry_dead(char *);
}
%%;
/* useful addressing modes: */

View file

@ -9,10 +9,10 @@
#define newilb(x) fprintf(codefile,"%s:\n",x)
#define newdlb(x) fprintf(codefile,"%s:\n",x)
#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y)
#define newlbss(l,x) fprintf(codefile,".comm %s,%u\n",l,x);
#define newlbss(l,x) fprintf(codefile,".comm %s,%ld\n",l,x);
#define cst_fmt "%d"
#define off_fmt "%d"
#define cst_fmt "%ld"
#define off_fmt "%ld"
#define ilb_fmt "I%x_%x"
#define dlb_fmt "_%d"
#define hol_fmt "hol%d"

View file

@ -4,6 +4,13 @@
MAXOP 5;
LABEL_STARTER '.';
{
int not_using_sp(const char *);
int positive(const char *);
int lift(const char *);
int plus(const char *, const char *, char *);
}
%%;
L1, L2, L3, L4, L5 { not_using_sp(VAL) };
@ -160,7 +167,7 @@ static int liftcmp(const void *a, const void *b) {
int lift(const char *s) {
return bsearch(&s, liftables,
sizeof(liftables) / sizeof(liftables[0]),
sizeof(liftables[0]), liftcmp);
sizeof(liftables[0]), liftcmp) != NULL;
}
@ -170,7 +177,7 @@ static int fits16(long l) {
}
/* Tries sum = a + b with signed 16-bit integers. */
int plus(const char *a, const char *b, const char *sum)
int plus(const char *a, const char *b, char *sum)
{
long la, lb, lsum;
char *end;

View file

@ -106,7 +106,7 @@ extern int curr_token;
int yyparse(void);
/* comm4.c */
void stop(void);
void newmodule(const char *);
void newmodule(char *);
/* comm5.c */
int yylex(void);
void putval(int);

View file

@ -35,6 +35,10 @@ void stop(void) {
exit(nerrors != 0);
}
static void stop_on_signal(int sig) {
stop();
}
int
main(int argc, char **argv)
{
@ -54,9 +58,9 @@ main(int argc, char **argv)
}
progname = *argv++; argc--;
for (p = sigs; i = *p++; )
for (p = sigs; (i = *p++) != 0; )
if (signal(i, SIG_IGN) != SIG_IGN)
signal(i, stop);
signal(i, stop_on_signal);
for (i = 0; i < argc; i++) {
p = argv[i];
if (*p++ != '-')
@ -433,7 +437,7 @@ pass_23(int n)
}
void
newmodule(const char *s)
newmodule(char *s)
{
static char nmbuf[STRINGMAX];

View file

@ -20,6 +20,7 @@ definerule("build_ncg",
"mach/proto/ncg/result.h",
"mach/proto/ncg/state.h",
"mach/proto/ncg/types.h",
"mach/proto/ncg/xmach.h",
"mach/"..e.arch.."/ncg/mach.c",
"mach/"..e.arch.."/ncg/*.h",
}

View file

@ -706,7 +706,7 @@ unsigned codegen(byte* codep, int ply, int toplevel, unsigned costlimit, int for
do
{
npos = exactmatch = 0;
for (rpp = reglist[propno]; rp = *rpp; rpp++)
for (rpp = reglist[propno]; (rp = *rpp) != NULL; rpp++)
if (getrefcount((int)(rp - machregs), FALSE) == 0)
{
pos[npos++] = rp - machregs;

View file

@ -23,6 +23,9 @@ static char rcsid2[] = "$Id$";
#include "regvar.h"
#include <em_reg.h>
#endif
#ifdef USE_TES
#include "label.h"
#endif
#include "extern.h"
/*
@ -80,10 +83,16 @@ static int regallowed=0;
extern char em_flag[];
extern short em_ptyp[];
/* machine dependent */
/*
* Declare the machine dependent functions.
*
* These functions now return void, which is not compatible with
* traditional K&R C. Old mach.c files stop working until one fixes
* them to return void, not int.
*/
void con_part(int, word);
void con_mult(word);
void con_float(void); /* actually returns void, but need K&R C compatibility */
void con_float(void);
void prolog(full nlocals);
void mes(word);
@ -706,8 +715,8 @@ static void savelab(void) {
}
p = argstr;
q = labstr;
while (*q++ = *p++)
;
while ((*q++ = *p++) != '\0')
continue;
}
static void dumplab(void) {

View file

@ -13,7 +13,7 @@ static char rcsid[] = "$Id$";
#include "result.h"
#include "extern.h"
#ifdef USE_TES
#include "mach.h"
#include "xmach.h"
#endif
/*

View file

@ -6,7 +6,7 @@ static char rcsid[] = "$Id$";
#include "param.h"
#include "tables.h"
#include "types.h"
#include "mach.h"
#include "xmach.h"
/*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.

View file

@ -67,7 +67,3 @@ void garbage_collect(void);
void itokcost(void);
void error(const char *s, ...);
void fatal(const char *s, ...);
#ifdef MACH_OPTIONS
void mach_option(char *); /* machine dependent */
#endif

15
mach/proto/ncg/xmach.h Normal file
View file

@ -0,0 +1,15 @@
/*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
/*
* Include "mach.h", then if "mach.h" defines MACH_OPTIONS, also
* declare mach_option(), a machine dependent function.
*/
#include "mach.h"
#ifdef MACH_OPTIONS
void mach_option(char *);
#endif

View file

@ -6,21 +6,18 @@
#include "top.h"
#include "queue.h"
empty_queue(q)
register queue q;
void empty_queue(queue q)
{
q->head = q->tail = (instr_p) 0;
q->qlen = 0;
}
int empty(q)
queue q;
int empty(queue q)
{
return q->qlen == 0;
}
remove_head(q)
register queue q;
void remove_head(queue q)
{
if ( (q->head = q->head->fw) == (instr_p) 0) {
q->tail = (instr_p) 0;
@ -30,9 +27,7 @@ remove_head(q)
q->qlen--;
}
add(q,instr)
register queue q;
register instr_p instr;
void add(queue q, instr_p instr)
{
if (q->qlen++ == 0) {
q->head = q->tail = instr;
@ -45,9 +40,7 @@ add(q,instr)
instr->fw = (instr_p) 0;
}
insert(q,instr)
register queue q;
register instr_p instr;
void insert(queue q, instr_p instr)
{
if (q->qlen++ == 0) {
q->head = q->tail = instr;
@ -60,8 +53,7 @@ insert(q,instr)
instr->bw = (instr_p) 0;
}
join_queues(q1,q2)
register queue q1,q2;
void join_queues(queue q1, queue q2)
{
if (q1->qlen > 0) {
q2->qlen += q1->qlen;

View file

@ -14,3 +14,10 @@ struct queue_t {
#define qhead(q) (q)->head
#define qlength(q) (q)->qlen
#define next(x) (x)->fw
void empty_queue(queue);
int empty(queue);
void remove_head(queue);
void add(queue, instr_p);
void insert(queue, instr_p);
void join_queues(queue, queue);

View file

@ -4,6 +4,7 @@
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@ -13,18 +14,38 @@
/* STANDARD MACHINE-INDEPENT C CODE *************/
extern char *lstrip();
extern instr_p newinstr();
extern instr_p read_instr();
extern instr_p gen_instr();
static void optimize(void);
static bool try_hashentry(int *, queue);
static int hash(queue);
static void fill_window(queue, int);
static void write_first(queue);
static void set_opcode(instr_p);
static bool check_pattern(patdescr_p, queue);
static bool check_operands(patdescr_p, queue);
static void clear_vars(void);
static bool opmatch(templ_p, const char *);
static bool split_operands(instr_p);
static void labeldef(instr_p);
static bool operand(instr_p, int);
static bool remainder_empty(instr_p);
static char *lstrip(char *, const char *);
static bool rstrip(char *, const char *);
static bool unify(const char *, struct variable *);
static void xform(patdescr_p, queue);
static void replacement(patdescr_p, queue);
static instr_p gen_instr(idescr_p);
static instr_p read_instr(void);
static instr_p newinstr(void);
static void oldinstr(instr_p);
static bool op_separator(instr_p);
static bool well_shaped(const char *);
static bool is_letter(char);
struct variable var[NRVARS+1];
struct variable ANY; /* ANY symbol matching any instruction */
static struct variable var[NRVARS+1];
static struct variable ANY; /* ANY symbol matching any instruction */
char *REST; /* Opcode of first instruction not matched by current pattern */
void labeldef();
void set_opcode();
/* Opcode of first instruction not matched by current pattern */
static char *REST;
#include "gen.c"
@ -36,7 +57,7 @@ void set_opcode();
/* Skip white space in the unprocessed part of instruction 'ip' */
#define skip_white(ip) while (is_white(*(ip)->rest_line)) (ip)->rest_line++
main()
int main(void)
{
optimize();
exit(0);
@ -63,7 +84,7 @@ main()
* is written to the output and is removed.
*/
optimize()
static void optimize(void)
{
struct queue_t windowq, backupq;
queue window, backup;
@ -93,11 +114,9 @@ optimize()
bool try_hashentry(list,window)
int *list;
queue window;
static bool try_hashentry(int *list, queue window)
{
register int *pp;
int *pp;
patdescr_p p;
for (pp = list; *pp != -1; pp++) {
@ -126,11 +145,10 @@ bool try_hashentry(list,window)
*/
int hash(w)
queue w;
static int hash(queue w)
{
register char *p;
register sum,i;
char *p;
int sum,i;
instr_p ip;
ip = qhead(w);
@ -147,10 +165,9 @@ int hash(w)
* When end-of-file is encountered it may contain fewer items.
*/
fill_window(w,len)
register queue w;
static void fill_window(queue w, int len)
{
register instr_p ip;
instr_p ip;
while(qlength(w) < len) {
if ((ip = read_instr()) == NIL) break;
@ -160,10 +177,9 @@ fill_window(w,len)
}
}
write_first(w)
queue w;
static void write_first(queue w)
{
register instr_p ip = qhead(w);
instr_p ip = qhead(w);
fputs(ip->line, stdout);
remove_head(w);
@ -173,12 +189,9 @@ write_first(w)
/* Try to recognize the opcode part of an instruction */
void
set_opcode(ip)
register instr_p ip;
static void set_opcode(instr_p ip)
{
register char *p,*q;
char *qlim;
char *p,*q,*qlim;
if (ip->state == JUNK) return;
skip_white(ip);
@ -206,13 +219,10 @@ set_opcode(ip)
/* Check if pattern 'p' matches the current input */
bool check_pattern(p,w)
patdescr_p p;
queue w;
static bool check_pattern(patdescr_p p, queue w)
{
register idescr_p id_p;
idescr_p idlim;
register instr_p ip;
idescr_p id_p, idlim;
instr_p ip;
ip = qhead(w);
ANY.vstate = UNINSTANTIATED;
@ -232,12 +242,10 @@ bool check_pattern(p,w)
bool check_operands(p,w)
patdescr_p p;
queue w;
static bool check_operands(patdescr_p p, queue w)
{
register instr_p ip;
register idescr_p id_p;
instr_p ip;
idescr_p id_p;
int n;
/* fprintf(stderr,"try pattern %d\n",p-patterns); */
@ -263,9 +271,9 @@ bool check_operands(p,w)
/* Reset all variables to uninstantiated */
clear_vars()
static void clear_vars(void)
{
register v;
int v;
for (v = 1; v <= NRVARS; v++) var[v].vstate = UNINSTANTIATED;
}
@ -278,9 +286,7 @@ clear_vars()
* mode-definitions part of the table.
*/
bool opmatch(t,s)
templ_p t;
char *s;
static bool opmatch(templ_p t, const char *s)
{
char *l, buf[MAXOPLEN+1];
bool was_instantiated;
@ -304,10 +310,9 @@ bool opmatch(t,s)
/* Try to recognize the operands of an instruction */
bool split_operands(ip)
register instr_p ip;
static bool split_operands(instr_p ip)
{
register int i;
int i;
bool res;
if (strcmp(ip->opc,"labdef") ==0) {
@ -322,11 +327,9 @@ bool split_operands(ip)
void
labeldef(ip)
register instr_p ip;
static void labeldef(instr_p ip)
{
register char *p;
char *p;
int oplen;
p = ip->rest_line;
@ -344,10 +347,9 @@ labeldef(ip)
/* Try to recognize the next operand of instruction 'ip' */
bool operand(ip,n)
register instr_p ip;
static bool operand(instr_p ip, int n)
{
register char *p;
char *p;
int oplen;
#ifdef PAREN_OPEN
int nesting = 0;
@ -381,8 +383,7 @@ bool operand(ip,n)
* (or contains only white space).
*/
bool remainder_empty(ip)
instr_p ip;
static bool remainder_empty(instr_p ip)
{
skip_white(ip);
return *ip->rest_line == '\n';
@ -393,8 +394,7 @@ bool remainder_empty(ip)
* succeeds then return a pointer to the rest (unmatched part) of 'str'.
*/
char *lstrip(str,ctxt)
register char *str, *ctxt;
static char *lstrip(char *str, const char *ctxt)
{
assert(ctxt != NULLSTRING);
while (*str != '\0' && *str == *ctxt) {
@ -410,10 +410,10 @@ char *lstrip(str,ctxt)
* replace truncate 'str'.
*/
bool rstrip(str,ctxt)
char *str,*ctxt;
static bool rstrip(char *str, const char *ctxt)
{
register char *s, *c;
char *s;
const char *c;
for (s = str; *s != '\0'; s++);
for (c = ctxt; *c != '\0'; c++);
@ -432,9 +432,7 @@ bool rstrip(str,ctxt)
* variable becomes instantiated to the string.
*/
bool unify(str,v)
char *str;
register struct variable *v;
static bool unify(const char *str, struct variable *v)
{
if (v->vstate == UNINSTANTIATED) {
v->vstate = INSTANTIATED;
@ -449,11 +447,9 @@ bool unify(str,v)
/* Transform the working window according to pattern 'p' */
xform(p,w)
patdescr_p p;
queue w;
static void xform(patdescr_p p, queue w)
{
register instr_p ip;
instr_p ip;
int i;
for (i = 0; i < p->patlen; i++) {
@ -471,11 +467,9 @@ xform(p,w)
* Note that we generate instructions in reverser order.
*/
replacement(p,w)
register patdescr_p p;
queue w;
static void replacement(patdescr_p p, queue w)
{
register idescr_p id_p;
idescr_p id_p;
for (id_p = &p->repl[p->replen-1]; id_p >= p->repl; id_p--) {
insert(w,gen_instr(id_p));
@ -490,13 +484,11 @@ replacement(p,w)
* in exactly the same way as normal instructions that are just read in.
*/
instr_p gen_instr(id_p)
idescr_p id_p;
static instr_p gen_instr(idescr_p id_p)
{
char *opc;
char *opc, *s;
instr_p ip;
register templ_p t;
register char *s;
templ_p t;
bool islabdef;
int n;
static char tmp[] = "x";
@ -547,13 +539,12 @@ instr_p gen_instr(id_p)
static bool junk_state = FALSE; /* TRUE while processing a very long line */
instr_p read_instr()
static instr_p read_instr(void)
{
instr_p ip;
register int c;
register char *p;
register FILE *inp = stdin;
char *plim;
int c;
char *p, *plim;
FILE *inp = stdin;
ip = newinstr();
plim = &ip->line[MAXLINELEN];
@ -586,9 +577,9 @@ instr_p read_instr()
static instr_p instr_pool;
int nr_mallocs = 0; /* for statistics */
instr_p newinstr()
static instr_p newinstr(void)
{
register instr_p ip;
instr_p ip;
int i;
if (instr_pool == NIL) {
@ -607,8 +598,7 @@ instr_p newinstr()
return ip;
}
oldinstr(ip)
instr_p ip;
static void oldinstr(instr_p ip)
{
ip->fw = instr_pool;
instr_pool = ip;
@ -616,30 +606,9 @@ oldinstr(ip)
/* Debugging stuff */
badassertion(file,line)
char *file;
unsigned line;
{
fprintf(stderr,"assertion failed file %s, line %u\n",file,line);
error("assertion");
}
/* VARARGS1 */
error(s,a)
char *s,*a;
{
fprintf(stderr,s,a);
fprintf(stderr,"\n");
abort();
exit(-1);
}
/* Low level routines */
bool op_separator(ip)
instr_p ip;
static bool op_separator(instr_p ip)
{
skip_white(ip);
if (*(ip->rest_line) == OP_SEPARATOR) {
@ -652,14 +621,13 @@ bool op_separator(ip)
bool well_shaped(opc)
char *opc;
static bool well_shaped(const char *opc)
{
return is_letter(opc[0]);
}
bool is_letter(c)
static bool is_letter(char c)
{
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}

View file

@ -89,5 +89,3 @@ typedef int bool;
#define NIL (instr_p) 0
#define NULLSTRING (char *) 0
#define assert(x) if(!(x)) badassertion(__FILE__,__LINE__)

View file

@ -11,10 +11,10 @@
#define newilb(x) fprintf(codefile,"%s:\n",x)
#define newdlb(x) fprintf(codefile,"%s:\n",x)
#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y)
#define newlbss(l,x) fprintf(codefile,".comm %s,%u\n",l,x);
#define newlbss(l,x) fprintf(codefile,".comm %s,%ld\n",l,x);
#define cst_fmt "%d"
#define off_fmt "%d"
#define cst_fmt "%ld"
#define off_fmt "%ld"
#define ilb_fmt "I%x_%x"
#define dlb_fmt "_%d"
#define hol_fmt "hol%d"

View file

@ -78,7 +78,7 @@ int flt_cmp(flt_arith *e1, flt_arith *e2);
* digits. They may not both be missing. The decimal point, the e and the
* exponent may be missing.
*/
void flt_str2flt(char *s, flt_arith *e);
void flt_str2flt(const char *s, flt_arith *e);
/** Converts the number indicated by `e` into a string, in a scientific
* notation acceptable for EM. The result is stored in `buf`. At most
* `bufsize` characters are stored. The maximum length needed is

View file

@ -216,7 +216,7 @@ static void add_exponent(register flt_arith *e, int exp)
flt_status = status;
}
void flt_str2flt(char *s, flt_arith *e)
void flt_str2flt(const char *s, flt_arith *e)
{
register int c;
int dotseen = 0;

View file

@ -4,6 +4,7 @@
*/
/* $Id$ */
#include <unistd.h>
#include "system.h"
int

View file

@ -1,14 +1,14 @@
clibrary {
name = "headers",
hdrs = { "./src/*.h" }
hdrs = { "./src/*.h" } -- rm alloc.h
}
cprogram {
name = "llgen",
-- These use pre-LLgen'd versions of LLgen.c, Lpars.c and tokens.c. If
-- LLgen.g gets updated, they need rebuilding. Use the bootstrap script to
-- do this.
-- These use pre-LLgen'd versions of LLgen.c, Lpars.c, Lpars.h, and
-- tokens.c. If LLgen.g or tokens.g gets updated, they need
-- rebuilding. Use the bootstrap target to do this.
srcs = { "./src/*.c" },
deps = { "+headers" },
@ -20,6 +20,20 @@ cprogram {
}
}
-- This bootstrap target rebuilds LLgen's own parser with LLgen.
-- It acts like ./bootstrap.sh but without installing LLgen in PATH.
normalrule {
name = "bootstrap",
ins = "+llgen",
outleaves = { "phony" },
commands = {
"cd %{abspath(cwd()..\"/src\")}",
"%{abspath(ins)} -vvv -x tokens.g LLgen.g",
"echo",
"echo You should now be able to rebuild LLgen with the new parser.",
}
}
definerule("llgen",
{
srcs = { type="targets" },

View file

@ -1,8 +1,6 @@
/* $Id$ */
#ifdef LL_DEBUG
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#define LL_assert(x) assert(x)
#else
#define LL_assert(x) /* nothing */

View file

@ -118,8 +118,8 @@ static struct nonterminal *nonterminals;
/* These functions must be called instead of the original functions in
* 'malloc.h'. They offer a checking allocation mechanism.
*/
static char *Malloc(unsigned);
static char *Realloc(char*, unsigned);
static void *Malloc(size_t);
static void *Realloc(void *, size_t);
@ -164,11 +164,11 @@ void LLnc_recover(void);
static char *Malloc(unsigned size)
static void *Malloc(size_t size)
{
char *p;
void *p;
if ((p = malloc(size)) == (char *)0) {
if ((p = malloc(size)) == NULL) {
fprintf(stderr, "fatal error: out of memory\n");
exit(1);
}
@ -176,11 +176,11 @@ static char *Malloc(unsigned size)
}
static char *Realloc(char *ptr, unsigned size)
static void *Realloc(void *ptr, size_t size)
{
char *p;
void *p;
if ((p = realloc(ptr, size)) == (char *)0) {
if ((p = realloc(ptr, size)) == NULL) {
fprintf(stderr, "fatal error: out of memory\n");
exit(1);
}
@ -195,13 +195,13 @@ static void init_grammar(void)
int i;
terminals = (struct terminal *)
Malloc((unsigned) LLFIRST_NT * sizeof(struct terminal));
Malloc(LLFIRST_NT * sizeof(struct terminal));
for (i = 0; i < LLFIRST_NT; i++) {
(terminals + i)->link = (struct symbol *)0;
}
nonterminals = (struct nonterminal *)
Malloc((unsigned)LLNNONTERMINALS * sizeof(struct nonterminal));
Malloc(LLNNONTERMINALS * sizeof(struct nonterminal));
for (i = 0; i < LLNNONTERMINALS; i++) {
(nonterminals + i)->rule = (struct lhs *)0;
(nonterminals + i)->link = (struct symbol *)0;
@ -637,8 +637,7 @@ static void new_head(struct stacks *stack, struct stack_elt *ptr)
/* buffer full? */
stack->heads_buf_size += LLHEADS_BUF_INCR;
stack->heads_buf = (struct stack_elt **)
Realloc((char *)
stack->heads_buf, (unsigned)
Realloc(stack->heads_buf,
stack->heads_buf_size *
sizeof(struct stack_elt *)
);
@ -677,8 +676,8 @@ static void to_delete(struct stacks *stack, struct stack_elt *ptr)
else if (stack->nr_cleanups == stack->cleanup_buf_size) {
stack->cleanup_buf_size += LLCLEANUP_BUF_INCR;
stack->cleanup_buf = (struct stack_elt **)
Realloc((char *) stack->cleanup_buf,
(unsigned) stack->cleanup_buf_size *
Realloc(stack->cleanup_buf,
stack->cleanup_buf_size *
sizeof(struct stack_elt *));
}
*(stack->cleanup_buf + stack->nr_cleanups) = ptr;
@ -790,8 +789,7 @@ static int join(struct stacks *stack, struct stack_elt *top, int l_ahead)
/* Allocate one more pointer to descendants */
size = se->nr_nexts * sizeof(struct edge);
se->edges = (struct edge *)Realloc((char *) se->edges,
(unsigned) size);
se->edges = (struct edge *)Realloc(se->edges, size);
/* Link it */
(se->edges + se->nr_nexts - 1)->ptr = top->edges->ptr;
@ -904,8 +902,8 @@ static void generate_heads(struct stacks *stack, struct stack_elt *se,
else if (stack->nr_visited == stack->visited_buf_size) {
stack->visited_buf_size += LL_VIS_INCR;
stack->visited_buf = (struct stack_elt **)
Realloc((char *) stack->visited_buf,
(unsigned) stack->visited_buf_size *
Realloc(stack->visited_buf,
stack->visited_buf_size *
sizeof(struct stack_elt *));
}
*(stack->visited_buf + stack->nr_visited) = next_se;
@ -1089,7 +1087,7 @@ static struct stack_elt *split(struct stack_elt *se)
#endif
new_stack->edges = (struct edge *)
Malloc((unsigned)se->nr_nexts * sizeof(struct edge));
Malloc(se->nr_nexts * sizeof(struct edge));
/* Copy gets the same successors as the original */
memcpy((char *) new_stack->edges, (char *) se->edges,
@ -1242,14 +1240,14 @@ static void match_heads(struct stacks *stack, int symb)
if (stack->heads_buf_size == 0) {
stack->heads_buf_size = LLHEADS_BUF_INCR;
stack->heads_buf = (struct stack_elt **)
Malloc((unsigned)stack->heads_buf_size *
Malloc(stack->heads_buf_size *
sizeof(struct stack_elt *));
}
else if (stack->nr_heads == stack->heads_buf_size) {
stack->heads_buf_size += LLHEADS_BUF_INCR;
stack->heads_buf = (struct stack_elt **)
Realloc((char *) stack->heads_buf,
(unsigned) stack->heads_buf_size *
Realloc(stack->heads_buf,
stack->heads_buf_size *
sizeof(struct stack_elt *));
}
*(stack->heads_buf + stack->nr_heads) =

View file

@ -6,7 +6,6 @@
/* $Id$ */
#ifdef LL_DEBUG
#include <assert.h>
#include <stdio.h>
#define LL_assert(x) assert(x)
#else
#define LL_assert(x) /* nothing */
@ -251,7 +250,7 @@ LL_NOSCANDONE(C_IDENT);
ff->ff_name = p;
ff->ff_next = start;
start = ff;
while (ff = ff->ff_next) {
while ((ff = ff->ff_next)) {
if (! strcmp(p, ff->ff_name)) {
error(linecount, "\"%s\" already used in a %%start", p);
break;
@ -474,7 +473,7 @@ LL6_simpleproduction(
{ if (n_alts >= max_alts-2) {
alt_table = (p_gram ) ralloc(
(p_mem) alt_table,
(unsigned)(max_alts+=ALTINCR)*sizeof(t_gram));
(max_alts+=ALTINCR)*sizeof(t_gram));
}
if (t & DEF) {
if (haddefault) {
@ -687,7 +686,7 @@ LL_SAFE(C_ILLEGAL);
if (n_rules >= max_rules-2) {
rule_table = (p_gram) ralloc(
(p_mem) rule_table,
(unsigned)(max_rules+=RULEINCR)*sizeof(t_gram));
(max_rules+=RULEINCR)*sizeof(t_gram));
}
elmcnt++;
rule_table[n_rules++] =
@ -730,7 +729,7 @@ LL7_elem(
{ if (n_rules >= max_rules-2) {
rule_table = (p_gram) ralloc(
(p_mem) rule_table,
(unsigned)(max_rules+=RULEINCR)*sizeof(t_gram));
(max_rules+=RULEINCR)*sizeof(t_gram));
}
kind = FIXED;
cnt = 0;
@ -782,7 +781,7 @@ LLsdecr(4);
if (n_rules >= max_rules-2) {
rule_table = (p_gram) ralloc(
(p_mem) rule_table,
(unsigned)(max_rules+=RULEINCR)*sizeof(t_gram));
(max_rules+=RULEINCR)*sizeof(t_gram));
}
}
elem = *--(q->t_rule);
@ -1314,7 +1313,7 @@ STATIC p_gram copyrule(register p_gram p,int length)
register p_gram t;
p_gram rule;
t = (p_gram) alloc((unsigned) length * sizeof(t_gram));
t = (p_gram) alloc(length * sizeof(t_gram));
rule = t;
while (length--) {
*t++ = *p++;

View file

@ -131,7 +131,7 @@ def { register string p; }
ff->ff_name = p;
ff->ff_next = start;
start = ff;
while (ff = ff->ff_next) {
while ((ff = ff->ff_next)) {
if (! strcmp(p, ff->ff_name)) {
error(linecount, "\"%s\" already used in a %%start", p);
break;
@ -261,7 +261,7 @@ productions(p_gram *p;)
{ if (n_alts >= max_alts-2) {
alt_table = (p_gram ) ralloc(
(p_mem) alt_table,
(unsigned)(max_alts+=ALTINCR)*sizeof(t_gram));
(max_alts+=ALTINCR)*sizeof(t_gram));
}
if (t & DEF) {
if (haddefault) {
@ -348,7 +348,7 @@ simpleproduction(p_gram *p; register int *conflres;)
if (n_rules >= max_rules-2) {
rule_table = (p_gram) ralloc(
(p_mem) rule_table,
(unsigned)(max_rules+=RULEINCR)*sizeof(t_gram));
(max_rules+=RULEINCR)*sizeof(t_gram));
}
elmcnt++;
rule_table[n_rules++] =
@ -363,7 +363,7 @@ simpleproduction(p_gram *p; register int *conflres;)
{ if (n_rules >= max_rules-2) {
rule_table = (p_gram) ralloc(
(p_mem) rule_table,
(unsigned)(max_rules+=RULEINCR)*sizeof(t_gram));
(max_rules+=RULEINCR)*sizeof(t_gram));
}
kind = FIXED;
cnt = 0;
@ -391,7 +391,7 @@ simpleproduction(p_gram *p; register int *conflres;)
if (n_rules >= max_rules-2) {
rule_table = (p_gram) ralloc(
(p_mem) rule_table,
(unsigned)(max_rules+=RULEINCR)*sizeof(t_gram));
(max_rules+=RULEINCR)*sizeof(t_gram));
}
}
elem = *--(q->t_rule);
@ -653,7 +653,7 @@ STATIC p_gram copyrule(register p_gram p,int length)
register p_gram t;
p_gram rule;
t = (p_gram) alloc((unsigned) length * sizeof(t_gram));
t = (p_gram) alloc(length * sizeof(t_gram));
rule = t;
while (length--) {
*t++ = *p++;

View file

@ -5,7 +5,6 @@
/* $Id$ */
#ifdef LL_DEBUG
#include <assert.h>
#include <stdio.h>
#define LL_assert(x) assert(x)
#else
#define LL_assert(x) /* nothing */

View file

@ -17,7 +17,6 @@
*/
#include <stdlib.h>
# include "alloc.h"
# include "types.h"
# include "extern.h"
@ -27,7 +26,7 @@ static string rcsid = "$Id$";
static string e_nomem = "Out of memory";
p_mem alloc(unsigned int size)
p_mem alloc(size_t size)
{
/*
Allocate "size" bytes. Panic if it fails
@ -38,7 +37,7 @@ p_mem alloc(unsigned int size)
return p;
}
p_mem ralloc(p_mem p,unsigned int size)
p_mem ralloc(p_mem p,size_t size)
{
/*
Re-allocate the chunk of memory indicated by "p", to
@ -61,7 +60,7 @@ p_mem new_mem(register p_info p)
be updated each time this routine is called
*/
p_mem rp;
unsigned sz;
size_t sz;
if (p->i_max >= p->i_top) { /* No more free elements */
sz = p->i_size;

View file

@ -1,19 +0,0 @@
/* Copyright (c) 2019 ACK Project.
* See the copyright notice in the ACK home directory,
* in the file "Copyright".
*
* Created on: 2019-02-16
*
*/
#ifndef ALLOC_H_
#define ALLOC_H_
#include "types.h"
p_mem alloc(unsigned int size);
p_mem ralloc(p_mem p,unsigned int size);
p_mem new_mem(register p_info p);
#endif /* ALLOC_H_ */

View file

@ -19,7 +19,6 @@
# include <stdlib.h>
# include <stdio.h>
# include "alloc.h"
# include "types.h"
# include "extern.h"
# include "sets.h"
@ -198,7 +197,7 @@ void do_compute(void)
for (f = files; f < maxfiles; f++)
{
register p_set s;
f->f_used = s = (p_set) alloc((unsigned) n * sizeof(*(f->f_used)));
f->f_used = s = (p_set) alloc(n * sizeof(*(f->f_used)));
for (i = n; i; i--)
*s++ = 0;
for (i = f->f_nonterminals; i != -1; i = p->n_next)
@ -497,9 +496,7 @@ STATIC int nc_first(p_set setp,register p_gram p,int flag)
q = g_getterm(p);
if (flag == 0)
{
if (nc_first(q->t_nc_first,q->t_rule,0))/*nothing*/;
}
(void)nc_first(q->t_nc_first,q->t_rule,0);
if (!noenter) s |= setunion(setp,q->t_nc_first);
p++;
if (r_getkind(q) == STAR ||
@ -512,9 +509,7 @@ STATIC int nc_first(p_set setp,register p_gram p,int flag)
l = g_getlink(p);
if (flag == 0)
{
if (nc_first(l->l_nc_symbs,l->l_rule,0))/*nothing*/;
}
(void)nc_first(l->l_nc_symbs,l->l_rule,0);
if (noenter == 0)
{
s |= setunion(setp,l->l_nc_symbs);
@ -528,14 +523,15 @@ STATIC int nc_first(p_set setp,register p_gram p,int flag)
register p_start subp;
if (!noenter)
if (subpars_sim)
s |= setunion(setp, start_firsts);
else
{
for (subp = g_getsubparse(p); subp;
if (subpars_sim)
s |= setunion(setp, start_firsts);
else
{
for (subp = g_getsubparse(p); subp;
subp = subp->ff_next)
s |= setunion(setp, (&nonterms[subp->ff_nont])->n_nc_first);
s |= setunion(setp, (&nonterms[subp->ff_nont])->n_nc_first);
}
}
p++;
continue;
@ -863,7 +859,7 @@ STATIC void do_lengthcomp(void)
register p_nont p;
p_mem alloc();
length = (p_length) alloc((unsigned) (nnonterms * sizeof(*length)));
length = (p_length) alloc(nnonterms * sizeof(*length));
for (pl = &length[nnonterms - 1]; pl >= length; pl--)
{
pl->val = pl->cnt = INFINITY;

View file

@ -19,6 +19,8 @@
* some variables that are visible in more than one file
*/
# include "types.h"
# define LTEXTSZ 256 /* Size of longest token */
/*
@ -94,22 +96,38 @@ extern p_gram illegal_gram;
extern int strip_grammar;
extern int in_production;
/* LLgen.g */
void LLparse(void);
/* check.c */
void conflchecks(void);
/* compute.c */
void do_compute(void);
int empty(p_gram);
int t_safety(int, int, int, int);
int t_after(int, int, int);
/* gencode.c */
void gencode(int);
/* machdep.c */
void TMPNAM(string);
string libpath(string);
/* main.c */
void error(int lineno,string s,string t);
void warning(int lineno,string s,string t);
void fatal(int lineno,string s,string t);
int empty(register p_gram);
int t_safety(int, int, int, int);
int t_after(int, int, int);
string store(string);
void name_init(void);
p_gram search(int, register string, int);
void co_reach(void);
void install(string, string);
void copyfile(string);
void install(string, string);
/* name.c */
void name_init(void);
string store(string);
p_gram search(int, string, int);
/* reach.c */
void co_reach(void);
#endif /* EXTERN_H_ */

View file

@ -20,7 +20,6 @@
#include <stdlib.h>
#include <stdio.h>
# include "alloc.h"
# include "types.h"
# include "io.h"
# include "extern.h"
@ -102,7 +101,7 @@ STATIC void doclose(FILE *f)
STATIC int *mk_tokenlist(void)
{
register int i = ntokens;
register int *p = (int *) alloc((unsigned) (i * sizeof(int))) + i;
register int *p = (int *) alloc(i * sizeof(int)) + i;
while (i--)
*--p = -1;
@ -295,7 +294,7 @@ STATIC void genrecovery(void)
for (psetl = setptr; psetl < maxptr; psetl++)
prset(*psetl);
fputs(c_arrend, f);
index = (int *) alloc((unsigned) (assval * sizeof(int)));
index = (int *) alloc(assval * sizeof(int));
for (q = index; q < &index[assval];)
*q++ = -1;
for (t = tokens; t < maxt; t++)
@ -344,7 +343,7 @@ STATIC void genncrecovery(void)
fprintf(f, "#define LLFIRST_NT %d\n", assval);
fprintf(f, "#define LLSETSIZE %d\n", nbytes);
index = (int *) alloc((unsigned) (assval * sizeof(int)));
index = (int *) alloc(assval * sizeof(int));
for (q = index; q < &index[assval];) *q++ = -1;
for (t = tokens; t < maxt; t++)
{
@ -988,14 +987,14 @@ STATIC int *dopush(register p_gram p, int safety, int toplevel, int **pp)
/*
* The safety only matters if toplevel != 0
*/
unsigned int i = 100;
size_t i = 100;
register int *ip = (int *) alloc(100 * sizeof(int));
*pp = ip;
for (;;)
{
if (ip - *pp >= i)
if ((size_t)(ip - *pp) >= i)
{
*pp = (int *) ralloc((p_mem) (*pp), (i + 100) * sizeof(int));
ip = *pp + i;

View file

@ -16,12 +16,8 @@
* Machine dependant things
*/
#include <stdio.h>
#ifdef USE_SYS
#include <system.h>
#endif
#include <stdlib.h>
#include <string.h>
# include "alloc.h"
# include "extern.h"
# include "types.h"
@ -33,29 +29,18 @@ static string rcsid5 = "$Id$";
#define LIBDIR "lib"
#endif
void UNLINK(string x)
{
/* Must remove the file "x" */
#ifdef USE_SYS
sys_remove(x); /* systemcall to remove file */
#else
remove(x);
#endif
}
string libpath(string s)
{
/* Must deliver a full pathname to the library file "s" */
register string p;
register int length;
register size_t length;
char* libdir = getenv("LLGEN_LIB_DIR");
if (!libdir)
libdir = LIBDIR;
length = strlen(libdir) + strlen(s) + 2;
p = (string) alloc((unsigned) length);
p = (string) alloc(length);
strcpy(p,libdir);
strcat(p,"/");
strcat(p,s);

View file

@ -33,14 +33,6 @@ STATIC void readgrammar(int, char *[]);
STATIC void doparse(register p_file);
STATIC void comfatal(void);
extern void UNLINK(string);
extern void RENAME(string, string);
extern void TMPNAM(string);
extern string libpath(string);
extern void conflchecks(void);
extern void do_compute(void);
extern void gencode(int);
int main(int argc, register string argv[])
{
register string arg;
@ -210,8 +202,8 @@ int main(int argc, register string argv[])
}
else
gencode(argc);
UNLINK(f_temp);
UNLINK(f_pars);
remove(f_temp);
remove(f_pars);
if (verbose)
{
fprintf(stderr, "number of nonterminals: %d\n", nnonterms);
@ -235,7 +227,7 @@ STATIC void readgrammar(int argc, char *argv[])
/*
* Build the file structure
*/
files = p = (p_file) alloc((unsigned) (argc + 1) * sizeof(t_file));
files = p = (p_file) alloc((argc + 1) * sizeof(t_file));
if (argc-- == 1)
{
finput = stdin;
@ -328,11 +320,11 @@ STATIC void comfatal(void)
if (fact != NULL)
{
fclose(fact);
UNLINK(f_temp);
remove(f_temp);
}
if (fpars != NULL)
fclose(fpars);
UNLINK(f_pars);
remove(f_pars);
exit(EXIT_FAILURE);
}

View file

@ -19,7 +19,6 @@
#include <string.h>
#include <stdio.h>
# include "alloc.h"
# include "types.h"
# include "extern.h"
# include "assert.h"

View file

@ -88,7 +88,7 @@ void save_grammar(FILE *f)
/* Generate some constants in the grammar file */
/* Allocate terms list */
t_list = (struct t_list *) alloc((unsigned) nterms * sizeof(struct t_list));
t_list = (struct t_list *) alloc(nterms * sizeof(struct t_list));
t_list_index = 0;
sub_list = (struct subparse_list *) alloc(nsubstarts * sizeof(struct subparse_list));

View file

@ -63,7 +63,7 @@ p_set get_set(void)
static p_set sets, maxsets;
if ((p = sets) >= maxsets) {
q = p = (p_set) alloc((unsigned) (50*setsize*sizeof(*sets)));
q = p = (p_set) alloc(50*setsize*sizeof(*sets));
maxsets = p + 50 * setsize;
do {
*q++ = 0;
@ -81,7 +81,7 @@ p_set setalloc(void)
register p_set p;
register int size = setsize;
p = (p_set) alloc((unsigned) (size * sizeof(*p))) + size;
p = (p_set) alloc(size * sizeof(*p)) + size;
do {
*--p = 0;
} while (--size);

View file

@ -6,7 +6,6 @@
/* $Id$ */
#ifdef LL_DEBUG
#include <assert.h>
#include <stdio.h>
#define LL_assert(x) assert(x)
#else
#define LL_assert(x) /* nothing */
@ -368,7 +367,7 @@ int input(void)
*/
register int c;
if (c = backupc) {
if ((c = backupc)) {
/* Last char was "unput()". Deliver it again
*/
backupc = 0;

View file

@ -360,7 +360,7 @@ int input(void)
*/
register int c;
if (c = backupc) {
if ((c = backupc)) {
/* Last char was "unput()". Deliver it again
*/
backupc = 0;

View file

@ -18,6 +18,8 @@
* Type and structure definitions
*/
#include <stddef.h> /* size_t */
typedef int *p_set; /* pointer to bitset */
typedef char *p_mem; /* pointer to some core */
typedef char *string;
@ -259,14 +261,19 @@ typedef struct info_alloc {
/*
* Structure used for dynamically growing arrays
*/
unsigned i_size; /* Size of the array */
unsigned i_esize; /* Size of an element */
unsigned i_incr; /* When filled, add room for i_incr elements */
size_t i_size; /* Size of the array */
size_t i_esize; /* Size of an element */
size_t i_incr; /* When filled, add room for i_incr elements */
p_mem i_ptr; /* ptr to base of array */
p_mem i_max; /* ptr to first free */
p_mem i_top; /* ptr to top of array */
} t_info, *p_info;
/* alloc.c */
p_mem alloc(size_t);
p_mem ralloc(p_mem, size_t);
p_mem new_mem(p_info);
# ifdef NDEBUG
# define STATIC static
# else /* not NDEBUG */

View file

@ -64,6 +64,9 @@ typedef struct
/* Own routines */
/* files.h */
extern void rmtemps(void);
/* rmach.c */
extern void setlist(char*);
@ -80,6 +83,7 @@ extern void fatal(const char*, ...);
extern void vprint(const char*, ...);
extern void fuerror(const char*, ...);
extern void werror(const char*, ...);
extern void error(const char*, ...);
extern void quit(int);
extern char* keeps(const char*);
#define throws(str) free(str)

View file

@ -169,7 +169,7 @@ static void varinit(void)
register char* envstr;
extern char* em_dir;
if (envstr = getenv("ACKDIR"))
if ((envstr = getenv("ACKDIR")) != NULL)
{
em_dir = keeps(envstr);
}

View file

@ -22,10 +22,12 @@ FILE *dmach ;
int offset ;
void readm();
void start(const char *) ;
void stop(int) ;
void readm(void) ;
main(argc,argv) char **argv ; {
register i ;
int main(int argc, char **argv) {
int i ;
start(argv[1]) ;
for ( i=2 ; i<argc ; i++ ) {
@ -36,7 +38,7 @@ main(argc,argv) char **argv ; {
return 0 ;
}
start(dir) char *dir ; {
void start(const char *dir) {
tail= dname ;
while ( *dir ) {
*tail++ = *dir ++ ;
@ -53,14 +55,14 @@ start(dir) char *dir ; {
fprintf(intab,"char intable[] = {\n") ;
}
stop(filled) {
void stop(int filled) {
fprintf(dmach,"\t{\"\",\t-1\t}\n} ;\n") ;
if ( !filled ) fprintf(intab,"\t0\n") ;
fprintf(intab,"\n} ;\n") ;
fclose(dmach); fclose(intab) ;
}
FILE *do_open(file) char *file ; {
FILE *do_open(const char *file) {
FILE *fd;
strcpy(tail,file) ;
@ -100,7 +102,7 @@ readm() {
fprintf(stderr,"warning: non-ascii in %s\n",fname) ;
fprintf(intab,"%4d,",token) ;
} else {
fprintf(intab," 0,",token) ;
fprintf(intab," 0,") ;
break ;
}
} else if ( isprint(token) ) {

View file

@ -4,6 +4,7 @@
*
*/
#include <sys/wait.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

View file

@ -113,12 +113,12 @@ static void try(list_elem *f_scan, const char *suffix) {
*/
register trf *sneak ;
sneak= trafo ;
while( sneak=sneak->t_next ) {
while( (sneak=sneak->t_next) ) {
sneak->t_scan=YES ;
}
scan_found() ;
sneak= trafo ;
while( sneak=sneak->t_next ) {
while( (sneak=sneak->t_next) ) {
sneak->t_scan=NO ;
}
return ;

View file

@ -317,7 +317,8 @@ static growstring scanvars(const char* line)
{
case A_VAR:
gr_add(&name, 0);
if (tr = getvar(gr_start(name)))
tr = getvar(gr_start(name));
if (tr != NULL)
{
while (*tr)
{
@ -333,7 +334,8 @@ static growstring scanvars(const char* line)
break;
case C_VAR:
gr_add(&name, 0);
if (tr = getvar(gr_start(name)))
tr = getvar(gr_start(name));
if (tr != NULL)
{
while (*tr)
{

View file

@ -50,7 +50,6 @@ int setfiles(trf *);
void disc_files(trf *);
void disc_inputs(trf *);
void rmfile(path *);
void rmtemps(void);
void add_input(path *, trf *);
/* run.c */

View file

@ -785,7 +785,7 @@ static void verbose(void)
fprintf(stderr, "Sets %d(%d)\n", nmachsets, MAXSETS);
fprintf(stderr, "Tokeninstances %d(%d)\n", narinstance, MAXINSTANCE);
fprintf(stderr, "Strings %d(%d)\n", ncodestrings, MAXSTRINGS);
fprintf(stderr, "Enodes %d(%d)\n", lastnode - nodes, MAXNODES);
fprintf(stderr, "Enodes %d(%d)\n", (int)(lastnode - nodes), MAXNODES);
fprintf(stderr, "Patbytes %d(%d)\n", npatbytes, MAXPATTERN);
}

View file

@ -62,9 +62,7 @@ STATIC int Sbo; /* #optimizations found */
STATIC line_p last_code(lines,skip_pseu)
line_p lines;
bool skip_pseu;
STATIC line_p last_code(line_p lines, bool skip_pseu)
{
/* Determine the last line of a list */
@ -82,12 +80,11 @@ STATIC short cc_tab[12] =
op_zne,op_bne,op_zgt,op_bgt,op_zge,op_bge};
STATIC short rev_cond(cond)
short cond;
STATIC short rev_cond(short cond)
{
register i;
register int i;
for (i = 0; i < 12; i++) {
for (i = 0; i < 12; i++) {
if (cond == cc_tab[i]) return cc_tab[11-i];
}
return op_nop;
@ -100,7 +97,7 @@ STATIC bool is_bcc(l)
}
STATIC bo_optloop(p,b,x,bra,bcc)
STATIC void bo_optloop(p,b,x,bra,bcc)
proc_p p;
bblock_p b,x;
line_p bra,bcc;
@ -180,7 +177,7 @@ OUTVERBOSE("branch optimization proc %d block %d\n", curproc->p_id,x->b_id);
STATIC bo_loops(p)
STATIC void bo_loops(p)
proc_p p;
{
Lindex i;
@ -192,7 +189,7 @@ STATIC bo_loops(p)
}
}
STATIC mv_code(b1,b2)
STATIC void mv_code(b1,b2)
bblock_p b1,b2;
{
line_p l,x;
@ -207,8 +204,7 @@ STATIC mv_code(b1,b2)
}
}
void
bo_switch(b)
STATIC void bo_switch(b)
bblock_p b;
{
bblock_p s,x;
@ -256,7 +252,7 @@ OUTVERBOSE("branch optimization in proc %d, block %d",curproc->p_id,b->b_id);
}
}
STATIC bo_extproc(p)
STATIC void bo_extproc(p)
proc_p p;
{
/* Allocate the extended data structures for procedure p */
@ -272,7 +268,7 @@ STATIC bo_extproc(p)
}
STATIC loop_blocks(p)
STATIC void loop_blocks(p)
proc_p p;
{
/* Compute the LP_BLOCKS sets for all loops of p */
@ -288,7 +284,7 @@ STATIC loop_blocks(p)
}
}
STATIC bo_cleanproc(p)
STATIC void bo_cleanproc(p)
proc_p p;
{
/* Allocate the extended data structures for procedure p */
@ -321,7 +317,7 @@ void bo_optimize(void *vp)
main(argc,argv)
int main(argc,argv)
int argc;
char *argv[];
{

View file

@ -11,6 +11,7 @@
#include <em_mes.h>
#include "../share/types.h"
#include "ca.h"
#include "ca_put.h"
#include "../share/debug.h"
#include "../share/def.h"
#include "../share/map.h"
@ -22,18 +23,18 @@ FILE *outfile;
STATIC proc_p thispro;
STATIC outinst(m) {
STATIC void outinst(int m) {
outbyte( (byte) m );
}
STATIC coutshort(i) short i; {
STATIC void coutshort(short i) {
outbyte( (byte) (i&BMASK) );
outbyte( (byte) (i>>8) );
}
STATIC coutint(i) short i; {
STATIC void coutint(short i) {
if (i>= -sp_zcst0 && i< sp_ncst0-sp_zcst0)
outbyte( (byte) (i+sp_zcst0+sp_fcst0) );
@ -43,7 +44,7 @@ STATIC coutint(i) short i; {
}
}
STATIC coutoff(off) offset off; {
STATIC void coutoff(offset off) {
if ((short) off == off)
coutint((short) off);
@ -55,9 +56,7 @@ STATIC coutoff(off) offset off; {
}
STATIC outsym(s,t)
char *s;
int t;
STATIC void outsym(const char *s, int t)
{
register byte *p;
register unsigned num;
@ -85,21 +84,19 @@ STATIC outsym(s,t)
}
STATIC outdsym(dbl)
dblock_p dbl;
STATIC void outdsym(dblock_p dbl)
{
if (dnames[dbl->d_id]) outsym(dnames[dbl->d_id],sp_dnam);
}
STATIC outpsym(p)
proc_p p;
STATIC void outpsym(proc_p p)
{
outsym(pnames[p->p_id],sp_pnam);
}
STATIC outddef(id) short id; {
STATIC void outddef(short id) {
dblock_p dbl;
@ -111,7 +108,7 @@ STATIC outddef(id) short id; {
}
}
STATIC outpdef(p) proc_p p; {
STATIC void outpdef(proc_p p) {
p->p_flags2 |= PF_SYMOUT;
if (p->p_flags1 & PF_EXTERNAL) {
outinst(ps_exp);
@ -120,7 +117,7 @@ STATIC outpdef(p) proc_p p; {
}
STATIC outdocc(obj) obj_p obj; {
STATIC void outdocc(obj_p obj) {
dblock_p dbl;
dbl = obj->o_dblock;
@ -135,7 +132,7 @@ STATIC outdocc(obj) obj_p obj; {
}
STATIC outpocc(p) proc_p p; {
STATIC void outpocc(proc_p p) {
if ((p->p_flags2 & PF_SYMOUT) == 0) {
p->p_flags2 |= PF_SYMOUT;
if ((p->p_flags1 & PF_EXTERNAL) == 0) {
@ -146,8 +143,7 @@ STATIC outpocc(p) proc_p p; {
}
STATIC coutobject(obj)
obj_p obj;
STATIC void coutobject(obj_p obj)
{
/* In general, an object is defined by a global data
* label and an offset. There are two special cases:
@ -169,7 +165,7 @@ STATIC coutobject(obj)
}
STATIC cputstr(abp) register argb_p abp; {
STATIC void cputstr(argb_p abp) {
register argb_p tbp;
register length;
@ -188,8 +184,7 @@ STATIC cputstr(abp) register argb_p abp; {
}
STATIC outnum(n)
int n;
STATIC void outnum(int n)
{
if (n < 256) {
outbyte((byte) sp_ilb1);
@ -201,8 +196,7 @@ STATIC outnum(n)
}
STATIC numlab(n)
int n;
STATIC void numlab(int n)
{
if (n < sp_nilb0) {
outbyte((byte) (n + sp_filb0));
@ -212,8 +206,7 @@ STATIC numlab(n)
}
STATIC cputargs(lnp)
line_p lnp;
STATIC void cputargs(line_p lnp)
{
register arg_p ap;
int cnt = 0;
@ -264,8 +257,7 @@ STATIC cputargs(lnp)
STATIC outoperand(lnp)
line_p lnp;
STATIC void outoperand(line_p lnp)
{
/* Output the operand of instruction lnp */
@ -320,8 +312,7 @@ STATIC outoperand(lnp)
}
STATIC outvisibility(lnp)
line_p lnp;
STATIC void outvisibility(line_p lnp)
{
/* In EM names of datalabels and procedures can be made
* externally visible, so they can be used in other files.
@ -377,9 +368,7 @@ STATIC outvisibility(lnp)
}
cputlines(l,lf)
line_p l;
FILE *lf;
void cputlines(line_p l, FILE *lf)
{
/* Output the lines in Campact assembly language
* format.
@ -405,13 +394,12 @@ cputlines(l,lf)
oldline(lnp);
}
if (lmap != (line_p *) 0) {
oldmap(lmap,llength);
oldmap((void **) lmap,llength);
lmap = (line_p *) 0;
}
}
cputmagic(lf)
FILE *lf;
void cputmagic(FILE *lf)
{
/* write the magic number */

View file

@ -10,5 +10,5 @@
*/
extern cputlines();
extern cputmagic();
void cputlines(line_p, FILE *);
void cputmagic(FILE *);

View file

@ -26,6 +26,7 @@
#include "../share/get.h"
#include "../share/put.h"
#include "../share/def.h"
#include "../share/utils.h"
#include "cf.h"
#include "cf_succ.h"
#include "cf_idom.h"
@ -75,7 +76,7 @@ STATIC short state; /* We use a finite state machine with the
* INIT: initial state
*/
STATIC nextblock()
STATIC void nextblock()
{
/* allocate a new basic block structure and
* set b, bp and lp.
@ -138,12 +139,9 @@ STATIC line_p doread_line(p_out)
return lnp;
}
STATIC bool getbblocks(fp, kind_out, n_out, g_out, l_out)
FILE* fp;
short* kind_out;
short* n_out;
bblock_p* g_out;
line_p* l_out;
STATIC bool
getbblocks(FILE *fp, short *kind_out, short *n_out, bblock_p *g_out,
line_p *l_out)
{
bblock_p head = (bblock_p)0;
line_p headl = (line_p)0;
@ -252,7 +250,7 @@ line_p* l_out;
}
}
STATIC interproc_analysis(p)
STATIC void interproc_analysis(p)
proc_p p;
{
/* Interprocedural analysis of a procedure p determines:
@ -362,7 +360,7 @@ STATIC interproc_analysis(p)
}
}
STATIC cf_cleanproc(p)
STATIC void cf_cleanproc(p)
proc_p p;
{
/* Remove the extended data structures of p */
@ -477,7 +475,7 @@ STATIC bool add_info(q, p)
return diff;
}
STATIC trans_clos(head)
STATIC void trans_clos(head)
proc_p head;
{
/* Compute the transitive closure of the used/changed
@ -508,7 +506,7 @@ STATIC trans_clos(head)
}
}
indir_calls()
STATIC void indir_calls()
{
Cindex i;
proc_p p;
@ -522,7 +520,7 @@ indir_calls()
Cdeleteset(cai_set);
}
main(argc, argv) int argc;
int main(argc, argv) int argc;
char* argv[];
{
FILE* f, *f2, *gf2; /* The EM input, EM output, basic block output */

View file

@ -34,7 +34,7 @@ short dfs_nr;
bblock_p *vertex; /* dynamically allocated array */
STATIC dfs(v)
STATIC void dfs(v)
bblock_p v;
{
/* Depth First Search */
@ -56,7 +56,7 @@ STATIC dfs(v)
STATIC compress(v)
STATIC void compress(v)
bblock_p v;
{
if (v->B_ANCESTOR->B_ANCESTOR != (bblock_p) 0) {
@ -83,7 +83,7 @@ STATIC bblock_p eval(v)
STATIC linkblocks(v,w)
STATIC void linkblocks(v,w)
bblock_p v,w;
{
w->B_ANCESTOR = v;
@ -91,9 +91,7 @@ STATIC linkblocks(v,w)
dominators(r,n)
bblock_p r;
short n;
void dominators(bblock_p r, short n)
{
/* Compute the immediate dominator of every basic
* block in the control flow graph rooted by r.
@ -139,5 +137,6 @@ dominators(r,n)
}
}
r->b_idom = (bblock_p) 0;
oldmap(vertex,n); /* release memory for dynamic array vertex */
/* release memory for dynamic array vertex */
oldmap((void **) vertex,n);
}

View file

@ -9,7 +9,8 @@
*/
extern dominator(); /* (bblock_p head, short n)
void dominators(bblock_p head, short n);
/*
* Compute for every basic block its immediate
* dominator. The dominator relation is hence
* recorded as a tree in which every node contains

View file

@ -83,7 +83,7 @@ STATIC bool inner_loop(l1,l2)
STATIC insrt(b,lpb,s_p)
STATIC void insrt(b,lpb,s_p)
bblock_p b;
lset *lpb;
lset *s_p;
@ -162,7 +162,7 @@ STATIC loop_p org_loop(lp,loops)
STATIC collapse_loops(loops_p)
STATIC void collapse_loops(loops_p)
lset *loops_p;
{
register Lindex li1, li2;
@ -187,7 +187,7 @@ STATIC collapse_loops(loops_p)
}
STATIC loop_per_block(lp)
STATIC void loop_per_block(lp)
loop_p lp;
{
bblock_p b;
@ -205,7 +205,7 @@ STATIC loop_per_block(lp)
STATIC loop_attrib(loops)
STATIC void loop_attrib(loops)
lset loops;
{
/* Compute several attributes */
@ -223,7 +223,7 @@ STATIC loop_attrib(loops)
STATIC nest_levels(loops)
STATIC void nest_levels(loops)
lset loops;
{
/* Compute the nesting levels of all loops of
@ -250,7 +250,7 @@ STATIC nest_levels(loops)
}
STATIC cleanup(loops)
STATIC void cleanup(loops)
lset loops;
{
/* Throw away the LP_BLOCKS sets */
@ -280,7 +280,7 @@ STATIC bool does_exit(b,lp)
}
STATIC mark_succ(b,lp)
STATIC void mark_succ(b,lp)
bblock_p b;
loop_p lp;
{
@ -339,7 +339,7 @@ STATIC void mark_blocks(lp)
STATIC mark_loopblocks(loops)
STATIC void mark_loopblocks(loops)
lset loops;
{
/* Determine for all loops which basic blocks
@ -360,7 +360,7 @@ STATIC mark_loopblocks(loops)
loop_detection(p)
void loop_detection(p)
proc_p p;
{
/* Find all natural loops of procedure p. Every loop is

View file

@ -8,7 +8,7 @@
* L O O P D E T E C T I O N
*/
extern loop_detection(); /* (proc_p p)
void loop_detection(proc_p p); /*
* Detect all loops of procedure p.
* Every basic block of p is assigned
* a set of all loops it is part of.

View file

@ -21,12 +21,13 @@
#include "../share/lset.h"
#include "../share/cset.h"
#include "cf.h"
#include "cf_succ.h"
#include "../share/map.h"
extern char em_flag[];
STATIC succeeds(succ,pred)
STATIC void succeeds(succ,pred)
bblock_p succ, pred;
{
assert(pred != (bblock_p) 0);
@ -75,7 +76,7 @@ STATIC arg_p use_label(arg,b)
STATIC case_flow(instr,desc,b)
STATIC void case_flow(instr,desc,b)
short instr;
line_p desc;
bblock_p b;
@ -176,7 +177,7 @@ STATIC line_p case_descr(lnp)
STATIC last2_instrs(b,last_out,prev_out)
STATIC void last2_instrs(b,last_out,prev_out)
bblock_p b;
line_p *last_out,*prev_out;
{
@ -205,7 +206,7 @@ STATIC last2_instrs(b,last_out,prev_out)
control_flow(head)
void control_flow(head)
bblock_p head;
{
/* compute the successor and predecessor relation

View file

@ -8,7 +8,8 @@
* S U C C E S S O R / P R E D E C E S S O R R E L A T I O N S
*/
extern control_flow(); /* (bblock_p head)
void control_flow(bblock_p head);
/*
* Compute for every basic block
* its successors and predecessors
* in the control flow graph.

View file

@ -134,7 +134,7 @@ STATIC bool is_desirable(text)
}
STATIC cp_loops(b1,b2)
STATIC void cp_loops(b1,b2)
bblock_p b1,b2;
{
/* Copy the loopset of b2 to b1 */
@ -149,7 +149,7 @@ STATIC cp_loops(b1,b2)
}
STATIC jump_cross(l1,l2,b1,b2)
STATIC void jump_cross(l1,l2,b1,b2)
line_p l1,l2;
bblock_p b1,b2;
{
@ -317,7 +317,7 @@ void cj_optimize(void *vp)
}
main(argc,argv)
int main(argc,argv)
int argc;
char *argv[];
{

View file

@ -56,11 +56,11 @@ STATIC bool same_avail(byte kind, avail_p avp1, avail_p avp2)
case BINAIR_OP:
case REMAINDER:
if (commutative(avp1->av_instr & BMASK))
return avp1->av_oleft == avp2->av_oleft &&
avp1->av_oright == avp2->av_oright
return (avp1->av_oleft == avp2->av_oleft &&
avp1->av_oright == avp2->av_oright)
||
avp1->av_oleft == avp2->av_oright &&
avp1->av_oright == avp2->av_oleft
(avp1->av_oleft == avp2->av_oright &&
avp1->av_oright == avp2->av_oleft)
;
else
return avp1->av_oleft == avp2->av_oleft &&
@ -98,7 +98,8 @@ STATIC entity_p result_local(offset size, line_p l)
if (l == (line_p) 0)
return (entity_p) 0;
if (INSTR(l)==op_stl && size==ws || INSTR(l)==op_sdl && size==2*ws) {
if ((INSTR(l)==op_stl && size==ws) ||
(INSTR(l)==op_sdl && size==2*ws)) {
enp = getentity(l, &dummy);
if (is_regvar(enp->en_loc)) {
OUTTRACE("save local found, %ld(LB)", enp->en_loc);

View file

@ -4,6 +4,7 @@
optimizer itself one day ...
*/
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
@ -121,14 +122,15 @@ cleanup()
}
/*VARARGS1*/
static void
fatal(s, s2) char* s;
char* s2;
static void fatal(const char *s, ...)
{
/* A fatal error occurred; exit gracefully */
va_list ap;
va_start(ap, s);
fprint(STDERR, "%s: ", prog_name);
fprint(STDERR, s, s2);
doprnt(STDERR, s, ap);
fprint(STDERR, "\n");
cleanup();
sys_stop(S_EXIT);

View file

@ -52,12 +52,12 @@ lab_id lastlid = 0;
offset mespar = UNKNOWN_SIZE;
/* argumument of ps_par message of current procedure */
extern process_lines();
extern int readline();
extern line_p readoperand();
extern line_p inpseudo();
STATIC void process_lines(FILE *);
STATIC int readline(short *, line_p *);
STATIC line_p readoperand(short);
STATIC line_p inpseudo(short);
main(argc, argv) int argc;
int main(argc, argv) int argc;
char* argv[];
{
/* The input files must be legal EM Compact
@ -133,7 +133,7 @@ char* argv[];
#define END_INSTR 4
#define DELETED_INSTR 5
STATIC add_end()
STATIC void add_end()
{
/* Add an end-pseudo to the current instruction list */
@ -142,7 +142,7 @@ STATIC add_end()
lastline->l_instr = ps_end;
}
process_lines(fout)
STATIC void process_lines(fout)
FILE* fout;
{
line_p lnp;
@ -235,8 +235,7 @@ process_lines(fout)
}
}
int readline(instr_out, lnp_out) short* instr_out;
line_p* lnp_out;
STATIC int readline(short *instr_out, line_p *lnp_out)
{
register line_p lnp;
short n;
@ -310,7 +309,7 @@ line_p* lnp_out;
/* NOTREACHED */
}
line_p readoperand(instr) short instr;
STATIC line_p readoperand(short instr)
{
/* Read the operand of the given instruction.
* Create a line struct and return a pointer to it.
@ -432,7 +431,7 @@ static char* hol_label()
return lastname;
}
line_p inpseudo(n) short n;
STATIC line_p inpseudo(short n)
{
int m;
line_p lnp;

View file

@ -28,8 +28,7 @@
/* opr_size */
offset opr_size(instr)
short instr;
offset opr_size(short instr)
{
switch(instr) {
case op_loe:
@ -96,9 +95,7 @@ STATIC offset argsize(arg)
}
STATIC offset blocksize(pseudo,args)
byte pseudo;
arg_p args;
STATIC offset blocksize(byte pseudo, arg_p args)
{
/* Determine the number of bytes of a datablock */
@ -167,7 +164,7 @@ STATIC arg_p copy_rom(args)
dblockdef(db,n,lnp)
void dblockdef(db,n,lnp)
dblock_p db;
int n;
line_p lnp;
@ -206,10 +203,7 @@ dblockdef(db,n,lnp)
/* combine */
combine(db,l1,l2,pseu)
dblock_p db;
line_p l1,l2;
byte pseu;
void combine(dblock_p db, line_p l1, line_p l2, byte pseu)
{
/* Combine two successive ROMs/CONs (without a data label
* in between into a single ROM. E.g.:
@ -258,7 +252,7 @@ combine(db,l1,l2,pseu)
/* arglist */
STATIC arg_string(length,abp)
STATIC void arg_string(length,abp)
offset length;
register argb_p abp;
{
@ -447,10 +441,7 @@ STATIC obj_p make_object(dbl,off,size)
obj_p object(ident,off,size)
char *ident;
offset off;
offset size;
obj_p object(char *ident, offset off, offset size)
{
dblock_p dbl;

View file

@ -10,35 +10,38 @@
extern offset opr_size(); /* ( short instr )
offset opr_size(short instr); /*
* size of operand of given instruction.
* The operand is an object , so the
* instruction can be loe, zre etc..
*/
extern dblockdef(); /* (dblock_p db, int n, line_p lnp)
void dblockdef(dblock_p db, int n, line_p lnp);
/*
* Fill in d_pseudo, d_size and
* d_values fields of db.
*/
extern combine(); /* (dblock_p db;line_p l1,l2;byte pseu)
void combine(dblock_p db, line_p l1, line_p l2, byte pseu);
/*
* Combine two successive ROMs or CONs
* (with no data label in between)
* into one ROM or CON.
*/
extern line_p arglist(); /* ( int m)
line_p arglist(int m); /*
* Read a list of m arguments. If m
* is 0, then the list is of
* undetermined length; it is
* then terminated by a cend symbol.
*/
extern bool is_datalabel(); /* ( line_p l)
bool is_datalabel(line_p l); /*
* TRUE if l is a data label defining
* occurrence (i.e. its l_instr
* field is ps_sym).
*/
extern dblock_p block_of_lab(); /* (char *ident)
dblock_p block_of_lab(char *ident); /*
* Find the datablock with
* the given name.
*/
extern obj_p object(); /* (char *ident,offset off,short size)
obj_p object(char *ident, offset off, offset size);
/*
* Create an object struct.
*/

View file

@ -95,15 +95,15 @@ offset get_off() {
}
}
STATIC make_string(n) int n; {
STATIC void make_string(n) int n; {
sprintf(string,".%u",n);
}
STATIC inident() {
register n;
STATIC void inident() {
register int n;
register char *p = string;
register c;
register int c;
n = get_int();
while (n--) {
@ -140,7 +140,7 @@ int table3(n) int n; {
}
int table1() {
register n;
register int n;
n = readbyte();
if (n == EOF)
@ -161,7 +161,7 @@ int table1() {
}
int table2() {
register n;
register int n;
n = readbyte();
if ((n < sp_fcst0 + sp_ncst0) && (n >= sp_fcst0)) {
@ -174,10 +174,7 @@ int table2() {
file_init(f,state,length)
FILE *f;
short state;
long length;
void file_init(FILE *f, short state, long length)
{
short n;
@ -193,7 +190,7 @@ file_init(f,state,length)
arch_init(arch)
void arch_init(arch)
FILE *arch;
{
short n;

View file

@ -8,22 +8,24 @@
* L O W L E V E L I / O R O U T I N E S
*/
#include <stdio.h> /* FILE */
extern int table1(); /* ( )
int table1(void); /*
* Read an instruction from the
* Compact Assembly Language input
* file (in 'neutral state').
*/
extern int table2(); /* ( )
int table2(void); /*
* Read an instruction argument.
*/
extern int table3(); /* ( int )
int table3(int); /*
* Read 'Common Table' item.
*/
extern short get_int(); /* ( ) */
extern offset get_off(); /* ( ) */
extern char readchar(); /* ( ) */
extern file_init(); /* (FILE *f, short state, long length)
short get_int(void);
offset get_off(void);
char readchar(void);
void file_init(FILE *f, short state, long length);
/*
* Input file initialization. All
* following read operations will read
* from the given file f. Also checks
@ -32,7 +34,7 @@ extern file_init(); /* (FILE *f, short state, long length)
* If the state is ARCHIVE, length
* specifies the length of the module.
*/
extern arch_init(); /* (FILE *arch)
void arch_init(FILE *arch); /*
* Same as file_init,but opens an
* archive file. So it checks the
* magic number for archives.

View file

@ -22,7 +22,7 @@
#include "../share/files.h"
#include "ic_lib.h"
STATIC skip_string(n)
STATIC void skip_string(n)
offset n;
{
/* Read a string of length n and void it */
@ -60,7 +60,7 @@ STATIC void skip_arguments()
}
}
STATIC bool proc_wanted(name) char* name;
STATIC bool proc_wanted(const char *name)
{
/* See if 'name' is the name of an external procedure
* that has been used before, but for which no body
@ -79,7 +79,7 @@ STATIC bool proc_wanted(name) char* name;
}
}
STATIC bool data_wanted(name) char* name;
STATIC bool data_wanted(const char *name)
{
/* See if 'name' is the name of an externally visible
* data block that has been used before, but for which

View file

@ -9,7 +9,8 @@
*/
extern FILE *next_file(); /* (int argc, char *argv[])
FILE *next_file(int argc, char *argv[]);
/*
* See if there are any more EM input files.
* 'argv' contains the names of the files
* that are passed as arguments to ic.

View file

@ -17,6 +17,7 @@
#include "../share/debug.h"
#include "../share/map.h"
#include "ic.h"
#include "ic_io.h"
#include "ic_lookup.h"
#include "../share/alloc.h"
@ -43,8 +44,7 @@ char *lastname;
lab_id instr_lab(number)
short number;
lab_id instr_lab(short number)
{
register num_p *npp, np;
@ -82,7 +82,7 @@ lab_id instr_lab(number)
/* symlookup */
STATIC unsigned hash(string) char *string; {
STATIC unsigned hash(const char *string) {
register char *p;
register unsigned i,sum;
@ -91,9 +91,7 @@ STATIC unsigned hash(string) char *string; {
return(sum);
}
dblock_p symlookup(name, status)
char *name;
int status;
dblock_p symlookup(const char *name, int status)
{
/* Look up the name of a data block. The name can appear
* in either a defining or applied occurrence (status is
@ -206,9 +204,7 @@ proc_p getproc(status)
/* proclookup */
proc_p proclookup(name, status)
char *name;
int status;
proc_p proclookup(const char *name, int status)
{
register prc_p *ppp, pp;
register proc_p dp;
@ -271,7 +267,7 @@ proc_p proclookup(name, status)
/* cleaninstrlabs */
cleaninstrlabs()
void cleaninstrlabs()
{
register num_p *npp, np, next;
@ -290,7 +286,7 @@ cleaninstrlabs()
/* dump_procnames */
dump_procnames(hash,n,f)
void dump_procnames(hash,n,f)
prc_p hash[];
int n;
FILE *f;
@ -328,7 +324,7 @@ dump_procnames(hash,n,f)
/* cleanprocs */
cleanprocs(hash,n,mask)
void cleanprocs(hash,n,mask)
prc_p hash[];
int n,mask;
{
@ -372,7 +368,7 @@ cleanprocs(hash,n,mask)
/* dump_dblocknames */
dump_dblocknames(hash,n,f)
void dump_dblocknames(hash,n,f)
sym_p hash[];
int n;
FILE *f;
@ -404,7 +400,7 @@ dump_dblocknames(hash,n,f)
/* cleandblocks */
cleandblocks(hash,n,mask)
void cleandblocks(hash,n,mask)
sym_p hash[];
int n,mask;
{

View file

@ -35,42 +35,52 @@ extern sym_p symhash[];
extern prc_p prochash[];
extern num_p numhash[];
extern lab_id instr_lab(); /* ( short number)
lab_id instr_lab(short number); /*
* Maps EM labels to sequential
* integers.
*/
extern dblock_p symlookup(); /* (char *ident, int status)
dblock_p symlookup(const char *ident, int status);
/*
* Look up the data block with
* the given name.
*/
extern dblock_p getsym(); /* ( int status)
dblock_p getsym(int status); /*
* Read and look up a symbol.
* If this is the first occurrence
* of it, then make it external
* (if status=OCCURRING) or
* internal (if DEFINING).
*/
extern proc_p getproc(); /* (int status)
proc_p getproc(int status); /*
* Same as getsym, but for procedure
* names.
*/
extern proc_p proclookup(); /* ( char *ident, int status)
proc_p proclookup(const char *ident, int status);
/*
* Find (in the hashtable) the
* procedure with the given name.
*/
extern cleaninstrlabs(); /* ( )
void cleaninstrlabs(void); /*
* Forget about all instruction labels.
*/
extern dump_procnames(); /* (prc_p hash[], int n, FILE *f)
void dump_procnames(prc_p hash[], int n, FILE *f);
/*
* Save the names of the procedures
* in file f; hash is the hashtable
* used and n is its length.
*/
extern cleanprocs(); /* (prc_p hash[], int n,mask)
void cleanprocs(prc_p hash[], int n, int mask);
/*
* Make the names of all procedures
* for which p_flags1&mask = 0 invisible
*/
extern cleandblocks(); /* (sym_p hash[], int n)
void dump_dblocknames(sym_p hash[], int n, FILE *f);
/*
* Save the names of the EM data
* blocks in FILE f.
*/
void cleandblocks(sym_p hash[], int n, int mask);
/*
* Make the names of all data blocks
* for which d_flags1&mask = 0 invisible
*/

View file

@ -8,6 +8,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <em_path.h>
#include <em_mnem.h>
#include <em_pseu.h>
@ -21,7 +22,9 @@
#include "../share/map.h"
#include "il_aux.h"
#include "il1_anal.h"
#include "il1_aux.h"
#include "il2_aux.h"
#include "il3_change.h"
#include "il3_subst.h"
#include "../share/get.h"
#include "../share/put.h"
@ -56,7 +59,7 @@ int Sbig_caller, Sdispensable, Schangedcallee, Sbigcallee, Sspace, Szeroratio;
* The call descriptors are put in a file (calfile).
*/
pass1(lnam, bnam, cnam) char* lnam, *bnam, *cnam;
STATIC void pass1(const char *lnam, const char *bnam, const char *cnam)
{
FILE* f, *gf, *cf, *ccf; /* The EM input, the basic block graph,
* the call-list file and the calcnt file.
@ -124,8 +127,7 @@ pass1(lnam, bnam, cnam) char* lnam, *bnam, *cnam;
STATIC char cname2[128] = TMP_DIR;
pass2(cnam, space) char* cnam;
long space;
STATIC void pass2(const char *cnam, long space)
{
FILE* cf, *cf2, *ccf;
call_p c, a;
@ -176,7 +178,7 @@ long space;
* EM textfile.
*/
pass3(lnam, lnam2) char* lnam, *lnam2;
void pass3(const char *lnam, const char *lnam2)
{
bool verbose = TRUE;
FILE* lfile, *lfilerand, *lfile2, *sfile;
@ -244,7 +246,7 @@ pass3(lnam, lnam2) char* lnam, *lnam2;
}
}
STATIC il_extptab(ptab)
STATIC void il_extptab(ptab)
proc_p ptab;
{
/* Allocate space for extension of proctable entries.
@ -261,7 +263,7 @@ STATIC il_extptab(ptab)
}
}
STATIC il_cleanptab(ptab)
STATIC void il_cleanptab(ptab)
proc_p ptab;
{
/* De-allocate space for extensions */
@ -275,7 +277,7 @@ STATIC il_cleanptab(ptab)
}
#ifdef VERBOSE
Sdiagnostics()
STATIC void Sdiagnostics()
{
/* print statictical information */
@ -324,7 +326,7 @@ void il_flags(void *vp)
}
}
main(argc, argv) int argc;
int main(argc, argv) int argc;
char* argv[];
{
struct files* files = findfiles(argc, argv);

View file

@ -15,6 +15,7 @@
#include "il.h"
#include "../share/debug.h"
#include "../share/alloc.h"
#include "../share/cset.h"
#include "../share/global.h"
#include "../share/lset.h"
#include "../share/utils.h"
@ -38,7 +39,7 @@
apriori(proctab)
void apriori(proctab)
proc_p proctab;
{
/* For every procedure, see if we can determine
@ -68,7 +69,7 @@ apriori(proctab)
}
STATIC check_labels(p,arglist)
STATIC void check_labels(p,arglist)
proc_p p;
arg_p arglist;
{
@ -91,7 +92,7 @@ STATIC check_labels(p,arglist)
STATIC anal_instr(p,b,cf)
STATIC void anal_instr(p,b,cf)
proc_p p;
bblock_p b;
FILE *cf;
@ -152,7 +153,7 @@ STATIC anal_instr(p,b,cf)
anal_proc(p,cf,ccf)
void anal_proc(p,cf,ccf)
proc_p p;
FILE *cf,*ccf;
{

View file

@ -8,14 +8,16 @@
* I L 1 _ A N A L . H
*/
extern apriori(); /* (proc_p proctab)
void apriori(proc_p proctab);
/*
* For every procedure, see if we can determine
* from the information provided by the previous
* phases of the optimizer that it cannot or should not
* be expanded in line. This will reduce the length
* of the call list.
*/
extern anal_proc(); /* (proc_p p, FILE *cf, *cff)
void anal_proc(proc_p p, FILE *cf, FILE *cff);
/*
* Analyse a procedure. See which formal parameters
* it uses and which procedures it calls.
* cf and ccf are the call-file and the call-count file.

View file

@ -57,7 +57,7 @@ STATIC bool is_reg(off,s)
}
rem_actuals(acts)
void rem_actuals(acts)
actual_p acts;
{
/* remove the actual-list */
@ -73,7 +73,7 @@ rem_actuals(acts)
remov_formals(p)
void remov_formals(p)
proc_p p;
{
/* Remove the list of formals of p */

View file

@ -8,34 +8,36 @@
* I L 1 _ A U X . H
*/
extern bool same_size(); /* (int t1,t2)
bool same_size(int t1, int t2); /*
* See if the two types t1 and t2 have
* the same size.
*/
extern rem_actuals(); /* (actual_p atcs)
void rem_actuals(actual_p acts);/*
* remove an actual-list from core.
*/
extern remov_formals(); /* (proc_p p)
void remov_formals(proc_p p); /*
* Remove the formals-list of p from core.
*/
extern void rem_indir_acc(); /* (proc_p p)
void rem_indir_acc(proc_p p); /*
* Remove formal that may be accessed
* indirectly from formal lists of p
*/
extern bool par_overlap(); /* (offset off1, int t1, offset off2, int t2)
bool par_overlap(offset off1, int t1, offset off2, int t2);
/*
* See if the formal at offset off1 and type t1
* overlaps the formal at offset off2
* and type t2.
*/
extern short looplevel(); /* (bblock_p b)
short looplevel(bblock_p b); /*
* Determine the loop nesting level of b.
*/
extern int proclength(); /* (proc_p p)
int proclength(proc_p p); /*
* Determine the number of EM instructions
* in p. Do not count pseudos.
*/
extern line_p copy_code(); /* (line_p l1,l2)
line_p copy_code(line_p l1, line_p l2);
/*
* copy the code between l1 and l2.
* Pseudos may not be contained in
* the list of instructions. If l1==l2

View file

@ -13,6 +13,7 @@
#include <em_mnem.h>
#include "../share/types.h"
#include "il.h"
#include "il_aux.h"
#include "il1_cal.h"
#include "../share/debug.h"
#include "../share/alloc.h"
@ -91,7 +92,7 @@ STATIC void inc_count(caller,callee)
anal_cal(p,call,b,cf)
void anal_cal(p,call,b,cf)
proc_p p;
line_p call;
bblock_p b;

View file

@ -29,7 +29,8 @@ extern struct class classtab[];
#define CLASS9 9
extern anal_cal(); /* (line_p call, bblock_p b)
void anal_cal(proc_p p, line_p call, bblock_p b, FILE *cf);
/*
* analyze a call instruction;
* try to recognize the actual parameter
* expressions.

View file

@ -70,7 +70,7 @@ formal_p find_formal(p,type,off)
STATIC no_inl_pars(p)
STATIC void no_inl_pars(p)
proc_p p;
{
/* p may not have any in line parameters */
@ -81,7 +81,7 @@ STATIC no_inl_pars(p)
STATIC inc_use(f,b)
STATIC void inc_use(f,b)
formal_p f;
bblock_p b;
{

View file

@ -8,8 +8,8 @@
* I L 1 _ F O R M A L . C
*/
extern void formal(); /* (proc_p p; bblock_p b; offset off;
* int type, usage)
void formal(proc_p p, bblock_p b, offset off, int type, int usage);
/*
* Analyze a reference to a parameter of p.
* The type denotes its size (single,double,
* pointer).

View file

@ -17,6 +17,7 @@
#include "../share/debug.h"
#include "../share/alloc.h"
#include "../share/global.h"
#include "../share/cset.h"
#include "../share/lset.h"
#include "il_aux.h"
#include "il2_aux.h"
@ -34,6 +35,9 @@
#define CHANGED(p) p->p_flags2 |= PF_CHANGED
#define IS_CHANGED(p) (p->p_flags2 & PF_CHANGED)
#ifdef VERBOSE
STATIC void Sstat(proc_p proclist, long space);
#endif
STATIC bool match_pars(fm,act)
@ -220,7 +224,7 @@ STATIC short param_score(c)
assign_ratio(c)
void assign_ratio(c)
call_p c;
{
/* This routine is one of the most important ones
@ -289,7 +293,7 @@ call_p abstract(c)
STATIC adjust_counts(callee,ccf)
STATIC void adjust_counts(callee,ccf)
proc_p callee;
FILE *ccf;
{
@ -389,7 +393,7 @@ STATIC call_p find_origin(c)
STATIC selected(a)
STATIC void selected(a)
call_p a;
{
/* The call a is selected for in line expansion.
@ -406,7 +410,7 @@ STATIC selected(a)
STATIC compare(x,best,space)
STATIC void compare(x,best,space)
call_p x, *best;
long space;
{
@ -450,7 +454,7 @@ STATIC call_p best_one(list,space)
STATIC singles(cals)
STATIC void singles(cals)
call_p cals;
{
/* If a procedure is only called once, this call
@ -486,7 +490,7 @@ STATIC singles(cals)
STATIC single_calls(proclist)
STATIC void single_calls(proclist)
proc_p proclist;
{
proc_p p;
@ -505,7 +509,7 @@ STATIC single_calls(proclist)
select_calls(proclist,ccf,space)
void select_calls(proclist,ccf,space)
proc_p proclist;
FILE *ccf;
long space ;
@ -549,7 +553,7 @@ select_calls(proclist,ccf,space)
STATIC nonnested_calls(cfile)
STATIC void nonnested_calls(cfile)
FILE *cfile;
{
register call_p c,a;
@ -569,7 +573,7 @@ STATIC nonnested_calls(cfile)
STATIC copy_pars(src,dest)
STATIC void copy_pars(src,dest)
call_p src, dest;
{
/* Copy the actual parameters of src to dest. */
@ -589,7 +593,7 @@ STATIC copy_pars(src,dest)
STATIC nest_pars(cals)
STATIC void nest_pars(cals)
call_p cals;
{
/* Recursive auxiliary procedure of add_actuals. */
@ -607,7 +611,7 @@ STATIC nest_pars(cals)
add_actuals(proclist,cfile)
void add_actuals(proclist,cfile)
proc_p proclist;
FILE *cfile;
{
@ -633,7 +637,7 @@ add_actuals(proclist,cfile)
STATIC clean(cals)
STATIC void clean(cals)
call_p *cals;
{
call_p c,next,*cpp;
@ -655,7 +659,7 @@ STATIC clean(cals)
}
cleancals(proclist)
void cleancals(proclist)
proc_p proclist;
{
/* Remove all calls in the P_CALS list of p
@ -672,7 +676,7 @@ cleancals(proclist)
append_abstract(a,p)
void append_abstract(a,p)
call_p a;
proc_p p;
{
@ -698,7 +702,7 @@ append_abstract(a,p)
*/
Sstatist(list,space)
STATIC void Sstatist(list,space)
call_p list;
long space;
{
@ -717,7 +721,7 @@ Sstatist(list,space)
}
}
Sstat(proclist,space)
STATIC void Sstat(proclist,space)
proc_p proclist;
long space;
{

View file

@ -3,22 +3,23 @@
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
extern bool anal_params(); /* (call_p c)
bool anal_params(call_p c); /*
* See which parameters of the call
* may be expanded in line.
* If the formals and actuals do not
* match, return FALSE
*/
extern assign_ratio(); /* (call_p c)
void assign_ratio(call_p c); /*
* Assigna ratio number to the call,
* indicating how desirable it is to
* expand the call in line.
*/
extern call_p abstract(); /* (call_p c)
call_p abstract(call_p c); /*
* Abstract essential information from
* the call.
*/
extern select_calls(); /* (call_p alist; FILE *ccf;short space)
void select_calls(proc_p proclist, FILE *ccf, long space);
/*
* Select the best calls to be expanded.
* Every procedure gets a list of
* selected calls appearing in it.
@ -26,10 +27,11 @@ extern select_calls(); /* (call_p alist; FILE *ccf;short space)
* program is allowed to grow
* (expressed in number of EM instructions).
*/
extern cleancals(); /* (proc_p plist)
void cleancals(proc_p alist); /*
* Remove all calls that were not selected.
*/
extern add_actuals(); /* (proc_p plist; FILE *cfile)
void add_actuals(proc_p plist, FILE *cfile);
/*
* Add the actual parameters to the descriptor abstracts
* of the selected calls.
* the calfile contains the full descriptors of all
@ -37,7 +39,8 @@ extern add_actuals(); /* (proc_p plist; FILE *cfile)
* These two are combined to yield a file of full
* descriptors of the selected calls.
*/
extern append_abstract(); /* (call_p a; proc_p p)
void append_abstract(call_p a, proc_p p);
/*
* Put the call-descriptor abstract in the p_cals
* list of p.
*/

View file

@ -14,7 +14,6 @@
#include "../share/debug.h"
#include "../share/alloc.h"
#include "../share/global.h"
#include "il_aux.h"
#include "il3_aux.h"
@ -33,7 +32,7 @@ line_p last_line(lines)
app_list(list,l)
void app_list(list,l)
line_p list,l;
{
/* Append the list after line l */
@ -53,7 +52,7 @@ app_list(list,l)
rem_line(l)
void rem_line(l)
line_p l;
{
/* Remove a line from the list */

View file

@ -8,13 +8,14 @@
* I L 3 _ A U X . H
*/
extern line_p last_line(); /* (line_p list)
line_p last_line(line_p list); /*
* Find the last line of a list.
*/
extern app_list(); /* (line_p list,l)
void app_list(line_p list, line_p l);
/*
* Put list after l
*/
extern rem_line(); /* (line_p l)
void rem_line(line_p l); /*
* Remove a line from a (doubly linked)
* list.
*/

View file

@ -54,7 +54,7 @@ STATIC line_p par_expr(l,expr)
STATIC rem_text(l1,l2)
STATIC void rem_text(l1,l2)
line_p l1,l2;
{
/* Remove the lines from l1 to l2 (inclusive) */
@ -69,7 +69,7 @@ STATIC rem_text(l1,l2)
STATIC store_tmp(p,l,size)
STATIC void store_tmp(p,l,size)
proc_p p;
line_p l;
offset size;
@ -103,7 +103,7 @@ STATIC store_tmp(p,l,size)
STATIC chg_actuals(c,cal)
STATIC void chg_actuals(c,cal)
call_p c;
line_p cal;
{
@ -131,7 +131,7 @@ STATIC chg_actuals(c,cal)
STATIC rm_callpart(c,cal)
STATIC void rm_callpart(c,cal)
call_p c;
line_p cal;
{
@ -155,7 +155,7 @@ STATIC rm_callpart(c,cal)
chg_callseq(c,cal,l_out)
void chg_callseq(c,cal,l_out)
call_p c;
line_p cal,*l_out;
{
@ -237,7 +237,7 @@ STATIC void act_info(off,acts,ab_off,act_out,off_out)
STATIC store_off(off,l)
STATIC void store_off(off,l)
offset off;
line_p l;
{
@ -251,7 +251,7 @@ STATIC store_off(off,l)
STATIC inl_actual(l,expr)
STATIC void inl_actual(l,expr)
line_p l, expr;
{
/* Expand an actual parameter in line.
@ -281,7 +281,7 @@ STATIC inl_actual(l,expr)
STATIC localref(l,c,ab_off,lb_off)
STATIC void localref(l,c,ab_off,lb_off)
line_p l;
call_p c;
offset ab_off, lb_off;
@ -311,7 +311,7 @@ STATIC localref(l,c,ab_off,lb_off)
STATIC chg_mes(l,c,ab_off,lb_off)
STATIC void chg_mes(l,c,ab_off,lb_off)
line_p l;
call_p c;
offset ab_off, lb_off;
@ -355,7 +355,7 @@ STATIC chg_mes(l,c,ab_off,lb_off)
STATIC chg_ret(l,c,lab)
STATIC void chg_ret(l,c,lab)
line_p l,lab;
call_p c;
{
@ -379,7 +379,7 @@ STATIC chg_ret(l,c,lab)
STATIC mod_instr(l,c,lab,ab_off,lb_off,lab_off)
STATIC void mod_instr(l,c,lab,ab_off,lb_off,lab_off)
line_p l,lab;
call_p c;
offset ab_off,lb_off;
@ -421,7 +421,7 @@ STATIC mod_instr(l,c,lab,ab_off,lb_off,lab_off)
}
modify(text,c,lab,ab_off,lb_off,lab_off)
void modify(text,c,lab,ab_off,lb_off,lab_off)
line_p text,lab;
call_p c;
offset ab_off,lb_off;
@ -453,7 +453,7 @@ modify(text,c,lab,ab_off,lb_off,lab_off)
mod_actuals(nc,c,lab,ab_off,lb_off,lab_off)
void mod_actuals(nc,c,lab,ab_off,lb_off,lab_off)
call_p nc,c;
line_p lab;
offset ab_off,lb_off;
@ -534,7 +534,7 @@ insert(text,l,firstline)
liquidate(p,text)
void liquidate(p,text)
proc_p p;
line_p text;
{

View file

@ -9,7 +9,8 @@
*/
extern chg_callseq(); /* (call_p c; line_p cal, *l_out)
void chg_callseq(call_p c, line_p cal, line_p *l_out);
/*
* Change the calling sequence of
* the call c. The parameters are
* changed and the sequence
@ -19,28 +20,33 @@ extern chg_callseq(); /* (call_p c; line_p cal, *l_out)
* text of the called routine must
* be put.
*/
extern line_p make_label(); /* (line_p l; proc_p p)
line_p make_label(line_p l, proc_p p);
/*
* Make sure that the instruction after
* l contains a label. If this is not
* already the case, create a new label.
*/
extern modify(); /* (line_p text; call_p c; line_p lab;
* offset ab_off, lb_off; int lab_off)
void modify(line_p text, call_p c, line_p lab, offset ab_off,
offset lb_off, int lab_off);
/*
* Modify the EM text of the called
* procedure.
*/
extern mod_actuals(); /* (call_p nc,c; line_p lab;
* offset ab_off, lb_off; int lab_off)
void mod_actuals(call_p nc, call_p c, line_p lab, offset ab_off,
offset lb_off, int lab_off);
/*
* Modify the actual parameters of the
* call nc the same way as the text of
* call c would be modified.
*/
extern void insert(); /* (line_p text,l,firstline)
void insert(line_p text, line_p l, line_p firstline);
/*
* Insert the modified EM text.
* Pseudos are put after the pseudos
* of the caller.
*/
extern liquidate(); /* (proc_p p; line_p text)
void liquidate(proc_p p, line_p text);
/*
* All calls to p were expanded in line,
* so p is no longer needed.
*/

View file

@ -47,9 +47,7 @@ STATIC line_p fetch_text(lf,c)
line_p scan_to_cal(lines,n)
line_p lines;
short n;
line_p scan_to_cal(line_p lines, short n)
{
/* Find the n-th CAL instruction */
@ -65,7 +63,7 @@ line_p scan_to_cal(lines,n)
substitute(lf,c,cal,firstline)
void substitute(lf,c,cal,firstline)
FILE *lf;
call_p c;
line_p cal,firstline;

View file

@ -9,10 +9,12 @@
* I L 3 _ S U B S T . H
*/
extern line_p scan_to_cal(); /* (line_p lines; short n)
line_p scan_to_cal(line_p lines, short n);
/*
* Find the n-th cal instruction.
*/
extern substitute(); /* (FILE *lf;call_p c; line_ pcal,firstline)
void substitute(FILE *lf, call_p c, line_p cal, line_p firstline);
/*
* Perform in line substitution of the call described
* by c. The EM text of the called routine is fetched
* and modified, the calling sequence is changed,

View file

@ -106,7 +106,7 @@ line_p copy_expr(l1)
rem_call(c)
void rem_call(c)
call_p c;
{
actual_p act, nexta;
@ -132,7 +132,7 @@ rem_call(c)
/* rem_graph */
/* remunit */
STATIC short remlines(l)
line_p l;
@ -149,11 +149,7 @@ STATIC short remlines(l)
void
remunit(kind,p,l)
short kind;
proc_p p;
line_p l;
void remunit(short kind, proc_p p, line_p l)
{
register bblock_p b;
bblock_p next;
@ -176,12 +172,13 @@ remunit(kind,p,l)
oldloop(Lelem(pi));
}
Ldeleteset(p->p_loops);
oldmap(lmap,llength);
oldmap(lbmap,llength);
oldmap(bmap,blength);
oldmap(lpmap,lplength);
oldmap((void **) lmap,llength);
oldmap((void **) lbmap,llength);
oldmap((void **) bmap,blength);
oldmap((void **) lpmap,lplength);
}
remcc(head)
void remcc(head)
calcnt_p head;
{
calcnt_p cc, next;
@ -271,8 +268,8 @@ line_p get_text(lf,p_out)
* and labels to basic blocks are not used.
*/
if (*p_out != (proc_p) 0) {
oldmap(lmap,llength);
oldmap(lbmap,llength);
oldmap((void **) lmap,llength);
oldmap((void **) lbmap,llength);
lmap = oldlmap;
lpmap = oldlpmap;
}
@ -309,7 +306,7 @@ calcnt_p getcc(ccf,p)
/* The following routines are only used by the Inline Substitution phase */
STATIC putactuals(alist,cfile)
STATIC void putactuals(alist,cfile)
actual_p alist;
FILE *cfile;
{
@ -336,10 +333,7 @@ STATIC putactuals(alist,cfile)
putcall(c,cfile,level)
call_p c;
FILE *cfile;
short level;
void putcall(call_p c, FILE *cfile, short level)
{
/* output a call */

View file

@ -9,50 +9,57 @@
* I L _ A U X . H
*/
extern int tsize(); /* (int type)
#include <stdio.h> /* FILE */
int tsize(int type); /*
* Determine the size of a variable of
* the given type.
*/
extern line_p duplicate(); /* (line_p lnp)
line_p duplicate(line_p lnp); /*
* Make a duplicate of the given EM
* instruction. Pseudos may not be
* passed as argumnets.
*/
extern line_p copy_expr(); /* (line_p l1)
line_p copy_expr(line_p l1); /*
* copy the expression l1.
* Pseudos may not be contained in
* the list of instructions.
*/
extern rem_call(); /* (call_p c)
void rem_call(call_p c); /*
* Remove a call from main memory.
*/
extern rem_graph(); /* (proc_p p)
void remunit(short kind, proc_p p, line_p l);
/*
* Remove the CFG and EM text of
* a procedure from core.
*/
extern remcc(); /* (calcnt_p head)
void remcc(calcnt_p head); /*
* Remove call-count info from core.
*/
extern call_p getcall(); /* (FILE *cf)
call_p getcall(FILE *cf); /*
* Read a call from the call-file
*/
extern line_p get_text(); /* (FILE *lf; proc_p *p_out)
line_p get_text(FILE *lf, proc_p *p_out);
/*
* Read the EM text of one procedure.
* The procedure read is returned via
* p_out.
*/
extern calcnt_p getcc(); /* (FILE *ccf; proc_p p)
calcnt_p getcc(FILE *ccf, proc_p p);
/*
* Read the call-count information
* of procedure p.
*/
extern putcall(); /* (call_p call; FILE *cfile; short level)
void putcall(call_p call, FILE *cfile, short level);
/*
* Write the call
* with the given id to the given file.
* The level is the nesting level, used by
* putcall when it calls itself recurively.
* It should be 0 on outer levels.
*/
extern long putcc(); /* (calcnt_p head; FILE *ccf)
long putcc(calcnt_p head, FILE *ccf);
/*
* Write call-count information to
* file ccf.
*/

View file

@ -41,16 +41,16 @@ short nrvars;
STATIC int Slv;
STATIC bool mesgflag = FALSE; /* Suppress generation of live/dead info */
STATIC app_block();
STATIC void app_block();
STATIC clean_up()
STATIC void clean_up()
{
local_p *p;
for (p = &locals[1]; p <= &locals[nrlocals]; p++) {
oldlocal(*p);
}
oldmap(locals,nrlocals);
oldmap((void **) locals,nrlocals);
}
@ -137,7 +137,7 @@ STATIC bool is_def(l)
}
STATIC def_use(p)
STATIC void def_use(p)
proc_p p;
{
/* Compute DEF(b) and USE(b), for every basic block b
@ -200,7 +200,7 @@ STATIC def_use(p)
STATIC unite_ins(bbset,setp)
STATIC void unite_ins(bbset,setp)
lset bbset;
cset *setp;
{
@ -218,7 +218,7 @@ STATIC unite_ins(bbset,setp)
STATIC solve_lv(p)
STATIC void solve_lv(p)
proc_p p;
{
/* Solve the data flow equations for Live Variables,
@ -254,7 +254,7 @@ STATIC solve_lv(p)
}
STATIC live_variables_analysis(p)
STATIC void live_variables_analysis(p)
proc_p p;
{
make_localtab(p);
@ -264,7 +264,7 @@ STATIC live_variables_analysis(p)
}
STATIC init_live_dead(b)
STATIC void init_live_dead(b)
bblock_p b;
{
/* For every register variable, see if it is
@ -313,7 +313,7 @@ STATIC line_p make_mesg(mesg,loc)
STATIC block_entry(b,prev)
STATIC void block_entry(b,prev)
bblock_p b,prev;
{
short v,vn;
@ -345,7 +345,7 @@ STATIC block_entry(b,prev)
STATIC app_block(l,b)
STATIC void app_block(l,b)
line_p l;
bblock_p b;
{
@ -369,7 +369,7 @@ STATIC app_block(l,b)
STATIC definition(l,useless_out,v_out,mesgflag)
STATIC void definition(l,useless_out,v_out,mesgflag)
line_p l;
bool *useless_out;
short *v_out;
@ -420,7 +420,7 @@ STATIC definition(l,useless_out,v_out,mesgflag)
STATIC use(l,mesgflag)
STATIC void use(l,mesgflag)
line_p l;
bool mesgflag;
{
@ -451,7 +451,7 @@ STATIC use(l,mesgflag)
STATIC void nothing(line_p l1, line_p l2, offset size)
{ } /* No action to be undertaken at level 0 of parser */
STATIC rem_code(l1,l2,b)
STATIC void rem_code(l1,l2,b)
line_p l1,l2;
bblock_p b;
{
@ -481,9 +481,7 @@ STATIC rem_code(l1,l2,b)
lv_mesg(p,mesgflag)
proc_p p;
bool mesgflag;
STATIC void lv_mesg(proc_p p, bool mesgflag)
{
/* Create live/dead messages for every possible register
* variable of p. A dead-message is put after a "use" of
@ -553,8 +551,7 @@ OUTVERBOSE("useless assignment ,proc %d,local %d", curproc->p_id,
}
STATIC lv_extend(p)
proc_p p;
STATIC void lv_extend(proc_p p)
{
/* Allocate extended data structures for Use Definition analysis */
@ -566,8 +563,7 @@ STATIC lv_extend(p)
}
STATIC lv_cleanup(p)
proc_p p;
STATIC void lv_cleanup(proc_p p)
{
/* Deallocate extended data structures for Use Definition analysis */
@ -610,7 +606,7 @@ void lv_optimize(void *vp)
main(argc,argv)
int main(argc,argv)
int argc;
char *argv[];
{

View file

@ -24,6 +24,7 @@ cprogram {
"modules/src/em_data+lib",
"h+emheaders",
"+itemtab_h",
"./ra*.h",
},
vars = {
["+cflags"] = {"-DVERBOSE", "-DNOTCOMPACT"}

View file

@ -4,6 +4,7 @@
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@ -20,16 +21,20 @@
*/
#define TRUE 1
#define FALSE 0
void error(const char *s)
{
fprintf(stderr,"%s\n",s);
exit(-1);
}
convert(mnemfile,itemfile)
FILE *mnemfile, *itemfile;
void convert(FILE *mnemfile, FILE *itemfile)
{
char mnem1[20], mnem2[20],def[20],itemtype[20];
int newcl,opc,index;
int opc,index;
bool newcl;
newcl = TRUE;
newcl = true;
printf("struct item_descr itemtab[] = {\n");
for (;;) {
fscanf(mnemfile,"%19s%19s%d",def,mnem1,&opc);
@ -47,28 +52,17 @@ convert(mnemfile,itemfile)
* it has no type.
*/
printf("{NO_ITEM,0}, /* %s */\n", mnem1);
newcl = FALSE;
newcl = false;
} else {
printf("{%s,%d}, /* %s */\n",itemtype,index, mnem1);
newcl = TRUE;
newcl = true;
}
}
printf("};\n");
}
error(s)
char *s;
{
fprintf(stderr,"%s\n",s);
exit(-1);
}
main(argc,argv)
int argc;
char *argv[];
int main(int argc, char *argv[])
{
FILE *f1,*f2;

View file

@ -18,6 +18,7 @@
#include "../share/files.h"
#include "../share/get.h"
#include "../share/put.h"
#include "../share/cset.h"
#include "../share/lset.h"
#include "../share/map.h"
#include "../share/alloc.h"
@ -25,6 +26,7 @@
#include "ra.h"
#include "ra_items.h"
#include "ra_allocl.h"
#include "ra_lifet.h"
#include "ra_profits.h"
#include "ra_pack.h"
#include "ra_xform.h"
@ -35,6 +37,8 @@
#define oldrabx(x) oldstruct(bext_ra,x)
#define oldralpx(x) oldstruct(lpext_ra,x)
STATIC void stat_regusage(alloc_p list);
short alloc_id;
static item_p items[NRITEMTYPES];
int nrinstrs;
@ -72,7 +76,7 @@ STATIC cond_p getcondtab(f)
return tab;
}
get_atab(f,tab)
STATIC void get_atab(f,tab)
FILE *f;
cond_p tab[NRREGTYPES][NRREGTYPES];
{
@ -88,7 +92,7 @@ get_atab(f,tab)
}
get_otab(f,tab)
STATIC void get_otab(f,tab)
FILE *f;
cond_p tab[NRREGTYPES];
{
@ -155,7 +159,7 @@ STATIC bblock_p header(lp)
}
STATIC ra_extproc(p)
STATIC void ra_extproc(p)
proc_p p;
{
/* Allocate the extended data structures for procedure p */
@ -178,7 +182,7 @@ STATIC ra_extproc(p)
STATIC ra_cleanproc(p)
STATIC void ra_cleanproc(p)
proc_p p;
{
/* Allocate the extended data structures for procedure p */
@ -199,7 +203,7 @@ STATIC ra_cleanproc(p)
STATIC loop_blocks(p)
STATIC void loop_blocks(p)
proc_p p;
{
/* Compute the LP_BLOCKS sets for all loops of p */
@ -218,7 +222,7 @@ STATIC loop_blocks(p)
STATIC make_instrmap(p,map)
STATIC void make_instrmap(p,map)
proc_p p;
line_p map[];
{
@ -253,7 +257,7 @@ STATIC bool useful_item(item)
}
STATIC cleantimeset(s)
STATIC void cleantimeset(s)
lset s;
{
register Lindex i;
@ -300,7 +304,7 @@ STATIC item_p cat_items(items)
STATIC clean_interval(list)
STATIC void clean_interval(list)
interv_p list;
{
register interv_p x,next;
@ -313,7 +317,7 @@ STATIC clean_interval(list)
STATIC clean_allocs(list)
STATIC void clean_allocs(list)
alloc_p list;
{
register alloc_p x,next;
@ -331,7 +335,7 @@ STATIC clean_allocs(list)
STATIC cleanitems(list)
STATIC void cleanitems(list)
item_p list;
{
register item_p x,next;
@ -390,13 +394,13 @@ void ra_optimize(void *vp)
clean_allocs(unpacked);
clean_allocs(packed);
cleanitems(itemlist);
oldmap(instrmap,nrinstrs-1);
oldmap((void **) instrmap,nrinstrs-1);
ra_cleanproc(p);
}
main(argc,argv)
int main(argc,argv)
int argc;
char *argv[];
{
@ -430,6 +434,10 @@ char *str_regtypes[] = {
};
/*
* All calls to print_items() and print_allocs() are in comments!
*/
#if 0
print_items(items,p)
item_p items[];
proc_p p;
@ -510,10 +518,11 @@ print_allocs(list)
}
}
}
#endif
short regs_needed[4];
stat_regusage(list)
STATIC short regs_needed[4];
STATIC void stat_regusage(list)
alloc_p list;
{
int i;
@ -531,6 +540,10 @@ stat_regusage(list)
/*
* All calls to statistics() are in comments!
*/
#if 0
int cnt_regtypes[reg_float+1];
statistics(items)
@ -557,3 +570,4 @@ statistics(items)
fprintf(stderr, "#%s = %d\n",str_regtypes[r],cnt_regtypes[r]);
}
}
#endif

View file

@ -27,7 +27,7 @@
#include "ra_allocl.h"
#include "ra_interv.h"
STATIC count_usage(p,item,nrloops,sloopcnt,dloopcnt)
STATIC void count_usage(p,item,nrloops,sloopcnt,dloopcnt)
proc_p p;
item_p item;
short nrloops, sloopcnt[], dloopcnt[];
@ -92,7 +92,7 @@ STATIC alloc_p cons_alloc(item,timespan,stat_usecount,
}
STATIC insert_alloc(alloc,list_p)
STATIC void insert_alloc(alloc,list_p)
alloc_p alloc, *list_p;
{
alloc->al_next = *list_p;
@ -157,7 +157,7 @@ STATIC bblock_p init_point(item)
}
STATIC add_blocks(b,s,span)
STATIC void add_blocks(b,s,span)
bblock_p b;
cset *s;
interv_p *span;
@ -176,7 +176,7 @@ STATIC add_blocks(b,s,span)
STATIC whole_lifetime(item,ini_out,span_out)
STATIC void whole_lifetime(item,ini_out,span_out)
item_p item;
bblock_p *ini_out;
interv_p *span_out;
@ -267,12 +267,10 @@ STATIC short countuses(usage,b)
STATIC allocs_of_item(p,item,loops,sloopcnt,dloopcnt,alloc_list_p)
proc_p p;
item_p item;
lset loops;
short *sloopcnt,*dloopcnt; /* dynamic arrays */
alloc_p *alloc_list_p;
STATIC void
allocs_of_item(proc_p p, item_p item, lset loops,
short *sloopcnt, short *dloopcnt, /* dynamic arrays */
alloc_p *alloc_list_p)
{
register Lindex li;
loop_p lp;
@ -328,10 +326,7 @@ STATIC allocs_of_item(p,item,loops,sloopcnt,dloopcnt,alloc_list_p)
alloc_p build_alloc_list(p,nrloops,itemlist)
proc_p p;
short nrloops;
item_p itemlist;
alloc_p build_alloc_list(proc_p p, short nrloops, item_p itemlist)
{
short *sloopcnt,*dloopcnt; /* dynamic arrays */
register item_p item;
@ -351,7 +346,7 @@ alloc_p build_alloc_list(p,nrloops,itemlist)
build_rivals_graph(alloclist)
void build_rivals_graph(alloclist)
alloc_p alloclist;
{
/* See which allocations in the list are rivals of each other,

View file

@ -9,13 +9,13 @@
* R A _ A L L O C L I S T . H
*/
extern alloc_p build_alloc_list(); /* (proc_p p; short nrloops;
* item_p itemlist)
alloc_p build_alloc_list(proc_p p, short nrloops, item_p itemlist);
/*
* Build a list of possible allocations
* for procedure p. An allocation
* essentially is a pair (item,timespan)
*/
extern build_rivals_graph(); /* (alloc_p alloclist)
void build_rivals_graph(alloc_p alloclist);
/* See which allocations in the list are
* rivals of each other, i.e. there is
* some point of time, falling in both

Some files were not shown because too many files have changed in this diff Show more