		Log started June 1, 1979

6/1/79
Added Y for FR in "cexpr".
Changed "isfloat" call to return DOUBLENAME also. Changed call to
"isfloat" in "cexpr" for B2 (case 'D').
Changed "cvopt.c" to convert FR into Y.

6/4/79
At "preg:" in case 'J' in c10.c - changed

	if (tree->type == DOUBLE)
		printf("%d", 2*r);

			to

	if (tree->type == DOUBLE) {
		if (tree->tr1->type = CON)
			printf("%d", r);
		else
			printf("%d", 2*r)
	}

in order to handle conversion from INT constant to DOUBLE.

6/4/79
In "rcexpr", after "fixup:", after "if (modf)" - changed statement
to printf "2*r" instead of "r" for floats and doubles.

6/4/79
Fixed bug in at (subtre:) in cexpr - changed:

	tmp = arglength(p);

		to

	tmp = arlength(p->type);

6/5/79
Copied table.s to tablebackup.s before changing FRs to Rs.

6/5/79
Changed all FRs to Rs in table.s whenever they occurred in
situations such as:

	stB1    FR,A1

	mB2     FR,A1

	dBF     FR,O

The only FRs left are the ones used in explicit floating pt.
operations such as:

	sdr     FR,A1

6/5/79
Added to cr51: in "table.s"

cr51:
%ab,n
	sr      R,R
	ic      R,A1
	N

which takes care of character to floating pt. conversion.

6/5/79
Fields tested by: test1-3.c,test7-11.c

Floats tested by: test12.c, 13, 14, 16, 19, 20-27, 29, 31, 33, 35-51,
                  74-78

Doubles tested by: test15.c, 30, 32, 34, 52-73

6/5/79
PUT IN AUTO-INCREMENT AND AUTO-DECREMENT FOR FLOATS AND DOUBLES

6/6/79
Added  %nb*,n  entry to 'cr51:' in table.s

6/7/79
Added  %ad,n  to "cr35:" in table.s.

6/8/79
Ask Mark about when DELAY will be working and ask why it does

	a       7,=f'1'

	instead of

	la      7,1(7)

6/8/79
Added code to table.s to handle register int -> float conversion
and double -> to register int conversion.

6/8/79
Added code to table.s to handle int -> float conversion where the integer
is zero.

6/8/79
Changed c10.c so that for longs it stores R+1 into stksize+4... instead
of into stksize... (where it actually stores R).

6/11/79
Added   %nlp,n    entry to "cr36:" of table.s

6/12/79
Added longs to "cr40:' and "cr37:".  Changed "neg" in c13.c to "lcr".
Changed  "case 'V':" entry in c10.c.  Changed "bc   b'1100',"  to "bno".

6/12/79
IBM SUCKS!! It seems that for "al" the command "bc   b'1100',$vc0" will
take the correct branch if there is a carry.  But for "sl" the command
"bc    b'0011',$vc0" is the correct command to use in order to
compensate for a carry. This is NOT what the manuals say.  Another day
wasted thanks to IBM ingenuity.

6/13/79
Fixed int->long conversion so that it converts negatives probably.
Fixed negation.

6/15/79
Put in long shifts and changed asr and asl in c13.c to print "sr" and "sl"
instead of srl and sll (so that they will work for longs also).

6/26/79
Fixed float - FCON problem.

7/17/79
longs & shorts in.

8/17/79
fixed alignment.

8/29/79
Fixed DCON problem in dcalc.

9/14/79
Norway installed.

9/26/79
Fixed structure alignment & auto-increment for shorts.

9/27/79
Fixed alignment for fields.

10/30/79
Fixed array of union bug & put in unsigned shorts.

11/07/79
Fixed *= bug for longs - screwed up other parts of code table - do a
diff between versions 2.11 and 2.12 for specifics.

11/13/79
Fixed +0.5 bug for floats.

11/16/79
Refixed code tables - ver. 2.12 of table.s has bugs.

11/19/79
Increased symbol table and switch table sizes for Tommy.

11/20/79
Fixed register variable in R7 for Norwegians.

11/26/79
There may be a conflict in the Norway compiler between function
declarations and definitions.  For example if a function is not declared
(therefore defaulting to returning an integer) but is defined later on
to return a pointer to a character, then the definition will be flagged
as an attempt to redeclare the function.  This happens because externals
declarations are not wiped out of the symbol table at the end of a block
but are bubbbled up to the outermost level.  The above example is actually
semantically incorrect and would be caught by LINT.

12/2/79
Installed new version with error messages warning about stack going over
4096; fixed the bug in pass2 which ignored the type of a constant read in
from the intermediate code; passed the filename along to pass2 for printing
error messages; fixed profiling call; took out the optimization (which
didn't work) when reading in LCON from intermediate code; and added most
of 'strasg' code.

12/3/79
Installed version which fixed the sizeof bug in

		extern int ib[4096/sizeof(int)];

This was an original bug.

12/4/79
Installed structure assignment and fixed f(g(), h()) where f, g, and
h all return structures.

12/6/79
Fixed register function pointer bug. Ex:

	register int (*x)();
	int toad();

	x = toad;
	(*x)();   <-- generated bad code

Also fixed bug which tried to take AMPER of a call in strasg().
Ex:

	return(nodetoobj(a));

where 'nodetoobj()' returns a structure and the 'return' returns a
structure.

12/11/79
Installed enumerated data types.

12/18/79
Fixed alignment of longs within arrray of union bug.

12/26/79
Fixed the bug:

		putchar(c)
		char c;
		{
			write(1, &c, 1);
		}

where the address of 'c' passed to 'write' is actually an integer address
(since characters are passed as integer quantities) with the actual
value of 'c' in the low-order byte of the word.  If a character pointer
within 'write' was to be assigned the address passed as the argument, then
taking the value stored at that address would give an incorrect result.

12/27/79
Fixed the register function pointer bug.
The following example generated garbage.

		main()
		{
			register int (*x)();
			int toad();

			x = toad;
			(*x)();
		}

However, if the 'x' were declared as

			int (*x)();

then the example would work.

1/3/80
Fixed forcing proper alignment within structures during initialization,
loading and masking for unsigned shorts within structures (i.e QH),
and adding MAXUNSRT for maximum unsigned short rather than MAXSHORT.

1/31/80
Fixed register overflow problem with pointers to structures containing
longs by taking away R4 from register variable pool. Added listings,
changed criteria for hashed switches from ncase*3 to ncase*6, fixed
register variable bug where

		register x, y;
		int a[3];

		x/a[y];

trashed R3 which contained the value of a[y].

2/1/80
Fixed bug of subtracting a negative register variable from a
negative long. Ex.

		long l = -5;
		register r = -2;

		l - r;  /* trash */

3/3/80
Fixed various things such as division on register variables, casting
an address to a pointer ((char *) &s), optimized longs to use 'lm' and
'stm', probably fixed some long bugs but who remembers, increased such
of symbol table from 400 to 600, added listings code.

3/11/80
On Ver. 7 TAU - brought listing option up, fixed 'entry' so that they
aren't put out for statics, fixed '(listflg) ? getlstchar() : getchar()'
so that the result of getchar() is put in R2 and not left in R0, deleted
%nl,e and %nl,el entries from cr46: (shifts) so that we don't get register
overflow message (i.e. I forced the suckers to go onto the stack).

3/28/80
Changed string labels to begin with $S so that the optimizer doesn't
confuse them with instruction labels. Fixed

	register struct frog (*x)();

	(*x)();

bug (similar to previous bug except needed to check type&XTYPE rather
than just type). Fixed += for character pointer (similar problems fixed
with *=, etc. for character pointers), fixed >> for longs.

4/8/80
Fixed structure assignment bugs with COMMA operator and QUEST operator.
Ex.

	struct frog x, *p1, *p2;

	x = (*p1, p2);

	x = (a==1) ? p1 : p2;

5/8/80
Fixed doubles so they don't offset from 0, did a lot of optimization
on double code tables, did optimization on longs so that only long
constants (which match 'q' in the code table) do a

	l       R,A
	l       R1,A+

All other long loads are done as        lm      R,R,A1

6/2/80
Fixed doubles so that there are no *ed, matches - everything except for
adressables goes onto the stack. Fixed all #2's to macth S* or S1* (and
vice-versa). Fixed compiler to barf about redeclaring external variables
within a function (PDP-11 compiler does not do this but lint does).
Resolved all differences in pass 1 between PWB compiler (i.e. ver. 6.9)
and version 7 compiler.  New syntax for dentry functions - no longer a
type but is now a modifier.

6/11/80
Resolved all differences in pass2 between PWB compiler (i.e. ver. 6.9)
and version 7 compiler.
