vbcc 0.9d C compiler released

  • 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.

Download it here