Dr. Volker Barthelmann´s
Compiler Page


Homepage
Curriculum Vitae
Profile/skills
Publications
Products and
Services

Contact


Deutsche version
Software:
vbcc
vasm
vlink

vbcc - portable ISO C compiler

vbcc is a highly optimizing portable and retargetable ISO C compiler. It supports ISO C according to ISO/IEC 9899:1989 and most of ISO/IEC 9899:1999 (C99).

It is split into a target-independent and a target-dependent part, and provides complete abstraction of host- and target-arithmetic. Therefore, it fully supports cross-compiling for 8, 16, 32 and 64bit architectures as well as non-8bit-byte-based architectures.

Embedded systems are supported by features like different pointer-sizes (e.g. differently sized function- and object-pointers or near- and far-pointers), ROM-able code, inline-assembly, bit-types, interrupt-handlers, section-attributes, stack-calculation and many others (depending on the backend).

vbcc provides a large set of aggressive high-level optimizations as well as target-specific optimizations to produce faster or smaller code. Rather than restricting analysis and optimization to single functions or files, vbcc is able to optimize across functions and even modules. Target-independent optimizations include:

  • cross-module function-inlining
  • partial inlining of recursive functions
  • inter-procedural data-flow analysis
  • inter-procedural register-allocation
  • register-allocation for global variables
  • global common-subexpression-elimination
  • global constant-propagation
  • global copy-propagation
  • dead-code-elimination
  • alias-analysis
  • loop-unrolling
  • induction-variable elimination
  • loop-invariant code-motion
  • loop-reversal
  • replacing induction variables by smaller types
Multi-target binary archives can be download for Windows/x64, Linux/x64 and Linux/Arm hosts (including RasperryPi) at the bottom of the page (specialized archives for e.g. 6502 can be found on this page as well). The multi-target distributions support the following architectures:
  • M68k: vasm + vbcc
    libc: AmigaOS, Atari TOS, MINT, Atari Jaguar, Linux
  • Coldfire: vasm + vbcc
    libc: MINT, Arnewsh 5206
  • PowerPC: vasm + vbcc
    libc: AmigaOS, PowerUp, WarpOS, MorphOS, Linux, NetBSD, OpenFirmware
  • 6502/65C02: vasm + vbcc
    libc: C64, C128, PET, Atari 8bit, BBC Micro/Master, NES, MEGA65, Oric Atmos, Commander X16
  • 6809/6309/68hc12: vasm + vbcc
    libc: simulator/freestanding, OS-9/NitrOS-9 (tbc), Vectrex (tbc)
  • i386: vasm + vbcc
    libc: Linux, NetBSD, DOS (tbc)
  • VideoCore IV (RasperryPi GPU): vasm + vbcc
    libc: Linux (probably outdated), freestanding
  • C16X/ST10: vasm + vbcc
    libc: MM167, freestanding
  • QNICE FPGA: vasm + vbcc
    libc: monitor, freestanding
  • DEC Alpha: vbcc
    libc: compatible with Linux (probably outdated)
  • 832 FPGA: vbcc
    libc: n/a
  • 6800/6801/6803/6808/68hc11: vasm
  • Z80: vasm
  • ARM: vasm
  • Jaguar RISC: vasm
  • PDP11: vasm
  • TR3200: vasm
  • Z-machine (Infocom VM): vbcc
    libc: n/a

Anybody interested in additional backends or writing an own backend, can contact me by mail.

All common operating systems can be supported as host systems, including Windows and Unix/Linux systems.


AmigaOS related Download/link area

Current vbcc distribution for AmigaOS, compiled by Frank Wille, author of several assemblers and linkers usable with vbcc.


6502 related Download/link area

vbcc for 6502:
  • supports C99 (variable-length arrays, designated initializers etc.)
  • generates optimized code (see dhrystones in sample directory)
  • supports far-pointers and banked memory with automated bank-switching
  • (limited) floating point support based on Steve Wozniaks code
  • (pretty good) 32/64bit IEEE floating point support based on SANE
  • support for 65C02 extensions
  • support for CSG65CE02 extensions
  • support for MEGA65 extensions
  • support for writing interrupt handlers
  • attributes for putting variables into zero page
  • supports stack-frames > 256 bytes
  • supports file I/O on selected targets

Release 3 (patch 3) of vbcc for 6502 (binaries for Windows and Linux)

Release 3 (patch 2) of vbcc for 6502 (binaries for Windows and Linux)

Release 3 (patch 1) of vbcc for 6502 (binaries for Windows and Linux)

Release 3 of vbcc for 6502 (binaries for Windows and Linux)

Release 2 of vbcc for 6502 (binaries for Windows and Linux)

Release 1 of vbcc for 6502 (binaries for Windows and Linux)


Please have a look at the README included.


Embedded systems related Download/link area

The second alpha release of a toolchain for 6809/6309/68hc12 (binaries for Windows and Linux)


Please have a look at the README included.

Older versions:

Preview of a toolchain for 6809/6309/68hc12



Preview of a toolchain targeting the VideoCore IV GPU used in the Raspberry PI.

vbcc for VideoCore
(more to come)

Current Snapshot

vbcc docs (pdf)

Download compiler sources (29/04/2022).

Download multi-target Windows (x64) binaries of vbcc/vasm/vlink (29/04/2022).

Download statically-linked multi-target Linux (x64) binaries of vbcc/vasm/vlink (29/04/2022).

Download statically-linked multi-target Linux (arm, e.g. RaspberryPi) binaries of vbcc/vasm/vlink (29/04/2022).