diff --git a/lib/std/Target.zig b/lib/std/Target.zig index 17fd85e035125edbfe9fdc57c682802954adec18..985e67b951b56315fd1d3ada71ed7d2ed75372bf 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -2033,6 +2033,9 @@ pub const Cpu = struct { .ez80_cet, .ez80_tiflags, => &.{.ez80}, + + .spork8, + => &.{.spork8}, }; } }; @@ -3818,7 +3821,7 @@ pub fn cCallingConvention(target: *const Target) ?std.builtin.CallingConvention .nvptx, .nvptx64 => .nvptx_device, .spirv32, .spirv64 => .spirv_device, .ez80 => .ez80_cet, - .spork8 => .naked, + .spork8 => .spork8, }; } diff --git a/lib/std/lang.zig b/lib/std/lang.zig index 471b627ea661d00a86705760a82abccebd7a1d20..c73e40cc9278b4c524296be0684a31509b6905b9 100644 --- a/lib/std/lang.zig +++ b/lib/std/lang.zig @@ -391,6 +391,10 @@ pub const CallingConvention = union(enum(u8)) { ez80_cet, ez80_tiflags, + // Calling convention used by + // [snake2p example program](https://github.com/benanderman/spork-8/blob/1bce10a2c3a3888a3f4ca8208112afbc5973fda4/Code/programs/snake2p.asm) + spork8, + /// Options shared across most calling conventions. pub const CommonOptions = struct { /// The boundary the stack is aligned to when the function is called. diff --git a/src/Zcu.zig b/src/Zcu.zig index f77f59a478c419b6517a69becac310f9fe444ad8..1d309e0d599476fec9b3a5780b6ca1fe5615f5b0 100644 --- a/src/Zcu.zig +++ b/src/Zcu.zig @@ -4699,7 +4699,7 @@ pub fn callconvSupported(zcu: *Zcu, cc: std.lang.CallingConvention) union(enum) else => false, }, .zsf_spork8 => switch (cc) { - .naked => true, + .spork8, .naked => true, else => false, }, }; diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 0de67cfaaccf5f63aec1140a8f7c4fdbce8f49e3..ec493f5540a0b55aa49cff29746dfd73c4859e29 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -4393,6 +4393,7 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const .spirv_vertex, .spirv_task, .spirv_mesh, + .spork8, => null, }; }