diff --git a/lib/std/Target.zig b/lib/std/Target.zig index b99e2b366ed7aab50451f750c8d449d7394f3731..257113f477c904d11aea0ec193ee15e6561ce348 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 6feacbc8c89f0f7cff41739ba4f18451d582c00f..84b228d6851152b1bfc6e7db161bf8b91a382174 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 47b53392228816a78977f7fc62345c41b9316d32..62e6942a5b2f793928420dca5d38fb8ca672962c 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 6fa200561c42fa0429bb9b87abae7350d95f18a6..9839db66591a121aed6262e6d14eb212e4ab7579 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 cf0519e1f1089cb9f831f7283439be2bf67708c6..a47d031520858c0006e8be2a4fdc2a6f473a2998 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 3b3febf27e8f0b47906fb16f1280d6b99d8862db..9d23178887762cde37e37b445bd6f02d2b388d28 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 2ecac73c1c808e5e0ddddeb07633fe96eedfd830..cc440905f0e070bfc8983f239759a6c466871616 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,