VBCC 0.9d released (30-Dec-2014)

Date 13-Jan-2015 14:08:49
Topic: Amigaworld.net 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).

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.




This article comes from AmigaWorld - Amiga Community Portal
https://amigaworld.net

The URL for this story is:
https://amigaworld.net/article.php?storyid=7300