Implement a Windows Baldrdash calling convention;
This commit is contained in:
@@ -373,7 +373,8 @@ mod tests {
|
||||
CallConv::Cold,
|
||||
CallConv::SystemV,
|
||||
CallConv::WindowsFastcall,
|
||||
CallConv::Baldrdash,
|
||||
CallConv::BaldrdashSystemV,
|
||||
CallConv::BaldrdashWindows,
|
||||
] {
|
||||
assert_eq!(Ok(cc), cc.to_string().parse())
|
||||
}
|
||||
@@ -381,16 +382,19 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn signatures() {
|
||||
let mut sig = Signature::new(CallConv::Baldrdash);
|
||||
assert_eq!(sig.to_string(), "() baldrdash");
|
||||
let mut sig = Signature::new(CallConv::BaldrdashSystemV);
|
||||
assert_eq!(sig.to_string(), "() baldrdash_system_v");
|
||||
sig.params.push(AbiParam::new(I32));
|
||||
assert_eq!(sig.to_string(), "(i32) baldrdash");
|
||||
assert_eq!(sig.to_string(), "(i32) baldrdash_system_v");
|
||||
sig.returns.push(AbiParam::new(F32));
|
||||
assert_eq!(sig.to_string(), "(i32) -> f32 baldrdash");
|
||||
assert_eq!(sig.to_string(), "(i32) -> f32 baldrdash_system_v");
|
||||
sig.params.push(AbiParam::new(I32.by(4).unwrap()));
|
||||
assert_eq!(sig.to_string(), "(i32, i32x4) -> f32 baldrdash");
|
||||
assert_eq!(sig.to_string(), "(i32, i32x4) -> f32 baldrdash_system_v");
|
||||
sig.returns.push(AbiParam::new(B8));
|
||||
assert_eq!(sig.to_string(), "(i32, i32x4) -> f32, b8 baldrdash");
|
||||
assert_eq!(
|
||||
sig.to_string(),
|
||||
"(i32, i32x4) -> f32, b8 baldrdash_system_v"
|
||||
);
|
||||
|
||||
// Order does not matter.
|
||||
sig.params[0].location = ArgumentLoc::Stack(24);
|
||||
@@ -399,7 +403,7 @@ mod tests {
|
||||
// Writing ABI-annotated signatures.
|
||||
assert_eq!(
|
||||
sig.to_string(),
|
||||
"(i32 [24], i32x4 [8]) -> f32, b8 baldrdash"
|
||||
"(i32 [24], i32x4 [8]) -> f32, b8 baldrdash_system_v"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ fn make_funcref_for_inst(
|
||||
sig.returns.push(AbiParam::new(func.dfg.value_type(v)));
|
||||
}
|
||||
|
||||
if call_conv == CallConv::Baldrdash {
|
||||
if call_conv.extends_baldrdash() {
|
||||
// Adds the special VMContext parameter to the signature.
|
||||
sig.params.push(AbiParam::special(
|
||||
isa.pointer_type(),
|
||||
|
||||
Reference in New Issue
Block a user