Keywords: sdccman

# 1.1 About SDCC

SDCC (Small Device C Compiler) is free open source, retargettable, optimizing standard (ANSI C89 / ISO C90, ISO C99, ISO C11 / ISO C17) C compiler suite originally written by Sandeep Dutta designed for 8 bit Microprocessors. The current version targets Intel MCS51 based Microprocessors (8031, 8032, 8051, 8052, etc.), Dallas DS80C390 variants, NXP (formerly Freescale/Motorola) HC08 based (hc08, s08), Zilog Z80 based MCUs (Z80, Z180, eZ80 in Z80 mode, SM83, Rabbit 2000/3000, Rabbit 3000A ), Toshiba TLCS-90, Zilog eZ80 in Z80 mode, STMicroelectronics STM8 , Padauk PDK14 and PDK15. It can be retargeted for other microprocessors, support for Padauk PDK13 and MOS6502 is under development, whereas Microchip PIC is currently unmaintained. The entire source code for the compiler is distributed under GPL. SDCC uses a modified version of ASXXXX & ASLINK, free open source retargetable assembler & linker. SDCC has extensive language extensions suitable for utilizing various microcontrollers and underlying hardware effectively.
You might also want to have a look at the wiki `https://sourceforge.net/p/sdcc/wiki/`.
In addition to the MCU specific optimizations SDCC also does a host of standard optimizations like:

- global sub expression elimination,
- loop optimizations (loop invariant, strength reduction of induction variables and loop reversing),
- constant folding & propagation,
- copy propagation,
- dead code elimination
- jump tables for switch statements.

For the back-end SDCC uses a global register allocation scheme which should be well suited for other 8 bit MCUs.
The peep hole optimizer uses a rule based substitution mechanism which is MCU independent.
Supported data-types are:

type | width | default | signed range | unsigned range
_Bool / bool | 8 bits, 1 byte | unsigned | - | 0, 1
char | 8 bits, 1 byte | unsigned | -128, +127 | 0, +255
short | 16 bits, 2 bytes | signed | -32.768, +32.767 | 0, +65.535
int | 16 bits, 2 bytes | signed | -32.768, +32.767 | 0, +65.535
long | 32 bits, 4 bytes | signed | -2.147.483.648, +2.147.483.647 | 0, +4.294.967.295
long long1.1 | 64 bits, 8 bytes | signed |  |
_BitInt1.2 | 8 to 64 bits, 1 to 8 bytes |  |  |
float | 4 bytes similar to IEEE 754 | signed |  | 1.175494351E-38, 3.402823466E+38
pointer | 1, 2, 3 or 4 bytes | generic |  |
__bit1.3 | 1 bit | unsigned | - | 0, 1

The compiler also allows inline assembler code to be embedded anywhere in a function. In addition, routines developed in assembly can also be called.
SDCC also provides an option (—cyclomatic) to report the relative complexity of a function. These functions can then be further optimized, or hand coded in assembly if needed.
SDCC also comes with a companion source level debugger SDCDB. The debugger currently uses ucSim, a free open source simulator for 8051 and other micro-controllers.
The latest SDCC version can be downloaded from `http://sdcc.sourceforge.net/snap.php`. Please note: the compiler will probably always be some steps ahead of this documentation1.4.