From: erikb Date: Wed, 24 Sep 1986 13:53:16 +0000 (+0000) Subject: put heavily used pointer variables in registers X-Git-Tag: release-5-5~5218 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=c967d1ab3a66917585d37ca051face906a1a7816;p=ack.git put heavily used pointer variables in registers --- diff --git a/lang/cem/cemcom/LLlex.c b/lang/cem/cemcom/LLlex.c index b49dcaf6a..107808460 100644 --- a/lang/cem/cemcom/LLlex.c +++ b/lang/cem/cemcom/LLlex.c @@ -1,12 +1,12 @@ /* $Header$ */ /* L E X I C A L A N A L Y Z E R */ +#include "nofloat.h" #include "idfsize.h" #include "numsize.h" #include "debug.h" #include "strsize.h" #include "nopp.h" - #include "input.h" #include "alloc.h" #include "arith.h" diff --git a/lang/cem/cemcom/LLlex.h b/lang/cem/cemcom/LLlex.h index 572160c5b..569a2e907 100644 --- a/lang/cem/cemcom/LLlex.h +++ b/lang/cem/cemcom/LLlex.h @@ -6,6 +6,8 @@ to it. */ +#include "nofloat.h" + /* the structure of a token: */ struct token { int tok_symb; /* the token itself */ diff --git a/lang/cem/cemcom/LLmessage.c b/lang/cem/cemcom/LLmessage.c index 887a15d9d..2d4ac43b6 100644 --- a/lang/cem/cemcom/LLmessage.c +++ b/lang/cem/cemcom/LLmessage.c @@ -1,6 +1,7 @@ /* $Header$ */ /* PARSER ERROR ADMINISTRATION */ +#include "nofloat.h" #include "idf.h" #include "alloc.h" #include "arith.h" diff --git a/lang/cem/cemcom/Makefile.erik b/lang/cem/cemcom/Makefile.erik index 7f8ea21f3..8e7b76aae 100644 --- a/lang/cem/cemcom/Makefile.erik +++ b/lang/cem/cemcom/Makefile.erik @@ -75,7 +75,7 @@ GSRC = char.c symbol2str.c next.c \ # .h files generated by `make hfiles'; PLEASE KEEP THIS UP-TO-DATE! GHSRC = botch_free.h dataflow.h debug.h density.h errout.h \ idepth.h idfsize.h ifdepth.h inputtype.h inumlength.h lapbuf.h \ - maxincl.h myalloc.h nobitfield.h nopp.h \ + maxincl.h myalloc.h nobitfield.h nofloat.h nopp.h \ nparams.h numsize.h parbufsize.h pathlength.h predefine.h \ strsize.h target_sizes.h textsize.h use_tmp.h spec_arith.h static.h @@ -205,47 +205,47 @@ sim: cfiles $(SIM) $(SIMFLAGS) `sources $(COBJ)` $(GSRC) $(LSRC) #AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO -main.o: LLlex.h Lpars.h alloc.h arith.h debug.h declar.h idf.h input.h inputtype.h level.h maxincl.h myalloc.h nobitfield.h nopp.h spec_arith.h specials.h target_sizes.h tokenname.h type.h use_tmp.h -idf.o: LLlex.h Lpars.h align.h alloc.h arith.h assert.h botch_free.h debug.h declar.h decspecs.h def.h idf.h idfsize.h label.h level.h nobitfield.h nopp.h sizes.h spec_arith.h specials.h stack.h storage.h struct.h type.h -declarator.o: Lpars.h alloc.h arith.h botch_free.h declar.h expr.h idf.h label.h nobitfield.h nopp.h sizes.h spec_arith.h storage.h type.h -decspecs.o: Lpars.h arith.h decspecs.h def.h level.h nobitfield.h spec_arith.h type.h -struct.o: LLlex.h Lpars.h align.h arith.h assert.h botch_free.h debug.h def.h field.h idf.h level.h nobitfield.h nopp.h sizes.h spec_arith.h stack.h storage.h struct.h type.h -expr.o: LLlex.h Lpars.h alloc.h arith.h botch_free.h declar.h decspecs.h def.h expr.h idf.h label.h level.h nobitfield.h nopp.h sizes.h spec_arith.h storage.h type.h -ch7.o: Lpars.h arith.h assert.h debug.h def.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h struct.h type.h -ch7bin.o: Lpars.h arith.h botch_free.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h storage.h struct.h type.h -cstoper.o: Lpars.h arith.h assert.h debug.h expr.h idf.h label.h nobitfield.h nopp.h sizes.h spec_arith.h target_sizes.h type.h -arith.o: Lpars.h alloc.h arith.h botch_free.h expr.h field.h idf.h label.h mes.h nobitfield.h nopp.h spec_arith.h storage.h type.h +LLlex.o: LLlex.h Lpars.h alloc.h arith.h assert.h class.h debug.h def.h idf.h idfsize.h input.h nofloat.h nopp.h numsize.h sizes.h spec_arith.h strsize.h +LLmessage.o: LLlex.h Lpars.h alloc.h arith.h idf.h nofloat.h nopp.h spec_arith.h +Lpars.o: Lpars.h alloc.o: alloc.h assert.h debug.h myalloc.h -code.o: LLlex.h Lpars.h alloc.h arith.h assert.h atw.h botch_free.h code.h dataflow.h debug.h declar.h decspecs.h def.h expr.h idf.h label.h level.h mes.h nobitfield.h nopp.h sizes.h spec_arith.h specials.h stack.h stmt.h storage.h type.h use_tmp.h -dumpidf.o: Lpars.h arith.h debug.h def.h expr.h field.h idf.h label.h nobitfield.h nopp.h spec_arith.h stack.h static.h struct.h type.h -error.o: LLlex.h arith.h debug.h errout.h expr.h label.h nopp.h spec_arith.h tokenname.h use_tmp.h -field.o: Lpars.h arith.h assert.h code.h debug.h expr.h field.h idf.h label.h nobitfield.h nopp.h sizes.h spec_arith.h type.h -tokenname.o: LLlex.h Lpars.h arith.h idf.h nopp.h spec_arith.h tokenname.h -LLlex.o: LLlex.h Lpars.h alloc.h arith.h assert.h class.h debug.h def.h idf.h idfsize.h input.h nopp.h numsize.h sizes.h spec_arith.h strsize.h -LLmessage.o: LLlex.h Lpars.h alloc.h arith.h idf.h nopp.h spec_arith.h -input.o: LLlex.h alloc.h arith.h assert.h debug.h idepth.h input.h inputtype.h interface.h nopp.h pathlength.h spec_arith.h static.h -domacro.o: LLlex.h Lpars.h alloc.h arith.h assert.h botch_free.h class.h debug.h idf.h idfsize.h ifdepth.h input.h interface.h macro.h nopp.h nparams.h parbufsize.h spec_arith.h storage.h textsize.h -replace.o: LLlex.h alloc.h arith.h assert.h class.h debug.h idf.h input.h interface.h macro.h nopp.h pathlength.h spec_arith.h static.h strsize.h +arith.o: Lpars.h alloc.h arith.h botch_free.h expr.h field.h idf.h label.h mes.h nobitfield.h nofloat.h nopp.h spec_arith.h storage.h type.h +blocks.o: arith.h atw.h nofloat.h sizes.h spec_arith.h +ch7.o: Lpars.h arith.h assert.h debug.h def.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h struct.h type.h +ch7bin.o: Lpars.h arith.h botch_free.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h storage.h struct.h type.h +ch7mon.o: Lpars.h arith.h botch_free.h def.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h storage.h type.h +char.o: class.h +code.o: LLlex.h Lpars.h alloc.h arith.h assert.h atw.h botch_free.h code.h dataflow.h debug.h declar.h decspecs.h def.h expr.h idf.h label.h level.h mes.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h specials.h stack.h stmt.h storage.h type.h use_tmp.h +conversion.o: Lpars.h arith.h nobitfield.h nofloat.h sizes.h spec_arith.h type.h +cstoper.o: Lpars.h arith.h assert.h debug.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h target_sizes.h type.h +dataflow.o: dataflow.h +declar.o: LLlex.h Lpars.h arith.h debug.h declar.h decspecs.h def.h expr.h field.h idf.h label.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h storage.h struct.h type.h +declarator.o: Lpars.h alloc.h arith.h botch_free.h declar.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h storage.h type.h +decspecs.o: Lpars.h arith.h decspecs.h def.h level.h nobitfield.h nofloat.h spec_arith.h type.h +domacro.o: LLlex.h Lpars.h alloc.h arith.h assert.h botch_free.h class.h debug.h idf.h idfsize.h ifdepth.h input.h interface.h macro.h nofloat.h nopp.h nparams.h parbufsize.h spec_arith.h storage.h textsize.h +dumpidf.o: Lpars.h arith.h debug.h def.h expr.h field.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h stack.h static.h struct.h type.h +error.o: LLlex.h arith.h debug.h errout.h expr.h label.h nofloat.h nopp.h spec_arith.h tokenname.h use_tmp.h +eval.o: Lpars.h align.h arith.h assert.h atw.h code.h dataflow.h debug.h def.h expr.h idf.h label.h level.h mes.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h stack.h type.h +expr.o: LLlex.h Lpars.h alloc.h arith.h botch_free.h declar.h decspecs.h def.h expr.h idf.h label.h level.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h storage.h type.h +expression.o: LLlex.h Lpars.h arith.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h type.h +field.o: Lpars.h arith.h assert.h code.h debug.h expr.h field.h idf.h label.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h type.h +idf.o: LLlex.h Lpars.h align.h alloc.h arith.h assert.h botch_free.h debug.h declar.h decspecs.h def.h idf.h idfsize.h label.h level.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h specials.h stack.h storage.h struct.h type.h init.o: alloc.h class.h idf.h interface.h macro.h nopp.h predefine.h -options.o: align.h arith.h class.h idf.h idfsize.h macro.h maxincl.h nobitfield.h nopp.h sizes.h spec_arith.h storage.h use_tmp.h +input.o: LLlex.h alloc.h arith.h assert.h debug.h idepth.h input.h inputtype.h interface.h nofloat.h nopp.h pathlength.h spec_arith.h static.h +ival.o: Lpars.h align.h arith.h assert.h class.h debug.h def.h expr.h field.h idf.h label.h level.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h struct.h type.h +label.o: Lpars.h arith.h def.h idf.h label.h level.h nobitfield.h nofloat.h nopp.h spec_arith.h type.h +main.o: LLlex.h Lpars.h alloc.h arith.h debug.h declar.h idf.h input.h inputtype.h level.h maxincl.h myalloc.h nobitfield.h nofloat.h nopp.h spec_arith.h specials.h target_sizes.h tokenname.h type.h use_tmp.h +options.o: align.h arith.h class.h idf.h idfsize.h macro.h maxincl.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h storage.h use_tmp.h +program.o: LLlex.h Lpars.h alloc.h arith.h code.h declar.h decspecs.h def.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h type.h +replace.o: LLlex.h alloc.h arith.h assert.h class.h debug.h idf.h input.h interface.h macro.h nofloat.h nopp.h pathlength.h spec_arith.h static.h strsize.h scan.o: class.h idf.h input.h interface.h lapbuf.h macro.h nopp.h nparams.h -skip.o: LLlex.h arith.h class.h input.h interface.h nopp.h spec_arith.h -stack.o: Lpars.h alloc.h arith.h botch_free.h debug.h def.h idf.h level.h mes.h nobitfield.h nopp.h spec_arith.h stack.h storage.h struct.h type.h use_tmp.h -type.o: Lpars.h align.h alloc.h arith.h def.h idf.h nobitfield.h nopp.h sizes.h spec_arith.h storage.h type.h -ch7mon.o: Lpars.h arith.h botch_free.h def.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h storage.h type.h -label.o: Lpars.h arith.h def.h idf.h label.h level.h nobitfield.h nopp.h spec_arith.h type.h -eval.o: Lpars.h align.h arith.h assert.h atw.h code.h dataflow.h debug.h def.h expr.h idf.h label.h level.h mes.h nobitfield.h nopp.h sizes.h spec_arith.h stack.h type.h -switch.o: Lpars.h arith.h assert.h botch_free.h code.h debug.h density.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h storage.h switch.h type.h +skip.o: LLlex.h arith.h class.h input.h interface.h nofloat.h nopp.h spec_arith.h +stack.o: Lpars.h alloc.h arith.h botch_free.h debug.h def.h idf.h level.h mes.h nobitfield.h nofloat.h nopp.h spec_arith.h stack.h storage.h struct.h type.h use_tmp.h +statement.o: LLlex.h Lpars.h arith.h botch_free.h code.h debug.h def.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h stack.h storage.h type.h storage.o: alloc.h assert.h botch_free.h debug.h storage.h -ival.o: Lpars.h align.h arith.h assert.h class.h debug.h def.h expr.h field.h idf.h label.h level.h nobitfield.h nopp.h sizes.h spec_arith.h struct.h type.h -conversion.o: Lpars.h arith.h nobitfield.h sizes.h spec_arith.h type.h -blocks.o: arith.h atw.h sizes.h spec_arith.h -dataflow.o: dataflow.h -tokenfile.o: Lpars.h -declar.o: LLlex.h Lpars.h arith.h debug.h declar.h decspecs.h def.h expr.h field.h idf.h label.h nobitfield.h nopp.h sizes.h spec_arith.h storage.h struct.h type.h -statement.o: LLlex.h Lpars.h arith.h botch_free.h code.h debug.h def.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h stack.h storage.h type.h -expression.o: LLlex.h Lpars.h arith.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h type.h -program.o: LLlex.h Lpars.h alloc.h arith.h code.h declar.h decspecs.h def.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h type.h -Lpars.o: Lpars.h -char.o: class.h +struct.o: LLlex.h Lpars.h align.h arith.h assert.h botch_free.h debug.h def.h field.h idf.h level.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h stack.h storage.h struct.h type.h +switch.o: Lpars.h arith.h assert.h botch_free.h code.h debug.h density.h expr.h idf.h label.h nobitfield.h nofloat.h nopp.h spec_arith.h storage.h switch.h type.h symbol2str.o: Lpars.h +tokenfile.o: Lpars.h +tokenname.o: LLlex.h Lpars.h arith.h idf.h nofloat.h nopp.h spec_arith.h tokenname.h +type.o: Lpars.h align.h alloc.h arith.h def.h idf.h nobitfield.h nofloat.h nopp.h sizes.h spec_arith.h storage.h type.h diff --git a/lang/cem/cemcom/Parameters b/lang/cem/cemcom/Parameters index 17babb558..a1d0d240d 100644 --- a/lang/cem/cemcom/Parameters +++ b/lang/cem/cemcom/Parameters @@ -133,3 +133,8 @@ !File: static.h #define GSTATIC /* for large global "static" arrays */ + + +!File: nofloat.h +#undef NOFLOAT /* floats implemented by default */ + diff --git a/lang/cem/cemcom/align.h b/lang/cem/cemcom/align.h index ae162f1bb..a49ad946f 100644 --- a/lang/cem/cemcom/align.h +++ b/lang/cem/cemcom/align.h @@ -1,6 +1,8 @@ /* $Header$ */ /* A L I G N M E N T D E F I N I T I O N S */ +#include "nofloat.h" + extern int short_align, word_align, int_align, long_align, #ifndef NOFLOAT diff --git a/lang/cem/cemcom/arith.c b/lang/cem/cemcom/arith.c index 9379244a9..51382e41f 100644 --- a/lang/cem/cemcom/arith.c +++ b/lang/cem/cemcom/arith.c @@ -7,6 +7,7 @@ semantics of C is a mess. */ +#include "nofloat.h" #include "botch_free.h" #include "nobitfield.h" #include "alloc.h" @@ -25,7 +26,8 @@ extern char options[]; int arithbalance(e1p, oper, e2p) /* RM 6.6 */ - struct expr **e1p, **e2p; + register struct expr **e1p, **e2p; + int oper; { /* The expressions *e1p and *e2p are balanced to be operands of the arithmetic operator oper. @@ -127,9 +129,9 @@ any2arith(expp, oper) /* Turns any expression into int_type, long_type or double_type. */ - int fund = (*expp)->ex_type->tp_fund; + int fund; - switch (fund) { + switch (fund = (*expp)->ex_type->tp_fund) { case CHAR: case SHORT: int2int(expp, @@ -174,7 +176,7 @@ any2arith(expp, oper) } erroneous2int(expp) - struct expr **expp; + register struct expr **expp; { /* the (erroneous) expression *expp is replaced by an int expression @@ -190,7 +192,7 @@ struct expr * arith2arith(tp, oper, expr) struct type *tp; int oper; - struct expr *expr; + register struct expr *expr; { /* arith2arith constructs a new expression containing a run-time conversion between some arithmetic types. @@ -280,7 +282,7 @@ array2pointer(expp) } function2pointer(expp) - struct expr **expp; + register struct expr **expp; { /* The expression, which must be a function, is converted to a pointer to the function. @@ -295,7 +297,7 @@ string2pointer(expp) /* The expression, which must be a string constant, is converted to a pointer to the string-containing area. */ - struct expr *ex = *expp; + register struct expr *ex = *expp; label lbl = data_label(); code_string(ex->SG_VALUE, ex->SG_LEN, lbl); @@ -306,7 +308,7 @@ string2pointer(expp) } opnd2integral(expp, oper) - struct expr **expp; + register struct expr **expp; int oper; { register int fund = (*expp)->ex_type->tp_fund; @@ -320,7 +322,7 @@ opnd2integral(expp, oper) } opnd2logical(expp, oper) - struct expr **expp; + register struct expr **expp; int oper; { register int fund; @@ -332,11 +334,7 @@ opnd2logical(expp, oper) if ((*expp)->ex_type->tp_fund == FIELD) field2arith(expp); #endif NOBITFIELD - - fund = (*expp)->ex_type->tp_fund; - - switch (fund) { - + switch (fund = (*expp)->ex_type->tp_fund) { case CHAR: case SHORT: case INT: @@ -358,7 +356,7 @@ opnd2logical(expp, oper) } opnd2test(expp, oper) - struct expr **expp; + register struct expr **expp; { opnd2logical(expp, oper); if ((*expp)->ex_class == Oper && is_test_op((*expp)->OP_OPER)) @@ -429,7 +427,7 @@ is_asgn_op(oper) } any2opnd(expp, oper) - struct expr **expp; + register struct expr **expp; { if (!*expp) return; diff --git a/lang/cem/cemcom/ch7.c b/lang/cem/cemcom/ch7.c index b95922fe1..1317571c0 100644 --- a/lang/cem/cemcom/ch7.c +++ b/lang/cem/cemcom/ch7.c @@ -1,6 +1,7 @@ /* $Header$ */ /* S E M A N T I C A N A L Y S I S -- C H A P T E R 7 RM */ +#include "nofloat.h" #include "debug.h" #include "nobitfield.h" #include "idf.h" diff --git a/lang/cem/cemcom/ch7bin.c b/lang/cem/cemcom/ch7bin.c index b8e1e182f..848f14cf5 100644 --- a/lang/cem/cemcom/ch7bin.c +++ b/lang/cem/cemcom/ch7bin.c @@ -1,7 +1,8 @@ /* $Header$ */ /* SEMANTIC ANALYSIS (CHAPTER 7RM) -- BINARY OPERATORS */ -#include "botch_free.h" /* UF */ +#include "nofloat.h" +#include "botch_free.h" #include "idf.h" #include "arith.h" #include "type.h" diff --git a/lang/cem/cemcom/ch7mon.c b/lang/cem/cemcom/ch7mon.c index 21ca76bd6..23c3f5c39 100644 --- a/lang/cem/cemcom/ch7mon.c +++ b/lang/cem/cemcom/ch7mon.c @@ -1,6 +1,7 @@ /* $Header$ */ /* SEMANTIC ANALYSIS (CHAPTER 7RM) -- MONADIC OPERATORS */ +#include "nofloat.h" #include "nobitfield.h" #include "botch_free.h" #include "Lpars.h" diff --git a/lang/cem/cemcom/code.c b/lang/cem/cemcom/code.c index dfd952b59..a5c245deb 100644 --- a/lang/cem/cemcom/code.c +++ b/lang/cem/cemcom/code.c @@ -1,12 +1,11 @@ /* $Header$ */ /* C O D E - G E N E R A T I N G R O U T I N E S */ +#include "nofloat.h" #include - #include "dataflow.h" #include "use_tmp.h" #include "botch_free.h" - #include "arith.h" #include "type.h" #include "idf.h" @@ -67,7 +66,7 @@ code_string(val, len, dlb) int len; label dlb; { - struct string_cst *sc = new_string_cst(); + register struct string_cst *sc = new_string_cst(); C_ina_dlb(dlb); sc->next = str_list; @@ -107,14 +106,14 @@ prepend_scopes(dst_file) and generates those exa's, exp's, ina's and inp's that superior hindsight has provided, on the file dst_file. */ - struct stack_entry *se = local_level->sl_entry; + register struct stack_entry *se = local_level->sl_entry; if (C_open(dst_file) == 0) fatal("cannot create %s", dst_file ? dst_file : "stdout"); famous_first_words(); while (se != 0) { - struct idf *idf = se->se_idf; - struct def *def = idf->id_def; + register struct idf *idf = se->se_idf; + register struct def *def = idf->id_def; if (def && ( def->df_initialized || @@ -131,7 +130,7 @@ prepend_scopes(dst_file) code_scope(text, def) char *text; - struct def *def; + register struct def *def; { /* generates code for one name, text, of the storage class as given by def, if meaningful. @@ -165,7 +164,7 @@ static label file_name_label; begin_proc(name, def) /* to be called when entering a procedure */ char *name; - struct def *def; + register struct def *def; { /* begin_proc() is called at the entrance of a new function and performs the necessary code generation: @@ -291,7 +290,7 @@ do_return_expr(expr) } code_declaration(idf, expr, lvl, sc) - struct idf *idf; /* idf to be declared */ + register struct idf *idf; /* idf to be declared */ struct expr *expr; /* initialisation; NULL if absent */ int lvl; /* declaration level */ int sc; /* storage class, as in the declaration */ @@ -319,7 +318,7 @@ code_declaration(idf, expr, lvl, sc) extern int a = 5; */ char *text = idf->id_text; - struct def *def = idf->id_def; + register struct def *def = idf->id_def; arith size = def->df_type->tp_size; int def_sc = def->df_sc; @@ -437,7 +436,7 @@ loc_init(expr, id) } bss(idf) - struct idf *idf; + register struct idf *idf; { /* bss() allocates bss space for the global idf. */ @@ -456,21 +455,21 @@ bss(idf) C_bss_cst(align(size, word_align), (arith)0, 1); } -formal_cvt(def) - struct def *def; +formal_cvt(df) + register struct def *df; { /* formal_cvt() converts a formal parameter of type char or short from int to that type. */ - register struct type* tp = def->df_type; + register struct type *tp = df->df_type; if (tp->tp_size != int_size) if (tp->tp_fund == CHAR || tp->tp_fund == SHORT) { - C_lol(def->df_address); - conversion(int_type, def->df_type); - C_lal(def->df_address); + C_lol(df->df_address); + conversion(int_type, df->df_type); + C_lal(df->df_address); C_sti(tp->tp_size); - def->df_register = REG_NONE; + df->df_register = REG_NONE; } } diff --git a/lang/cem/cemcom/conversion.c b/lang/cem/cemcom/conversion.c index e62cb264d..bbb8914b1 100644 --- a/lang/cem/cemcom/conversion.c +++ b/lang/cem/cemcom/conversion.c @@ -1,6 +1,7 @@ /* $Header$ */ /* C O N V E R S I O N - C O D E G E N E R A T O R */ +#include "nofloat.h" #include #include "arith.h" #include "type.h" @@ -29,30 +30,23 @@ conversion(from_type, to_type) arith from_size; arith to_size; - if (from_type == to_type) { /* a little optimisation */ + if (from_type == to_type) /* a little optimisation */ return; - } - from_size = from_type->tp_size; to_size = to_type->tp_size; - switch (fundamental(from_type)) { - case T_SIGNED: switch (fundamental(to_type)) { - case T_SIGNED: C_loc(from_size); C_loc(to_size < word_size ? word_size : to_size); C_cii(); break; - case T_UNSIGNED: C_loc(from_size < word_size ? word_size : from_size); C_loc(to_size < word_size ? word_size : to_size); C_ciu(); break; - #ifndef NOFLOAT case T_FLOATING: C_loc(from_size < word_size ? word_size : from_size); @@ -62,21 +56,16 @@ conversion(from_type, to_type) #endif NOFLOAT } break; - case T_UNSIGNED: C_loc(from_size < word_size ? word_size : from_size); C_loc(to_size < word_size ? word_size : to_size); - switch (fundamental(to_type)) { - case T_SIGNED: C_cui(); break; - case T_UNSIGNED: C_cuu(); break; - #ifndef NOFLOAT case T_FLOATING: C_cuf(); @@ -84,22 +73,17 @@ conversion(from_type, to_type) #endif NOFLOAT } break; - #ifndef NOFLOAT case T_FLOATING: C_loc(from_size < word_size ? word_size : from_size); C_loc(to_size < word_size ? word_size : to_size); - switch (fundamental(to_type)) { - case T_SIGNED: C_cfi(); break; - case T_UNSIGNED: C_cfu(); break; - case T_FLOATING: C_cff(); break; @@ -116,10 +100,9 @@ conversion(from_type, to_type) */ int fundamental(tp) - struct type *tp; + register struct type *tp; { switch (tp->tp_fund) { - case CHAR: case SHORT: case INT: @@ -127,13 +110,11 @@ fundamental(tp) case LONG: case ENUM: return tp->tp_unsigned ? T_UNSIGNED : T_SIGNED; - #ifndef NOFLOAT case FLOAT: case DOUBLE: return T_FLOATING; #endif NOFLOAT - case POINTER: /* pointer : signed / unsigned ??? */ return T_SIGNED; } diff --git a/lang/cem/cemcom/cstoper.c b/lang/cem/cemcom/cstoper.c index e9ce5349c..8c5154104 100644 --- a/lang/cem/cemcom/cstoper.c +++ b/lang/cem/cemcom/cstoper.c @@ -1,8 +1,7 @@ /* $Header$ */ /* C O N S T A N T E X P R E S S I O N H A N D L I N G */ -#include "target_sizes.h" /* UF */ - +#include "target_sizes.h" #include "idf.h" #include "arith.h" #include "type.h" @@ -19,14 +18,14 @@ arith max_int; /* maximum integer on target machine */ arith max_unsigned; /* maximum unsigned on target machine */ cstbin(expp, oper, expr) - struct expr **expp, *expr; + register struct expr **expp, *expr; { /* The operation oper is performed on the constant expressions *expp(ld) and expr(ct), and the result restored in *expp. */ - arith o1 = (*expp)->VL_VALUE; - arith o2 = expr->VL_VALUE; + register arith o1 = (*expp)->VL_VALUE; + register arith o2 = expr->VL_VALUE; int uns = (*expp)->ex_type->tp_unsigned; ASSERT(is_ld_cst(*expp) && is_cp_cst(expr)); @@ -184,7 +183,7 @@ cstbin(expp, oper, expr) } cut_size(expr) - struct expr *expr; + register struct expr *expr; { /* The constant value of the expression expr is made to conform to the size of the type of the expression. @@ -214,8 +213,8 @@ cut_size(expr) init_cst() { - int i = 0; - arith bt = (arith)0; + register int i = 0; + register arith bt = (arith)0; while (!(bt < 0)) { bt = (bt << 8) + 0377, i++; @@ -227,8 +226,6 @@ init_cst() mach_long_sign = 1 << (mach_long_size * 8 - 1); if (long_size < mach_long_size) fatal("sizeof (long) insufficient on this machine"); - - max_int = full_mask[int_size] & ~(1 << (int_size * 8 - 1)); max_unsigned = full_mask[int_size]; } diff --git a/lang/cem/cemcom/declarator.c b/lang/cem/cemcom/declarator.c index dba30694a..ff79ab0a1 100644 --- a/lang/cem/cemcom/declarator.c +++ b/lang/cem/cemcom/declarator.c @@ -33,7 +33,7 @@ declare_type(tp, dc) } add_decl_unary(dc, fund, count, fm) - struct declarator *dc; + register struct declarator *dc; arith count; struct formal *fm; { @@ -77,7 +77,7 @@ remove_declarator(dc) } reject_params(dc) - struct declarator *dc; + register struct declarator *dc; { /* The declarator is checked to have no parameters, if it is a function. @@ -90,7 +90,7 @@ reject_params(dc) } array_subscript(expr) - struct expr *expr; + register struct expr *expr; { arith size = expr->VL_VALUE; diff --git a/lang/cem/cemcom/decspecs.c b/lang/cem/cemcom/decspecs.c index 564b8d0b6..ead1cbe6e 100644 --- a/lang/cem/cemcom/decspecs.c +++ b/lang/cem/cemcom/decspecs.c @@ -1,6 +1,7 @@ /* $Header$ */ /* D E C L A R A T I O N S P E C I F I E R C H E C K I N G */ +#include "nofloat.h" #include "Lpars.h" #include "decspecs.h" #include "arith.h" @@ -15,12 +16,12 @@ extern char *symbol2str(); struct decspecs null_decspecs; do_decspecs(ds) - struct decspecs *ds; + register struct decspecs *ds; { /* The provisional decspecs ds as obtained from the program is turned into a legal consistent decspecs. */ - struct type *tp = ds->ds_type; + register struct type *tp = ds->ds_type; if (level == L_FORMAL1) crash("do_decspecs"); diff --git a/lang/cem/cemcom/dumpidf.c b/lang/cem/cemcom/dumpidf.c index c027c646e..4e5e41e9a 100644 --- a/lang/cem/cemcom/dumpidf.c +++ b/lang/cem/cemcom/dumpidf.c @@ -4,6 +4,7 @@ #include "debug.h" #ifdef DEBUG +#include "nofloat.h" #include "nopp.h" #include "nobitfield.h" #include "arith.h" @@ -41,7 +42,7 @@ static int dumplevel; static newline() { - int dl = dumplevel; + register int dl = dumplevel; print("\n"); while (dl >= 2) { @@ -66,7 +67,7 @@ dumpidftab(msg, opt) print(">>> DUMPIDF, %s (start)", msg); dumpstack(); for (i = 0; i < HASHSIZE; i++) { - struct idf *notch = idf_hashtable[i]; + register struct idf *notch = idf_hashtable[i]; while (notch) { dumpidf(notch, opt); @@ -77,13 +78,14 @@ dumpidftab(msg, opt) print(">>> DUMPIDF, %s (end)\n", msg); } -dumpstack() { +dumpstack() +{ /* Dumps the identifier stack, starting at the top. */ - struct stack_level *stl = local_level; + register struct stack_level *stl = local_level; while (stl) { - struct stack_entry *se = stl->sl_entry; + register struct stack_entry *se = stl->sl_entry; newline(); print("%3d: ", stl->sl_level); @@ -97,7 +99,7 @@ dumpstack() { } dumpidf(idf, opt) - struct idf *idf; + register struct idf *idf; { /* All information about the identifier idf is divulged in a hopefully readable format. @@ -174,7 +176,7 @@ dumpdefs(def, opt) } dumptags(tag) - struct tag *tag; + register struct tag *tag; { dumplevel++; while (tag) { @@ -202,7 +204,7 @@ dumptags(tag) } dumpsdefs(sdef, sdk) - struct sdef *sdef; + register struct sdef *sdef; enum sdef_kind sdk; { /* Since sdef's are members of two chains, there are actually @@ -235,7 +237,7 @@ dumpsdefs(sdef, sdk) char * type2str(tp) - struct type *tp; + register struct type *tp; { /* Yields a pointer to a one-line description of the type tp. */ @@ -312,7 +314,7 @@ print_expr(msg, expr) } p1_expr(lvl, expr) - struct expr *expr; + register struct expr *expr; { extern char *type2str(), *symbol2str(); @@ -389,7 +391,9 @@ p1_expr(lvl, expr) } } -p1_indent(lvl) { +p1_indent(lvl) + register int lvl; +{ while (lvl--) print(" "); } diff --git a/lang/cem/cemcom/eval.c b/lang/cem/cemcom/eval.c index 5374ef46a..4923c857d 100644 --- a/lang/cem/cemcom/eval.c +++ b/lang/cem/cemcom/eval.c @@ -12,11 +12,10 @@ compare() */ +#include "nofloat.h" #include - #include "debug.h" #include "nobitfield.h" - #include "dataflow.h" #include "arith.h" #include "type.h" @@ -71,13 +70,13 @@ arith tmp_pointer_var(); */ EVAL(expr, val, code, true_label, false_label) - struct expr *expr; /* the expression tree itself */ + register struct expr *expr; /* the expression tree itself */ int val; /* either RVAL or LVAL */ int code; /* generate explicit code or not */ label true_label; label false_label; /* labels to jump to in logical expr's */ { - register gencode = (code == TRUE); + register int gencode = (code == TRUE); switch (expr->ex_class) { case Value: /* just a simple value */ @@ -87,7 +86,9 @@ EVAL(expr, val, code, true_label, false_label) case String: /* a string constant */ expr_warning(expr, "(DEBUG) value-class 'String' seen"); if (gencode) { - string2pointer(&expr); + struct expr *ex = expr; + string2pointer(&ex); + expr = ex; C_lae_dlb(expr->VL_LBL, expr->VL_VALUE); } break; @@ -105,7 +106,7 @@ EVAL(expr, val, code, true_label, false_label) #endif NOFLOAT case Oper: /* compound expression */ { - register int oper = expr->OP_OPER; + int oper = expr->OP_OPER; register struct expr *leftop = expr->OP_LEFT; register struct expr *rightop = expr->OP_RIGHT; register struct type *tp = expr->OP_TYPE; @@ -250,12 +251,11 @@ EVAL(expr, val, code, true_label, false_label) EVAL(leftop, RVAL, code, NO_LABEL, NO_LABEL); EVAL(rightop, RVAL, code, NO_LABEL, NO_LABEL); ASSERT(tp->tp_fund==INT || tp->tp_fund==LONG); - if (gencode) { + if (gencode) if (tp->tp_unsigned) C_rmu(tp->tp_size); else C_rmi(tp->tp_size); - } break; case LEFT: EVAL(leftop, RVAL, code, NO_LABEL, NO_LABEL); @@ -429,22 +429,21 @@ EVAL(expr, val, code, true_label, false_label) } case '(': { - register struct expr *expr; + register struct expr *ex; arith ParSize = (arith)0; - if (expr = rightop) { + if ((ex = rightop) != NILEXPR) { /* function call with parameters*/ - while ( expr->ex_class == Oper && - expr->OP_OPER == PARCOMMA - ) { - EVAL(expr->OP_RIGHT, RVAL, TRUE, + while ( ex->ex_class == Oper && + ex->OP_OPER == PARCOMMA + ) { + EVAL(ex->OP_RIGHT, RVAL, TRUE, NO_LABEL, NO_LABEL); - ParSize += - ATW(expr->ex_type->tp_size); - expr = expr->OP_LEFT; + ParSize += ATW(ex->ex_type->tp_size); + ex = ex->OP_LEFT; } - EVAL(expr, RVAL, TRUE, NO_LABEL, NO_LABEL); - ParSize += ATW(expr->ex_type->tp_size); + EVAL(ex, RVAL, TRUE, NO_LABEL, NO_LABEL); + ParSize += ATW(ex->ex_type->tp_size); } if ( leftop->ex_class == Value && leftop->VL_CLASS == Name @@ -469,14 +468,14 @@ EVAL(expr, val, code, true_label, false_label) /* remove parameters from stack */ if (ParSize > (arith)0) C_asp(ParSize); - if (!gencode) - break; - if (is_struct_or_union(tp->tp_fund)) { - C_lfr(pointer_size); - load_block(tp->tp_size, tp->tp_align); + if (gencode) { + if (is_struct_or_union(tp->tp_fund)) { + C_lfr(pointer_size); + load_block(tp->tp_size, tp->tp_align); + } + else + C_lfr(ATW(tp->tp_size)); } - else - C_lfr(ATW(tp->tp_size)); break; } case '.': @@ -507,22 +506,32 @@ EVAL(expr, val, code, true_label, false_label) { arith old_offset, tmp; arith esize = tp->tp_size; + int compl; /* Complexity of left operand */ #ifndef NOBITFIELD if (leftop->ex_type->tp_fund == FIELD) { eval_field(expr, code); break; } #endif NOBITFIELD - if (leftop->ex_class != Value) { + if (leftop->ex_class == Value) { + compl = 0; /* Value */ + load_val(leftop, RVAL); + } + else + if (leftop->ex_depth == 1 && leftop->OP_OPER == ARROW) { + compl = 1; /* Value->sel */ + ASSERT(leftop->OP_LEFT->ex_class == Value); + EVAL(leftop, RVAL, TRUE, NO_LABEL, NO_LABEL); + } + else { + compl = 2; /* otherwise */ tmp = tmp_pointer_var(&old_offset); EVAL(leftop, LVAL, TRUE, NO_LABEL, NO_LABEL); C_dup(pointer_size); C_lal(tmp); C_sti(pointer_size); - C_loi(tp->tp_size); + C_loi(esize); } - else - load_val(leftop, RVAL); /* We made the choice to put this stuff here and not to put the conversion in the expression @@ -542,17 +551,23 @@ EVAL(expr, val, code, true_label, false_label) C_dup(esize); if (tp->tp_size < word_size) conversion(word_type, tp); - if (leftop->ex_class != Value) { + if (compl == 0) { + store_val( + &(leftop->ex_object.ex_value), + leftop->ex_type + ); + } + else + if (compl == 1) { + EVAL(leftop, LVAL, TRUE, NO_LABEL, NO_LABEL); + C_sti(tp->tp_size); + } + else { C_lal(tmp); /* always init'd */ C_loi(pointer_size); C_sti(tp->tp_size); free_tmp_var(old_offset); } - else - store_val( - &(leftop->ex_object.ex_value), - leftop->ex_type - ); break; } case '?': /* must be followed by ':' */ @@ -685,7 +700,6 @@ EVAL(expr, val, code, true_label, false_label) expr->ex_type->tp_align); break; } - case Type: default: crash("(EVAL) bad expression class"); } @@ -722,13 +736,13 @@ compare(relop, lbl) /* assop() generates the opcode of an assignment operators op= */ assop(type, oper) - struct type *type; + register struct type *type; int oper; { - register arith size = type->tp_size; + register arith size; register uns = type->tp_unsigned; - if (size < word_size) + if ((size = type->tp_size) < word_size) size = word_size; switch (type->tp_fund) { case CHAR: @@ -837,7 +851,7 @@ arith tmp_pointer_var(oldoffset) arith *oldoffset; /* previous allocated address */ { - struct stack_level *stl = local_level; + register struct stack_level *stl = local_level; *oldoffset = stl->sl_local_offset; stl->sl_local_offset = @@ -940,16 +954,16 @@ store_val(vl, tp) - local variable */ load_val(expr, val) - struct expr *expr; /* expression containing the value */ + register struct expr *expr; /* expression containing the value */ int val; /* generate either LVAL or RVAL */ { register struct type *tp = expr->ex_type; - register int rvalue = (val == RVAL && expr->ex_lvalue != 0); - register arith size = tp->tp_size; - register int tpalign = tp->tp_align; - register int al_on_word; + int rvalue = (val == RVAL && expr->ex_lvalue != 0); + arith size = tp->tp_size; + int tpalign = tp->tp_align; + int al_on_word; register int inword, indword; - register arith val = expr->VL_VALUE; + arith val = expr->VL_VALUE; if (expr->VL_CLASS == Const) { if (rvalue) { /* absolute addressing */ diff --git a/lang/cem/cemcom/expr.c b/lang/cem/cemcom/expr.c index 6426ec5be..282e3391d 100644 --- a/lang/cem/cemcom/expr.c +++ b/lang/cem/cemcom/expr.c @@ -1,7 +1,8 @@ /* $Header$ */ /* EXPRESSION TREE HANDLING */ -#include "botch_free.h" /* UF */ +#include "nofloat.h" +#include "botch_free.h" #include "alloc.h" #include "idf.h" #include "arith.h" @@ -92,7 +93,7 @@ rank_of(oper) int rank_of_expression(expr) - struct expr *expr; + register struct expr *expr; { /* Returns the rank of the top node in the expression. */ @@ -115,7 +116,7 @@ check_conditional(expr, oper, pos_descr) } dot2expr(expp) - struct expr **expp; + register struct expr **expp; { /* The token in dot is converted into an expression, a pointer to which is stored in *expp. @@ -146,7 +147,7 @@ dot2expr(expp) } idf2expr(expr) - struct expr *expr; + register struct expr *expr; { /* Dot contains an identifier which is turned into an expression. @@ -205,7 +206,7 @@ idf2expr(expr) } string2expr(expr) - struct expr *expr; + register struct expr *expr; { /* Dot contains a string which is turned into an expression. */ @@ -228,7 +229,7 @@ int2expr(expr) #ifndef NOFLOAT float2expr(expr) - struct expr *expr; + register struct expr *expr; { /* Dot contains a floating point constant which is turned into an expression. @@ -243,11 +244,12 @@ float2expr(expr) struct expr* intexpr(ivalue, fund) arith ivalue; + int fund; { /* The value ivalue is turned into an integer expression of the size indicated by fund. */ - struct expr *expr = new_expr(); + register struct expr *expr = new_expr(); clear((char *)expr, sizeof(struct expr)); expr->ex_file = dot.tk_file; @@ -258,8 +260,9 @@ intexpr(ivalue, fund) } fill_int_expr(expr, ivalue, fund) - struct expr *expr; + register struct expr *expr; arith ivalue; + int fund; { /* Details derived from ivalue and fund are put into the constant integer expression expr. @@ -308,12 +311,12 @@ new_oper(tp, e1, oper, e2) During the construction of the right recursive initialisation tree it is possible for e2 to be NILEXPR. */ - struct expr *expr = new_expr(); - struct oper *op; + register struct expr *expr = new_expr(); + register struct oper *op; clear((char *)expr, sizeof(struct expr)); if (e2) { - struct expr *e = e2; + register struct expr *e = e2; while (e->ex_class == Oper && e->OP_LEFT) e = e->OP_LEFT; @@ -322,7 +325,7 @@ new_oper(tp, e1, oper, e2) } else if (e1) { - struct expr *e = e1; + register struct expr *e = e1; while (e->ex_class == Oper && e->OP_RIGHT) e = e->OP_RIGHT; @@ -387,7 +390,7 @@ chk_cst_expr(expp) register struct expr *expr = *expp; register int fund = expr->ex_type->tp_fund; register int flags = expr->ex_flags; - register int err = 0; + int err = 0; #ifdef DEBUG print_expr("constant_expression", expr); @@ -417,7 +420,7 @@ chk_cst_expr(expp) } init_expression(eppp, expr) - struct expr ***eppp, *expr; + register struct expr ***eppp, *expr; { /* The expression expr is added to the tree designated indirectly by **eppp. @@ -468,7 +471,7 @@ is_fp_cst(expr) #endif NOFLOAT free_expression(expr) - struct expr *expr; + register struct expr *expr; { /* The expression expr is freed recursively. */ diff --git a/lang/cem/cemcom/expr.str b/lang/cem/cemcom/expr.str index cf74c7e96..c80f9a7ba 100644 --- a/lang/cem/cemcom/expr.str +++ b/lang/cem/cemcom/expr.str @@ -5,6 +5,8 @@ a union of various goodies, we define them first; so be patient. */ +#include "nofloat.h" + /* classes of value */ #define Const 1 #define Name 2 diff --git a/lang/cem/cemcom/idf.c b/lang/cem/cemcom/idf.c index 2cda12a97..92a3f7362 100644 --- a/lang/cem/cemcom/idf.c +++ b/lang/cem/cemcom/idf.c @@ -1,6 +1,7 @@ /* $Header$ */ /* IDENTIFIER FIDDLING & SYMBOL TABLE HANDLING */ +#include "nofloat.h" #include "debug.h" #include "idfsize.h" #include "botch_free.h" @@ -86,11 +87,11 @@ idf_hashed(tg, size, hc) hash_stat() { if (options['h']) { - int i; + register int i; print("Hash table tally:\n"); for (i = 0; i < HASHSIZE; i++) { - struct idf *notch = idf_hashtable[i]; + register struct idf *notch = idf_hashtable[i]; int cnt = 0; while (notch) { @@ -374,8 +375,8 @@ actual_declaration(sc, tp) } global_redecl(idf, new_sc, tp) - struct idf *idf; - struct type *tp; + register struct idf *idf; + register struct type *tp; { /* A global identifier may be declared several times, provided the declarations do not conflict; they might @@ -386,7 +387,7 @@ global_redecl(idf, new_sc, tp) register struct def *def = idf->id_def; if (tp != def->df_type) { - struct type *otp = def->df_type; + register struct type *otp = def->df_type; if ( tp->tp_fund != ARRAY || otp->tp_fund != ARRAY || tp->tp_up != otp->tp_up @@ -425,10 +426,8 @@ global_redecl(idf, new_sc, tp) return; /* no new information */ switch (def->df_sc) { /* the old storage class */ - case EXTERN: switch (new_sc) { /* the new storage class */ - case EXTERN: case GLOBAL: break; @@ -449,10 +448,8 @@ global_redecl(idf, new_sc, tp) break; } break; - case GLOBAL: switch (new_sc) { /* the new storage class */ - case EXTERN: def->df_sc = EXTERN; break; @@ -475,10 +472,8 @@ global_redecl(idf, new_sc, tp) break; } break; - case STATIC: switch (new_sc) { /* the new storage class */ - case EXTERN: if (def->df_initialized) { error("cannot redeclare %s to extern", @@ -501,10 +496,8 @@ global_redecl(idf, new_sc, tp) break; } break; - case IMPLICIT: switch (new_sc) { /* the new storage class */ - case EXTERN: case GLOBAL: def->df_sc = new_sc; @@ -520,7 +513,6 @@ global_redecl(idf, new_sc, tp) break; } break; - case ENUM: case TYPEDEF: error("illegal redeclaration of %s", idf->id_text); @@ -550,7 +542,7 @@ good_formal(def, idf) } declare_params(dc) - struct declarator *dc; + register struct declarator *dc; { /* Declares the formal parameters if they exist. */ @@ -607,7 +599,7 @@ declare_formals(fp) An address is assigned to each formal parameter. The total size of the formals is returned in *fp; */ - struct stack_entry *se = stack_level_of(L_FORMAL1)->sl_entry; + register struct stack_entry *se = stack_level_of(L_FORMAL1)->sl_entry; arith f_offset = (arith)0; #ifdef DEBUG @@ -615,8 +607,7 @@ declare_formals(fp) dumpidftab("start declare_formals", 0); #endif DEBUG while (se) { - struct idf *idf = se->se_idf; - struct def *def = idf->id_def; + register struct def *def = se->se_idf->id_def; def->df_address = f_offset; @@ -624,8 +615,7 @@ declare_formals(fp) word boundaries, i.e. take care that the following parameter starts on a new word boundary. */ - f_offset = align(f_offset + def->df_type->tp_size, - word_align); + f_offset = align(f_offset + def->df_type->tp_size, word_align); /* the following is absurd: any char or short formal must be converted from integer to that type @@ -673,7 +663,7 @@ update_ahead(idf) } free_formals(fm) - struct formal *fm; + register struct formal *fm; { while (fm) { register struct formal *tmp = fm->next; @@ -684,11 +674,12 @@ free_formals(fm) char hmask[IDFSIZE]; -init_hmask() { +init_hmask() +{ /* A simple congruence random number generator, as described in Knuth, vol 2. */ - int h, rnd = HASH_X; + register int h, rnd = HASH_X; for (h = 0; h < IDFSIZE; h++) { hmask[h] = rnd; diff --git a/lang/cem/cemcom/ival.c b/lang/cem/cemcom/ival.c index 61ce90f22..755254989 100644 --- a/lang/cem/cemcom/ival.c +++ b/lang/cem/cemcom/ival.c @@ -1,11 +1,10 @@ /* $Header$ */ /* CODE FOR THE INITIALISATION OF GLOBAL VARIABLES */ +#include "nofloat.h" #include - #include "debug.h" #include "nobitfield.h" - #include "arith.h" #include "align.h" #include "label.h" @@ -54,7 +53,7 @@ do_ival(tpp, ex) struct expr * IVAL(tpp, ex) struct type **tpp; /* type of global variable */ - struct expr *ex; /* initialiser expression */ + register struct expr *ex; /* initialiser expression */ { register struct type *tp = *tpp; @@ -116,7 +115,7 @@ IVAL(tpp, ex) */ struct expr * do_array(ex, tpp) - struct expr *ex; + register struct expr *ex; struct type **tpp; { register struct type *tp = *tpp; @@ -215,10 +214,10 @@ do_array(ex, tpp) */ struct expr * do_struct(ex, tp) - struct expr *ex; - struct type *tp; + register struct expr *ex; + register struct type *tp; { - struct sdef *sd = tp->tp_sdef; + register struct sdef *sd = tp->tp_sdef; arith bytes_upto_here = (arith)0; arith last_offset = (arith)-1; @@ -248,8 +247,7 @@ do_struct(ex, tp) put_bf(sd->sd_type, (arith)0); else { /* fundamental type, not embraced */ - check_ival(ex->OP_LEFT, - sd->sd_type); + check_ival(ex->OP_LEFT, sd->sd_type); ex = ex->OP_RIGHT; } #endif NOBITFIELD @@ -293,11 +291,11 @@ do_struct(ex, tp) the rest is zeroed. */ check_and_pad(ex, tpp) - struct expr *ex; + register struct expr *ex; struct type **tpp; { /* ex is of a fundamental type */ - struct type *tp = *tpp; + register struct type *tp = *tpp; if (tp->tp_fund == ARRAY) { if (valid_type(tp->tp_up, "array element") == 0) @@ -339,7 +337,7 @@ check_and_pad(ex, tpp) If the element is an aggregate, pad() is called recursively. */ pad(tp) - struct type *tp; + register struct type *tp; { switch (tp->tp_fund) { case ARRAY: @@ -408,7 +406,7 @@ pad(tp) */ check_ival(ex, tp) struct expr *ex; - struct type *tp; + register struct type *tp; { /* The philosophy here is that ch7cast puts an explicit conversion node in front of the expression if the types @@ -506,8 +504,8 @@ ch_array(tpp, ex) { register struct type *tp = *tpp; register arith length; - char *s = ex->SG_VALUE; - arith ntopad; + register char *s = ex->SG_VALUE; + register arith ntopad; ASSERT(ex->ex_class == String); length = ex->SG_LEN; @@ -588,7 +586,7 @@ put_bf(tp, val) int zero_bytes(sd) - struct sdef *sd; + register struct sdef *sd; { /* fills the space between a selector of a struct and the next selector of that struct with zero-bytes. @@ -640,7 +638,7 @@ too_many_initialisers(ex) } aggregate_type(tp) - struct type *tp; + register struct type *tp; { return tp->tp_fund == ARRAY || tp->tp_fund == STRUCT; } diff --git a/lang/cem/cemcom/main.c b/lang/cem/cemcom/main.c index f3a3cd6c4..e6235214f 100644 --- a/lang/cem/cemcom/main.c +++ b/lang/cem/cemcom/main.c @@ -1,6 +1,7 @@ /* $Header$ */ /* MAIN PROGRAM */ +#include "nofloat.h" #include #include "nopp.h" #include "target_sizes.h" @@ -9,7 +10,6 @@ #include "use_tmp.h" #include "maxincl.h" #include "inputtype.h" - #include "input.h" #include "level.h" #include "idf.h" @@ -84,6 +84,7 @@ main(argc, argv) #endif OWNALLOC init_hmask(); + #ifndef NOPP init_pp(); /* initialise the preprocessor macros */ #endif NOPP @@ -289,7 +290,7 @@ init() } init_specials(si) - struct sp_id *si; + register struct sp_id *si; { while (si->si_identifier) { struct idf *idf = str2idf(si->si_identifier); diff --git a/lang/cem/cemcom/options.c b/lang/cem/cemcom/options.c index 90a94f163..d862e0f7d 100644 --- a/lang/cem/cemcom/options.c +++ b/lang/cem/cemcom/options.c @@ -1,6 +1,7 @@ /* $Header$ */ /* U S E R O P T I O N - H A N D L I N G */ +#include "nofloat.h" #include "nopp.h" #include "idfsize.h" #include "maxincl.h" @@ -174,7 +175,6 @@ do_option(text) align = txt2int(&text); } switch (c) { - case 's': /* short */ if (size != (arith)0) short_size = size; @@ -242,11 +242,9 @@ do_option(text) } break; } - case 'n': options['n'] = 1; /* use no registers */ break; - case 'w': options['w'] = 1; /* no warnings will be given */ break; @@ -260,8 +258,7 @@ txt2int(tp) /* the integer pointed to by *tp is read, while increasing *tp; the resulting value is yielded. */ - register int val = 0; - register int ch; + register int val = 0, ch; while (ch = **tp, ch >= '0' && ch <= '9') { val = val * 10 + ch - '0'; diff --git a/lang/cem/cemcom/sizes.h b/lang/cem/cemcom/sizes.h index a4af4f2e0..f3685d1c2 100644 --- a/lang/cem/cemcom/sizes.h +++ b/lang/cem/cemcom/sizes.h @@ -1,6 +1,8 @@ /* $Header$ */ /* VARIOUS TARGET MACHINE SIZE DESCRIPTORS */ +#include "nofloat.h" + extern arith short_size, word_size, dword_size, int_size, long_size, #ifndef NOFLOAT diff --git a/lang/cem/cemcom/stack.c b/lang/cem/cemcom/stack.c index adb71aa63..24b95ea1c 100644 --- a/lang/cem/cemcom/stack.c +++ b/lang/cem/cemcom/stack.c @@ -1,14 +1,13 @@ /* $Header$ */ /* S T A C K / U N S T A C K R O U T I N E S */ +#include "nofloat.h" #include #include #include - #include "debug.h" #include "use_tmp.h" #include "botch_free.h" - #include "alloc.h" #include "Lpars.h" #include "arith.h" @@ -42,7 +41,7 @@ int level; /* Always equal to local_level->sl_level. */ stack_level() { /* A new level is added on top of the identifier stack. */ - struct stack_level *stl = new_stack_level(); + register struct stack_level *stl = new_stack_level(); clear((char *)stl, sizeof(struct stack_level)); local_level->sl_next = stl; @@ -55,7 +54,7 @@ stack_level() { stack_idf(idf, stl) struct idf *idf; - struct stack_level *stl; + register struct stack_level *stl; { /* The identifier idf is inserted in the stack on level stl. */ diff --git a/lang/cem/cemcom/struct.c b/lang/cem/cemcom/struct.c index b5af15c0e..7eea59d80 100644 --- a/lang/cem/cemcom/struct.c +++ b/lang/cem/cemcom/struct.c @@ -49,9 +49,9 @@ int lcm(); */ add_sel(stp, tp, idf, sdefpp, szp, fd) /* this is horrible */ - struct type *stp; /* type of the structure */ - struct type *tp; /* type of the selector */ - struct idf *idf; /* idf of the selector */ + register struct type *stp; /* type of the structure */ + struct type *tp; /* type of the selector */ + register struct idf *idf; /* idf of the selector */ struct sdef ***sdefpp; /* address of hook to selector definition */ arith *szp; /* pointer to struct size upto here */ struct field *fd; @@ -67,8 +67,8 @@ add_sel(stp, tp, idf, sdefpp, szp, fd) /* this is horrible */ extern arith add_field(); #endif NOBITFIELD - register struct tag *tg = stp->tp_idf->id_struct; /* or union */ - register struct sdef *sdef = idf->id_sdef; + struct tag *tg = stp->tp_idf->id_struct; /* or union */ + struct sdef *sdef = idf->id_sdef; register struct sdef *newsdef; int lvl = tg->tg_level; @@ -164,7 +164,7 @@ check_selector(idf, stp) /* checks if idf occurs already as a selector in struct or union *stp. */ - struct sdef *sdef = stp->tp_sdef; + register struct sdef *sdef = stp->tp_sdef; while (sdef) { if (sdef->sd_idf == idf) @@ -174,7 +174,7 @@ check_selector(idf, stp) } declare_struct(fund, idf, tpp) - struct idf *idf; + register struct idf *idf; struct type **tpp; { /* A struct, union or enum (depending on fund) with tag (!) @@ -251,7 +251,7 @@ declare_struct(fund, idf, tpp) } apply_struct(fund, idf, tpp) - struct idf *idf; + register struct idf *idf; struct type **tpp; { /* The occurrence of a struct, union or enum (depending on @@ -271,7 +271,7 @@ apply_struct(fund, idf, tpp) struct sdef * idf2sdef(idf, tp) - struct idf *idf; + register struct idf *idf; struct type *tp; { /* The identifier idf is identified as a selector, preferably @@ -280,7 +280,7 @@ idf2sdef(idf, tp) If the attempt fails, a selector of type error_type is created. */ - struct sdef **sdefp = &idf->id_sdef, *sdef; + register struct sdef **sdefp = &idf->id_sdef, *sdef; /* Follow chain from idf, to meet tp. */ while ((sdef = *sdefp)) { @@ -316,7 +316,7 @@ idf2sdef(idf, tp) int uniq_selector(idf_sdef) - struct sdef *idf_sdef; + register struct sdef *idf_sdef; { /* Returns true if idf_sdef (which is guaranteed to exist) is unique for this level, i.e there is no other selector @@ -326,7 +326,7 @@ uniq_selector(idf_sdef) case! */ - struct sdef *sdef = idf_sdef->next; + register struct sdef *sdef = idf_sdef->next; while (sdef && sdef->sd_level == idf_sdef->sd_level) { if ( sdef->sd_type != idf_sdef->sd_type @@ -342,11 +342,11 @@ uniq_selector(idf_sdef) #ifndef NOBITFIELD arith add_field(szp, fd, fdtpp, idf, stp) - arith *szp; /* size of struct upto here */ - struct field *fd; /* bitfield, containing width */ - struct type **fdtpp; /* type of selector */ - struct idf *idf; /* name of selector */ - struct type *stp; /* current struct descriptor */ + arith *szp; /* size of struct upto here */ + register struct field *fd; /* bitfield, containing width */ + register struct type **fdtpp; /* type of selector */ + struct idf *idf; /* name of selector */ + register struct type *stp; /* current struct descriptor */ { /* The address where this selector is put is returned. If the selector with specified width does not fit in the word, or @@ -376,7 +376,6 @@ add_field(szp, fd, fdtpp, idf, stp) } switch ((*fdtpp)->tp_fund) { - case CHAR: case SHORT: case INT: @@ -419,22 +418,19 @@ add_field(szp, fd, fdtpp, idf, stp) bits_declared = fd->fd_width; } else - if (fd->fd_width == 0) { + if (fd->fd_width == 0) /* next field should be aligned on the next boundary. This will take care that no field will fit in the space allocated upto here. */ bits_declared = bits_in_type + 1; - } - else { /* the bitfield fits in the current field */ + else /* the bitfield fits in the current field */ bits_declared += fd->fd_width; - } /* Arrived here, the place where the selector is stored in the struct is computed. Now we need a mask to use its value in expressions. */ - *fdtpp = construct_type(FIELD, *fdtpp, (arith)0); (*fdtpp)->tp_field = fd; @@ -446,12 +442,10 @@ add_field(szp, fd, fdtpp, idf, stp) */ fd->fd_mask = (1 << fd->fd_width) - 1; - if (options['r']) { /* adjust the field at the right */ + if (options['r']) /* adjust the field at the right */ fd->fd_shift = bits_declared - fd->fd_width; - } - else { /* adjust the field at the left */ + else /* adjust the field at the left */ fd->fd_shift = bits_in_type - bits_declared; - } return field_offset; } diff --git a/lang/cem/cemcom/switch.c b/lang/cem/cemcom/switch.c index 35d131ba2..8a3fa20d8 100644 --- a/lang/cem/cemcom/switch.c +++ b/lang/cem/cemcom/switch.c @@ -1,12 +1,11 @@ /* $Header$ */ /* S W I T C H - S T A T E M E N T A D M I N I S T R A T I O N */ +#include "nofloat.h" #include - #include "debug.h" #include "botch_free.h" #include "density.h" - #include "Lpars.h" #include "idf.h" #include "label.h" diff --git a/lang/cem/cemcom/type.c b/lang/cem/cemcom/type.c index 520218328..73f805d93 100644 --- a/lang/cem/cemcom/type.c +++ b/lang/cem/cemcom/type.c @@ -1,6 +1,7 @@ /* $Header$ */ /* T Y P E D E F I N I T I O N M E C H A N I S M */ +#include "nofloat.h" #include "nobitfield.h" #include "alloc.h" #include "Lpars.h" @@ -52,13 +53,13 @@ create_type(fund) struct type * construct_type(fund, tp, count) - struct type *tp; + register struct type *tp; arith count; /* for fund == ARRAY only */ { /* fund must be a type constructor: FIELD, FUNCTION, POINTER or ARRAY. The pointer to the constructed type is returned. */ - struct type *dtp; + register struct type *dtp; switch (fund) { #ifndef NOBITFIELD @@ -97,9 +98,9 @@ construct_type(fund, tp, count) struct type * function_of(tp) - struct type *tp; + register struct type *tp; { - struct type *dtp = tp->tp_function; + register struct type *dtp = tp->tp_function; if (!dtp) { tp->tp_function = dtp = create_type(FUNCTION); @@ -112,9 +113,9 @@ function_of(tp) struct type * pointer_to(tp) - struct type *tp; + register struct type *tp; { - struct type *dtp = tp->tp_pointer; + register struct type *dtp = tp->tp_pointer; if (!dtp) { tp->tp_pointer = dtp = create_type(POINTER); @@ -128,10 +129,10 @@ pointer_to(tp) struct type * array_of(tp, count) - struct type *tp; + register struct type *tp; arith count; { - struct type *dtp = tp->tp_array; + register struct type *dtp = tp->tp_array; /* look for a type with the right size */ while (dtp && dtp->tp_size != count) @@ -151,9 +152,9 @@ array_of(tp, count) #ifndef NOBITFIELD struct type * field_of(tp) - struct type *tp; + register struct type *tp; { - struct type *dtp = create_type(FIELD); + register struct type *dtp = create_type(FIELD); dtp->tp_up = tp; dtp->tp_align = tp->tp_align; @@ -177,7 +178,7 @@ size_of_type(tp, nm) } idf2type(idf, tpp) - struct idf *idf; + register struct idf *idf; struct type **tpp; { /* Decoding a typedef-ed identifier: if the size is yet diff --git a/lang/cem/cemcom/type.str b/lang/cem/cemcom/type.str index 837ebc85c..13fad9db7 100644 --- a/lang/cem/cemcom/type.str +++ b/lang/cem/cemcom/type.str @@ -1,7 +1,8 @@ /* $Header$ */ /* TYPE DESCRIPTOR */ -#include "nobitfield.h" +#include "nofloat.h" +#include "nobitfield.h" struct type { struct type *next; /* used only with ARRAY */