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