
	CHANGES TO TXCG { 386, 86A, 86T }


	17) JAN 26 2000

	Applied a small fix to the code generator frames 'txcg_asm_frame'
	and 'txcg_hll_frame': in the function store(),

		Rx := Rx-1;

	was used to release a register after an assignment using SAVL
	or SAVG. This leads to wrong code, if more than 2*NReg
	(virtual) registers are allocated (2*NReg = 8, on a *86).
	This has never happened so far. The patch comes from the
	R6-branch where the number of registers had to be reduced
	to 3. The corrected version uses

		pop();

	to release the unused register.


	16) NOV 12 1999

	Added a separate code generator for BSD versions using ELF
	(TXCG386E). It differs from the AUT version in the following
	points:
		- it does not use underscors on external symbols
			(TXINIT instead of _TXINIT)
		- it defines the public symbol _start, which the
			ELF loader uses as default entry point.


	15) OCT 10 1999

	Fixed a severe bug in the code generator frameworks. All
	native code generators were affected. The following line of
	code reproduces this bug (in prior releases):

	p(1, @a[b[n]], b[n+1]-b[n]-(n<m-1-> q(c[n+1])+3: 0));

	(where p,q are procedures, a,b,c vectors, and n,m atomic
	variables.) Probably, the error also can be forced using

	p(1, 2, 3, 4, n<m-1-> 5: 6);

	The only prerequisit is that all registers must be allocated
	at the point where the -> operator is evaluated. In this case,
	the value of the last spilled register will only be restored
	correctly, if the true branch of -> will be activated.
	Otherwise, the spilled value will remain on the stack and
	leave the program in an undefined state.


	14) AUG 27 1999

	Fixed a bug which caused ERASE() in the S86 RTS library to
	crash when no file was found. This was due to a local buffer
	not being freed properly.


	13) JUN 25 1999

	The READS() function in LIBTX86.S did not unpack binary data
	properly and returned the wrong length in this case.


	12) MAY 05 1999

	The ATON() function in LIBTX86.S did only convert the first
	digit, because LODSB was used instead of LODSW to parse the
	input. Fixed that.


	11) NOV 15 1998

	This bug occured in the txcg_* frameworks and therefore affected
	ALL code generators:

	When a procedure argument at a position which was greater than
	the number of available registers was a conditional, then the
	program was likely to crash. An example: Imagine the procedure

		P(a,b,c,d,e);

	and a procedure call

		P(1,2,3,4,x->5:6);

	and a machine with less than 5 free registers. In this case,
	the generators would have generated inappropriate stack
	maintenance code, thereby causing P() to be called with the
	wrong number of arguments. Doing so usually results in a core
	dump on Unix and in undefined behaviour on DOS.


	10) AUG 17 1998

	Completed the TXCGG library wrapper for linking against LIBC.


	9)  AUG 16 1998

	Wrote the MAKEGEN scripts for generating code generators from
	definition files.


	8)  AUG 14 1998

	Completed TXCGG definition files for GAS-386, MASM/TASM, S86,
	and ugly C. Removed the original hand-coded generators from the
	distribution.


	7)  AUG 11 1998

	TXCG* halted with an error when translating embedded expressions
	used to fill in empty slots in dynamic tables. Some internal
	checkpoints had to be removed to allow dynamic tables.


	6)  AUG 08 1998

	Completed the first version of the TX Code Generator Generator
	TXCGG which will be used to create future code generators with a
	common framework from a generator description file.

	Also completed the frame work TXCG_FRAME and the first CG
	description CG386.DEF. The generator resulting from

		TXCGG < CG386.DEF

	generates the same code as TXCG386, but is slightly larger.


	5)  AUG 05 1998

	Completed a first preliminary release of a very crude and
	simple Tcode->C backend to provide at least *some kind of*
	native code support for Plan9.
	This backend also may be used for studying the design of a
	generic assembler backend.


	4)  AUG 01 1998

	TXCG386 emitted negative numbers when DECLaring large
	(>32767-element) vectors, because it assumes 4 bytes per word.


	3)  JUL 31 1998

	Implemented recognition of Tcode debug information (LINE, GSYM,
	LSYM). Although, no information is passed through to the output.


	2)  JUL 29 1998

	Updated the code generators to process the DUP and SWAP Tcode(2)
	instructions.

	The code generators now accept Tcode2 input. The extension vector
	will be read in, but not (yet?) evaluated.

	All code generators have been extended to recognize the new
	(Tcode 2) intructions UMUL, UDIV, ULESS, UGRTR, ULTEQ, UGTEQ
	which perform unsigned term operations and comparisions.


	1)  MAR 01 1998

	Signed divides failed in TXCG{386,86} when the divisor was
	negative, because no proper sign extension had been performed
	(XOR DX,DX instead of CWD).

