VBCC 0.9 released (30-Dec-2008)
Date 2009/1/1 13:19:38 | Topic: Software News
|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).|
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).