put heavily used pointer variables in registers
authorerikb <none@none>
Wed, 24 Sep 1986 13:53:16 +0000 (13:53 +0000)
committererikb <none@none>
Wed, 24 Sep 1986 13:53:16 +0000 (13:53 +0000)
29 files changed:
lang/cem/cemcom/LLlex.c
lang/cem/cemcom/LLlex.h
lang/cem/cemcom/LLmessage.c
lang/cem/cemcom/Makefile.erik
lang/cem/cemcom/Parameters
lang/cem/cemcom/align.h
lang/cem/cemcom/arith.c
lang/cem/cemcom/ch7.c
lang/cem/cemcom/ch7bin.c
lang/cem/cemcom/ch7mon.c
lang/cem/cemcom/code.c
lang/cem/cemcom/conversion.c
lang/cem/cemcom/cstoper.c
lang/cem/cemcom/declarator.c
lang/cem/cemcom/decspecs.c
lang/cem/cemcom/dumpidf.c
lang/cem/cemcom/eval.c
lang/cem/cemcom/expr.c
lang/cem/cemcom/expr.str
lang/cem/cemcom/idf.c
lang/cem/cemcom/ival.c
lang/cem/cemcom/main.c
lang/cem/cemcom/options.c
lang/cem/cemcom/sizes.h
lang/cem/cemcom/stack.c
lang/cem/cemcom/struct.c
lang/cem/cemcom/switch.c
lang/cem/cemcom/type.c
lang/cem/cemcom/type.str

index b49dcaf..1078084 100644 (file)
@@ -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"
index 572160c..569a2e9 100644 (file)
@@ -6,6 +6,8 @@
        to it.
 */
 
+#include "nofloat.h"
+
 /* the structure of a token:   */
 struct token   {
        int tok_symb;           /* the token itself */
index 887a15d..2d4ac43 100644 (file)
@@ -1,6 +1,7 @@
 /* $Header$ */
 /*             PARSER ERROR ADMINISTRATION             */
 
+#include       "nofloat.h"
 #include       "idf.h"
 #include       "alloc.h"
 #include       "arith.h"
index 7f8ea21..8e7b76a 100644 (file)
@@ -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
index 17babb5..a1d0d24 100644 (file)
 
 !File: static.h
 #define GSTATIC                        /* for large global "static" arrays */
+
+
+!File: nofloat.h
+#undef NOFLOAT                 /* floats implemented by default */
+
index ae162f1..a49ad94 100644 (file)
@@ -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
index 9379244..51382e4 100644 (file)
@@ -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;
index b95922f..1317571 100644 (file)
@@ -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"
index b8e1e18..848f14c 100644 (file)
@@ -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"
index 21ca76b..23c3f5c 100644 (file)
@@ -1,6 +1,7 @@
 /* $Header$ */
 /* SEMANTIC ANALYSIS (CHAPTER 7RM) -- MONADIC OPERATORS */
 
+#include       "nofloat.h"
 #include       "nobitfield.h"
 #include       "botch_free.h"
 #include       "Lpars.h"
index dfd952b..a5c245d 100644 (file)
@@ -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       <em.h>
-
 #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;
                }
 }
 
index e62cb26..bbb8914 100644 (file)
@@ -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       <em.h>
 #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;
        }
index e9ce534..8c51541 100644 (file)
@@ -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];
 }
index dba3069..ff79ab0 100644 (file)
@@ -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;
 
index 564b8d0..ead1cbe 100644 (file)
@@ -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");
index c027c64..4e5e41e 100644 (file)
@@ -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("  ");
 }
index 5374ef4..4923c85 100644 (file)
                compare()
 */
 
+#include       "nofloat.h"
 #include       <em.h>
-
 #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 */
index 6426ec5..282e339 100644 (file)
@@ -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.
        */
index cf74c7e..c80f9a7 100644 (file)
@@ -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
index 2cda12a..92a3f73 100644 (file)
@@ -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;
index 61ce90f..7552549 100644 (file)
@@ -1,11 +1,10 @@
 /* $Header$ */
 /* CODE FOR THE INITIALISATION OF GLOBAL VARIABLES */
 
+#include       "nofloat.h"
 #include       <em.h>
-
 #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;
 }
index f3a3cd6..e623521 100644 (file)
@@ -1,6 +1,7 @@
 /* $Header$ */
 /* MAIN PROGRAM */
 
+#include       "nofloat.h"
 #include       <system.h>
 #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);
index 90a94f1..d862e0f 100644 (file)
@@ -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';
index a4af4f2..f3685d1 100644 (file)
@@ -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
index adb71aa..24b95ea 100644 (file)
@@ -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       <system.h>
 #include       <em.h>
 #include       <em_reg.h>
-
 #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.
        */
index b5af15c..7eea59d 100644 (file)
@@ -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;
 }
index 35d131b..8a3fa20 100644 (file)
@@ -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       <em.h>
-
 #include       "debug.h"
 #include       "botch_free.h"
 #include       "density.h"
-
 #include       "Lpars.h"
 #include       "idf.h"
 #include       "label.h"
index 5202183..73f805d 100644 (file)
@@ -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
index 837ebc8..13fad9d 100644 (file)
@@ -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 */