Add some very basic support for the Intel32 ABI.

In 32-bit mode, all function arguments are passed on the stack, not in
registers.

This ABI support is not complete or properly tested, but at least it
doesn't try to pass arguments in r8.
This commit is contained in:
Jakob Stoklund Olesen
2017-09-27 11:59:50 -07:00
parent b6b474a8c9
commit 84471a8431
4 changed files with 40 additions and 6 deletions

View File

@@ -106,9 +106,17 @@ impl ArgAssigner for Args {
/// Legalize `sig`.
pub fn legalize_signature(sig: &mut ir::Signature, flags: &shared_settings::Flags, _current: bool) {
let bits = if flags.is_64bit() { 64 } else { 32 };
let bits;
let mut args;
if flags.is_64bit() {
bits = 64;
args = Args::new(bits, &ARG_GPRS, 8);
} else {
bits = 32;
args = Args::new(bits, &[], 0);
}
let mut args = Args::new(bits, &ARG_GPRS, 8);
legalize_args(&mut sig.argument_types, &mut args);
let mut rets = Args::new(bits, &RET_GPRS, 2);