Tiny C Compiler

Tiny C Compiler
Developer(s) Fabrice Bellard
Stable release
0.9.26 / February 15, 2013 (2013-02-15)
Written in C and Assembly
Operating system Linux, Unix, Windows
Type C compiler
License GNU Lesser General Public License
Website bellard.org/tcc/

The Tiny C Compiler (aka TCC, tCc, or TinyCC) is an x86 and ARM processor C compiler created by Fabrice Bellard. It is designed to work for slow computers with little disk space (e.g. on rescue disks). Windows operating system support was added in version 0.9.23 (17 Jun 2005). TCC is distributed under the GNU Lesser General Public License (LGPL).

TCC claims to implement all of ANSI C (C89/C90),[1] much of the C99 ISO standard,[2] and many GNU C extensions including inline assembly.

Features

TCC has a number of features which differentiate it from other current C compilers:

Compiled program performance

Although the TCC compiler itself is exceptionally fast, there is an inherent trade off between this size of the compiler and the performance of the code which TCC produces.

TCC does perform a few optimizations, such as constant propagation for all operations, multiplications and divisions are optimized to shifts when appropriate, and comparison operators are specially optimized (by maintaining a special cache for the processor flags). It also does some simple register allocation, which prevents many extraneous save/load pairs inside a single statement.

But in general, TCC's implementation emphasizes smallness instead of optimally-performing results. TCC generates code in a single pass, and does not perform most of the optimizations performed by other compilers such as GCC. TCC compiles every statement on its own, and at the end of each statement register values are written back to the stack and must be re-read even if the next line uses the values in registers (creating extraneous save/load pairs between statements). TCC uses only some of the available registers (e.g., on x86 it never uses ebx, esi, or edi because they need to be preserved across function calls).[4]

Here are two benchmark examples:

Uses

Well-known uses of tcc include:

History

TCC has its origins in the Obfuscated Tiny C Compiler (OTCC), a program Bellard wrote to win the International Obfuscated C Code Contest (IOCCC) in 2001. Since that time, Bellard expanded and un-obfuscated the program to produce tcc.[12]

Current status

TCC has an active mailing list, and Fabrice Bellard's current version is available through Git. However, official tcc development slowed due to Bellard's work on other projects.[3]

Rob Landley created a fork of tcc[13] that incorporated various patches from others, using the Mercurial SCM; Landley's Mercurial branch[14] showed its current status while the project was active. The project was discontinued on October 4, 2007 and recontinued as a fork on October 27, 2007 [13] then discontinued again[15] on September 5, 2008. Since then, TCC has received two updates; one on 20 May 2009, and 15 Feb 2013.

Various others have distributed patches or download sites of various improved versions of tcc, such as Dave Dodge's collection of unofficial tcc patches,[16] Debian and kfreebsd downstream patches,[17] and grischka's gcc patches.[5] grischka's Public Git Hosting [18] contains a mob branch[19] with recent contributions, including a shared build, cross-compilers, and SELinux compatibility.

See also

References

This article is issued from Wikipedia - version of the 7/29/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.