15JUN2007 v4.6
- builds on gcc-4.1.x i386 based GNU/Linux systems.
- added ability to link against C libraries via the -lxyz option.
- much better syntax recovery
- fixed two bugs in mod and div arithmetic with negative numbers.
- fixed bug in FpuIO which failed to issue a ’-’ when emitting
real numbers.
- added many new tests to the regression directory (autotest).
- tidied up p2c to compile without warnings.
- moved all makefiles to Makefile.in and utilizing ./configure
- fixed new mnemonic for fpatan
- implemented the UNQUALIFIED keyword.
- moved P1 and P2 to an automatically generated parser.

26SEPT2000 v4.0
- new parser which finally performs syntax recovery
- ASM END syntax is now using the GNU C method
(see GNU C manual in the emacs info)

26NOV99 v3.9
- interim checkin. This should be treated as a developer
release only. The m2f compiler without gcc backend still
exists and works.
M2F builds with gcc as the backend to produce GNU Modula-2.
Required a number of changes to makefiles and linking mechanisms.
But currently it will only compile trivial modules.

15JULY99 v3.8
- rationalised some of the libraries. Removed CIsupport as
FIO no longer needed it. Also tidied up the back end for
potential GCC integration. Also fixed p2c to work with
gcc 2.8.1

2JULY99 v3.7
- improved M2GenDyn486 to perform more optimization on indexed
addressing with strings.
- finally added nested procedures
and retrofitted them to all code generators and gdb stabs generation.
- m2f is now a full Modula-2 compiler loosely complying to
Programming in Modula-2 Second Corrected Edition by N. Wirth
- fixed bugs in M2GenAPU.mod

26JAN99 v3.6
- fixed oversight in M2Pipe586.mod so that -Odynamic can
be used without -Oi586 flag without causing really slow compiles.
- fixed bug in ASM END with -Odynamic. Flushing asm before next
pipelined instruction.
- fixed two bugs in is32 code generator.

12JAN99 v3.5
- fixed a bug in is32 code generator and added
- alignment optimizations to code and data.
- Improved 586 code generator and made compiler operate with
- ismene and the microkernel. Complient with redhat 5.2.

major alterations include:
- better 586/686 pipelining
- faster parameter passing (using words not bytes). Similar to gcc.
- alignment of parameters, data and stack. Significant speed improvements
for both 586 and 686 targets.
- 2 bugs found in M2GenDyn486
- pipelining now includes more instructions and understands the cache.
Pipelining can be used with the is32 code generator to predict performance
(accurate to within 8%)
- flag -pedantic will issue warnings if excessively slow code is being issued.
(Array parameters etc)
- is32 (apu) code generator has been modified slightly to bring it in line with
pentium alignment. Also a few code generator bugs fixed.
- new option -Oworst included, which will perform the worst pipelining possible.
Useful only as a comparison.
- downside is that the new paramater mechanism and data alignment has not
been stressed enough.

12SEPT98 v3.4
- improved code generation in M2GenDyn486
- improved is32 code generator
- ported compiler to libc2 and redhat 5.1
- fixed more bugs in dynamic code generator

11MARCH98 v3.3
- fixed bugs in dynamic code generator and integrated it with the
i586 pipeline optimizer.
- new code generator can be invoked by with the pipeline optimizations by
using -Odynamic -Oi586 flags
- can use -On flag if willing to be patient with the compiler, this causes
the pipeline optimizer to search hard for optimal pipeline solutions.
(Number of instructions to examine = 3 * n. Default, n, is 2).
- improved many error messages
- fixed error checking in FIO.mod
- upgraded the converted p2c bootstrap tool from p2c 1.19 to 1.20

7JULY97 v3.2
- fixed bug in static code generator. (VAR i: CARDINAL.. FOR i := 0 TO 10)
- fixed bug in dynamic code generator. Complex expression multiply
caused wrong register to be used.
- type incompatability was internally generated when using expressions
using SIZE(..).
- better error messages for undeclared identifiers.

21MAY97 v3.1
- fixed install scripts, autotests, and made package unpack into a
single directory.
- fixed help -h option.
- install, regression and binary.release targets implemented in top makefile
- no major change to compiler per se.

13MAY97 I’ve just released v3 of this Modula-2 compiler.
The changes from v2 are:

- new code generator (invoked by -Odynamic)
- better error messages and warning messages
(unused variables, uninitialized variables etc).
- MIN and MAX implemented
- optional bounds checking and profiling
- fixed bug in common subexpression elimination
and improved code optimization
- altered internal quadruples to aid code optimization
- many small library fixes
- made compiler generate varient record debugging info
which is compatible with GDB
- improved regression tests

[ message from when v2 was uploaded ]

I’ve just uploaded yet another Modula-2 compiler to tsx-11.
The compiler is based on 2nd Edition Modula-2 (it requires
identifiers to be exported from defintion modules).

Briefly the pros and cons are:

Cons first

(i) slow, verbose code generated, compared to gcc
(ii) does not allow nested procedures
(iii) no error recovery


(i) code generator is reliable
(ii) code generator is in one module so it can be replaced..
by anyone interested in code generation (final year project?).
(iii) bootstrapped via a hacked p2c (included in tar)
(iv) generates GAS 386, MASM 386 and also Bruce Evans
as86 compatible 8086 small model code.
(v) no declaration order required.
(vi) easy interface to C
(vii) works with GDB
(viii) abstract data types can be of any type.
(ix) SYSTEM.mod, SYSTEM.def are real modules and
items can be added. (For example IOTRANSFER for real time systems).

Gaius Mulley (email gaius@glam.ac.uk)