	Changes to 1.8.3 Distribution 

<around August 6>

68000	A bug wherein sin(x)>sin(y) could generate an
	fcmp fp0,fp0 has been fixed. Could have happened
	for any recognized function.

68000	The compiler no longer generates multiple mulw instructions
	in 68020 mode, where a single mull is faster.

68000	A recent bug in the generation of 2 mulw instructions for
	smallconstant*integer, causing bad code to be generated,
	has been fixed.

All	An optimizer bug, causing code to be hoisted out of loops
	in the wrong order, has been fixed.

All	A bug in the floating point constant parsing, causing
	numbers with more than 32 decimal digits to lose
	precision, has been fixed.

Tue Aug 11 09:49:20 PDT 1987

68000	newmove changed so that target type is passed down.
	Expressions such as *p++ = ~*p now yield better code.

68000	getbintemp changed to not use getdreg on isuniv variables.
	Prevents getdreg variables from being forced into memory
	by movelong calls.

68000	movemm changed to move directly small items in 68020
	mode, where alignment is non-fatal.

Thu Aug 13 07:08:27 PDT 1987

All	Interblock common subexpression elimination can be
	turned on with -O -X230; it does not work, and is not
	supported, and when it does work, it will be on
	by default with -O, and -X230 will turn it off.

68000	A bug whereby short = (int)&x - (int)&y caused
	a code gen abort has been fixed (in dotort).

Mon Aug 17 09:05:22 PDT 1987

C	Case statements outside of a switch will once
	again give an error message.

C	A unnamed field of :0 will no longer give an Internal
	compiler error.

Wed Sep  2 14:08:47 PDT 1987

68000	The -X133 (use DS.B rather than DCB.B) should now
	work correctly.

386	A problem with the -X215 (ASM output format) switch has
	been corrected; isreg checks to make sure that 
	basevar is variable or param before referencing 
	mdr fields.

Thu Sep 17 09:54:22 PDT 1987

68000	fastmax (c68con.h), the number of parameters to automatically
	load to registers, has been changed to 2 from 3 for
	maximum whetstone performance.

68000	Neweval changed, a tort type which is packed is changed
	to otot if packedok false. Recently, foo->field = localvar
	where field is 24 bits long was causing compiler aborts.

68000	Case statement evaluation has been changed, so that if
	the temporary variables wind up in memory, the dispatch
	table code will work correctly in all assemblers, including
	especially the sgs assembler. (c68case.p, c68u.p)

68000	The Weitek calling convention has been changed for efficiency
	reasons, registers r1 through r13 (rather than r23) are
	now considered scratch registers. Tektronix Only. c68b.p et al.

68000	A recent bug whereby x->packedfield = variable was causing
	a code generator abort has been fixed in newmove.

68000	The switch -X138, dbnolcomms, is no longer used, and lcomm
	is not the default for static variables. The dblcomms (-X85)
	switch is used for environments that support it. This corrects
	a problem with static variables having incorrect debug information.
	(indepstab.p, c68u.p)

68000	An unusual form of the add,and,or,sub instructions was generating
	incorrect binary patterns, which appeared as subx etc. This
	has been fixed. (c68u.p)

68000	A bug causing abort 707 with the old style debug information
	has been fixed. This was caused by an objmachop being passed
	to a routine expecting a fully evaluated machop. c68stab.p

All 4.2	A bug in the generation of stab information for common blocks
	has been fixed.

Pascal	'lastscope' is now initialized to 0 in makehash (indepsym.p).
	This fixes spurious scope errors which were occurring in
	MSDOS, an uninitialized memory environment.

Wed Sep 23 09:07:37 PDT 1987

All	A bug in indep.p which would cause segmentation violations
	(in concat) has been fixed. (bug153.c)

Tue Oct 13 07:32:52 PDT 1987

386	A bug which caused fixup code to be emitted near linenumbers
	when -g was used under system V has been fixed in fixinst(386b.p).

386	A bug which caused for(;;) loops at the top of a routine to
	run on into dataspace has been fixed in branches(386b.p).

Thu Oct 15 15:43:12 PDT 1987

68000	With dbsgs (system V) format, fp reg lists are now
	preceeded with a & rather than a #.

68000	compile.c has been modified to add dbsgsbroken -X243 to 
	the sysv68 defaults. This is believed to be the correct
	way.

68000	A bug whereby fbneq was once again being printed as fbne
	has been fixed, again.

Fri Oct 23 08:38:00 PDT 1987

68000	A problem with the format of 68881 register lists, when
	two or more registers need to be saved, has been fixed.
	This bug appeared after 1.8.2H, and affected all versions
	of the compiler except with -X122 output.

68000	When using the -OL switch in 68010 mode, multiplies are
	done inline. A recent fix caused this to be incorrectly
	fixed up if one of the temporaries wound up on the stack.
	In particular, indepieee.c was broken as a result.
	<SEE NOTE ON NOVEMBER 16>

68000	Support has been added for the #ident preprocessor directive.

68000	A new environment, sysv68i, has been added to compile.c.
	It expects the compiler in /lib, libraries in /usr/lib/ghs/.

C	Support for the -T option, which truncates identifier names
	to 8 characters, has been added.

386	With changes to set processing, and fprel variable treatment,
	Pascal should now pass validation. 386.p,386u.p.

Mon Oct 26 09:18:48 PST 1987

All	When using debug information in 4.1 or 4.2 mode, statics in
	the bss section are more likely to be correctly identified.

68000	Floating point constants are now locked into memory; before,
	the -X125 switch could cause all variables to be rechecked
	for register candidacy, with the result that the initialization
	    was lost (c68expr.p).

Tue Oct 27 08:29:27 PST 1987

386	The peephole optimizer was not checking the size in ismovw
	when it tried to replace mov rn,rm;add con,rm with an lea,
	causing an "Internal Compiler Error" message. This has
	been fixed, it will now only do this with 32 bit operands.

Fri Oct 30 08:38:45 PST 1987
	
386	The function which recognizes strcpy and strcmp (isstrcpy),
	as well as transcendentals, was not correctly dealing with 
	a nil 'target'; this has been fixed.

Tue Nov  3 10:18:25 PST 1987

Fortran	An uninitialized field in string constant processing was
	causing "Internal Compiler Error"s on Fortran programs.
	This has been fixed in indep.p (ishexoroctal).

Wed Nov  4 12:42:26 PST 1987

Fortran	When using 4.2 debugging information, the compiler
	will no longer put out a spurious definition of the common
	block as a record.

68881	Support for the dbfpnops flag has been added.

68020	Weitek register to registers loads are now always deleted.

68020	The ophascc/dreghascc function is more conservative.

68881	f80typ registers are ticked on call, rather than f64typ.

Mon Nov 16 15:57:01 PST 1987

68000	When using the -OL switch in 68010 mode, multiplies are
	done inline. A recent fix caused this to be incorrectly
	fixed up if one of the temporaries wound up on the stack.
	In particular, indepieee.c was broken as a result.
	The code was also incorrect if they were located in
	address registers; this too has been fixed.

Fri Nov 20 08:40:51 PST 1987

68000	Temporaries for divide and mod in 68010 mode were being
	obtained with getbintemp. This caused truncation on
	int i; char c ; c = (i /= 10);
	The temps are now obtained with gettorttemp.

68000	gettorttemp has been fixed so that it will return
	a size >= x even when passed a smaller type tort.

Sat Nov 28 13:54:03 PST 1987

68000	The peephole optimizer was optimizing all machops,
	and then regenerating the entire instruction.
	This caused mconflict to occasionally generate
	a false negative. This has been fixed in c68inst.p.
	'peepmachop' in c68b.p calls mconflict before
	changing movl an,am; ...am(0,dn), to avoid
	tampering with movl (am)+,am(0,dn).

Tue Jan 12 11:53:26 PST 1988

68000	The c11jsrp instructions were not being treated correctly
	for binary output in c68u.p; therefore, Pascal programs
	with nested routines would cause code gen aborts etc.
	when compiled with -X122. Around line  2490 in c68u.p,
	c11jsrp was added to a set.

Wed Jan 20 16:20:23 PST 1988

Pascal	A reference to mdr^.usecount in the front end was
	deleted, routine GetFilenameVar in pasexp.p. It is
	not ok to reference mach dependent fields in the
	front end. This may cause filenames to vanish from
	output, this is being checked.
