VBCC is a highly optimizing portable and retargetable ISO C compiler. It supports ISO C according to ISO/IEC 9899:1989 and a subset of the new standard ISO/IEC 9899:1999 (C99).
http://sun.hasenbraten.de/vbcc/
Changes since last release:
* New libcall interface makes all backends generate much better code, when doing a library call (e.g. for 64-bit arithmetics or soft-float). * Supports C99 __func__. * Fixed some cases where volatile was not respected. * Fixed compiler crash when main() does not return int in C99 mode. * Do not perform algebraic optimizations on "pointer - pointer". Makes (char *)p - (char *)0 being treated as integer again. * Relaxed rules for constant expressions involving conditional expressions. Fixes for example int x = 1<2?3:4 to be accepted as a constant expression. * Added diagnosis for empty struct/array initializers. * Fixed possible memory corruption with string constants of exactly 128 bytes length. * Stricter propagation of constants/VARADRs. * Do not emit unused local static variables in lower optimization levels as well. * Fixed problems with (void)((condition) || func()). * PPC: Fixed output of negative pointer constants on 64 bit hosts. * 68k: -sc (small code) works again, since switching from PhxAss to vasm. * 68k: New option -fastcall to pass function arguments in scratch registers. * 68k: New option -fp2scratch to use fp2 as an additional scratch register. * 68k: Fixed bug with word/long register size in indexed addressing mode. * 68k: Conversion of signed char to int, with 16 bit integer setting, fixed. * 68k: Fixed wrong alignment assumptions on pointer references. * 68k: Avoid certain addressing modes for soft-float ICs. This caused an index register to be used before it had been restored from the stack. * 68k: Fixed return register for long double. * 68k: Fixed incorrect order of restoring pushed registers during a 16 bit to 64 bits integer conversion. * 68k: Overwriting FP-register in float to unsigned conversion fixed. * 68k: Fixed bug with -(An)/(An)+ and internal libcalls. * ColdFire: 64bit add/sub with constants. * ColdFire: Corrected stack-adjustment for pushflag in bottom of function. In some case the stack was adjusted 4 bytes too far. Crashed on return. * ColdFire: Fixed bug with storing 64-bit values (stored0d1). * vclib: Major rework for Atari. Most files are shared between M68k and ColdFire. Also the same headers can be used for 16- and 32-bit backends. * vclib: libgem with all AES and VDI functions for Atari. * vclib: Many C99 functions and features added to the 6888x, 68040 and 68060 math libraries. * vclib: New m060.lib with math functions optimized for the 68060 FPU. * vclib: Improved pow2() and pow10() for 68060. * vclib: Fixed sqrt(float), sqrt(double), float to int64 and double to int64 in the softfloat library by using code from John R. Hauser's 2b release. * vclib: Adapted all math libraries to the new libcall interface. * vclib: sscanf() tried to read characters from a 0 filehandle in certain situations. * vclib: Added missing ANSI-C89 functions strcoll() and strxfrm(). * vclib: m13.lib for Amiga Kickstart 1.x systems, using mathffp.library instead of mathieeesingbas.library. * vclib: Fixed 68060 unsigned 64-bit modulo. * AmigaOS/68k config files include -hunkdebug, so specifying -g on the commandline is sufficient now for getting line debug info. * Frontend lowers priority under AmigaOS/MorphOS, so other user processes are no longer affected by the compiler.
|