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: * Using vasm 1.3c and vlink 0.12 with many improvements. * New: vlink 0.12 has experimental support for dynamic linking. The frontend supports a -static option to force static linking. * New: -unsigned-char allows a char without qualifier to be treated as unsigned char instead of signed char. * New: Target "MiNT" (m68k-atarimint), which is a multitasking operating system for Atari computers. The linker was extended to support the MiNT-specific embedded a.out-format in a TOS exexutables, called aoutmint. * Fixed a bug with using bitfields in operations, which occured with -O2 optimization on big-endian hosts. * A combination of 64-bit shift and arithmetic-and operations generated illegal code on all targets. * Fixed bug with expressions of the form (pointer_type) (non_ptr +/- non_ptr) on machines that allow shortcutting conversion from int to pointer types. * Fixed bug with VLA (variable length array, C99) length 0. * Fixed illegal optimization of constant indexes in VLAs. * The volatile keyword was ignored in some situations when using -O2 optimization or higher. * Fixed some problems with incorrect struct-definitions after parse errors. * Error and warning messages are redirected to stderr. * Warning 224 must not appear, when a function returns the difference between two auto-variables. * Exit with a fatal error when an #include-recursion is detected, which means in this case that the nesting-level is > 1023. * Fixed __AMIGADATE__, which should add parentheses around the date. * Fixed wrong line number after an #include directive, when the line ends with CR/LF. * M68k code generator: Shortcut was erroneously used for (int)=(floatvar)/(floatconst)-(floatconst) converting the last floatconst into integer. * M68k code generator: __interrupt had a discrepancy between the number of saved and restored registers. * M68k code generator: Link register A5 got overwritten by local variables when used for a VLA. * M68k code generator: Used an address register as DBRA counter for a struct-push operation at -O1. * M68k code generator: For compatibility the __stdargs modifier is supported now, but ignored. * M68k code generator: Wrong adressing Mode An,<ea> for ADD occured sometimes with -O3 optimization. * PPC code generator: variables with a natural size of 8 (double precision float) have to be aligned to a 64-bit boundary, as not all PPC CPUs support 32-bit alignment. * PPC code generator: VLAs didn't work inside of a structure. * PPC code generator: 64-bit arguments were sometimes unnecessarily "extended" from 32 to 64 bits under PowerOpen-ABI (WarpOS). * i386 code generator: Fixed some 64-bit integer bugs. * C16x code generator: Better shift code generation. * C16x code generator: Fixed bug with save_result and r==tp. * vclib: Made freopen() depend on fopen() to make sure that the destructor which closes all open files is called. * vclib m68k: Returned sign of modulo operation was wrong in the cases (+)%(-) and (-)%(-). * vclib PowerUp: Fixed libpowerup.so, which can be generated by vlink now.
In such a complex project there will of course be bugs. Most, especially the serious, bug fixes will be available immediately as a patch. The rest comes with the next release, or by request from the author (see below).
|