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 MCS-51 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, ASCII R800), 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:

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.