From abf40caeb7d85d8fc842fe82215b19902b749481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Mon, 20 Oct 2025 18:37:13 +0200 Subject: [PATCH] std.builtin: add CallingConvention.msp430_interrupt Supported by LLVM and CBE. --- lib/std/Target.zig | 1 + lib/std/builtin.zig | 1 + src/Sema.zig | 3 +++ src/Zcu.zig | 1 + src/codegen/c.zig | 1 + src/codegen/llvm.zig | 1 + src/link/Dwarf.zig | 1 + 7 files changed, 9 insertions(+) diff --git a/lib/std/Target.zig b/lib/std/Target.zig index b99e2b366e..257113f477 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -1907,6 +1907,7 @@ pub const Cpu = struct { => &.{ .microblaze, .microblazeel }, .msp430_eabi, + .msp430_interrupt, => &.{.msp430}, .or1k_sysv, diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig index 6feacbc8c8..84b228d685 100644 --- a/lib/std/builtin.zig +++ b/lib/std/builtin.zig @@ -326,6 +326,7 @@ pub const CallingConvention = union(enum(u8)) { /// The standard `msp430` calling convention. msp430_eabi: CommonOptions, + msp430_interrupt: CommonOptions, /// The standard `or1k` calling convention. or1k_sysv: CommonOptions, diff --git a/src/Sema.zig b/src/Sema.zig index 47b5339222..62e6942a5b 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -9137,6 +9137,7 @@ fn callConvIsCallable(cc: std.builtin.CallingConvention.Tag) bool { .m68k_interrupt, .mips_interrupt, .mips64_interrupt, + .msp430_interrupt, .riscv32_interrupt, .riscv64_interrupt, .x86_interrupt, @@ -9301,6 +9302,7 @@ fn funcCommon( .avr_interrupt, .csky_interrupt, .m68k_interrupt, + .msp430_interrupt, .avr_signal, => return sema.fail(block, param_src, "parameters are not allowed with '{s}' calling convention", .{@tagName(cc)}), else => {}, @@ -9528,6 +9530,7 @@ fn finishFunc( .avr_interrupt, .csky_interrupt, .m68k_interrupt, + .msp430_interrupt, .avr_signal, => if (return_type.zigTypeTag(zcu) != .void and return_type.zigTypeTag(zcu) != .noreturn) { return sema.fail(block, ret_ty_src, "function with calling convention '{s}' must return 'void' or 'noreturn'", .{@tagName(cc_resolved)}); diff --git a/src/Zcu.zig b/src/Zcu.zig index 6fa200561c..9839db6659 100644 --- a/src/Zcu.zig +++ b/src/Zcu.zig @@ -4426,6 +4426,7 @@ pub fn callconvSupported(zcu: *Zcu, cc: std.builtin.CallingConvention) union(enu .riscv32_ilp32_v, .m68k_rtd, .m68k_interrupt, + .msp430_interrupt, => |opts| opts.incoming_stack_alignment == null, .arm_aapcs_vfp, diff --git a/src/codegen/c.zig b/src/codegen/c.zig index cf0519e1f1..a47d031520 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -8113,6 +8113,7 @@ fn toCallingConvention(cc: std.builtin.CallingConvention, zcu: *Zcu) ?[]const u8 .avr_interrupt, .csky_interrupt, .m68k_interrupt, + .msp430_interrupt, .x86_interrupt, .x86_64_interrupt, => "interrupt", diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 3b3febf27e..9d23178887 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -11900,6 +11900,7 @@ fn toLlvmCallConvTag(cc_tag: std.builtin.CallingConvention.Tag, target: *const s .avr_interrupt => .avr_intrcc, .m68k_rtd => .m68k_rtdcc, .m68k_interrupt => .m68k_intrcc, + .msp430_interrupt => .msp430_intrcc, .amdgcn_kernel => .amdgpu_kernel, .amdgcn_cs => .amdgpu_cs, .nvptx_device => .ptx_device, diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index 2ecac73c1c..cc440905f0 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -3925,6 +3925,7 @@ fn updateLazyType( .avr_interrupt, .csky_interrupt, .m68k_interrupt, + .msp430_interrupt, => .normal, else => .nocall,