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:
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
|