authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-28 22:47:57+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-11-02 10:44:18+01:00
logc217fd2b9ca06d51b8c67a7a556e61ae71a25dbb
treee9be8fff60e7b1d1d42305b9c6bfcd910a0ae60b
parent3a5142af8dcafea7062588b9d217ae82735c0bac
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

cbe: Support some more calling conventions.


2 files changed, 52 insertions(+), 0 deletions(-)

src/Zcu.zig+19
......@@ -3607,17 +3607,21 @@ pub fn callconvSupported(zcu: *Zcu, cc: std.builtin.CallingConvention) union(enu
36073607 .x86_64_vectorcall,
36083608 .x86_64_regcall_v3_sysv,
36093609 .x86_64_regcall_v4_win,
3610 .x86_64_interrupt,
36103611 .x86_fastcall,
36113612 .x86_thiscall,
36123613 .x86_vectorcall,
36133614 .x86_regcall_v3,
36143615 .x86_regcall_v4_win,
3616 .x86_interrupt,
36153617 .aarch64_vfabi,
36163618 .aarch64_vfabi_sve,
36173619 .arm_aapcs,
3620 .csky_interrupt,
36183621 .riscv64_lp64_v,
36193622 .riscv32_ilp32_v,
36203623 .m68k_rtd,
3624 .m68k_interrupt,
36213625 => |opts| opts.incoming_stack_alignment == null,
36223626
36233627 .arm_aapcs_vfp,
......@@ -3625,11 +3629,26 @@ pub fn callconvSupported(zcu: *Zcu, cc: std.builtin.CallingConvention) union(enu
36253629 .arm_aapcs16_vfp,
36263630 => |opts| opts.incoming_stack_alignment == null and target.os.tag == .watchos,
36273631
3632 .arm_interrupt,
3633 => |opts| opts.incoming_stack_alignment == null,
3634
3635 .mips_interrupt,
3636 .mips64_interrupt,
3637 => |opts| opts.incoming_stack_alignment == null,
3638
3639 .riscv32_interrupt,
3640 .riscv64_interrupt,
3641 => |opts| opts.incoming_stack_alignment == null,
3642
36283643 .x86_sysv,
36293644 .x86_win,
36303645 .x86_stdcall,
36313646 => |opts| opts.incoming_stack_alignment == null and opts.register_params == 0,
36323647
3648 .avr_interrupt,
3649 .avr_signal,
3650 => true,
3651
36333652 .naked => true,
36343653
36353654 else => false,
src/codegen/c.zig+33
......@@ -7622,11 +7622,44 @@ fn toCallingConvention(cc: std.builtin.CallingConvention, zcu: *Zcu) ?[]const u8
76227622
76237623 .aarch64_vfabi => "aarch64_vector_pcs",
76247624 .aarch64_vfabi_sve => "aarch64_sve_pcs",
7625
76257626 .arm_aapcs => "pcs(\"aapcs\")",
76267627 .arm_aapcs_vfp, .arm_aapcs16_vfp => "pcs(\"aapcs-vfp\")",
7628
7629 .arm_interrupt => |opts| switch (opts.type) {
7630 .generic => "interrupt",
7631 .irq => "interrupt(\"IRQ\")",
7632 .fiq => "interrupt(\"FIQ\")",
7633 .swi => "interrupt(\"SWI\")",
7634 .abort => "interrupt(\"ABORT\")",
7635 .undef => "interrupt(\"UNDEF\")",
7636 },
7637
7638 .avr_signal => "signal",
7639
7640 .mips_interrupt,
7641 .mips64_interrupt,
7642 => |opts| switch (opts.mode) {
7643 inline else => |m| "interrupt(\"" ++ @tagName(m) ++ "\")",
7644 },
7645
76277646 .riscv64_lp64_v, .riscv32_ilp32_v => "riscv_vector_cc",
7647
7648 .riscv32_interrupt,
7649 .riscv64_interrupt,
7650 => |opts| switch (opts.mode) {
7651 inline else => |m| "interrupt(\"" ++ @tagName(m) ++ "\")",
7652 },
7653
76287654 .m68k_rtd => "m68k_rtd",
76297655
7656 .avr_interrupt,
7657 .csky_interrupt,
7658 .m68k_interrupt,
7659 .x86_interrupt,
7660 .x86_64_interrupt,
7661 => "interrupt",
7662
76307663 else => unreachable, // `Zcu.callconvSupported`
76317664 };
76327665}