Expand description

LLVM-frontend specific AVR calling convention implementation.

Current calling convention ABI

Inherited from Clang’s clang::DefaultABIInfo implementation - self described as

the default implementation for ABI specific details. This implementation provides information which results in self-consistent and sensible LLVM IR generation, but does not conform to any particular ABI.

  • Doxygen Doxumentation of clang::DefaultABIInfo

This calling convention may not match AVR-GCC in all cases.

In the future, an AVR-GCC compatible argument classification ABI should be adopted in both Rust and Clang.

NOTE: Currently, this module implements the same calling convention that clang with AVR currently does - the default, simple, unspecialized ABI implementation available to all targets. This ABI is not binary-compatible with AVR-GCC. Once LLVM PR46140 is completed, this module should be updated to match so that both Clang and Rust emit code to the same AVR-GCC compatible ABI.

In particular, both Clang and Rust may not have the same semantics when promoting arguments to indirect references as AVR-GCC. It is important to note that the core AVR ABI implementation within LLVM itself is ABI compatible with AVR-GCC - Rust and AVR-GCC only differ in the small amount of compiler frontend specific calling convention logic implemented here.