The following is a log (in reverse date order) of the changes made to 
c68/c386 since Release 4.0.

Changes Made

-------------- Version 4.4 made available on the Internet ---------------------

10 May 94  kdw	Fixed stackopt problem in ?: operator and pushing
		intermediate results ... the adjust of the stack and
		push were done in the wrong order.

05 May 94  kdw	Added -[no]align option to allow run-time selection of
		whether structures should be packed to the alignment of
		the smallest member - or to a default structure alignment.
		Upgrade structassign() in gen68k to to byte moves if the
		size of the structure is odd - could be mis-aligned.

03 May 94  kdw	changed the config.h to use the #undef directive instead
		of inserting a /* before unused #defines ... this caused
		warning on compilers which warn about nested comments.

01 May 94  djw  updated main compiler documentation to include all the
		new runtime options and possible warning and error messages.
		A section also added on the techniques used for optimising
		code, and how you can structure your C code to maximise
		the effects that can be achieved.

29 Apr 94  kdw	... cannot appear in a parameter list on its own.

27 Apr 94  kdw	Register variables not allocated if local scope contains
		an external function definition or function variable.
		Optimize sequence generated for unary !

26 Apr 94  kdw	Removed incorrect peephole optimisation in c386 found by Kees.
		Included push and pop instructions to dest_used() in c386
		for missing SP adjustment found by Kees.

25 Apr 94  kdw	Fixed problem with extraneous warnings after an error which
		was introduced when changes made to handling of scoping.

23 Apr 94  kdw	Added missing calls to sync_stack() in c386 handling of
		temporary values pushed onto the stack found by Kees.

17 Apr 94  kdw	Changed generation of switch compare code to use subtraction
		instead ... generally labels are close together and for small
		values the subtract instructions are smaller than the
		equivalent compare instructions.  On c68 this knocked
		approx 600 bytes off the compiler (a reduction in size of
		about 0.5%).

16 Apr 94  kdw	Check that the constant expression for a case label
		fits the size of the controlling expression of the switch
		statement.

12 Apr 94  kdw	Check that the tag for a struct/union/enum is subsequently
		only used with the same type, e.g. struct S s; union S x;
		to be flagged as an error.

10 apr 94  kdw	Allow the "auto" storage specifier to appear in
		parameter declaration lists.
		
07 Apr 94  kdw	Redundant labels were not being removed - thus preventing
		some optimisations from producing the best code.

06 Apr 94  kdw	Fix incorrect parsing of brackets in declarators - reported
		by Kees.

03 Apr 94  kdw	Incorporate some of the changes supplied by Tom:
		1.  Clarify the internal handling of register masks in c68.

20 Mar 94  djw	-? option now also prints out default settings.

14 Mar 94  kdw	Handling of braces around structured initializers fixed -
		was allowing incorrect code to compile.

07 Mar 94  kdw	Once again the register attribute on parameters appears to
		have been lost ... fix it yet again.

27 Feb 94  kdw	Correct bugs reported by Franz Herrmann:
		1.  typedef of the form "typedef id int;" not flagged as
		    an error.
		2.  peephole optimizer incorrectly optimizes out the tst
		    instruction for the code sequence:
				mulX dN, dM
				tst.w dM
		3.  warning about casting a constant gives warnings which
		    cannot be turned off.
		4.  warning for assignment in conditional context not done
		    on logical expressions either side of && and || operators.

25 Feb 94  kdw	abstract function declarators were not correctly parsed.
		make restriction of & operator on register variables apply on
		all variables and not just those that will fit in a register.

24 Feb 94  kdw	qualifiers on 2nd and 3rd expressions to ?: operator are
		unioned together.
		qualifiers on struct/union carried onto the fields.
		Improved checks performed on 2nd & 3rd expressions to ?:
		check that addition/subtraction is only performed on the
		relevent types (NOT functions).

23 Feb 94  kdw	Fixed problem introduced that labels which weren't defined
		were not being errored.
		Fixed problem that duplicate struct tags could be defined
		in the same scope.
		Added warning if a function definition is redeclared static.

21 Feb 94  kdw	Fixed problems reported by Richard Zidlicky:
		1.  implictly declared functions entered into local symbol
		    table rather than global table.
		2.  Improved code generated for logical boolean expression
		    - was being affected by -uchar option.

18 Feb 94  kdw	Complete rewrite of handling of scopes.  There was a problem
		with no local tag table available during processing of
		function prototype.
		Added warning for a struct/union/enum which is declared in
		a function prototype - this means that an object of this
		type cannot be declared; hence the function cannot be called.

16 Feb 94  kdw	Concentrated on cleaning up the front-end of the compiler.
		Moved relevant label handling into the symbol table module.

15 Feb 94  kdw	Renamed some functions in order to make the naming conventions
		used more consistant.

14 Feb 94  kdw	Moved code generator specific code out of stmt.c and genstmt.c
		into processor specific modules - this should make it easier
		to write new code generators.

12 Feb 94  kdw	Major editing to introduce typedef types into the compiler
		in order to make it clearer what variables are used for.
		Added label field 'l' into symbol union.

08 Feb 94  kdw	Added warning about labels that aren't used.

05 Feb 94  kdw	Added warning about "dangling" else - I consider dangling
		else statements to be bad style.

04 Feb 94  kdw	Rewrote code to handle printf/scanf functions.

28 Jan 94  kdw	Incomplete tentative definitions were not detected.
		Cast of pointer to non-integral or pointer type was not
		detected.

25 Jan 94  kdw	Added warning about value of expression being discarded.

21 Jan 94  kdw	Improve peep-hole optimiser to detect the re-loading of an
		address register with a value which it already contains.
		Detect the sequence "ext.l Dn" followed by "move.l Dn, Am" and
		replace with "move.w Dn, Am".

10 Jan 94  kdw	First attempt at adding code to check parameters to printf
		family of functions.

14 Jan 94  kdw	Re-fixed problem with qualifer specified after struct
		declaration

23 Dec 93  kdw	Further fixes for stack optimisation.  Must allow for alloc()
		routine which affects stack.

15 Dec 93  kdw	Fixed compiler crash when a typedef used when identifier
		expected in a type declaration.

12 Dec 93  djw	Fixed loop caused when warnlevel set to 6.

12 Dec 93  kdw	Fixed stack offset optimisation now that djw has
		identified what causes the optimisation to fail.

05 Dec 93  kdw	Fix problems reported by Kees:
		1.  Const qualifier applied after struct declaration.
		2.  Structure assignment in local declaration.

04 Dec 93  kdw	Fix compilation problem reported by ?? bootstrapping
		MFFP version.

02 Dec 93  kdw	Applied fixes to c386 supplied by Kees J. Bot:
		1.  very minimum/maximum case labels were handled incorrectly.
		2.  right shift sometimes used the wrong right shift operator
		    (signed vs. unsigned)
		3.  <= operator always used signed jump.
		4.  Structure now aligned to worst alignment of members
		    (although what it was doing wasn't wrong this change
		    bring the copiler into line with GCC and ACK.)
		Also reported by Kees:
		1.  strings not put into data segement when -seperate used.

01 Dec 93  kdw	Now that a new version of the ACK assembler is available
		which allows labels to be subtracted I have completed the
		work necessry to generate case jump tables which hold
		offsets rather than pointers ... this does assume that
		a function doesn't contain more than 32K of code! ... but
		saves 2 bytes for every entry.   On C68 this lead to a
		reduction in size of ~3.5%.

29 Nov 93  kdw	Applied patch supplied by Bruce Evans for compiling c386
		with bcc.
		Fix compiler hanging reported by ?? when compiling Minix
		kernel main() function which ends with an infinite loop.

15 Nov 93  kdw	Applied patch supplied by Peter Holzer for unions which have
		members defined with a comma seperated list.
		Make & operator applied on arrays return a pointer to array
		- reported by Peter Holzer.
		Make register parameter have the register attribute applied.

08 Nov 93  kdw	Duplicate enumeration constants defined at the file scope
		aren't detected.

07 Nov 95  kdw	Applied optimisation when a register variable is moved into
		an address register more than once with no intervening
		instructions which alter the value in the address register.

-------------- Version 4.3 made available on the Internet ---------------------

25 Aug 93  kdw	Wide character constants use the user defined type TP_WIDE
		rather than being of type int like a normal character
		constant.  (Current TP_WIDE can only be tp_char or
		tp_uchar.)

24 Aug 93  kdw	Expressions which include the unary + operator now perform
		the default promotions.
		Casting of unsigned constants to float/double are now
		done as unsigned rather than signed as was previously
		done.

22 Aug 93  kdw	Corrected bug in peep_tst which incorrectly removes the tst
		instruction before a branch which relies on the carry flag
		being cleared.
		Do integral promotions on operands of shift operators and
		make the return type the type of the LHS.

21 Aug 93  kdw	Corrected scoping rules for typedefs & structures.
		Return type for functions only needs to be complete at point
		of definition not declaration.
		Support syntax for wide string constants.
		Add code to support float constants of the form .5F
		Misc fixes found due to "stressing" of the compiler.

17 Aug 93  djw	Rewrote argument parsing.

14 Aug 93  kdw	Allow multiple assembler to be supported.  [More work
		required to support multiple chip sets.]

08 Aug 93  kdw	Added -O option to allow greater control over the more
		"expensive" optimisations that are performed in the peephole
		optimiser.
		Added -extern option to print out definitions for functions
		- could be used in an inter-module checker! (experimental)

03 Aug 93  kdw	Added fix (68k) CMP_BUG for problem when using the ACK
		assembler with the instruction like cmp.b #1,I_1 where the
		label I_1 is in the .text segment - it doesn't like it.  The
		circumvention of adding ".l" to the label I_1 causes worse
		code to be generated in the general case of accessing labels.

01 Aug 93  kdw	Fixed bug (68k) with ^= operator which generated target as an
		address register, e.g. eor.w d0,a5

31 Jul 93  kdw	Completed merge of Michael Mueller's changes to libieee which
		were sent many months ago.  This removes the entry point for
		ACK FP support but makes the routines much "cleaner" and
		easier to support.

18 Jul 93  kdw	Added "statement not reached" warning.

03 Jul 93  kdw	Change the symbol table to use a hash table.

26 May 93  kdw	Make char and signed char distinct type as required by ANSI.
		Fixed initialised bitfield bug reported by Peter Holzer.

25 May 93  kdw	Added .line directive into the assembler output file.

20 May 93  kdw	Added improvments suggested by Peter Holzer back in Feb to
		386 version.

20 May 93  djw	Rewrote error/warning handling to allow warning levels to be
		treated as errors for pedantic code writers.

16 May 93  kdw	Numerious scope corrections detected when building
		ghostscript 2.6.
		Prevent / and % operators from using address register as
		one of the operands.

10 May 93  kdw	Make int a distinct type from short and long as required by
		ANSI.

05 May 93  kdw	Managed to bootstrap a floating point 68k version from a
		non-floating point version of the ACK compiler.

25 Apr 93  kdw	Functions which have prototypes pass float parameters as
		floats rather than doubles.

23 Apr 93  kdw	Change arithmetic promotions to follow the ANSI rules (e.g.
		float arithmetic done as floats) if not "trad" mode.
		Added some support for long double to the back-end of the
		compiler (still incomplete).
		Changed the names of the "NOFLOAT" and "NODOUBLE" defines -
		I didn't like the double negatives in constructs like
		"#ifndef NODOUBLE".

20 Apr 93  kdw	Enlarge on 68k register allocation for functions which have
		many potential register variables.
		Only add parameters to optimising tables when final offsets
		are known - this has the advantage that implicit parameters
		can now also be concidered for register variables.

19 Apr 93  kdw	Handle float constants as floats rather than doubles.
		Converted K&R parameter size error to be a warning now that
		parameters are handled as specified for ANSI.

17 Apr 93  kdw	Applied fix supplied by CVW for char->short cast when value
		is in a register.
		Applied fix supplied by CVW for stripping casts off
		constant expressions.
		Started work to correctly handle bitfields and the
		op= operators in gen386.c.
		Various fixes in gen386.c for operators on doubles/floats.

11 Apr 93  kdw	Finally managed to complete the major portion of the
		rewrite of decl.c.
		Access to const variables now correctly cause an error
		to be output.

21 Feb 93  kdw	Added improved pushing double parameters as suggested by
		S. Roux.
		Started complete rewrite of decl.c in order to handle the
		requirements of ANSI C declaration as the current module is
		becoming too hacked.

18 Feb 93  kdw	Used set instructions to improve code for arithmetic
		condition statements (68k version) as suggested by Peter Holzer.

04 Feb 93  kdw	Fix movem problem when returning a floating point constant
		from a function - reported by Michael Mueller.

24 Jan 93  kdw	Allow storage specifier to appear anywhere in a type
		specification.

23 Jan 93  kdw  Incorporated changes provided by John Pearce:
		include config.h as first file in c.h - allows testing
		of the VERBOSE flag for inclusion of sys/types.h.
		Only set exception handler if SIG_IGN isn't set for the
		signal - allows the compiler to work better in the background.
		Some uses of the verbose_option were missed.

02 Jan 93  kdw	Finished upgraded of library calls to assume stack has been
		cleaned up.

20 dec 92  kdw	Rewrite syntax analysis of types to allow for type specifiers
		being in any order (unless it is K&R).

19 Dec 92  djw	Converted 68k library support routines to clean up the stack.

18 Dec 92  kdw	Allow auto initialisation of structured constants.

18 Dec 92  kdw	Added calls to validate() in gen68k.c - complex expression
		were causing temporarily pushed values to be left on the
		stack.

-------------- Version 4.2 made available on the Internet ---------------------

09 Dec 92  kdw	Packaged for release to usenet as release 4.2

06 Dec 92  djw	Corrected problem with c68 IEEE version support routines
		because routines handling op= construct for floating point
		were not returning address of result as compiler expected.

05 Dec 92  kdw	Corrected problem with double constants being incorrectly
		assigned to float tree constants.

	   kdw	Corrected problem in c68 IEEE version with constructs of the
		form 'op = ' when flaoting point numbers involved.  Incorrect
		code was being generated.

27 Nov 92  djw	Allowed for initialisation of character arrays by a
		construct of the form:  char x[6]="123456";
		Previously this would have been reported as an error
		due to the initialiser being too long.

26 Nov 92  djw	Incorporated changes provided by Vincent Broman to allow
		bootstrapping c386 using bcc.

	   djw	Incorporated changes based on those supplied by Peter
	   	Holzer for the handling of U and L suffixes on numbers.

	   djw	Made changes based on those supplied by (?)
		to allow c386 to be bootstrapped using bcc.

22 Nov 92  kdw	Added support for expression of the form p++->n (as
		ANSI does) unless -trad flag set.

	   kdw	Added new warning for when arrays initialisation
		expression does not set all fields of an array.

	   kdw	Allowed & operator to be used on array names - but
		warning is generated.

	   kdw	Reworked code to do with parsing of qualifier keywords
		such as signed, unsigned, const and volatile.

13 Nov 92  kdw	Fixed problem in branch optimiser code to handle
		instruction branching to itself.  The previous fix for
		this had proved to be incomplete.

26 Oct 92  kdw  Fixed problem with signed keyowrd not being recognised
		properly.

25 Oct 92  djw	The space for the buffer used to hold strings is now 
		allocated dynamically as required removing the upper
		limit on total string size.

	   djw  Changed the generation of string literals so that they
		are put into the data section if the 'trad' flag is set
		(when they are potentially writeable), but into the text
		section otherwise (when they are read only.

24 Oct 92  kdw	Fixed bug when you to try to return a void value in
		an function which is not of type void.

	   djw	Added TRACE option to configuration file, and run-time
		switch to activate trace mode.

	   kdw	Overhauled routine that does the 'cast' operation to pick
		up a number of cast operations that should generate either
		error or warning messages.

	   djw	Fixed bug with using the U qualifier on a 0 constant.
		(reported by David Gillam)

	   djw	Fixed bug with using both the U and L qualifiers on the
		same constant.
		(reported by Michael Mueller)

20 Oct 92  kdw	Added code that is being used as a basis for work on trying
		to develop source level debugger/trace capability.  This is
		still experimental, but has been added to the main source to
		avoid having diverging source trees.  It is conditionally 
		included so taht it is not activated unless so desired.
		     
13 Oct 92  kdw	Fixed problem with initialising 'int' variables with
		a floating point value cast to int.   Also now will
		recognise casts of floating point constants to int
		at compile stage rather than generating run-time code
		to do this.

11 Oct 92  kdw	The test phase of for and while loops moved to physically
		occur after the code inside the loop, and a jump to it
		inserted at the head.   This has the effect of reducing
		the number of branch instructions executed for going n
		times around the loop to n+1 rather than 2n.

10 Oct 92  kdw	Patch (supplied by Michael Mueller) to getsym.c to reduce
		chance of rounding errors when calaculating floating
		point constants.

08 Oct 92  kdw	Fixed bug in branch optimisers whereby an instruction
		that branches to itself would cause the compiler to loop.
		Such code occurs in the init.c module of Minix 1.6.16.
		(reported by malte)

06 Oct 92  kdw  Generate .extern instead of .define in ACK 68K assembler
		files.  It is not clear that this is necessary, but that
		is the way ACK does it.
		(reported by Mark Newton)

	   kdw	Case jump tables now generated in store and output at the
		end of a generating the code for a function  (Previously
		they were output before generating the code).  This
		allows the peephole optimisers access to jump table
                labels.

	   kdw	Delete redundant labels.  Allows better optimisation,
		particularily with reference to elimination of dead
		code.

	   djw	Fixed bug in msgout.c when __STDC__ defined, and also
		HAS_STDARG defined.

05 Oct 92  kdw	Implement user configuration of the types of 'sizeof'
		and pointer difference.

-------------- Version 4.1 made available on the Internet ---------------------

04 Oct 92  	Packaged for release to usenet as Version 4.1

03 Oct 92  kdw	Added configuration option to allow users to specify
		whether varargs.h or stdarg.h is to be used - the
		msgout.c module changed to reflect this.

02 Oct 92  kdw	Added error message for void expressions passed as
		parameters to functions (reported by Mark Newton)

31 Sep 92  djw	Fixed _asf4.s which gave incorrect results when numbers
		being added were sufficently different in magnitude.

23 Sep 92  djw  Fixed problem with C68 IEEE support routine _mlf4.s
		that meant d7 was corrupted.
		(reported by Olaf Kirch)

19 Sep 92  djw	Added -maxerr option to allow the user to specify the
		maximum error count.

	   kdw	Fixed bug in cc68 shell script that meant that local
		labels were carried through to the final object.
		(reported by Olaf Kirch)

16 Sep 92  kdw	Fixed bug that stopped unary + working correctly.

	   kdw	Fixed bug that allowed constants to be generated
		(C68 version) that were larger than word size when
		generating word size constants!

	   djw	Fixed bug in C68 IEEE support routine _cif4.s that meant
		negative integers converted to 'float' lost their sign.

	   djw  Fixed Makefile in libieee sub-directory for missing
		definition of LIB (reported by Glen Lalonde)

09 Sep 92  ph   Peter Holzers patches applied to allow c386 to compile
		correctly with separate I&D.

06 Sep 92  djw	Added new support routines .fpinc, .asfpinc, .fpdec and
		.asfpdec for c68 MFFP version ++ and -- operator support.

05 Sep 92  kdw	ANSI style tentative declarations of static variables now
		handled correctly.

03 Sep 92  kdw	Variables of type 'float' were often handled incorrectly
		in the c68 IEEE version.  This occured when c68 thought
		it had generated a 4 byte 'float' constant when in fact
		it then proceeded to use an 8 byte 'double' constant.
		(reported by Phil Ogden 29/08/92).

	   kdw	Fixed problem with generating correct code for ++ and --
	  	operators on floating point numbers on the c68 MFFP version.

	   kdw	static functions now no longer have compiler generated
		labels.   This is primarily to aid in debugging.

	   kdw	New (pedantic) warning added for return values from
		functions being ignored.

27 Aug 92  djw	fixed problem with string concatentation not working if
		white space occurs between successive strings (getsym.c)
		N.B.  Fix allows for white space - but not comments.

	   kdw	fixed problem if 'enum' lists were defined inside a structure
		definition. Was stopping the enum value identifiers being
		visible in global namespace.
		(reported by Jim Gilmore)

------------- Version 4.0 made available on the Internet ---------------------

17 Aug 92	c68/c386 Release 4.0 posted to Usenet

