This commit includes the necessary changes to clang and LLVM to support
codegen of RV32E and the ilp32e ABI.
The differences between RV32E and RV32I are:
- RV32E reduces the integer register count to 16(x0-x15).
- The ABI should be ilp32e.
RV32E can be combined with all current standard extensions.
The central changes in ilp32e ABI, compared to ilp32 are:
- Only 6 integer argument registers (rather than 8).
- Only 2 callee-saved registers (rather than 12).
- A Stack Alignment of 32bits (rather than 128bits).
- Not compatible with D ISA extension.
If ilp32e is used with an ISA that has any of the registers x16-x31 and
f0-f31, then these registers are considered temporaries.
To be compatible with GCC, we don't use aligned registers to pass variadic
arguments and set stack alignment to 4-bytes for types with length of 2*XLEN.
FastCC is also supported on RV32E, while GHC isn't since there is only one
avaiable register.