C-Mix is an automatic partial evaluator for the ISO/ANSI C language. It transforms generic programs into more efficient, specialized versions.
· You'll need a C compiler to compile the program generators that C-Mix produces (as well as to use the generated programs they output for anyting useful).
· A frames-capable WWW browser is useful for browsing the analysis results from C-Mix/II when something does not work as you expected. There are other, more tedious ways of getting most if the information it can show you, though.
To compile C-Mix/II from the source distribution
You'll need a C++ compiler for compiling the main analyzer module, and you will probably succed only if they are GCC 2.8.1, egcs, or possibly newer versions.
You'll also need a C compiler for compiling some of the auxiliary parts of the system.
You'll need GNU `make'. Our makefiles use several GNU extensions.
To modify the C-Mix/II sources
You'll need Flex and Bison. We have not tried ordinary lex and yacc, and they probably won't work with the source as it is.
You'll need Perl for creating some of the autogenerated C++ source files, and for creating updated manual pages.
You'll need Autoconf when modifying `configure' scripts.
What's New in This Release:
· Changed the handling of lifts of long double (which fails on our development machined due to compiler incompabilities). The default is now always to truncate lifted values to double, except if otherwise explicitly requested. This means that speclib.h is now architecture-independent.
· Improved the memory usage of the speclib when memoising values of local variables for program points inside function. This means that the interface between p-gen and speclib has changed; old generating extensions cannot be used with the new speclib and vice versa.
· Fixed the speclib such that the in-use information is now actually used when comparing specialized program points inside functions. It has been present since release 2.0.4, but the code to test it during memoisation was never written. (Embarassing!)
· Fixed bugs in the code generation for switch statements and in the detection of dynamic pointers to specializable functions. (Reported Mats Kindahl).
· Fixed bug in the restructuring phase. (Reported by Tetsuro Tanaka).
· Rewrote much of the declarator parser to fix about a dozen rare bugs. Sometimes redeclarations of typedef names or declarations of functions returning "pointer to function" or "pointer to array" were misparsed or rejected as syntax errors.
· Made the generating extension fail a little more gracefully when a stray static pointer to something dynamic is dereferenced. This is not a complete solution, because things may still go really bad if static pointers to something static run wild.
· `make install' now again strips the installed binaries. There is a `make install-strip' as well as a `make install-nostrip' for those who want absolute control.