Merge from default.
This commit is contained in:
commit
84ee75ec07
|
@ -107,7 +107,7 @@ void phaser_control(void);
|
||||||
void photon_torpedoes(void);
|
void photon_torpedoes(void);
|
||||||
void torpedo_hit(void);
|
void torpedo_hit(void);
|
||||||
void damage_control(void);
|
void damage_control(void);
|
||||||
void sheild_control(void);
|
void shield_control(void);
|
||||||
void library_computer(void);
|
void library_computer(void);
|
||||||
void galactic_record(void);
|
void galactic_record(void);
|
||||||
void status_report(void);
|
void status_report(void);
|
||||||
|
@ -137,7 +137,7 @@ void sub2(void);
|
||||||
void showfile(char *filename);
|
void showfile(char *filename);
|
||||||
int openfile(char * sFilename, char * sMode);
|
int openfile(char * sFilename, char * sMode);
|
||||||
void closefile(void);
|
void closefile(void);
|
||||||
int getline(char *s);
|
int get_line(char *s);
|
||||||
void randomize(void);
|
void randomize(void);
|
||||||
int get_rand(int iSpread);
|
int get_rand(int iSpread);
|
||||||
double rnd(void);
|
double rnd(void);
|
||||||
|
@ -203,7 +203,7 @@ void
|
||||||
reads(char* buffer)
|
reads(char* buffer)
|
||||||
{
|
{
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
gets(buffer);
|
fgets(buffer, sizeof(string), stdin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Main Program */
|
/* Main Program */
|
||||||
|
@ -292,7 +292,7 @@ new_game(void)
|
||||||
else if (! strncmp(sTemp, "tor", 3))
|
else if (! strncmp(sTemp, "tor", 3))
|
||||||
photon_torpedoes();
|
photon_torpedoes();
|
||||||
else if (! strncmp(sTemp, "she", 3))
|
else if (! strncmp(sTemp, "she", 3))
|
||||||
sheild_control();
|
shield_control();
|
||||||
else if (! strncmp(sTemp, "dam", 3))
|
else if (! strncmp(sTemp, "dam", 3))
|
||||||
damage_control();
|
damage_control();
|
||||||
else if (! strncmp(sTemp, "com", 3))
|
else if (! strncmp(sTemp, "com", 3))
|
||||||
|
@ -307,7 +307,7 @@ new_game(void)
|
||||||
printf(" lrs - Long Range Sensors\n");
|
printf(" lrs - Long Range Sensors\n");
|
||||||
printf(" pha - Phasers\n");
|
printf(" pha - Phasers\n");
|
||||||
printf(" tor - Photon Torpedoes\n");
|
printf(" tor - Photon Torpedoes\n");
|
||||||
printf(" she - Sheild Control\n");
|
printf(" she - Shield Control\n");
|
||||||
printf(" dam - Damage Control\n");
|
printf(" dam - Damage Control\n");
|
||||||
printf(" com - Library Computer\n");
|
printf(" com - Library Computer\n");
|
||||||
printf(" xxx - Resign Command\n");
|
printf(" xxx - Resign Command\n");
|
||||||
|
@ -1206,14 +1206,14 @@ damage_control(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sheild_control(void)
|
shield_control(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
string sTemp;
|
string sTemp;
|
||||||
|
|
||||||
if (d[7] < 0.0)
|
if (d[7] < 0.0)
|
||||||
{
|
{
|
||||||
printf("Sheild Control inoperable\n");
|
printf("Shield Control inoperable\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1229,15 +1229,15 @@ sheild_control(void)
|
||||||
|
|
||||||
if (i < 0 || s == i)
|
if (i < 0 || s == i)
|
||||||
{
|
{
|
||||||
printf("<Sheilds Unchanged>\n\n");
|
printf("<Shields Unchanged>\n\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= e + s)
|
if (i >= e + s)
|
||||||
{
|
{
|
||||||
printf("Sheild Control Reports:\n");
|
printf("Shield Control Reports:\n");
|
||||||
printf(" 'This is not the Federation Treasury.'\n");
|
printf(" 'This is not the Federation Treasury.'\n");
|
||||||
printf("<Sheilds Unchanged>\n\n");
|
printf("<Shields Unchanged>\n\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1776,7 +1776,7 @@ get_device_name(void)
|
||||||
{
|
{
|
||||||
static char * device_name[] = {
|
static char * device_name[] = {
|
||||||
"", "Warp Engines","Short Range Sensors","Long Range Sensors",
|
"", "Warp Engines","Short Range Sensors","Long Range Sensors",
|
||||||
"Phaser Control","Photon Tubes","Damage Control","Sheild Control",
|
"Phaser Control","Photon Tubes","Damage Control","Shield Control",
|
||||||
"Library-Computer"};
|
"Library-Computer"};
|
||||||
|
|
||||||
if (r1 < 0 || r1 > 8)
|
if (r1 < 0 || r1 > 8)
|
||||||
|
@ -1888,7 +1888,7 @@ showfile(char *filename)
|
||||||
if (openfile(filename, "r") != 0)
|
if (openfile(filename, "r") != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
while (getline(lBuffer) != 0)
|
while (get_line(lBuffer) != 0)
|
||||||
{
|
{
|
||||||
printf(lBuffer);
|
printf(lBuffer);
|
||||||
|
|
||||||
|
@ -1926,7 +1926,7 @@ closefile(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
getline(char *s)
|
get_line(char *s)
|
||||||
{
|
{
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
if (fgets(s, MAXCOL, stream) == NULL)
|
if (fgets(s, MAXCOL, stream) == NULL)
|
||||||
|
|
|
@ -702,6 +702,7 @@ static int Pgetpid(lua_State *L) /** getpid([options]) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
static int Phostid(lua_State *L) /** hostid() */
|
static int Phostid(lua_State *L) /** hostid() */
|
||||||
{
|
{
|
||||||
char b[32];
|
char b[32];
|
||||||
|
@ -709,6 +710,7 @@ static int Phostid(lua_State *L) /** hostid() */
|
||||||
lua_pushstring(L, b);
|
lua_pushstring(L, b);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static int Pttyname(lua_State *L) /** ttyname([fd]) */
|
static int Pttyname(lua_State *L) /** ttyname([fd]) */
|
||||||
|
@ -1060,7 +1062,7 @@ static const luaL_reg R[] =
|
||||||
{"getpasswd", Pgetpasswd},
|
{"getpasswd", Pgetpasswd},
|
||||||
{"getpid", Pgetpid},
|
{"getpid", Pgetpid},
|
||||||
{"glob", Pglob},
|
{"glob", Pglob},
|
||||||
{"hostid", Phostid},
|
//{"hostid", Phostid},
|
||||||
{"kill", Pkill},
|
{"kill", Pkill},
|
||||||
{"link", Plink},
|
{"link", Plink},
|
||||||
{"mkdir", Pmkdir},
|
{"mkdir", Pmkdir},
|
||||||
|
|
|
@ -31,6 +31,7 @@ int ltype,rtype;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
conversion(oldtype,newtype)
|
conversion(oldtype,newtype)
|
||||||
int oldtype,newtype;
|
int oldtype,newtype;
|
||||||
{
|
{
|
||||||
|
@ -71,6 +72,7 @@ int oldtype,newtype;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
extraconvert(oldtype,newtype,topstack)
|
extraconvert(oldtype,newtype,topstack)
|
||||||
int oldtype,newtype,topstack;
|
int oldtype,newtype,topstack;
|
||||||
{
|
{
|
||||||
|
@ -509,6 +511,7 @@ endarrayload()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
loadarray(type)
|
loadarray(type)
|
||||||
int type;
|
int type;
|
||||||
{
|
{
|
||||||
|
|
|
@ -68,6 +68,7 @@ char *str;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
dcltype(s)
|
dcltype(s)
|
||||||
Symbol *s;
|
Symbol *s;
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,6 +16,7 @@ int errorcnt;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
warning(str)
|
warning(str)
|
||||||
char *str;
|
char *str;
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,6 +52,8 @@ extern int lint_skip_comment;
|
||||||
static struct token LexStack[MAX_LL_DEPTH];
|
static struct token LexStack[MAX_LL_DEPTH];
|
||||||
static LexSP = 0;
|
static LexSP = 0;
|
||||||
|
|
||||||
|
void skipcomment();
|
||||||
|
|
||||||
/* In PushLex() the actions are taken in order to initialise or
|
/* In PushLex() the actions are taken in order to initialise or
|
||||||
re-initialise the lexical scanner.
|
re-initialise the lexical scanner.
|
||||||
E.g. at the invocation of a sub-parser that uses LLlex(), the
|
E.g. at the invocation of a sub-parser that uses LLlex(), the
|
||||||
|
@ -442,6 +444,7 @@ garbage:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NOPP
|
#ifndef NOPP
|
||||||
|
void
|
||||||
skipcomment()
|
skipcomment()
|
||||||
{
|
{
|
||||||
/* The last character read has been the '*' of '/_*'. The
|
/* The last character read has been the '*' of '/_*'. The
|
||||||
|
|
|
@ -30,6 +30,7 @@ extern char options[];
|
||||||
extern arith flt_flt2arith();
|
extern arith flt_flt2arith();
|
||||||
extern label code_string();
|
extern label code_string();
|
||||||
|
|
||||||
|
void
|
||||||
arithbalance(e1p, oper, e2p) /* 3.1.2.5 */
|
arithbalance(e1p, oper, e2p) /* 3.1.2.5 */
|
||||||
register struct expr **e1p, **e2p;
|
register struct expr **e1p, **e2p;
|
||||||
int oper;
|
int oper;
|
||||||
|
@ -523,6 +524,7 @@ opnd2logical(expp, oper)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
opnd2test(expp, oper)
|
opnd2test(expp, oper)
|
||||||
register struct expr **expp;
|
register struct expr **expp;
|
||||||
{
|
{
|
||||||
|
@ -548,6 +550,7 @@ opnd2test(expp, oper)
|
||||||
ch3bin(expp, NOTEQUAL, intexpr((arith)0, INT));
|
ch3bin(expp, NOTEQUAL, intexpr((arith)0, INT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
any2opnd(expp, oper)
|
any2opnd(expp, oper)
|
||||||
register struct expr **expp;
|
register struct expr **expp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,11 +23,14 @@ extern char options[];
|
||||||
extern char *symbol2str();
|
extern char *symbol2str();
|
||||||
extern struct type *qualifier_type();
|
extern struct type *qualifier_type();
|
||||||
|
|
||||||
|
void ch3cast();
|
||||||
|
|
||||||
/* Most expression-handling routines have a pointer to a
|
/* Most expression-handling routines have a pointer to a
|
||||||
(struct type *) as first parameter. The object under the pointer
|
(struct type *) as first parameter. The object under the pointer
|
||||||
gets updated in the process.
|
gets updated in the process.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
ch3sel(expp, oper, idf)
|
ch3sel(expp, oper, idf)
|
||||||
struct expr **expp;
|
struct expr **expp;
|
||||||
struct idf *idf;
|
struct idf *idf;
|
||||||
|
@ -169,6 +172,7 @@ ch3incr(expp, oper)
|
||||||
ch3asgn(expp, oper, intexpr((arith)1, INT));
|
ch3asgn(expp, oper, intexpr((arith)1, INT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ch3cast(expp, oper, tp)
|
ch3cast(expp, oper, tp)
|
||||||
register struct expr **expp;
|
register struct expr **expp;
|
||||||
register struct type *tp;
|
register struct type *tp;
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
extern char options[];
|
extern char options[];
|
||||||
extern char *symbol2str();
|
extern char *symbol2str();
|
||||||
|
|
||||||
|
void pntminuspnt();
|
||||||
|
|
||||||
/* This chapter asks for the repeated application of code to handle
|
/* This chapter asks for the repeated application of code to handle
|
||||||
an operation that may be executed at compile time or at run time,
|
an operation that may be executed at compile time or at run time,
|
||||||
depending on the constancy of the operands.
|
depending on the constancy of the operands.
|
||||||
|
@ -32,6 +34,7 @@ extern char *symbol2str();
|
||||||
#define commutative_binop(expp, oper, expr) mk_binop(expp, oper, expr, 1)
|
#define commutative_binop(expp, oper, expr) mk_binop(expp, oper, expr, 1)
|
||||||
#define non_commutative_relop(expp, oper, expr) mk_binop(expp, oper, expr, 1)
|
#define non_commutative_relop(expp, oper, expr) mk_binop(expp, oper, expr, 1)
|
||||||
|
|
||||||
|
void
|
||||||
ch3bin(expp, oper, expr)
|
ch3bin(expp, oper, expr)
|
||||||
register struct expr **expp;
|
register struct expr **expp;
|
||||||
struct expr *expr;
|
struct expr *expr;
|
||||||
|
@ -292,6 +295,7 @@ ch3bin(expp, oper, expr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
pntminuspnt(expp, oper, expr)
|
pntminuspnt(expp, oper, expr)
|
||||||
register struct expr **expp, *expr;
|
register struct expr **expp, *expr;
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,6 +64,8 @@ extern char options[];
|
||||||
extern char *symbol2str();
|
extern char *symbol2str();
|
||||||
extern char *source;
|
extern char *source;
|
||||||
|
|
||||||
|
void loc_init();
|
||||||
|
|
||||||
#ifndef LINT
|
#ifndef LINT
|
||||||
init_code(dst_file)
|
init_code(dst_file)
|
||||||
char *dst_file;
|
char *dst_file;
|
||||||
|
@ -415,6 +417,7 @@ do_return_expr(expr)
|
||||||
return_expr_occurred = 1;
|
return_expr_occurred = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
code_declaration(idf, expr, lvl, sc)
|
code_declaration(idf, expr, lvl, sc)
|
||||||
register struct idf *idf; /* idf to be declared */
|
register struct idf *idf; /* idf to be declared */
|
||||||
struct expr *expr; /* initialisation; NULL if absent */
|
struct expr *expr; /* initialisation; NULL if absent */
|
||||||
|
@ -527,6 +530,7 @@ code_declaration(idf, expr, lvl, sc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
loc_init(expr, id)
|
loc_init(expr, id)
|
||||||
struct expr *expr;
|
struct expr *expr;
|
||||||
struct idf *id;
|
struct idf *id;
|
||||||
|
@ -721,6 +725,7 @@ code_break()
|
||||||
it generates a branch instruction to the continue label of the
|
it generates a branch instruction to the continue label of the
|
||||||
innermost statement in which continue has a meaning.
|
innermost statement in which continue has a meaning.
|
||||||
*/
|
*/
|
||||||
|
void
|
||||||
code_continue()
|
code_continue()
|
||||||
{
|
{
|
||||||
register struct stmt_block *stmt_block = stmt_stack;
|
register struct stmt_block *stmt_block = stmt_stack;
|
||||||
|
|
|
@ -34,6 +34,9 @@ char ifstack[IFDEPTH]; /* if-stack: the content of an entry is */
|
||||||
|
|
||||||
int nestlevel = -1;
|
int nestlevel = -1;
|
||||||
|
|
||||||
|
void macro_def();
|
||||||
|
void do_define();
|
||||||
|
|
||||||
struct idf *
|
struct idf *
|
||||||
GetIdentifier(skiponerr)
|
GetIdentifier(skiponerr)
|
||||||
int skiponerr; /* skip the rest of the line on error */
|
int skiponerr; /* skip the rest of the line on error */
|
||||||
|
@ -145,6 +148,7 @@ domacro()
|
||||||
int lint_skip_comment;
|
int lint_skip_comment;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
skip_block(to_endif)
|
skip_block(to_endif)
|
||||||
int to_endif;
|
int to_endif;
|
||||||
{
|
{
|
||||||
|
@ -347,6 +351,7 @@ do_include()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
do_define()
|
do_define()
|
||||||
{
|
{
|
||||||
/* do_define() interprets a #define control line.
|
/* do_define() interprets a #define control line.
|
||||||
|
@ -574,6 +579,7 @@ getparams(buf, parbuf)
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
macro_def(id, text, nformals, length, flags)
|
macro_def(id, text, nformals, length, flags)
|
||||||
register struct idf *id;
|
register struct idf *id;
|
||||||
char *text;
|
char *text;
|
||||||
|
|
|
@ -57,7 +57,7 @@ extern char loptions[];
|
||||||
expression, whereas other errors use the information in the token.
|
expression, whereas other errors use the information in the token.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static _error();
|
static void _error();
|
||||||
|
|
||||||
#if __STDC__
|
#if __STDC__
|
||||||
/*VARARGS*/
|
/*VARARGS*/
|
||||||
|
@ -521,7 +521,7 @@ fatal(va_alist) /* fmt, args */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static
|
static void
|
||||||
_error(class, fn, ln, fmt, ap)
|
_error(class, fn, ln, fmt, ap)
|
||||||
int class;
|
int class;
|
||||||
char *fn;
|
char *fn;
|
||||||
|
|
|
@ -37,6 +37,9 @@ arith NewLocal(); /* util.c */
|
||||||
#define LocalPtrVar() NewLocal(pointer_size, pointer_align, reg_pointer, REGISTER)
|
#define LocalPtrVar() NewLocal(pointer_size, pointer_align, reg_pointer, REGISTER)
|
||||||
extern int err_occurred; /* error.c */
|
extern int err_occurred; /* error.c */
|
||||||
|
|
||||||
|
void store_val();
|
||||||
|
void load_val();
|
||||||
|
|
||||||
/* EVAL() is the main expression-tree evaluator, which turns
|
/* EVAL() is the main expression-tree evaluator, which turns
|
||||||
any legal expression tree into EM code. parameters.h:
|
any legal expression tree into EM code. parameters.h:
|
||||||
|
|
||||||
|
@ -63,6 +66,7 @@ extern int err_occurred; /* error.c */
|
||||||
labels, in case they are specified (i.e. are non-zero)
|
labels, in case they are specified (i.e. are non-zero)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
EVAL(expr, val, code, true_label, false_label)
|
EVAL(expr, val, code, true_label, false_label)
|
||||||
register struct expr *expr;
|
register struct expr *expr;
|
||||||
int val, code;
|
int val, code;
|
||||||
|
@ -836,6 +840,7 @@ ptr_add(size)
|
||||||
- into a local static variable
|
- into a local static variable
|
||||||
- absolute addressing
|
- absolute addressing
|
||||||
*/
|
*/
|
||||||
|
void
|
||||||
store_val(vl, tp)
|
store_val(vl, tp)
|
||||||
register struct value *vl;
|
register struct value *vl;
|
||||||
register struct type *tp;
|
register struct type *tp;
|
||||||
|
@ -907,6 +912,7 @@ store_val(vl, tp)
|
||||||
- static variable
|
- static variable
|
||||||
- local variable
|
- local variable
|
||||||
*/
|
*/
|
||||||
|
void
|
||||||
load_val(expr, rlval)
|
load_val(expr, rlval)
|
||||||
register struct expr *expr; /* expression containing the value */
|
register struct expr *expr; /* expression containing the value */
|
||||||
int rlval; /* generate either LVAL or RVAL */
|
int rlval; /* generate either LVAL or RVAL */
|
||||||
|
|
|
@ -369,6 +369,7 @@ new_oper(tp, e1, oper, e2)
|
||||||
return expr;
|
return expr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
chk_cst_expr(expp)
|
chk_cst_expr(expp)
|
||||||
struct expr **expp;
|
struct expr **expp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,6 +37,8 @@ extern char *symbol2str();
|
||||||
|
|
||||||
#include <idf_pkg.body>
|
#include <idf_pkg.body>
|
||||||
|
|
||||||
|
void global_redecl();
|
||||||
|
|
||||||
struct idf *
|
struct idf *
|
||||||
gen_idf()
|
gen_idf()
|
||||||
{
|
{
|
||||||
|
@ -248,6 +250,7 @@ declare_idf(ds, dc, lvl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
actual_declaration(sc, tp)
|
actual_declaration(sc, tp)
|
||||||
int sc;
|
int sc;
|
||||||
struct type *tp;
|
struct type *tp;
|
||||||
|
@ -269,6 +272,7 @@ actual_declaration(sc, tp)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
global_redecl(idf, new_sc, tp)
|
global_redecl(idf, new_sc, tp)
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
struct type *tp;
|
struct type *tp;
|
||||||
|
@ -393,6 +397,7 @@ declare_params(dc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
idf_initialized(idf)
|
idf_initialized(idf)
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
{
|
{
|
||||||
|
@ -429,6 +434,7 @@ declare_enum(tp, idf, l)
|
||||||
idf->id_def->df_address = l;
|
idf->id_def->df_address = l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
check_formals(idf, dc)
|
check_formals(idf, dc)
|
||||||
struct idf *idf;
|
struct idf *idf;
|
||||||
struct declarator *dc;
|
struct declarator *dc;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
#include "parameters.h"
|
#include "parameters.h"
|
||||||
|
|
||||||
#ifndef NOPP
|
#ifndef NOPP
|
||||||
|
@ -44,7 +45,7 @@ init_pp()
|
||||||
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
||||||
};
|
};
|
||||||
long clock, sys_time();
|
time_t clock;
|
||||||
static char dbuf[30];
|
static char dbuf[30];
|
||||||
static char tbuf[30];
|
static char tbuf[30];
|
||||||
struct tm *tp;
|
struct tm *tp;
|
||||||
|
@ -70,7 +71,7 @@ init_pp()
|
||||||
/* Initialize __LINE__, __FILE__, __DATE__, __TIME__,
|
/* Initialize __LINE__, __FILE__, __DATE__, __TIME__,
|
||||||
and __STDC__ macro definitions.
|
and __STDC__ macro definitions.
|
||||||
*/
|
*/
|
||||||
clock = sys_time();
|
clock = time(NULL);
|
||||||
tp = localtime(&clock);
|
tp = localtime(&clock);
|
||||||
|
|
||||||
/* __DATE__ */
|
/* __DATE__ */
|
||||||
|
|
|
@ -46,6 +46,11 @@ static int pack_level;
|
||||||
struct type **gen_tphead(), **gen_tpmiddle();
|
struct type **gen_tphead(), **gen_tpmiddle();
|
||||||
struct sdef *gen_align_to_next();
|
struct sdef *gen_align_to_next();
|
||||||
struct e_stack *p_stack;
|
struct e_stack *p_stack;
|
||||||
|
|
||||||
|
void pad();
|
||||||
|
void gen_simple_exp();
|
||||||
|
void gen_tpcheck();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* initial_value recursively guides the initialisation expression.
|
/* initial_value recursively guides the initialisation expression.
|
||||||
|
@ -122,6 +127,7 @@ initial_value_list(register struct type **tpp; struct expr **expp;)
|
||||||
;
|
;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
void
|
||||||
gen_tpcheck(tpp)
|
gen_tpcheck(tpp)
|
||||||
struct type **tpp;
|
struct type **tpp;
|
||||||
{
|
{
|
||||||
|
@ -147,6 +153,7 @@ gen_tpcheck(tpp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
gen_simple_exp(tpp, expp)
|
gen_simple_exp(tpp, expp)
|
||||||
struct type **tpp;
|
struct type **tpp;
|
||||||
struct expr **expp;
|
struct expr **expp;
|
||||||
|
@ -465,6 +472,7 @@ check_and_pad(expp, tpp)
|
||||||
/* pad() fills an element of type tp with zeroes.
|
/* pad() fills an element of type tp with zeroes.
|
||||||
If the element is an aggregate, pad() is called recursively.
|
If the element is an aggregate, pad() is called recursively.
|
||||||
*/
|
*/
|
||||||
|
void
|
||||||
pad(tpx)
|
pad(tpx)
|
||||||
struct type *tpx;
|
struct type *tpx;
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,6 +46,8 @@ struct sp_id special_ids[] = {
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void dependency();
|
||||||
|
|
||||||
#ifndef NOCROSS
|
#ifndef NOCROSS
|
||||||
arith
|
arith
|
||||||
short_size = SZ_SHORT,
|
short_size = SZ_SHORT,
|
||||||
|
@ -181,6 +183,7 @@ char *s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
dependency(s, source)
|
dependency(s, source)
|
||||||
char *s, *source;
|
char *s, *source;
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
extern char options[];
|
extern char options[];
|
||||||
|
|
||||||
|
void
|
||||||
check_for_void(pl)
|
check_for_void(pl)
|
||||||
register struct proto *pl;
|
register struct proto *pl;
|
||||||
{
|
{
|
||||||
|
@ -261,6 +262,7 @@ declare_protos(dc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
update_proto(tp, otp)
|
update_proto(tp, otp)
|
||||||
register struct type *tp, *otp;
|
register struct type *tp, *otp;
|
||||||
{
|
{
|
||||||
|
@ -312,6 +314,7 @@ update_proto(tp, otp)
|
||||||
/* struct/union and enum tags can be declared inside prototypes
|
/* struct/union and enum tags can be declared inside prototypes
|
||||||
* remove them from the symbol-table
|
* remove them from the symbol-table
|
||||||
*/
|
*/
|
||||||
|
void
|
||||||
remove_proto_tag(tp)
|
remove_proto_tag(tp)
|
||||||
struct type *tp;
|
struct type *tp;
|
||||||
{
|
{
|
||||||
|
@ -380,6 +383,7 @@ remove_proto_idfs(pl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
call_proto(expp)
|
call_proto(expp)
|
||||||
register struct expr **expp;
|
register struct expr **expp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,10 @@ extern int InputLevel;
|
||||||
struct repl *ReplaceList; /* list of currently active macros */
|
struct repl *ReplaceList; /* list of currently active macros */
|
||||||
extern char *strcat(), *strcpy();
|
extern char *strcat(), *strcpy();
|
||||||
|
|
||||||
|
void macro2buffer();
|
||||||
|
void getactuals();
|
||||||
|
void expand_defined();
|
||||||
|
|
||||||
int
|
int
|
||||||
replace(idf)
|
replace(idf)
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
|
@ -172,6 +176,7 @@ expand_macro(repl, idf)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
expand_defined(repl)
|
expand_defined(repl)
|
||||||
register struct repl *repl;
|
register struct repl *repl;
|
||||||
{
|
{
|
||||||
|
@ -211,6 +216,7 @@ newarg(args)
|
||||||
args->a_rawptr = args->a_rawbuf = Malloc(args->a_rawsize = ARGBUF);
|
args->a_rawptr = args->a_rawbuf = Malloc(args->a_rawsize = ARGBUF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
getactuals(repl, idf)
|
getactuals(repl, idf)
|
||||||
struct repl *repl;
|
struct repl *repl;
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
|
@ -529,6 +535,7 @@ macro_func(idef)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
macro2buffer(repl, idf, args)
|
macro2buffer(repl, idf, args)
|
||||||
register struct repl *repl;
|
register struct repl *repl;
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
|
|
|
@ -72,7 +72,7 @@ adds_db_str(s)
|
||||||
while (*s) addc_db_str(*s++);
|
while (*s) addc_db_str(*s++);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static void
|
||||||
stb_type(tp)
|
stb_type(tp)
|
||||||
register struct type *tp;
|
register struct type *tp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,6 +57,7 @@ stack_level() {
|
||||||
#endif /* LINT */
|
#endif /* LINT */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
stack_idf(idf, stl)
|
stack_idf(idf, stl)
|
||||||
struct idf *idf;
|
struct idf *idf;
|
||||||
register struct stack_level *stl;
|
register struct stack_level *stl;
|
||||||
|
|
|
@ -159,6 +159,7 @@ code_endswitch()
|
||||||
unstack_stmt();
|
unstack_stmt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
code_case(expr)
|
code_case(expr)
|
||||||
struct expr *expr;
|
struct expr *expr;
|
||||||
{
|
{
|
||||||
|
@ -227,6 +228,7 @@ code_case(expr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
code_default()
|
code_default()
|
||||||
{
|
{
|
||||||
register struct switch_hdr *sh = switch_stack;
|
register struct switch_hdr *sh = switch_stack;
|
||||||
|
|
|
@ -163,6 +163,7 @@ LocalFinish()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
RegisterAccount(offset, size, regtype, sc)
|
RegisterAccount(offset, size, regtype, sc)
|
||||||
arith offset, size;
|
arith offset, size;
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,6 +35,8 @@ extern arith char_constant();
|
||||||
#define FLG_ESEEN 0x01 /* possibly a floating point number */
|
#define FLG_ESEEN 0x01 /* possibly a floating point number */
|
||||||
#define FLG_DOTSEEN 0x02 /* certainly a floating point number */
|
#define FLG_DOTSEEN 0x02 /* certainly a floating point number */
|
||||||
|
|
||||||
|
void skipcomment();
|
||||||
|
|
||||||
int
|
int
|
||||||
LLlex()
|
LLlex()
|
||||||
{
|
{
|
||||||
|
@ -325,6 +327,7 @@ garbage:
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
skipcomment()
|
skipcomment()
|
||||||
{
|
{
|
||||||
/* The last character read has been the '*' of '/_*'. The
|
/* The last character read has been the '*' of '/_*'. The
|
||||||
|
|
|
@ -32,6 +32,9 @@ int svnestlevel[30] = {-1};
|
||||||
int nestcount;
|
int nestcount;
|
||||||
extern int do_preprocess;
|
extern int do_preprocess;
|
||||||
|
|
||||||
|
void macro_def();
|
||||||
|
void do_define();
|
||||||
|
|
||||||
char *
|
char *
|
||||||
GetIdentifier(skiponerr)
|
GetIdentifier(skiponerr)
|
||||||
int skiponerr; /* skip the rest of the line on error */
|
int skiponerr; /* skip the rest of the line on error */
|
||||||
|
@ -148,6 +151,7 @@ domacro()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
skip_block(to_endif)
|
skip_block(to_endif)
|
||||||
int to_endif;
|
int to_endif;
|
||||||
{
|
{
|
||||||
|
@ -327,6 +331,7 @@ do_include()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
do_define()
|
do_define()
|
||||||
{
|
{
|
||||||
/* do_define() interprets a #define control line.
|
/* do_define() interprets a #define control line.
|
||||||
|
@ -566,6 +571,7 @@ getparams(buf, parbuf)
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
macro_def(id, text, nformals, length, flags)
|
macro_def(id, text, nformals, length, flags)
|
||||||
register struct idf *id;
|
register struct idf *id;
|
||||||
char *text;
|
char *text;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "alloc.h"
|
#include "alloc.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
|
@ -42,7 +43,7 @@ init_pp()
|
||||||
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
||||||
};
|
};
|
||||||
long clock, sys_time();
|
time_t clock;
|
||||||
static char dbuf[30];
|
static char dbuf[30];
|
||||||
static char tbuf[30];
|
static char tbuf[30];
|
||||||
struct tm *tp;
|
struct tm *tp;
|
||||||
|
@ -68,7 +69,7 @@ init_pp()
|
||||||
/* Initialize __LINE__, __FILE__, __DATE__, __TIME__,
|
/* Initialize __LINE__, __FILE__, __DATE__, __TIME__,
|
||||||
and __STDC__ macro definitions.
|
and __STDC__ macro definitions.
|
||||||
*/
|
*/
|
||||||
clock = sys_time();
|
clock = time(NULL);
|
||||||
tp = localtime(&clock);
|
tp = localtime(&clock);
|
||||||
|
|
||||||
/* __DATE__ */
|
/* __DATE__ */
|
||||||
|
|
|
@ -32,6 +32,8 @@ char *prog_name;
|
||||||
extern char **inctable;
|
extern char **inctable;
|
||||||
extern int inc_max, inc_total;
|
extern int inc_max, inc_total;
|
||||||
|
|
||||||
|
void dependency();
|
||||||
|
|
||||||
main(argc, argv)
|
main(argc, argv)
|
||||||
char *argv[];
|
char *argv[];
|
||||||
{
|
{
|
||||||
|
@ -140,6 +142,7 @@ add_dependency(s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
dependency(s, source)
|
dependency(s, source)
|
||||||
char *s, *source;
|
char *s, *source;
|
||||||
{
|
{
|
||||||
|
|
|
@ -102,6 +102,7 @@ do_pragma()
|
||||||
|
|
||||||
char Xbuf[256];
|
char Xbuf[256];
|
||||||
|
|
||||||
|
void
|
||||||
preprocess(fn)
|
preprocess(fn)
|
||||||
char *fn;
|
char *fn;
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,10 @@ extern char *strcat();
|
||||||
extern int InputLevel;
|
extern int InputLevel;
|
||||||
struct repl *ReplaceList; /* list of currently active macros */
|
struct repl *ReplaceList; /* list of currently active macros */
|
||||||
|
|
||||||
|
void expand_defined();
|
||||||
|
void getactuals();
|
||||||
|
void macro2buffer();
|
||||||
|
|
||||||
int
|
int
|
||||||
replace(idf)
|
replace(idf)
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
|
@ -165,6 +169,7 @@ expand_macro(repl, idf)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
expand_defined(repl)
|
expand_defined(repl)
|
||||||
register struct repl *repl;
|
register struct repl *repl;
|
||||||
{
|
{
|
||||||
|
@ -208,6 +213,7 @@ newarg(args)
|
||||||
args->a_rawptr = args->a_rawbuf = Malloc((unsigned)(args->a_rawsize = ARGBUF));
|
args->a_rawptr = args->a_rawbuf = Malloc((unsigned)(args->a_rawsize = ARGBUF));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
getactuals(repl, idf)
|
getactuals(repl, idf)
|
||||||
struct repl *repl;
|
struct repl *repl;
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
|
@ -522,6 +528,7 @@ macro_func(idef)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
macro2buffer(repl, idf, args)
|
macro2buffer(repl, idf, args)
|
||||||
register struct repl *repl;
|
register struct repl *repl;
|
||||||
register struct idf *idf;
|
register struct idf *idf;
|
||||||
|
|
|
@ -48,12 +48,16 @@ for _, plat in ipairs(vars.plats) do
|
||||||
"./stdlib/*.c",
|
"./stdlib/*.c",
|
||||||
"./string/*.c",
|
"./string/*.c",
|
||||||
"./time/*.c",
|
"./time/*.c",
|
||||||
|
|
||||||
},
|
},
|
||||||
hdrs = {}, -- must be empty
|
hdrs = {}, -- must be empty
|
||||||
deps = {
|
deps = {
|
||||||
"lang/cem/libcc.ansi/headers+headers",
|
"lang/cem/libcc.ansi/headers+headers",
|
||||||
"plat/"..plat.."/include+headers",
|
"plat/"..plat.."/include+headers",
|
||||||
|
"./malloc/malloc.h",
|
||||||
|
"./math/localmath.h",
|
||||||
|
"./stdio/loc_incl.h",
|
||||||
|
"./stdlib/ext_fmt.h",
|
||||||
|
"./time/loc_time.h",
|
||||||
},
|
},
|
||||||
vars = { plat = plat }
|
vars = { plat = plat }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,43 +1,79 @@
|
||||||
/*
|
/*
|
||||||
<float.h> -- simple version used by "gimplify"
|
* float.h - implementation limits
|
||||||
|
|
||||||
last edit: 2007-02-12 D A Gwyn
|
|
||||||
*/
|
*/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Does not exactly fit any model, and is minimal for "universality". */
|
#if !defined(_FLOAT_H)
|
||||||
|
#define _FLOAT_H
|
||||||
|
|
||||||
#define FLT_ROUNDS (-1)
|
#if defined(__vax) || defined(__pdp)
|
||||||
#define FLT_EVAL_METHOD (-1)
|
#define FLT_DIG 6
|
||||||
|
#define FLT_EPSILON 5.96046448e-08F
|
||||||
|
#define FLT_MANT_DIG 8
|
||||||
|
#define FLT_MAX 1.70141173e+38F
|
||||||
|
#define FLT_MAX_10_EXP 38
|
||||||
|
#define FLT_MAX_EXP 127
|
||||||
|
#define FLT_MIN 2.93873588e-39F
|
||||||
|
#define FLT_MIN_10_EXP (-38)
|
||||||
|
#define FLT_MIN_EXP (-127)
|
||||||
|
|
||||||
|
#define DBL_DIG 16
|
||||||
|
#define DBL_EPSILON 1.38777878078144568e-17
|
||||||
|
#define DBL_MANT_DIG 8
|
||||||
|
#define DBL_MAX 1.70141183460469229e+38
|
||||||
|
#define DBL_MAX_10_EXP 38
|
||||||
|
#define DBL_MAX_EXP 127
|
||||||
|
#define DBL_MIN 2.93873587705571877e-39
|
||||||
|
#define DBL_MIN_10_EXP (-38)
|
||||||
|
#define DBL_MIN_EXP (-127)
|
||||||
|
|
||||||
|
#define LDBL_DIG 16
|
||||||
|
#define LDBL_EPSILON 1.38777878078144568e-17L
|
||||||
|
#define LDBL_MANT_DIG 8
|
||||||
|
#define LDBL_MAX 1.70141183460469229e+38L
|
||||||
|
#define LDBL_MAX_10_EXP 38
|
||||||
|
#define LDBL_MAX_EXP 127
|
||||||
|
#define LDBL_MIN 2.93873587705571877e-39L
|
||||||
|
#define LDBL_MIN_10_EXP (-38)
|
||||||
|
#define LDBL_MIN_EXP (-127)
|
||||||
|
|
||||||
|
#define FLT_ROUNDS 1
|
||||||
#define FLT_RADIX 2
|
#define FLT_RADIX 2
|
||||||
#define DECIMAL_DIG 10
|
|
||||||
|
|
||||||
/* assumes that "gimplify" specifies "-Dfloat=double" */
|
#else /* IEEE format */
|
||||||
#define FLT_MANT_DIG 10
|
#define FLT_DIG 6
|
||||||
#define FLT_EPSILON (1E-9F)
|
#define FLT_EPSILON 1.19209290e-07F
|
||||||
#define FLT_DIG 10
|
#define FLT_MANT_DIG 24
|
||||||
#define FLT_MIN_EXP (-31)
|
#define FLT_MAX 3.40282347e+38F
|
||||||
#define FLT_MIN (1E-37F)
|
#define FLT_MAX_10_EXP 38
|
||||||
|
#define FLT_MAX_EXP 128
|
||||||
|
#define FLT_MIN 1.17549435e-38F
|
||||||
#define FLT_MIN_10_EXP (-37)
|
#define FLT_MIN_10_EXP (-37)
|
||||||
#define FLT_MAX_EXP 37
|
#define FLT_MIN_EXP (-125)
|
||||||
#define FLT_MAX (1E+37F)
|
|
||||||
#define FLT_MAX_10_EXP 37
|
|
||||||
|
|
||||||
#define DBL_MANT_DIG 10
|
#define DBL_DIG 15
|
||||||
#define DBL_EPSILON (1E-9)
|
#define DBL_EPSILON 2.2204460492503131e-16
|
||||||
#define DBL_DIG 10
|
#define DBL_MANT_DIG 53
|
||||||
#define DBL_MIN_EXP (-31)
|
#define DBL_MAX 1.7976931348623157e+308
|
||||||
#define DBL_MIN (1E-37)
|
#define DBL_MAX_10_EXP 308
|
||||||
#define DBL_MIN_10_EXP (-37)
|
#define DBL_MAX_EXP 1024
|
||||||
#define DBL_MAX_EXP 37
|
#define DBL_MIN 2.2250738585072014e-308
|
||||||
#define DBL_MAX (1E+37)
|
#define DBL_MIN_10_EXP (-307)
|
||||||
#define DBL_MAX_10_EXP 37
|
#define DBL_MIN_EXP (-1021)
|
||||||
|
|
||||||
#define LDBL_MANT_DIG 10
|
#define LDBL_DIG 15
|
||||||
#define LDBL_EPSILON (1E-9L)
|
#define LDBL_EPSILON 2.2204460492503131e-16L
|
||||||
#define LDBL_DIG 10
|
#define LDBL_MANT_DIG 53
|
||||||
#define LDBL_MIN_EXP (-31)
|
#define LDBL_MAX 1.7976931348623157e+308L
|
||||||
#define LDBL_MIN (1E-37L)
|
#define LDBL_MAX_10_EXP 308
|
||||||
#define LDBL_MIN_10_EXP (-37)
|
#define LDBL_MAX_EXP 1024
|
||||||
#define LDBL_MAX_EXP 37
|
#define LDBL_MIN 2.2250738585072014e-308L
|
||||||
#define LDBL_MAX (1E+37L)
|
#define LDBL_MIN_10_EXP (-307)
|
||||||
#define LDBL_MAX_10_EXP 37
|
#define LDBL_MIN_EXP (-1021)
|
||||||
|
|
||||||
|
#define FLT_ROUNDS 1
|
||||||
|
#define FLT_RADIX 2
|
||||||
|
|
||||||
|
#endif /* vax, pdp or ieee */
|
||||||
|
|
||||||
|
#endif /* _FLOAT_H */
|
||||||
|
|
|
@ -18,18 +18,5 @@
|
||||||
#define POLYNOM12(x, a) (POLYNOM11((x),(a)+1)*(x)+(a)[0])
|
#define POLYNOM12(x, a) (POLYNOM11((x),(a)+1)*(x)+(a)[0])
|
||||||
#define POLYNOM13(x, a) (POLYNOM12((x),(a)+1)*(x)+(a)[0])
|
#define POLYNOM13(x, a) (POLYNOM12((x),(a)+1)*(x)+(a)[0])
|
||||||
|
|
||||||
/* These are set up for 64-bit doubles. */
|
#define M_LN_MAX_D (M_LN2 * DBL_MAX_EXP)
|
||||||
|
#define M_LN_MIN_D (M_LN2 * (DBL_MIN_EXP - 1))
|
||||||
#ifndef M_MAX_D
|
|
||||||
#define M_MAX_D 1.7976931348623157e+308
|
|
||||||
#define M_MIN_D 2.2250738585072014e-308
|
|
||||||
#define M_DEXPLEN 11
|
|
||||||
#endif
|
|
||||||
#define M_DMAXEXP ((1 << (M_DEXPLEN - 1)) - 1)
|
|
||||||
#define M_DMINEXP (-M_DMAXEXP)
|
|
||||||
#define M_LN_MAX_D (M_LN2 * M_DMAXEXP)
|
|
||||||
#define M_LN_MIN_D (M_LN2 * (M_DMINEXP - 1))
|
|
||||||
|
|
||||||
#define HUGE M_MAX_D
|
|
||||||
#define MAXDOUBLE M_MAX_D
|
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,7 @@ getch()
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CheckForLineDirective()
|
CheckForLineDirective()
|
||||||
{
|
{
|
||||||
register int ch = getch();
|
register int ch = getch();
|
||||||
|
|
|
@ -54,6 +54,9 @@ struct case_entry {
|
||||||
arith ce_low, ce_up; /* lower and upper bound of range */
|
arith ce_low, ce_up; /* lower and upper bound of range */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void AddCases();
|
||||||
|
void AddOneCase();
|
||||||
|
|
||||||
/* STATICALLOCDEF "case_entry" 20 */
|
/* STATICALLOCDEF "case_entry" 20 */
|
||||||
|
|
||||||
/* The constant DENSITY determines when CSA and when CSB instructions
|
/* The constant DENSITY determines when CSA and when CSB instructions
|
||||||
|
@ -237,6 +240,7 @@ FreeSh(sh)
|
||||||
free_switch_hdr(sh);
|
free_switch_hdr(sh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
AddCases(sh, node, lbl)
|
AddCases(sh, node, lbl)
|
||||||
struct switch_hdr *sh;
|
struct switch_hdr *sh;
|
||||||
register t_node *node;
|
register t_node *node;
|
||||||
|
@ -264,6 +268,7 @@ AddCases(sh, node, lbl)
|
||||||
AddOneCase(sh, node, node, lbl);
|
AddOneCase(sh, node, node, lbl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
AddOneCase(sh, lnode, rnode, lbl)
|
AddOneCase(sh, lnode, rnode, lbl)
|
||||||
register struct switch_hdr *sh;
|
register struct switch_hdr *sh;
|
||||||
t_node *lnode, *rnode;
|
t_node *lnode, *rnode;
|
||||||
|
|
|
@ -53,6 +53,7 @@ df_error(nd, mess, edf)
|
||||||
else node_error(nd, mess);
|
else node_error(nd, mess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
MkCoercion(pnd, tp)
|
MkCoercion(pnd, tp)
|
||||||
t_node **pnd;
|
t_node **pnd;
|
||||||
register t_type *tp;
|
register t_type *tp;
|
||||||
|
|
|
@ -37,6 +37,10 @@ extern char options[];
|
||||||
extern t_desig null_desig;
|
extern t_desig null_desig;
|
||||||
int fp_used;
|
int fp_used;
|
||||||
|
|
||||||
|
void RangeCheck();
|
||||||
|
void CodeParameters();
|
||||||
|
void CodeCall();
|
||||||
|
|
||||||
CodeConst(cst, size)
|
CodeConst(cst, size)
|
||||||
arith cst;
|
arith cst;
|
||||||
int size;
|
int size;
|
||||||
|
@ -55,6 +59,7 @@ CodeConst(cst, size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeString(nd)
|
CodeString(nd)
|
||||||
register t_node *nd;
|
register t_node *nd;
|
||||||
{
|
{
|
||||||
|
@ -288,6 +293,7 @@ CodeCoercion(t1, t2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeCall(nd)
|
CodeCall(nd)
|
||||||
register t_node *nd;
|
register t_node *nd;
|
||||||
{
|
{
|
||||||
|
@ -355,6 +361,7 @@ CodeCall(nd)
|
||||||
DoLineno(nd);
|
DoLineno(nd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeParameters(param, arg)
|
CodeParameters(param, arg)
|
||||||
t_param *param;
|
t_param *param;
|
||||||
register t_node *arg;
|
register t_node *arg;
|
||||||
|
@ -672,6 +679,7 @@ needs_rangecheck(tpl, tpr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
RangeCheck(tpl, tpr)
|
RangeCheck(tpl, tpr)
|
||||||
register t_type *tpl, *tpr;
|
register t_type *tpl, *tpr;
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,6 +45,8 @@ arith min_int[] = { 0L, -128L, -32768L, 0L, -2147483647L-1 };
|
||||||
|
|
||||||
extern char options[];
|
extern char options[];
|
||||||
|
|
||||||
|
void CutSize();
|
||||||
|
|
||||||
overflow(expp)
|
overflow(expp)
|
||||||
t_node *expp;
|
t_node *expp;
|
||||||
{
|
{
|
||||||
|
@ -160,6 +162,7 @@ divide(pdiv, prem)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cstibin(expp)
|
cstibin(expp)
|
||||||
t_node **expp;
|
t_node **expp;
|
||||||
{
|
{
|
||||||
|
@ -351,6 +354,7 @@ cstfbin(expp)
|
||||||
CutSize(exp);
|
CutSize(exp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cstubin(expp)
|
cstubin(expp)
|
||||||
t_node **expp;
|
t_node **expp;
|
||||||
{
|
{
|
||||||
|
@ -457,6 +461,7 @@ cstubin(expp)
|
||||||
CutSize(exp);
|
CutSize(exp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cstset(expp)
|
cstset(expp)
|
||||||
t_node **expp;
|
t_node **expp;
|
||||||
{
|
{
|
||||||
|
@ -648,6 +653,7 @@ cstcall(expp, call)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CutSize(expr)
|
CutSize(expr)
|
||||||
register t_node *expr;
|
register t_node *expr;
|
||||||
{
|
{
|
||||||
|
|
|
@ -533,6 +533,7 @@ CodeFieldDesig(df, ds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeVarDesig(df, ds)
|
CodeVarDesig(df, ds)
|
||||||
register t_def *df;
|
register t_def *df;
|
||||||
register t_desig *ds;
|
register t_desig *ds;
|
||||||
|
|
|
@ -247,6 +247,7 @@ EnterParamList(ppr, Idlist, type, VARp, off)
|
||||||
|
|
||||||
STATIC t_def *DoImport();
|
STATIC t_def *DoImport();
|
||||||
|
|
||||||
|
void
|
||||||
ImportEffects(idef, scope, flag)
|
ImportEffects(idef, scope, flag)
|
||||||
register t_def *idef;
|
register t_def *idef;
|
||||||
t_scope *scope;
|
t_scope *scope;
|
||||||
|
@ -481,6 +482,7 @@ CheckForImports(df)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
EnterFromImportList(idlist, FromDef, FromId)
|
EnterFromImportList(idlist, FromDef, FromId)
|
||||||
register t_node *idlist;
|
register t_node *idlist;
|
||||||
register t_def *FromDef;
|
register t_def *FromDef;
|
||||||
|
|
|
@ -61,6 +61,8 @@ extern char *symbol2str();
|
||||||
node, whereas other errors use the information in the token.
|
node, whereas other errors use the information in the token.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void _error();
|
||||||
|
|
||||||
#if __STDC__
|
#if __STDC__
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
/*VARARGS*/
|
/*VARARGS*/
|
||||||
|
@ -318,6 +320,7 @@ crash(va_alist)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
_error(class, node, fmt, ap, warn_class)
|
_error(class, node, fmt, ap, warn_class)
|
||||||
int class;
|
int class;
|
||||||
t_node *node;
|
t_node *node;
|
||||||
|
|
|
@ -81,6 +81,7 @@ dot2leaf(class)
|
||||||
return nd;
|
return nd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
FreeNode(nd)
|
FreeNode(nd)
|
||||||
register t_node *nd;
|
register t_node *nd;
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,7 +71,7 @@ adds_db_str(s)
|
||||||
while (*s) addc_db_str(*s++);
|
while (*s) addc_db_str(*s++);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static void
|
||||||
stb_type(tp, assign_num)
|
stb_type(tp, assign_num)
|
||||||
register t_type *tp;
|
register t_type *tp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,6 +74,8 @@ t_type
|
||||||
*std_type,
|
*std_type,
|
||||||
*error_type;
|
*error_type;
|
||||||
|
|
||||||
|
void ArraySizes();
|
||||||
|
|
||||||
t_type *
|
t_type *
|
||||||
construct_type(fund, tp)
|
construct_type(fund, tp)
|
||||||
int fund;
|
int fund;
|
||||||
|
@ -576,6 +578,7 @@ ArrayElSize(tp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ArraySizes(tp)
|
ArraySizes(tp)
|
||||||
register t_type *tp;
|
register t_type *tp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,7 +64,7 @@ static int WalkDef();
|
||||||
static int stabdef();
|
static int stabdef();
|
||||||
#endif
|
#endif
|
||||||
static int MkCalls();
|
static int MkCalls();
|
||||||
static int UseWarnings();
|
static void UseWarnings();
|
||||||
|
|
||||||
#define NO_EXIT_LABEL ((label) 0)
|
#define NO_EXIT_LABEL ((label) 0)
|
||||||
#define RETURN_LABEL ((label) 1)
|
#define RETURN_LABEL ((label) 1)
|
||||||
|
@ -72,6 +72,8 @@ static int UseWarnings();
|
||||||
#define REACH_FLAG 1
|
#define REACH_FLAG 1
|
||||||
#define EXIT_FLAG 2
|
#define EXIT_FLAG 2
|
||||||
|
|
||||||
|
void DoAssign();
|
||||||
|
|
||||||
int
|
int
|
||||||
LblWalkNode(lbl, nd, exit, reach)
|
LblWalkNode(lbl, nd, exit, reach)
|
||||||
label lbl, exit;
|
label lbl, exit;
|
||||||
|
@ -995,6 +997,7 @@ node_warning(nd, W_OLDFASHIONED, "compatibility required in FOR statement");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
DoAssign(nd)
|
DoAssign(nd)
|
||||||
register t_node *nd;
|
register t_node *nd;
|
||||||
{
|
{
|
||||||
|
@ -1057,7 +1060,7 @@ RegisterMessage(df)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static void
|
||||||
df_warning(nd, df, warning)
|
df_warning(nd, df, warning)
|
||||||
t_node *nd;
|
t_node *nd;
|
||||||
t_def *df;
|
t_def *df;
|
||||||
|
@ -1080,7 +1083,7 @@ df_warning(nd, df, warning)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static void
|
||||||
UseWarnings(df)
|
UseWarnings(df)
|
||||||
register t_def *df;
|
register t_def *df;
|
||||||
{
|
{
|
||||||
|
|
|
@ -120,7 +120,7 @@ CommentOptions()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
STATIC
|
STATIC void
|
||||||
SkipComment()
|
SkipComment()
|
||||||
{
|
{
|
||||||
/* Skip ISO-Pascal comments (* ... *) or { ... }.
|
/* Skip ISO-Pascal comments (* ... *) or { ... }.
|
||||||
|
@ -216,6 +216,7 @@ register int delim;
|
||||||
|
|
||||||
static char *s_error = "illegal line directive";
|
static char *s_error = "illegal line directive";
|
||||||
|
|
||||||
|
void
|
||||||
CheckForLineDirective()
|
CheckForLineDirective()
|
||||||
{
|
{
|
||||||
register int ch;
|
register int ch;
|
||||||
|
|
|
@ -47,6 +47,7 @@ MarkDef(nd, flags, on)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
AssertStat(expp, line)
|
AssertStat(expp, line)
|
||||||
register struct node *expp;
|
register struct node *expp;
|
||||||
unsigned short line;
|
unsigned short line;
|
||||||
|
@ -69,6 +70,7 @@ AssertStat(expp, line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
AssignStat(left, right)
|
AssignStat(left, right)
|
||||||
register struct node *left, *right;
|
register struct node *left, *right;
|
||||||
{
|
{
|
||||||
|
@ -131,6 +133,7 @@ AssignStat(left, right)
|
||||||
FreeNode(right);
|
FreeNode(right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ProcStat(nd)
|
ProcStat(nd)
|
||||||
register struct node *nd;
|
register struct node *nd;
|
||||||
{
|
{
|
||||||
|
@ -142,6 +145,7 @@ ProcStat(nd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ChkForStat(nd)
|
ChkForStat(nd)
|
||||||
register struct node *nd;
|
register struct node *nd;
|
||||||
{
|
{
|
||||||
|
@ -202,6 +206,7 @@ ChkForStat(nd)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
EndForStat(nd)
|
EndForStat(nd)
|
||||||
register struct node *nd;
|
register struct node *nd;
|
||||||
{
|
{
|
||||||
|
@ -283,6 +288,7 @@ CodeEndFor(nd, stepsize, l1, l2, tmp2)
|
||||||
C_asp(int_size);
|
C_asp(int_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
WithStat(nd)
|
WithStat(nd)
|
||||||
struct node *nd;
|
struct node *nd;
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@ struct case_entry {
|
||||||
*/
|
*/
|
||||||
#define compact(nr, low, up) (nr != 0 && (up - low) / nr <= DENSITY)
|
#define compact(nr, low, up) (nr != 0 && (up - low) / nr <= DENSITY)
|
||||||
|
|
||||||
|
void
|
||||||
CaseExpr(nd)
|
CaseExpr(nd)
|
||||||
struct node *nd;
|
struct node *nd;
|
||||||
{
|
{
|
||||||
|
@ -62,6 +63,7 @@ CaseExpr(nd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CaseEnd(nd, exit_label)
|
CaseEnd(nd, exit_label)
|
||||||
struct node *nd;
|
struct node *nd;
|
||||||
label exit_label;
|
label exit_label;
|
||||||
|
|
|
@ -24,6 +24,11 @@
|
||||||
|
|
||||||
int fp_used;
|
int fp_used;
|
||||||
|
|
||||||
|
void Long2Int();
|
||||||
|
void Int2Long();
|
||||||
|
void genrck();
|
||||||
|
void CodeCall();
|
||||||
|
|
||||||
CodeFil()
|
CodeFil()
|
||||||
{
|
{
|
||||||
if ( !options['L'] )
|
if ( !options['L'] )
|
||||||
|
@ -791,6 +796,7 @@ CodePString(nd, tp)
|
||||||
C_loi(tp->tp_size);
|
C_loi(tp->tp_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeCall(nd)
|
CodeCall(nd)
|
||||||
register struct node *nd;
|
register struct node *nd;
|
||||||
{
|
{
|
||||||
|
@ -1095,6 +1101,7 @@ CodeStd(nd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
Long2Int()
|
Long2Int()
|
||||||
{
|
{
|
||||||
/* convert a long to integer */
|
/* convert a long to integer */
|
||||||
|
@ -1106,6 +1113,7 @@ Long2Int()
|
||||||
C_cii();
|
C_cii();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
Int2Long()
|
Int2Long()
|
||||||
{
|
{
|
||||||
/* convert integer to long */
|
/* convert integer to long */
|
||||||
|
@ -1160,6 +1168,7 @@ RangeCheck(tpl, tpr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
genrck(tp)
|
genrck(tp)
|
||||||
register struct type *tp;
|
register struct type *tp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -66,6 +66,7 @@ cstunary(expp)
|
||||||
expp->nd_right = NULLNODE;
|
expp->nd_right = NULLNODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cstbin(expp)
|
cstbin(expp)
|
||||||
register struct node *expp;
|
register struct node *expp;
|
||||||
{
|
{
|
||||||
|
@ -195,6 +196,7 @@ cstbin(expp)
|
||||||
expp->nd_left = expp->nd_right = NULLNODE;
|
expp->nd_left = expp->nd_right = NULLNODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cstset(expp)
|
cstset(expp)
|
||||||
register struct node *expp;
|
register struct node *expp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -116,6 +116,7 @@ define(id, scope, kind)
|
||||||
return MkDef(id, scope, kind);
|
return MkDef(id, scope, kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
DoDirective(directive, nd, tp, scl, function)
|
DoDirective(directive, nd, tp, scl, function)
|
||||||
struct idf *directive;
|
struct idf *directive;
|
||||||
struct node *nd;
|
struct node *nd;
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
struct desig InitDesig = {DSG_INIT, 0, 0, NULLDEF, 0};
|
struct desig InitDesig = {DSG_INIT, 0, 0, NULLDEF, 0};
|
||||||
struct withdesig *WithDesigs;
|
struct withdesig *WithDesigs;
|
||||||
|
|
||||||
|
void CodeValue();
|
||||||
|
|
||||||
STATIC int
|
STATIC int
|
||||||
properly(ds, size, al)
|
properly(ds, size, al)
|
||||||
|
@ -71,6 +72,7 @@ CodeCopy(lhs, rhs, sz, psize)
|
||||||
C_sti(sz);
|
C_sti(sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeMove(rhs, left, rtp)
|
CodeMove(rhs, left, rtp)
|
||||||
register struct desig *rhs;
|
register struct desig *rhs;
|
||||||
register struct node *left;
|
register struct node *left;
|
||||||
|
@ -150,6 +152,7 @@ CodeMove(rhs, left, rtp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeValue(ds, tp)
|
CodeValue(ds, tp)
|
||||||
register struct desig *ds;
|
register struct desig *ds;
|
||||||
register struct type *tp;
|
register struct type *tp;
|
||||||
|
@ -366,6 +369,7 @@ CodeFieldDesig(df, ds)
|
||||||
ds->dsg_packed = df->fld_flags & F_PACKED;
|
ds->dsg_packed = df->fld_flags & F_PACKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeVarDesig(df, ds)
|
CodeVarDesig(df, ds)
|
||||||
register struct def *df;
|
register struct def *df;
|
||||||
register struct desig *ds;
|
register struct desig *ds;
|
||||||
|
|
|
@ -39,6 +39,8 @@ int err_occurred;
|
||||||
|
|
||||||
extern char *symbol2str();
|
extern char *symbol2str();
|
||||||
|
|
||||||
|
void _error();
|
||||||
|
|
||||||
/* There are three general error-message functions:
|
/* There are three general error-message functions:
|
||||||
lexerror() lexical and pre-processor error messages
|
lexerror() lexical and pre-processor error messages
|
||||||
error() syntactic and pre-processor messagese
|
error() syntactic and pre-processor messagese
|
||||||
|
@ -304,6 +306,7 @@ crash(va_alist)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
_error(class, node, fmt, ap)
|
_error(class, node, fmt, ap)
|
||||||
int class;
|
int class;
|
||||||
struct node *node;
|
struct node *node;
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#include "scope.h"
|
#include "scope.h"
|
||||||
#include "type.h"
|
#include "type.h"
|
||||||
|
|
||||||
|
void CodeLabel();
|
||||||
|
|
||||||
|
|
||||||
DeclLabel(nd)
|
DeclLabel(nd)
|
||||||
struct node *nd;
|
struct node *nd;
|
||||||
|
@ -103,6 +105,7 @@ TstLabel(nd, Slevel)
|
||||||
CodeLabel(df, 1);
|
CodeLabel(df, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
DefLabel(nd, Slevel)
|
DefLabel(nd, Slevel)
|
||||||
register struct node *nd;
|
register struct node *nd;
|
||||||
{
|
{
|
||||||
|
@ -139,6 +142,7 @@ DefLabel(nd, Slevel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeLabel(df, local)
|
CodeLabel(df, local)
|
||||||
register struct def *df;
|
register struct def *df;
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,6 +42,7 @@ MkLeaf(class, token)
|
||||||
return nd;
|
return nd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
FreeNode(nd)
|
FreeNode(nd)
|
||||||
register struct node *nd;
|
register struct node *nd;
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,6 +15,8 @@ static int inpflag = 0; /* input mentioned in heading ? */
|
||||||
static int outpflag = 0; /* output mentioned in heading ? */
|
static int outpflag = 0; /* output mentioned in heading ? */
|
||||||
static label extfl_label; /* label of array of file pointers */
|
static label extfl_label; /* label of array of file pointers */
|
||||||
|
|
||||||
|
void make_extfl_args();
|
||||||
|
|
||||||
set_inp()
|
set_inp()
|
||||||
{
|
{
|
||||||
inpflag = 1;
|
inpflag = 1;
|
||||||
|
@ -25,6 +27,7 @@ set_outp()
|
||||||
outpflag = 1;
|
outpflag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
make_extfl()
|
make_extfl()
|
||||||
{
|
{
|
||||||
if( err_occurred ) return;
|
if( err_occurred ) return;
|
||||||
|
@ -54,6 +57,7 @@ make_extfl()
|
||||||
make_extfl_args( GlobalScope->sc_def );
|
make_extfl_args( GlobalScope->sc_def );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
make_extfl_args(df)
|
make_extfl_args(df)
|
||||||
register struct def *df;
|
register struct def *df;
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,6 +19,12 @@
|
||||||
|
|
||||||
extern char *sprint();
|
extern char *sprint();
|
||||||
|
|
||||||
|
void CodeRead();
|
||||||
|
void CodeReadln();
|
||||||
|
void CodeWrite();
|
||||||
|
void CodeWriteln();
|
||||||
|
|
||||||
|
void
|
||||||
ChkRead(arg)
|
ChkRead(arg)
|
||||||
register struct node *arg;
|
register struct node *arg;
|
||||||
{
|
{
|
||||||
|
@ -86,6 +92,7 @@ ChkRead(arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ChkReadln(arg)
|
ChkReadln(arg)
|
||||||
register struct node *arg;
|
register struct node *arg;
|
||||||
{
|
{
|
||||||
|
@ -142,6 +149,7 @@ ChkReadln(arg)
|
||||||
CodeReadln(file);
|
CodeReadln(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ChkWrite(arg)
|
ChkWrite(arg)
|
||||||
register struct node *arg;
|
register struct node *arg;
|
||||||
{
|
{
|
||||||
|
@ -183,6 +191,7 @@ ChkWrite(arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ChkWriteln(arg)
|
ChkWriteln(arg)
|
||||||
register struct node *arg;
|
register struct node *arg;
|
||||||
{
|
{
|
||||||
|
@ -318,6 +327,7 @@ ChkStdInOut(name, st_out)
|
||||||
return nd;
|
return nd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeRead(file, arg)
|
CodeRead(file, arg)
|
||||||
register struct node *file, *arg;
|
register struct node *file, *arg;
|
||||||
{
|
{
|
||||||
|
@ -376,6 +386,7 @@ CodeRead(file, arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeReadln(file)
|
CodeReadln(file)
|
||||||
struct node *file;
|
struct node *file;
|
||||||
{
|
{
|
||||||
|
@ -386,6 +397,7 @@ CodeReadln(file)
|
||||||
C_asp(pointer_size);
|
C_asp(pointer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeWrite(file, arg)
|
CodeWrite(file, arg)
|
||||||
register struct node *file, *arg;
|
register struct node *file, *arg;
|
||||||
{
|
{
|
||||||
|
@ -472,6 +484,7 @@ CodeWrite(file, arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
CodeWriteln(file)
|
CodeWriteln(file)
|
||||||
register struct node *file;
|
register struct node *file;
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,7 +71,7 @@ adds_db_str(s)
|
||||||
while (*s) addc_db_str(*s++);
|
while (*s) addc_db_str(*s++);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static void
|
||||||
stb_type(tp, assign_num)
|
stb_type(tp, assign_num)
|
||||||
register struct type *tp;
|
register struct type *tp;
|
||||||
{
|
{
|
||||||
|
@ -247,6 +247,7 @@ stb_addtp(s, tp)
|
||||||
(arith) 0);
|
(arith) 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
stb_string(df, kind)
|
stb_string(df, kind)
|
||||||
register struct def *df;
|
register struct def *df;
|
||||||
long kind;
|
long kind;
|
||||||
|
|
|
@ -51,6 +51,8 @@ struct type
|
||||||
*void_type,
|
*void_type,
|
||||||
*error_type;
|
*error_type;
|
||||||
|
|
||||||
|
void ArraySizes();
|
||||||
|
|
||||||
CheckTypeSizes()
|
CheckTypeSizes()
|
||||||
{
|
{
|
||||||
/* first, do some checking
|
/* first, do some checking
|
||||||
|
@ -442,6 +444,7 @@ ArrayElSize(tp, packed)
|
||||||
return algn;
|
return algn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ArraySizes(tp)
|
ArraySizes(tp)
|
||||||
register struct type *tp;
|
register struct type *tp;
|
||||||
{
|
{
|
||||||
|
@ -489,6 +492,7 @@ ArraySizes(tp)
|
||||||
C_rom_cst(tp->arr_elsize);
|
C_rom_cst(tp->arr_elsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
FreeForward(for_type)
|
FreeForward(for_type)
|
||||||
register struct forwtype *for_type;
|
register struct forwtype *for_type;
|
||||||
{
|
{
|
||||||
|
|
|
@ -38,6 +38,7 @@ ea_1_16(param)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ea_1(param) {
|
ea_1(param) {
|
||||||
if (! address_long) {
|
if (! address_long) {
|
||||||
ea_1_16(param);
|
ea_1_16(param);
|
||||||
|
@ -134,6 +135,7 @@ regsize(sz)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
indexed() {
|
indexed() {
|
||||||
if (address_long) {
|
if (address_long) {
|
||||||
mod_2 = 0;
|
mod_2 = 0;
|
||||||
|
|
|
@ -61,6 +61,7 @@ string holstr(n) word n; {
|
||||||
full lbytes;
|
full lbytes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
prolog(nlocals) full nlocals; {
|
prolog(nlocals) full nlocals; {
|
||||||
|
|
||||||
fputs("push ebp\nmov ebp,esp\n", codefile);
|
fputs("push ebp\nmov ebp,esp\n", codefile);
|
||||||
|
@ -179,6 +180,7 @@ mach_option(s)
|
||||||
}
|
}
|
||||||
#endif /* MACH_OPTIONS */
|
#endif /* MACH_OPTIONS */
|
||||||
|
|
||||||
|
void
|
||||||
mes(type) word type ; {
|
mes(type) word type ; {
|
||||||
int argt, a1, a2 ;
|
int argt, a1, a2 ;
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ con_float() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
prolog(nlocals) full nlocals; {
|
prolog(nlocals) full nlocals; {
|
||||||
|
|
||||||
fprintf(codefile,"\tpush\tb\n\tlxi\th,0\n\tdad\tsp\n\tmov\tb,h\n\tmov\tc,l\n");
|
fprintf(codefile,"\tpush\tb\n\tlxi\th,0\n\tdad\tsp\n\tmov\tb,h\n\tmov\tc,l\n");
|
||||||
|
@ -67,6 +68,7 @@ prolog(nlocals) full nlocals; {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
mes(type) word type ; {
|
mes(type) word type ; {
|
||||||
int argt ;
|
int argt ;
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ string holstr(n) word n; {
|
||||||
full lbytes;
|
full lbytes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
prolog(nlocals) full nlocals; {
|
prolog(nlocals) full nlocals; {
|
||||||
|
|
||||||
fputs("\tpush\tbp\n\tmov\tbp,sp\n", codefile);
|
fputs("\tpush\tbp\n\tmov\tbp,sp\n", codefile);
|
||||||
|
@ -157,6 +158,7 @@ regreturn()
|
||||||
}
|
}
|
||||||
#endif /* REGVARS */
|
#endif /* REGVARS */
|
||||||
|
|
||||||
|
void
|
||||||
mes(type) word type ; {
|
mes(type) word type ; {
|
||||||
int argt ;
|
int argt ;
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
* then emitted in one go, by emit_instr().
|
* then emitted in one go, by emit_instr().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void move_special();
|
||||||
|
|
||||||
emit_instr()
|
emit_instr()
|
||||||
{
|
{
|
||||||
register instr_t *ip;
|
register instr_t *ip;
|
||||||
|
@ -70,6 +72,7 @@ long words;
|
||||||
T_EMIT2((short)(words), 0, 0, 0);
|
T_EMIT2((short)(words), 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ea_1(sz, bits)
|
ea_1(sz, bits)
|
||||||
{
|
{
|
||||||
/* Because displacements come in three sizes (null displacement,
|
/* Because displacements come in three sizes (null displacement,
|
||||||
|
@ -242,6 +245,7 @@ badoperand()
|
||||||
serror("bad operand(s)");
|
serror("bad operand(s)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
shift_op(opc, sz)
|
shift_op(opc, sz)
|
||||||
{
|
{
|
||||||
if (mrg_1 < 010 && mrg_2 < 010) {
|
if (mrg_1 < 010 && mrg_2 < 010) {
|
||||||
|
@ -263,6 +267,7 @@ shift_op(opc, sz)
|
||||||
ea_2(SIZE_W, MEM|ALT);
|
ea_2(SIZE_W, MEM|ALT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
bitop(opc)
|
bitop(opc)
|
||||||
{
|
{
|
||||||
register bits;
|
register bits;
|
||||||
|
@ -291,6 +296,7 @@ bitfield(opc, extension)
|
||||||
ea_2(SIZE_L, (mrg_2 < 010) ? 0 : (CTR | ALT));
|
ea_2(SIZE_L, (mrg_2 < 010) ? 0 : (CTR | ALT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
add(opc, sz)
|
add(opc, sz)
|
||||||
{
|
{
|
||||||
if ((mrg_2 & 070) == 010)
|
if ((mrg_2 & 070) == 010)
|
||||||
|
@ -326,6 +332,7 @@ add(opc, sz)
|
||||||
badoperand();
|
badoperand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
and(opc, sz)
|
and(opc, sz)
|
||||||
{
|
{
|
||||||
if (mrg_1 == 074 && mrg_2 >= 076) { /* ccr or sr */
|
if (mrg_1 == 074 && mrg_2 >= 076) { /* ccr or sr */
|
||||||
|
@ -370,6 +377,7 @@ from_dreg(opc, sz, bits)
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cmp(sz)
|
cmp(sz)
|
||||||
{
|
{
|
||||||
register opc;
|
register opc;
|
||||||
|
@ -416,6 +424,7 @@ link_instr(sz, areg)
|
||||||
ea_2(sz, 0);
|
ea_2(sz, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
move(sz)
|
move(sz)
|
||||||
{
|
{
|
||||||
register opc;
|
register opc;
|
||||||
|
@ -448,6 +457,7 @@ move(sz)
|
||||||
ea_2(sz, ALT);
|
ea_2(sz, ALT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
move_special(sz)
|
move_special(sz)
|
||||||
{
|
{
|
||||||
if (mrg_2 >= 076) {
|
if (mrg_2 >= 076) {
|
||||||
|
@ -514,6 +524,7 @@ reverse(regs, max)
|
||||||
return regs;
|
return regs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
movep(sz)
|
movep(sz)
|
||||||
{
|
{
|
||||||
checksize(sz, 2|4);
|
checksize(sz, 2|4);
|
||||||
|
@ -530,6 +541,7 @@ movep(sz)
|
||||||
badoperand();
|
badoperand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
branch(opc, exp)
|
branch(opc, exp)
|
||||||
expr_t exp;
|
expr_t exp;
|
||||||
{
|
{
|
||||||
|
@ -566,6 +578,7 @@ expr_t exp;
|
||||||
T_EMIT4(exp.val, exp.typ, RELPC|RELO4, relonami);
|
T_EMIT4(exp.val, exp.typ, RELPC|RELO4, relonami);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cpbcc(opc, exp)
|
cpbcc(opc, exp)
|
||||||
expr_t exp;
|
expr_t exp;
|
||||||
{
|
{
|
||||||
|
@ -593,6 +606,7 @@ expr_t exp;
|
||||||
T_EMIT4(exp.val, exp.typ, RELPC|RELO4, relonami);
|
T_EMIT4(exp.val, exp.typ, RELPC|RELO4, relonami);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
ea7071(sz)
|
ea7071(sz)
|
||||||
{
|
{
|
||||||
mrg_2 = 071;
|
mrg_2 = 071;
|
||||||
|
@ -671,6 +685,7 @@ ea7071(sz)
|
||||||
mrg_2 = 070;
|
mrg_2 = 070;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
fbranch(opc, exp)
|
fbranch(opc, exp)
|
||||||
expr_t exp;
|
expr_t exp;
|
||||||
{
|
{
|
||||||
|
|
|
@ -187,6 +187,7 @@ regsave(s,off,size)
|
||||||
fprintf(codefile, "!Local %ld into %s\n",off,s);
|
fprintf(codefile, "!Local %ld into %s\n",off,s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
prolog(n) full n; {
|
prolog(n) full n; {
|
||||||
|
|
||||||
nlocals = n;
|
nlocals = n;
|
||||||
|
@ -207,6 +208,7 @@ mach_option(s)
|
||||||
}
|
}
|
||||||
#endif /* MACH_OPTIONS */
|
#endif /* MACH_OPTIONS */
|
||||||
|
|
||||||
|
void
|
||||||
mes(type) word type ; {
|
mes(type) word type ; {
|
||||||
int argt, a1, a2 ;
|
int argt, a1, a2 ;
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,7 @@ con_mult(word sz)
|
||||||
#define FL_MSB_AT_LOW_ADDRESS 1
|
#define FL_MSB_AT_LOW_ADDRESS 1
|
||||||
#include <con_float>
|
#include <con_float>
|
||||||
|
|
||||||
|
void
|
||||||
prolog(full nlocals)
|
prolog(full nlocals)
|
||||||
{
|
{
|
||||||
int ss = nlocals + 8;
|
int ss = nlocals + 8;
|
||||||
|
@ -68,6 +69,7 @@ prolog(full nlocals)
|
||||||
framesize = nlocals;
|
framesize = nlocals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
mes(word type)
|
mes(word type)
|
||||||
{
|
{
|
||||||
int argt ;
|
int argt ;
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
|
|
||||||
extern YYSTYPE yylval;
|
extern YYSTYPE yylval;
|
||||||
|
|
||||||
|
void setupoutput();
|
||||||
|
void commfinish();
|
||||||
|
|
||||||
/* ========== Machine independent C routines ========== */
|
/* ========== Machine independent C routines ========== */
|
||||||
|
|
||||||
void stop() {
|
void stop() {
|
||||||
|
@ -458,6 +461,7 @@ char *s;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
setupoutput()
|
setupoutput()
|
||||||
{
|
{
|
||||||
register sect_t *sp;
|
register sect_t *sp;
|
||||||
|
@ -493,6 +497,7 @@ setupoutput()
|
||||||
outhead.oh_nchar = off; /* see newsymb() */
|
outhead.oh_nchar = off; /* see newsymb() */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
commfinish()
|
commfinish()
|
||||||
{
|
{
|
||||||
#ifndef ASLD
|
#ifndef ASLD
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
extern YYSTYPE yylval;
|
extern YYSTYPE yylval;
|
||||||
|
|
||||||
|
void putval();
|
||||||
|
|
||||||
yylex()
|
yylex()
|
||||||
{
|
{
|
||||||
register c;
|
register c;
|
||||||
|
@ -68,6 +70,7 @@ yylex()
|
||||||
return(c);
|
return(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
putval(c)
|
putval(c)
|
||||||
{
|
{
|
||||||
register valu_t v;
|
register valu_t v;
|
||||||
|
|
|
@ -12,6 +12,10 @@
|
||||||
#include "comm1.h"
|
#include "comm1.h"
|
||||||
#include "y.tab.h"
|
#include "y.tab.h"
|
||||||
|
|
||||||
|
void switchsect();
|
||||||
|
void newsymb();
|
||||||
|
void newident();
|
||||||
|
|
||||||
newequate(ip, typ)
|
newequate(ip, typ)
|
||||||
register item_t *ip;
|
register item_t *ip;
|
||||||
register int typ;
|
register int typ;
|
||||||
|
@ -34,6 +38,7 @@ register int typ;
|
||||||
newident(ip, typ);
|
newident(ip, typ);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
newident(ip, typ)
|
newident(ip, typ)
|
||||||
register item_t *ip;
|
register item_t *ip;
|
||||||
{
|
{
|
||||||
|
@ -74,6 +79,7 @@ register item_t *ip;
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
newlabel(ip)
|
newlabel(ip)
|
||||||
register item_t *ip;
|
register item_t *ip;
|
||||||
{
|
{
|
||||||
|
@ -183,6 +189,7 @@ valu_t val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
switchsect(newtyp)
|
switchsect(newtyp)
|
||||||
int newtyp;
|
int newtyp;
|
||||||
{
|
{
|
||||||
|
@ -242,6 +249,7 @@ valu_t bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RELOCATION
|
#ifdef RELOCATION
|
||||||
|
void
|
||||||
newrelo(s, n)
|
newrelo(s, n)
|
||||||
{
|
{
|
||||||
int iscomm;
|
int iscomm;
|
||||||
|
@ -326,6 +334,7 @@ new_string(s)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
newsymb(name, type, desc, valu)
|
newsymb(name, type, desc, valu)
|
||||||
register char *name;
|
register char *name;
|
||||||
valu_t valu;
|
valu_t valu;
|
||||||
|
|
|
@ -120,6 +120,7 @@ string tostring(n) register word n; {
|
||||||
return(mystrcpy(buf));
|
return(mystrcpy(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
compute(node, presult) register node_p node; register result_t *presult; {
|
compute(node, presult) register node_p node; register result_t *presult; {
|
||||||
result_t leaf1,leaf2;
|
result_t leaf1,leaf2;
|
||||||
register token_p tp;
|
register token_p tp;
|
||||||
|
|
|
@ -12,13 +12,13 @@ typedef struct cost {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
string ea_str;
|
string ea_str;
|
||||||
word ea_off;
|
word ea_off;
|
||||||
} addr_t;
|
} address_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int t_token; /* kind of token, -1 for register */
|
int t_token; /* kind of token, -1 for register */
|
||||||
union {
|
union {
|
||||||
word aw; /* integer type */
|
word aw; /* integer type */
|
||||||
addr_t aa; /* address type */
|
address_t aa; /* address type */
|
||||||
int ar; /* register type */
|
int ar; /* register type */
|
||||||
} t_att[TOKENSIZE];
|
} t_att[TOKENSIZE];
|
||||||
} token_t,*token_p;
|
} token_t,*token_p;
|
||||||
|
|
|
@ -29,6 +29,8 @@ int maxindex;
|
||||||
int regclass[NREGS];
|
int regclass[NREGS];
|
||||||
struct perm *perms;
|
struct perm *perms;
|
||||||
|
|
||||||
|
void permute();
|
||||||
|
|
||||||
struct perm *
|
struct perm *
|
||||||
tuples(regls,nregneeded) rl_p *regls; {
|
tuples(regls,nregneeded) rl_p *regls; {
|
||||||
int class=0;
|
int class=0;
|
||||||
|
@ -64,6 +66,7 @@ tuples(regls,nregneeded) rl_p *regls; {
|
||||||
return(perms);
|
return(perms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
permute(index) {
|
permute(index) {
|
||||||
register struct perm *pp;
|
register struct perm *pp;
|
||||||
register rl_p rlp;
|
register rl_p rlp;
|
||||||
|
|
|
@ -83,6 +83,13 @@ extern short em_ptyp[];
|
||||||
extern double atof();
|
extern double atof();
|
||||||
|
|
||||||
void prolog(full nlocals);
|
void prolog(full nlocals);
|
||||||
|
void mes();
|
||||||
|
void bss();
|
||||||
|
void savelab();
|
||||||
|
void dumplab();
|
||||||
|
void part_flush();
|
||||||
|
void xdumplab();
|
||||||
|
void switchseg();
|
||||||
|
|
||||||
/* Own version of atol that continues computing on overflow.
|
/* Own version of atol that continues computing on overflow.
|
||||||
We don't know that about the ANSI C one.
|
We don't know that about the ANSI C one.
|
||||||
|
@ -136,6 +143,7 @@ in_start() {
|
||||||
in_finish() {
|
in_finish() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
fillemlines() {
|
fillemlines() {
|
||||||
register int t,i;
|
register int t,i;
|
||||||
register struct emline *lp;
|
register struct emline *lp;
|
||||||
|
@ -226,6 +234,7 @@ fillemlines() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
dopseudo() {
|
dopseudo() {
|
||||||
register b,t;
|
register b,t;
|
||||||
register full n;
|
register full n;
|
||||||
|
@ -605,6 +614,7 @@ char *strarg(t) {
|
||||||
return(mystrcpy(argstr));
|
return(mystrcpy(argstr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
bss(n,t,b) full n; {
|
bss(n,t,b) full n; {
|
||||||
register long s = 0;
|
register long s = 0;
|
||||||
|
|
||||||
|
@ -677,6 +687,7 @@ swtxt() {
|
||||||
switchseg(SEGTXT);
|
switchseg(SEGTXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
switchseg(s) {
|
switchseg(s) {
|
||||||
|
|
||||||
if (s == curseg)
|
if (s == curseg)
|
||||||
|
@ -686,6 +697,7 @@ switchseg(s) {
|
||||||
fprintf(codefile,"%s\n",segname[s]);
|
fprintf(codefile,"%s\n",segname[s]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
savelab() {
|
savelab() {
|
||||||
register char *p,*q;
|
register char *p,*q;
|
||||||
|
|
||||||
|
@ -700,6 +712,7 @@ savelab() {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
dumplab() {
|
dumplab() {
|
||||||
|
|
||||||
if (labstr[0] == 0)
|
if (labstr[0] == 0)
|
||||||
|
@ -709,6 +722,7 @@ dumplab() {
|
||||||
labstr[0] = 0;
|
labstr[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
xdumplab() {
|
xdumplab() {
|
||||||
|
|
||||||
if (labstr[0] == 0)
|
if (labstr[0] == 0)
|
||||||
|
@ -717,6 +731,7 @@ xdumplab() {
|
||||||
newdlb(labstr);
|
newdlb(labstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
part_flush() {
|
part_flush() {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -72,7 +72,7 @@ genstr(stringno) {
|
||||||
fputs(codestrings[stringno],codefile);
|
fputs(codestrings[stringno],codefile);
|
||||||
}
|
}
|
||||||
|
|
||||||
string ad2str(ad) addr_t ad; {
|
string ad2str(ad) address_t ad; {
|
||||||
static char buf[100];
|
static char buf[100];
|
||||||
|
|
||||||
if (ad.ea_str==0)
|
if (ad.ea_str==0)
|
||||||
|
@ -87,7 +87,7 @@ string ad2str(ad) addr_t ad; {
|
||||||
return(mystrcpy(buf));
|
return(mystrcpy(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
praddr(ad) addr_t ad; {
|
praddr(ad) address_t ad; {
|
||||||
|
|
||||||
if (ad.ea_str==0 || *(ad.ea_str) == '\0')
|
if (ad.ea_str==0 || *(ad.ea_str) == '\0')
|
||||||
fprintf(codefile,WRD_FMT,ad.ea_off);
|
fprintf(codefile,WRD_FMT,ad.ea_off);
|
||||||
|
@ -108,6 +108,7 @@ gennl() {
|
||||||
putc('\n',codefile);
|
putc('\n',codefile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
prtoken(tp,leadingchar) token_p tp; {
|
prtoken(tp,leadingchar) token_p tp; {
|
||||||
register c;
|
register c;
|
||||||
register char *code;
|
register char *code;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
static label_p label_list = (label_p)0;
|
static label_p label_list = (label_p)0;
|
||||||
extern char *myalloc();
|
extern char *myalloc();
|
||||||
|
|
||||||
|
void
|
||||||
add_label(num, height, flth)
|
add_label(num, height, flth)
|
||||||
{
|
{
|
||||||
register label_p lbl = (label_p)0;
|
register label_p lbl = (label_p)0;
|
||||||
|
|
|
@ -42,6 +42,7 @@ linkreg(of,sz,tp,sc) long of; {
|
||||||
return(rvlp);
|
return(rvlp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
tryreg(rvlp,typ) register struct regvar *rvlp; {
|
tryreg(rvlp,typ) register struct regvar *rvlp; {
|
||||||
int score;
|
int score;
|
||||||
register i;
|
register i;
|
||||||
|
|
|
@ -9,7 +9,7 @@ struct result {
|
||||||
union {
|
union {
|
||||||
word e_con;
|
word e_con;
|
||||||
int e_reg;
|
int e_reg;
|
||||||
addr_t e_addr;
|
address_t e_addr;
|
||||||
} e_v; /* value */
|
} e_v; /* value */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,8 @@ static char rcsid[] = "$Id$";
|
||||||
char *stab[MAXSTAB];
|
char *stab[MAXSTAB];
|
||||||
int nstab=0;
|
int nstab=0;
|
||||||
|
|
||||||
|
void chkstr();
|
||||||
|
|
||||||
string myalloc(size) {
|
string myalloc(size) {
|
||||||
register string p;
|
register string p;
|
||||||
|
|
||||||
|
@ -72,6 +74,7 @@ compar(p1,p2) char **p1,**p2; {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
garbage_collect() {
|
garbage_collect() {
|
||||||
register i;
|
register i;
|
||||||
struct emline *emlp;
|
struct emline *emlp;
|
||||||
|
@ -116,6 +119,7 @@ garbage_collect() {
|
||||||
nstab = fillp-stab;
|
nstab = fillp-stab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
chkstr(str,used) string str; char used[]; {
|
chkstr(str,used) string str; char used[]; {
|
||||||
register low,middle,high;
|
register low,middle,high;
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,8 @@ static char rcsid[] = "$Id$";
|
||||||
|
|
||||||
extern int nstab; /* salloc.c */
|
extern int nstab; /* salloc.c */
|
||||||
|
|
||||||
|
void bmove();
|
||||||
|
|
||||||
savestatus(sp) register state_p sp; {
|
savestatus(sp) register state_p sp; {
|
||||||
|
|
||||||
sp->st_sh = stackheight;
|
sp->st_sh = stackheight;
|
||||||
|
@ -57,6 +59,7 @@ restorestatus(sp) register state_p sp; {
|
||||||
popstr(sp->st_ns);
|
popstr(sp->st_ns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
bmove(from,to,nbytes) register short *from,*to; register nbytes; {
|
bmove(from,to,nbytes) register short *from,*to; register nbytes; {
|
||||||
|
|
||||||
if (nbytes<=0)
|
if (nbytes<=0)
|
||||||
|
|
|
@ -49,6 +49,7 @@ match(tp,tep,optexp) register token_p tp; register set_p tep; {
|
||||||
return(result.e_v.e_con);
|
return(result.e_v.e_con);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
instance(instno,token) register token_p token; {
|
instance(instno,token) register token_p token; {
|
||||||
register inst_p inp;
|
register inst_p inp;
|
||||||
int i;
|
int i;
|
||||||
|
@ -145,6 +146,7 @@ instance(instno,token) register token_p token; {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
cinstance(instno,token,tp,regno) register token_p token,tp; {
|
cinstance(instno,token,tp,regno) register token_p token,tp; {
|
||||||
register inst_p inp;
|
register inst_p inp;
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -23,6 +23,9 @@ struct variable ANY; /* ANY symbol matching any instruction */
|
||||||
|
|
||||||
char *REST; /* Opcode of first instruction not matched by current pattern */
|
char *REST; /* Opcode of first instruction not matched by current pattern */
|
||||||
|
|
||||||
|
void labeldef();
|
||||||
|
void set_opcode();
|
||||||
|
|
||||||
#include "gen.c"
|
#include "gen.c"
|
||||||
|
|
||||||
|
|
||||||
|
@ -170,6 +173,7 @@ write_first(w)
|
||||||
|
|
||||||
/* Try to recognize the opcode part of an instruction */
|
/* Try to recognize the opcode part of an instruction */
|
||||||
|
|
||||||
|
void
|
||||||
set_opcode(ip)
|
set_opcode(ip)
|
||||||
register instr_p ip;
|
register instr_p ip;
|
||||||
{
|
{
|
||||||
|
@ -318,6 +322,7 @@ bool split_operands(ip)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
labeldef(ip)
|
labeldef(ip)
|
||||||
register instr_p ip;
|
register instr_p ip;
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ void prolog(full nlocals)
|
||||||
framesize = nlocals;
|
framesize = nlocals;
|
||||||
}
|
}
|
||||||
|
|
||||||
mes(word type)
|
void mes(word type)
|
||||||
{
|
{
|
||||||
int argt ;
|
int argt ;
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include "flt_misc.h"
|
#include "flt_misc.h"
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -15,16 +16,15 @@ flt_b64_add(e1,e2)
|
||||||
int carry;
|
int carry;
|
||||||
|
|
||||||
/* add higher pair of 32 bits */
|
/* add higher pair of 32 bits */
|
||||||
overflow = ucmp((long)0xFFFFFFFF - e1->flt_h_32, e2->flt_h_32) < 0;
|
overflow = (0xFFFFFFFFUL - e1->flt_h_32 < e2->flt_h_32);
|
||||||
e1->flt_h_32 += e2->flt_h_32;
|
e1->flt_h_32 += e2->flt_h_32;
|
||||||
|
|
||||||
/* add lower pair of 32 bits */
|
/* add lower pair of 32 bits */
|
||||||
carry = ucmp((long)0xFFFFFFFF - e1->flt_l_32, e2->flt_l_32) < 0;
|
carry = (0xFFFFFFFFUL - e1->flt_l_32 < e2->flt_l_32);
|
||||||
e1->flt_l_32 += e2->flt_l_32;
|
e1->flt_l_32 += e2->flt_l_32;
|
||||||
|
|
||||||
if ((carry) && ((++e1->flt_h_32 &~0xFFFFFFFF) || e1->flt_h_32 == 0)) {
|
if ((carry) && (++e1->flt_h_32 == 0))
|
||||||
e1->flt_h_32 = 0;
|
|
||||||
return(1); /* had a 64 bit overflow */
|
return(1); /* had a 64 bit overflow */
|
||||||
}
|
|
||||||
return(overflow); /* return status from higher add */
|
return(overflow); /* return status from higher add */
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,12 +23,10 @@ flt_b64_sft(e,n)
|
||||||
n -= 32;
|
n -= 32;
|
||||||
}
|
}
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
e->flt_l_32 = (e->flt_l_32 >> 1) & 0x7FFFFFFF;
|
e->flt_l_32 >>= n;
|
||||||
e->flt_l_32 >>= (n - 1);
|
|
||||||
if (e->flt_h_32 != 0) {
|
if (e->flt_h_32 != 0) {
|
||||||
e->flt_l_32 |= (e->flt_h_32 << (32 - n)) & 0xFFFFFFFF;
|
e->flt_l_32 |= (e->flt_h_32 << (32 - n));
|
||||||
e->flt_h_32 = (e->flt_h_32 >> 1) & 0x7FFFFFFF;
|
e->flt_h_32 >>= n;
|
||||||
e->flt_h_32 >>= (n - 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
n = -n;
|
n = -n;
|
||||||
|
@ -38,11 +36,10 @@ flt_b64_sft(e,n)
|
||||||
n -= 32;
|
n -= 32;
|
||||||
}
|
}
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
e->flt_h_32 = (e->flt_h_32 << n) & 0xFFFFFFFF;
|
e->flt_h_32 <<= n;
|
||||||
if (e->flt_l_32 != 0) {
|
if (e->flt_l_32 != 0) {
|
||||||
long l = (e->flt_l_32 >> 1) & 0x7FFFFFFF;
|
e->flt_h_32 |= (e->flt_l_32 >> (32 - n));
|
||||||
e->flt_h_32 |= (l >> (31 - n));
|
e->flt_l_32 <<= n;
|
||||||
e->flt_l_32 = (e->flt_l_32 << n) & 0xFFFFFFFF;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ clibrary {
|
||||||
"./flt_umin.c",
|
"./flt_umin.c",
|
||||||
"./flt_chk.c",
|
"./flt_chk.c",
|
||||||
"./split.c",
|
"./split.c",
|
||||||
"./ucmp.c",
|
|
||||||
},
|
},
|
||||||
hdrs = { "./flt_arith.h" },
|
hdrs = { "./flt_arith.h" },
|
||||||
deps = {
|
deps = {
|
||||||
|
@ -24,4 +23,18 @@ clibrary {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- The test program isn't built by default. Here is a target
|
||||||
|
-- modules/src/flt_arith+pkg to install it as flt_test
|
||||||
|
|
||||||
|
cprogram {
|
||||||
|
name = "test",
|
||||||
|
srcs = { "./test.c" },
|
||||||
|
deps = { "+lib" },
|
||||||
|
}
|
||||||
|
|
||||||
|
installable {
|
||||||
|
name = "pkg",
|
||||||
|
map = {
|
||||||
|
["$(INSDIR)/bin/flt_test"] = "+test",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
|
@ -44,11 +44,10 @@ flt_add(e1,e2,e3)
|
||||||
}
|
}
|
||||||
if (e1->flt_sign != e2->flt_sign) {
|
if (e1->flt_sign != e2->flt_sign) {
|
||||||
/* e2 + e1 = e2 - (-e1) */
|
/* e2 + e1 = e2 - (-e1) */
|
||||||
int tmp = ucmp(e1->m1, e2->m1);
|
if (e1->m1 > e2->m1 ||
|
||||||
int tmp2 = ucmp(e1->m2, e2->m2);
|
(e1->m1 == e2->m1 && e1->m2 > e2->m2)) {
|
||||||
if (tmp > 0 || (tmp == 0 && tmp2 > 0)) {
|
|
||||||
/* abs(e1) > abs(e2) */
|
/* abs(e1) > abs(e2) */
|
||||||
if (tmp2 < 0) {
|
if (e1->m2 < e2->m2) {
|
||||||
e1->m1 -= 1; /* carry in */
|
e1->m1 -= 1; /* carry in */
|
||||||
}
|
}
|
||||||
e1->m1 -= e2->m1;
|
e1->m1 -= e2->m1;
|
||||||
|
@ -56,7 +55,7 @@ flt_add(e1,e2,e3)
|
||||||
*e3 = *e1;
|
*e3 = *e1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (tmp2 > 0)
|
if (e1->m2 > e2->m2)
|
||||||
e2->m1 -= 1; /* carry in */
|
e2->m1 -= 1; /* carry in */
|
||||||
e2->m1 -= e1->m1;
|
e2->m1 -= e1->m1;
|
||||||
e2->m2 -= e1->m2;
|
e2->m2 -= e1->m2;
|
||||||
|
|
|
@ -25,10 +25,9 @@ flt_arith2flt(n, e, uns)
|
||||||
e->m1 = 0; e->m2 = n;
|
e->m1 = 0; e->m2 = n;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
e->m2 = n & 0xffffffffL;
|
/* assuming sizeof(arith) >= 8 */
|
||||||
n >>= 1;
|
e->m1 = n >> 32;
|
||||||
n &= ~((arith) 1 << (8*sizeof(arith)-1));
|
e->m2 = n;
|
||||||
e->m1 = (n >> 31);
|
|
||||||
}
|
}
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
e->flt_exp = 0;
|
e->flt_exp = 0;
|
||||||
|
|
|
@ -9,8 +9,8 @@ flt_arith \- high precision floating point arithmetic
|
||||||
.if t .ta 3m 13m 22m
|
.if t .ta 3m 13m 22m
|
||||||
.if n .ta 5m 25m 40m
|
.if n .ta 5m 25m 40m
|
||||||
struct flt_mantissa {
|
struct flt_mantissa {
|
||||||
long flt_h_32; /* high order 32 bits of mantissa */
|
uint32_t flt_h_32; /* high order 32 bits of mantissa */
|
||||||
long flt_l_32; /* low order 32 bits of mantissa */
|
uint32_t flt_l_32; /* low order 32 bits of mantissa */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -7,15 +7,15 @@
|
||||||
#ifndef __FLT_INCLUDED__
|
#ifndef __FLT_INCLUDED__
|
||||||
#define __FLT_INCLUDED__
|
#define __FLT_INCLUDED__
|
||||||
|
|
||||||
#include "ansi.h"
|
#include <stdint.h>
|
||||||
|
|
||||||
#ifndef arith
|
#ifndef arith
|
||||||
#define arith long
|
#define arith long
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct flt_mantissa {
|
struct flt_mantissa {
|
||||||
long flt_h_32; /* high order 32 bits of mantissa */
|
uint32_t flt_h_32; /* high order 32 bits of mantissa */
|
||||||
long flt_l_32; /* low order 32 bits of mantissa */
|
uint32_t flt_l_32; /* low order 32 bits of mantissa */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct flt_arith {
|
typedef struct flt_arith {
|
||||||
|
@ -33,17 +33,17 @@ extern int flt_status;
|
||||||
|
|
||||||
#define FLT_STRLEN 32 /* max length of result of flt_flt2str() */
|
#define FLT_STRLEN 32 /* max length of result of flt_flt2str() */
|
||||||
|
|
||||||
_PROTOTYPE(void flt_add, (flt_arith *, flt_arith *, flt_arith *));
|
void flt_add(flt_arith *, flt_arith *, flt_arith *);
|
||||||
_PROTOTYPE(void flt_sub, (flt_arith *, flt_arith *, flt_arith *));
|
void flt_sub(flt_arith *, flt_arith *, flt_arith *);
|
||||||
_PROTOTYPE(void flt_mul, (flt_arith *, flt_arith *, flt_arith *));
|
void flt_mul(flt_arith *, flt_arith *, flt_arith *);
|
||||||
_PROTOTYPE(void flt_div, (flt_arith *, flt_arith *, flt_arith *));
|
void flt_div(flt_arith *, flt_arith *, flt_arith *);
|
||||||
_PROTOTYPE(void flt_modf, (flt_arith *, flt_arith *, flt_arith *));
|
void flt_modf(flt_arith *, flt_arith *, flt_arith *);
|
||||||
_PROTOTYPE(int flt_cmp, (flt_arith *, flt_arith *));
|
int flt_cmp(flt_arith *, flt_arith *);
|
||||||
_PROTOTYPE(void flt_str2flt, (char *, flt_arith *));
|
void flt_str2flt(char *, flt_arith *);
|
||||||
_PROTOTYPE(void flt_flt2str, (flt_arith *, char *, int));
|
void flt_flt2str(flt_arith *, char *, int);
|
||||||
_PROTOTYPE(void flt_arith2flt, (arith, flt_arith *, int));
|
void flt_arith2flt(arith, flt_arith *, int);
|
||||||
_PROTOTYPE(arith flt_flt2arith, (flt_arith *, int));
|
arith flt_flt2arith(flt_arith *, int);
|
||||||
_PROTOTYPE(void flt_b64_sft, (struct flt_mantissa *, int));
|
void flt_b64_sft(struct flt_mantissa *, int);
|
||||||
_PROTOTYPE(void flt_umin, (flt_arith *));
|
void flt_umin(flt_arith *);
|
||||||
|
|
||||||
#endif /* __FLT_INCLUDED__ */
|
#endif /* __FLT_INCLUDED__ */
|
||||||
|
|
|
@ -5,14 +5,15 @@
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include "flt_misc.h"
|
#include "flt_misc.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
flt_div(e1,e2,e3)
|
flt_div(e1,e2,e3)
|
||||||
register flt_arith *e1,*e2,*e3;
|
register flt_arith *e1,*e2,*e3;
|
||||||
{
|
{
|
||||||
long result[2];
|
uint32_t result[2];
|
||||||
register long *lp;
|
register uint32_t *rp;
|
||||||
unsigned short u[9], v[5];
|
unsigned short u[9], v[5];
|
||||||
register int j;
|
register int j;
|
||||||
register unsigned short *u_p = u;
|
register unsigned short *u_p = u;
|
||||||
|
@ -44,7 +45,7 @@ flt_div(e1,e2,e3)
|
||||||
while (! v[maxv]) maxv--;
|
while (! v[maxv]) maxv--;
|
||||||
result[0] = 0;
|
result[0] = 0;
|
||||||
result[1] = 0;
|
result[1] = 0;
|
||||||
lp = result;
|
rp = result;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use an algorithm of Knuth (The art of programming, Seminumerical
|
* Use an algorithm of Knuth (The art of programming, Seminumerical
|
||||||
|
@ -52,35 +53,25 @@ flt_div(e1,e2,e3)
|
||||||
* with base 65536.
|
* with base 65536.
|
||||||
*/
|
*/
|
||||||
for (j = 0; j <= 3; j++, u_p++) {
|
for (j = 0; j <= 3; j++, u_p++) {
|
||||||
long q_est, temp;
|
uint32_t q_est, temp;
|
||||||
long v1 = v[1];
|
|
||||||
|
|
||||||
if (j == 2) lp++;
|
if (j == 2) rp++;
|
||||||
if (u_p[0] == 0 && u_p[1] < v[1]) continue;
|
if (u_p[0] == 0 && u_p[1] < v[1]) continue;
|
||||||
temp = ((long)u_p[0] << 16) + u_p[1];
|
temp = ((uint32_t)u_p[0] << 16) + u_p[1];
|
||||||
if (u_p[0] >= v[1]) {
|
if (u_p[0] >= v[1]) {
|
||||||
q_est = 0x0000FFFFL;
|
q_est = 0x0000FFFFUL;
|
||||||
}
|
}
|
||||||
else if (v[1] == 1) {
|
else if (v[1] == 1) {
|
||||||
q_est = temp;
|
q_est = temp;
|
||||||
}
|
}
|
||||||
else if (temp >= 0) {
|
|
||||||
q_est = temp / v1;
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
long rem;
|
q_est = temp / v[1];
|
||||||
q_est = (0x7FFFFFFF/v1)+((temp&0x7FFFFFFF)/v1);
|
|
||||||
rem = (0x7FFFFFFF%v1)+((temp&0x7FFFFFFF)%v1)+1;
|
|
||||||
while (rem >= v1) {
|
|
||||||
q_est++;
|
|
||||||
rem -= v1;
|
|
||||||
}
|
}
|
||||||
}
|
temp -= q_est * v[1];
|
||||||
temp -= q_est * v1;
|
|
||||||
while (!(temp&0xFFFF0000) &&
|
while (!(temp&0xFFFF0000) &&
|
||||||
ucmp((long)v[2]*q_est,(temp<<16)+(long)u_p[2]) > 0) {
|
v[2]*q_est > (temp<<16)+u_p[2]) {
|
||||||
q_est--;
|
q_est--;
|
||||||
temp += v1;
|
temp += v[1];
|
||||||
}
|
}
|
||||||
/* Now, according to Knuth, we have an estimate of the
|
/* Now, according to Knuth, we have an estimate of the
|
||||||
quotient, that is either correct or one too big, but
|
quotient, that is either correct or one too big, but
|
||||||
|
@ -88,11 +79,11 @@ flt_div(e1,e2,e3)
|
||||||
*/
|
*/
|
||||||
if (q_est != 0) {
|
if (q_est != 0) {
|
||||||
int i;
|
int i;
|
||||||
long k = 0;
|
uint32_t k = 0;
|
||||||
int borrow = 0;
|
int borrow = 0;
|
||||||
|
|
||||||
for (i = maxv; i > 0; i--) {
|
for (i = maxv; i > 0; i--) {
|
||||||
long tmp = q_est * (long)v[i] + k + borrow;
|
uint32_t tmp = q_est * v[i] + k + borrow;
|
||||||
unsigned short md = tmp & 0xFFFF;
|
unsigned short md = tmp & 0xFFFF;
|
||||||
|
|
||||||
borrow = (md > u_p[i]);
|
borrow = (md > u_p[i]);
|
||||||
|
@ -100,7 +91,7 @@ flt_div(e1,e2,e3)
|
||||||
k = (tmp >> 16) & 0xFFFF;
|
k = (tmp >> 16) & 0xFFFF;
|
||||||
}
|
}
|
||||||
k += borrow;
|
k += borrow;
|
||||||
borrow = (long)u_p[0] < k;
|
borrow = u_p[0] < k;
|
||||||
u_p[0] -= k;
|
u_p[0] -= k;
|
||||||
|
|
||||||
if (borrow) {
|
if (borrow) {
|
||||||
|
@ -110,15 +101,15 @@ flt_div(e1,e2,e3)
|
||||||
q_est--;
|
q_est--;
|
||||||
borrow = 0;
|
borrow = 0;
|
||||||
for (i = maxv; i > 0; i--) {
|
for (i = maxv; i > 0; i--) {
|
||||||
long tmp
|
uint32_t tmp
|
||||||
= v[i]+(long)u_p[i]+borrow;
|
= v[i]+(uint32_t)u_p[i]+borrow;
|
||||||
|
|
||||||
u_p[i] = tmp & 0xFFFF;
|
u_p[i] = tmp & 0xFFFF;
|
||||||
borrow = (tmp >> 16) & 0xFFFF;
|
borrow = (tmp >> 16) & 0xFFFF;
|
||||||
}
|
}
|
||||||
u_p[0] += borrow;
|
u_p[0] += borrow;
|
||||||
}
|
}
|
||||||
*lp |= (j & 1) ? q_est : (q_est<<16);
|
*rp |= (j & 1) ? q_est : (q_est<<16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e3->m1 = result[0];
|
e3->m1 = result[0];
|
||||||
|
|
|
@ -15,14 +15,12 @@
|
||||||
#define EXT_MIN (-16384) /* min exponent */
|
#define EXT_MIN (-16384) /* min exponent */
|
||||||
|
|
||||||
/* hiding of names: */
|
/* hiding of names: */
|
||||||
#define ucmp _flt_ucmp
|
|
||||||
#define flt_nrm _flt_nrm
|
#define flt_nrm _flt_nrm
|
||||||
#define flt_chk _flt_chk
|
#define flt_chk _flt_chk
|
||||||
#define flt_b64_add _flt_64add
|
#define flt_b64_add _flt_64add
|
||||||
#define flt_split _flt_split
|
#define flt_split _flt_split
|
||||||
|
|
||||||
_PROTOTYPE(int ucmp, (long, long));
|
void flt_nrm(flt_arith *);
|
||||||
_PROTOTYPE(void flt_nrm, (flt_arith *));
|
void flt_chk(flt_arith *);
|
||||||
_PROTOTYPE(void flt_chk, (flt_arith *));
|
int flt_b64_add(struct flt_mantissa *, struct flt_mantissa *);
|
||||||
_PROTOTYPE(int flt_b64_add, (struct flt_mantissa *, struct flt_mantissa *));
|
void flt_split(flt_arith *, unsigned short *);
|
||||||
_PROTOTYPE(void flt_split, (flt_arith *, unsigned short *));
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include "flt_misc.h"
|
#include "flt_misc.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -43,9 +44,9 @@ flt_mul(e1,e2,e3)
|
||||||
*/
|
*/
|
||||||
for(i=4, pres = &result[4];i--;pres--) if (mp[i]) {
|
for(i=4, pres = &result[4];i--;pres--) if (mp[i]) {
|
||||||
unsigned short k = 0;
|
unsigned short k = 0;
|
||||||
long mpi = mp[i];
|
uint32_t mpi = mp[i];
|
||||||
for(j=4;j--;) {
|
for(j=4;j--;) {
|
||||||
long tmp = (long)pres[j] + k;
|
long tmp = (uint32_t)pres[j] + k;
|
||||||
if (mc[j]) tmp += mpi * mc[j];
|
if (mc[j]) tmp += mpi * mc[j];
|
||||||
pres[j] = tmp & 0xFFFF;
|
pres[j] = tmp & 0xFFFF;
|
||||||
k = (tmp >> 16) & 0xFFFF;
|
k = (tmp >> 16) & 0xFFFF;
|
||||||
|
@ -64,12 +65,12 @@ flt_mul(e1,e2,e3)
|
||||||
/*
|
/*
|
||||||
* combine the registers to a total
|
* combine the registers to a total
|
||||||
*/
|
*/
|
||||||
e3->m1 = ((long)result[0] << 16) + result[1];
|
e3->m1 = ((uint32_t)result[0] << 16) + result[1];
|
||||||
e3->m2 = ((long)result[2] << 16) + result[3];
|
e3->m2 = ((uint32_t)result[2] << 16) + result[3];
|
||||||
if (result[4] & 0x8000) {
|
if (result[4] & 0x8000) {
|
||||||
if (++e3->m2 == 0 || (e3->m2 & ~ 0xFFFFFFFF)) {
|
if (++e3->m2 == 0) {
|
||||||
e3->m2 = 0;
|
e3->m2 = 0;
|
||||||
if (++e3->m1 == 0 || (e3->m1 & ~ 0xFFFFFFFF)) {
|
if (++e3->m1 == 0) {
|
||||||
e3->m1 = 0x80000000;
|
e3->m1 = 0x80000000;
|
||||||
e3->flt_exp++;
|
e3->flt_exp++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include "flt_misc.h"
|
#include "flt_misc.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -24,8 +25,8 @@ flt_nrm(e)
|
||||||
e->m2 = 0L;
|
e->m2 = 0L;
|
||||||
e->flt_exp -= 32;
|
e->flt_exp -= 32;
|
||||||
}
|
}
|
||||||
if ((e->m1 & 0x80000000) == 0) {
|
if ((e->m1 & 0x80000000UL) == 0) {
|
||||||
long l = 0x40000000;
|
uint32_t l = 0x40000000UL;
|
||||||
int cnt = -1;
|
int cnt = -1;
|
||||||
|
|
||||||
while (! (l & e->m1)) {
|
while (! (l & e->m1)) {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
#include "flt_arith.h"
|
#include "flt_arith.h"
|
||||||
|
|
||||||
struct tests {
|
struct tests {
|
||||||
|
@ -22,6 +24,7 @@ struct tests {
|
||||||
{ 0, 0, 0, 0}
|
{ 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
register struct tests *p = tests;
|
register struct tests *p = tests;
|
||||||
|
@ -31,7 +34,7 @@ main()
|
||||||
if (! dotest(p)) exit_status = 1;
|
if (! dotest(p)) exit_status = 1;
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
exit(exit_status);
|
return exit_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
/*
|
|
||||||
(c) copyright 1989 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
||||||
See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* $Id$ */
|
|
||||||
|
|
||||||
#include "flt_misc.h"
|
|
||||||
|
|
||||||
int
|
|
||||||
ucmp(l1,l2)
|
|
||||||
long l1,l2;
|
|
||||||
{
|
|
||||||
if (l1 == l2) return 0;
|
|
||||||
if (l2 >= 0) {
|
|
||||||
if (l1 > l2 || l1 < 0) return 1;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (l1 >= 0 || l1 < l2) return -1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
|
@ -4,7 +4,7 @@
|
||||||
sys_open, sys_close, sys_read, sys_write, sys_reset, sys_access,
|
sys_open, sys_close, sys_read, sys_write, sys_reset, sys_access,
|
||||||
sys_modtime, sys_remove, sys_rename, sys_filesize, sys_chmode,
|
sys_modtime, sys_remove, sys_rename, sys_filesize, sys_chmode,
|
||||||
sys_lock, sys_unlock,
|
sys_lock, sys_unlock,
|
||||||
sys_break, sys_stop, sys_time \- system call interface
|
sys_break, sys_stop \- system call interface
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.nf
|
.nf
|
||||||
.B #include <system.h>
|
.B #include <system.h>
|
||||||
|
@ -67,8 +67,6 @@ sys_break, sys_stop, sys_time \- system call interface
|
||||||
.B void sys_stop(how)
|
.B void sys_stop(how)
|
||||||
.B int how;
|
.B int how;
|
||||||
.PP
|
.PP
|
||||||
.B long sys_time();
|
|
||||||
.PP
|
|
||||||
.B long sys_modtime(path)
|
.B long sys_modtime(path)
|
||||||
.B char *path;
|
.B char *path;
|
||||||
.fi
|
.fi
|
||||||
|
|
|
@ -50,7 +50,6 @@ _PROTOTYPE(int sys_unlock, (char *));
|
||||||
#endif
|
#endif
|
||||||
_PROTOTYPE(char *sys_break, (int));
|
_PROTOTYPE(char *sys_break, (int));
|
||||||
_PROTOTYPE(void sys_stop, (int));
|
_PROTOTYPE(void sys_stop, (int));
|
||||||
_PROTOTYPE(long sys_time, (void));
|
|
||||||
_PROTOTYPE(long sys_modtime, (char *));
|
_PROTOTYPE(long sys_modtime, (char *));
|
||||||
|
|
||||||
/* standard file decsriptors */
|
/* standard file decsriptors */
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
/*
|
|
||||||
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
||||||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
||||||
*/
|
|
||||||
/* $Id$ */
|
|
||||||
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
long time();
|
|
||||||
|
|
||||||
long
|
|
||||||
sys_time()
|
|
||||||
{
|
|
||||||
return time((long *) 0);
|
|
||||||
}
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
clibrary {
|
||||||
|
name = "headers",
|
||||||
|
hdrs = { "./src/*.h" }
|
||||||
|
}
|
||||||
|
|
||||||
cprogram {
|
cprogram {
|
||||||
name = "llgen",
|
name = "llgen",
|
||||||
|
|
||||||
|
@ -6,6 +11,7 @@ cprogram {
|
||||||
-- do this.
|
-- do this.
|
||||||
|
|
||||||
srcs = { "./src/*.c" },
|
srcs = { "./src/*.c" },
|
||||||
|
deps = { "+headers" },
|
||||||
vars = {
|
vars = {
|
||||||
["+cflags"] = {
|
["+cflags"] = {
|
||||||
"-DLIBDIR=\\\""..posix.getcwd().."/"..cwd().."/lib\\\"",
|
"-DLIBDIR=\\\""..posix.getcwd().."/"..cwd().."/lib\\\"",
|
||||||
|
|
|
@ -40,9 +40,9 @@ STATIC prline();
|
||||||
STATIC printset();
|
STATIC printset();
|
||||||
STATIC int check();
|
STATIC int check();
|
||||||
STATIC moreverbose();
|
STATIC moreverbose();
|
||||||
STATIC prrule();
|
STATIC void prrule(p_gram p);
|
||||||
STATIC cfcheck();
|
STATIC cfcheck();
|
||||||
STATIC resolve();
|
STATIC void resolve(p_gram p);
|
||||||
STATIC propagate();
|
STATIC propagate();
|
||||||
STATIC spaces();
|
STATIC spaces();
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ moreverbose(t) register p_set t; {
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
prrule(p) register p_gram p; {
|
void prrule(p_gram p) {
|
||||||
/*
|
/*
|
||||||
* Create a verbose printout of grammar rule p
|
* Create a verbose printout of grammar rule p
|
||||||
*/
|
*/
|
||||||
|
@ -420,7 +420,7 @@ cfcheck(s1,s2,flag) p_set s1,s2; {
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
resolve(p) register p_gram p; {
|
void resolve(p_gram p) {
|
||||||
/*
|
/*
|
||||||
* resolve conflicts, as specified by the user
|
* resolve conflicts, as specified by the user
|
||||||
*/
|
*/
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue