mirror of
https://github.com/ziglang/zig.git
synced 2026-01-03 03:53:20 +00:00
cbe: Support some more calling conventions.
This commit is contained in:
parent
3a5142af8d
commit
c217fd2b9c
19
src/Zcu.zig
19
src/Zcu.zig
@ -3607,17 +3607,21 @@ pub fn callconvSupported(zcu: *Zcu, cc: std.builtin.CallingConvention) union(enu
|
||||
.x86_64_vectorcall,
|
||||
.x86_64_regcall_v3_sysv,
|
||||
.x86_64_regcall_v4_win,
|
||||
.x86_64_interrupt,
|
||||
.x86_fastcall,
|
||||
.x86_thiscall,
|
||||
.x86_vectorcall,
|
||||
.x86_regcall_v3,
|
||||
.x86_regcall_v4_win,
|
||||
.x86_interrupt,
|
||||
.aarch64_vfabi,
|
||||
.aarch64_vfabi_sve,
|
||||
.arm_aapcs,
|
||||
.csky_interrupt,
|
||||
.riscv64_lp64_v,
|
||||
.riscv32_ilp32_v,
|
||||
.m68k_rtd,
|
||||
.m68k_interrupt,
|
||||
=> |opts| opts.incoming_stack_alignment == null,
|
||||
|
||||
.arm_aapcs_vfp,
|
||||
@ -3625,11 +3629,26 @@ pub fn callconvSupported(zcu: *Zcu, cc: std.builtin.CallingConvention) union(enu
|
||||
.arm_aapcs16_vfp,
|
||||
=> |opts| opts.incoming_stack_alignment == null and target.os.tag == .watchos,
|
||||
|
||||
.arm_interrupt,
|
||||
=> |opts| opts.incoming_stack_alignment == null,
|
||||
|
||||
.mips_interrupt,
|
||||
.mips64_interrupt,
|
||||
=> |opts| opts.incoming_stack_alignment == null,
|
||||
|
||||
.riscv32_interrupt,
|
||||
.riscv64_interrupt,
|
||||
=> |opts| opts.incoming_stack_alignment == null,
|
||||
|
||||
.x86_sysv,
|
||||
.x86_win,
|
||||
.x86_stdcall,
|
||||
=> |opts| opts.incoming_stack_alignment == null and opts.register_params == 0,
|
||||
|
||||
.avr_interrupt,
|
||||
.avr_signal,
|
||||
=> true,
|
||||
|
||||
.naked => true,
|
||||
|
||||
else => false,
|
||||
|
||||
@ -7622,11 +7622,44 @@ fn toCallingConvention(cc: std.builtin.CallingConvention, zcu: *Zcu) ?[]const u8
|
||||
|
||||
.aarch64_vfabi => "aarch64_vector_pcs",
|
||||
.aarch64_vfabi_sve => "aarch64_sve_pcs",
|
||||
|
||||
.arm_aapcs => "pcs(\"aapcs\")",
|
||||
.arm_aapcs_vfp, .arm_aapcs16_vfp => "pcs(\"aapcs-vfp\")",
|
||||
|
||||
.arm_interrupt => |opts| switch (opts.type) {
|
||||
.generic => "interrupt",
|
||||
.irq => "interrupt(\"IRQ\")",
|
||||
.fiq => "interrupt(\"FIQ\")",
|
||||
.swi => "interrupt(\"SWI\")",
|
||||
.abort => "interrupt(\"ABORT\")",
|
||||
.undef => "interrupt(\"UNDEF\")",
|
||||
},
|
||||
|
||||
.avr_signal => "signal",
|
||||
|
||||
.mips_interrupt,
|
||||
.mips64_interrupt,
|
||||
=> |opts| switch (opts.mode) {
|
||||
inline else => |m| "interrupt(\"" ++ @tagName(m) ++ "\")",
|
||||
},
|
||||
|
||||
.riscv64_lp64_v, .riscv32_ilp32_v => "riscv_vector_cc",
|
||||
|
||||
.riscv32_interrupt,
|
||||
.riscv64_interrupt,
|
||||
=> |opts| switch (opts.mode) {
|
||||
inline else => |m| "interrupt(\"" ++ @tagName(m) ++ "\")",
|
||||
},
|
||||
|
||||
.m68k_rtd => "m68k_rtd",
|
||||
|
||||
.avr_interrupt,
|
||||
.csky_interrupt,
|
||||
.m68k_interrupt,
|
||||
.x86_interrupt,
|
||||
.x86_64_interrupt,
|
||||
=> "interrupt",
|
||||
|
||||
else => unreachable, // `Zcu.callconvSupported`
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user