make structs with multiple fields always return indirect in wasm c abi

This commit is contained in:
Laytan Laats
2024-07-01 00:50:10 +02:00
parent 5637ed9ecd
commit e3dde8caf8
+8 -8
View File
@@ -1378,14 +1378,14 @@ namespace lbAbiWasm {
} else if (lb_is_type_kind(return_type, LLVMStructTypeKind) || lb_is_type_kind(return_type, LLVMArrayTypeKind)) { } else if (lb_is_type_kind(return_type, LLVMStructTypeKind) || lb_is_type_kind(return_type, LLVMArrayTypeKind)) {
if (type_can_be_direct(return_type, ft->calling_convention)) { if (type_can_be_direct(return_type, ft->calling_convention)) {
return lb_arg_type_direct(return_type); return lb_arg_type_direct(return_type);
} } else if (ft->calling_convention != ProcCC_CDecl) {
i64 sz = lb_sizeof(return_type);
i64 sz = lb_sizeof(return_type); switch (sz) {
switch (sz) { case 1: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 8), nullptr, nullptr);
case 1: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 8), nullptr, nullptr); case 2: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 16), nullptr, nullptr);
case 2: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 16), nullptr, nullptr); case 4: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 32), nullptr, nullptr);
case 4: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 32), nullptr, nullptr); case 8: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 64), nullptr, nullptr);
case 8: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 64), nullptr, nullptr); }
} }
LB_ABI_MODIFY_RETURN_IF_TUPLE_MACRO(); LB_ABI_MODIFY_RETURN_IF_TUPLE_MACRO();