diff options
Diffstat (limited to 'src/codegen/c.zig')
| -rw-r--r-- | src/codegen/c.zig | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index c1adbfe6cf..18b3a32c36 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -1459,7 +1459,12 @@ pub const DeclGen = struct { fn renderFunctionSignature(dg: *DeclGen, w: anytype, kind: TypedefKind, export_index: u32) !void { const fn_info = dg.decl.ty.fnInfo(); - if (fn_info.cc == .Naked) try w.writeAll("zig_naked "); + if (fn_info.cc == .Naked) { + switch (kind) { + .Forward => try w.writeAll("zig_naked_decl "), + .Complete => try w.writeAll("zig_naked "), + } + } if (dg.decl.val.castTag(.function)) |func_payload| if (func_payload.data.is_cold) try w.writeAll("zig_cold "); @@ -1469,6 +1474,13 @@ pub const DeclGen = struct { try dg.renderType(w, ret_ty, kind); try w.writeByte(' '); + + if (toCallingConvention(fn_info.cc)) |call_conv| { + try w.print("zig_callconv({s}) ", .{call_conv}); + } + + if (fn_info.alignment > 0 and kind == .Complete) try w.print(" zig_align_fn({})", .{ fn_info.alignment }); + try dg.renderDeclName(w, dg.decl_index, export_index); try w.writeByte('('); @@ -1488,7 +1500,7 @@ pub const DeclGen = struct { try dg.renderType(w, Type.void, kind); } try w.writeByte(')'); - if (fn_info.alignment > 0) try w.print(" zig_align_fn({})", .{fn_info.alignment}); + if (fn_info.alignment > 0 and kind == .Forward) try w.print(" zig_align_fn({})", .{fn_info.alignment}); } fn renderPtrToFnTypedef(dg: *DeclGen, t: Type) error{ OutOfMemory, AnalysisFail }![]const u8 { @@ -7035,6 +7047,15 @@ fn writeMemoryOrder(w: anytype, order: std.builtin.AtomicOrder) !void { return w.writeAll(toMemoryOrder(order)); } +fn toCallingConvention(call_conv: std.builtin.CallingConvention) ?[]const u8 { + return switch (call_conv) { + .Stdcall => "stdcall", + .Fastcall => "fastcall", + .Vectorcall => "vectorcall", + else => null, + }; +} + fn toAtomicRmwSuffix(order: std.builtin.AtomicRmwOp) []const u8 { return switch (order) { .Xchg => "xchg", |
