Diab Compiler: 25 Years of Innovation
Boost application performance, reduce memory footprint, and produce high-quality, standards-compliant object code for embedded systems with Wind River Diab Compiler.
Big Performance. Tiny Footprint.
Our unique optimization technology generates extremely fast, high-quality object code in the smallest possible footprint. More
The Latest Industry Standards
Wind River Diab Compiler conforms to the most recent ANSI/ISO C and C++ compiler standards, including C89, C99, and EC++. More
Reliable Quality
Mission-critical applications across the globe rely on Wind River Diab Compiler's 25 years of field and lab testing, as do hundreds of millions of successful deployed devices in certified applications for the automotive, aerospace, industrial, and medical industries. More
Meet Safety Requirements
We're pleased that Wind River Diab Compiler has been used in projects validated by TÜV NORD for automotive functional safety, and proud of the millions of successful deployed products in safety-critical markets such as industrial, medical, avionics, and automotive. More
Award-Winning Global Support
Wind River Diab Compiler is supported by an award-winning and Service Capability and Performance (SCP)-certified organization and Wind River's Online Support (OLS) website. Wind River has more than 150 support engineers in sites all over the globe offering support in your local language. More
Key Features
Speed vs. size switches
For situations that call for trade-offs between execution speed and code density, Wind River Diab Compiler features numerous compiler switches to optimize for maximum speed, minimal size, or a balance of both.
Ability to mix C/C++ and assembly code
Mix C/C++ and assembly code using a number of methods. Use ASM Macros to inline sections of assembly code that can be invoked as a function. ASM Strings provide a simple way to embed assembly instructions. Wind River Diab Compiler includes a number of additional macros that improve compiler optimization.
Whole program optimization
Optimize calls between functions in different source files to improve execution efficiency by allowing function inlining across different modules.
Profile-driven, application-specific optimizations
These optimizations require two-staged compilation:
- Stage one: The code is instrumented and then executed on the target or in a simulation environment on a typical dataset. The instrumented code collects profile information, which is then fed back into the compiler for the second stage of the compilation.
- Stage two: The compiler uses the profile information to further improve optimizations such as loop-unrolling, inlining, basic block reorganization, register allocation, and branch prediction. Because a typical dataset is supplied during the first phase of the compilation, these optimizations will be highly tuned for the given application.
Easy interrupt handling
Wind River Diab Compiler's interrupt keywords and interrupt pragmas make it easy to handle interrupt processing for embedded systems. For instance, it provides the ability to design an interrupt vector table at C level without using any assembly language.
Multiple debugging options
Flexible controls for generating debuggable code provide control of trade-offs between the amount of debug information vs. the speed of debugging, and performance optimizations vs. the ease of debugging.
Position-independent code (PIC) and data (PID)
Generate code and data that can be loaded at any address. This is useful in devices that dynamically load/unload modules.
Volatile keyword, or all memory is volatile
Mark areas of code as volatile to prevent Wind River Diab Compiler from optimizing away data accesses. This feature is useful for accessing memory-mapped device I/O.
Control structure formats
Reduce footprint by packing structures and ensuring that all padding is removed. Create byte-swapped structures in which it swaps the byte order for data structures as they are stored in memory, allowing the communication of information in a byte order different than the device's native byte order. This capability helps optimize performance when sharing data between big and little endian processors.
Extensive link command language for memory mapping
Every embedded device has a unique memory layout, with various types of memory available, such as fast RAM, flash, and shared memory. The link command language provides users fine-grain control to lay out code and data in memory in the optimal way.
Absolute addressing from C and assembler
Variables and functions can be assigned to specific memory addresses. This is useful for accessing memory-mapped device I/O and for setting up interrupt vectors.
Ability to generate PROMable code
Generate code that can be burned into ROM and can access memory that is moved into RAM at startup time.
Support for multiple object module formats
Diab Compiler supports ELF, COFF, IEEE-695, and S-Records and can generate object modules in multiple formats.
Link-time lint checker
The lint facility is a powerful tool for finding common C programming mistakes at compile time and at link time, including unused variables and functions, missing return statements, constants out of range, and function call mismatches. Link-time checking finds inconsistencies across modules, which is impossible to do at compile time.
Run-time error checker
The run-time error checker quickly identifies the root cause of software errors during program development. Detect memory leaks, stack overflows, improper use of pointers, and memory allocation errors. This powerful tool can save time and enhance code quality prior to integration and quality assurance (QA) activities.
Instruction set simulator
The instruction set simulator (ISS) is a simulator for executables and a disassembler for object files and executables. The ISS accurately simulates the instructions of the target architecture, allowing developers to write and debug applications without the need for target hardware.




