Dr. Volker Barthelmann´s Compiler Page (original) (raw)
Homepage
Curriculum Vitae
Profile/skills
Publications
Products and Services
Contact
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, C16, VIC-20, PET, Atari 8bit, BBC Micro/Master, NES, SNES, MEGA65, Apple I, Apple II, Oric Atmos, Commander X16, Simulator/Freestanding - 65816: vasm + vbcc
libc: Apple IIgs, SNES, Simulator/Freestanding - 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:
- comes with ready-to-use C library for the following targets: C64, C128, C16, VIC-20, PET, Atari 8bit, BBC Micro/Master, NES, SNES, MEGA65, Apple I, Apple II, Oric Atmos, Commander X16, Simulator/Freestanding
- 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 4 (patch 2) of vbcc for 6502 (binaries for Windows and Linux)
Release 4 (patch 1) of vbcc for 6502 (binaries for Windows and Linux)
Release 4 of vbcc for 6502 (binaries for Windows and Linux)
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.
65816 related Download/link area
vbcc for 65816:
- comes with ready-to-use C library for the following targets: Apple IIgs, SNES, Simulator/Freestanding
- supports C99 (variable-length arrays, designated initializers etc.)
- generates optimized code (see dhrystones in sample directory)
- supports near-, far- and huge-pointers and memory models
- (limited) floating point support based on Steve Wozniaks code
- support for writing interrupt handlers
- attributes for putting variables into zero page
- supports file I/O on selected targets
Release 1 of vbcc for 65816 (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
Download compiler sources (22/02/2025).
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).