| author | |
| committer | |
| log | 2c9ed6daee002d759332b74bcb875c946e4a02e0 |
| tree | 3da50d4ec3ed65e786b3e574997d2fdb0ca0e200 |
| parent | bc06e19828428ed9c2fc3698f418d46e62e327f5 |
| parent | 906ac7b2f9ef9a485c45884d71b6e30379084641 |
| signature |
callconv: add SysV6 files changed, 16 insertions(+), 0 deletions(-)
lib/std/builtin.zig+1| ... | ... | @@ -165,6 +165,7 @@ pub const CallingConvention = enum { |
| 165 | 165 | APCS, |
| 166 | 166 | AAPCS, |
| 167 | 167 | AAPCSVFP, |
| 168 | SysV | |
| 168 | 169 | }; |
| 169 | 170 | |
| 170 | 171 | /// This data structure is used by the Zig language code generation and |
src/stage1/all_types.hpp+1| ... | ... | @@ -84,6 +84,7 @@ enum CallingConvention { |
| 84 | 84 | CallingConventionAPCS, |
| 85 | 85 | CallingConventionAAPCS, |
| 86 | 86 | CallingConventionAAPCSVFP, |
| 87 | CallingConventionSysV | |
| 87 | 88 | }; |
| 88 | 89 | |
| 89 | 90 | // This one corresponds to the builtin.zig enum. |
src/stage1/analyze.cpp+7| ... | ... | @@ -974,6 +974,7 @@ const char *calling_convention_name(CallingConvention cc) { |
| 974 | 974 | case CallingConventionAAPCS: return "AAPCS"; |
| 975 | 975 | case CallingConventionAAPCSVFP: return "AAPCSVFP"; |
| 976 | 976 | case CallingConventionInline: return "Inline"; |
| 977 | case CallingConventionSysV: return "SysV"; | |
| 977 | 978 | } |
| 978 | 979 | zig_unreachable(); |
| 979 | 980 | } |
| ... | ... | @@ -995,6 +996,7 @@ bool calling_convention_allows_zig_types(CallingConvention cc) { |
| 995 | 996 | case CallingConventionAPCS: |
| 996 | 997 | case CallingConventionAAPCS: |
| 997 | 998 | case CallingConventionAAPCSVFP: |
| 999 | case CallingConventionSysV: | |
| 998 | 1000 | return false; |
| 999 | 1001 | } |
| 1000 | 1002 | zig_unreachable(); |
| ... | ... | @@ -1969,6 +1971,10 @@ Error emit_error_unless_callconv_allowed_for_target(CodeGen *g, AstNode *source_ |
| 1969 | 1971 | case CallingConventionAAPCSVFP: |
| 1970 | 1972 | if (!target_is_arm(g->zig_target)) |
| 1971 | 1973 | allowed_platforms = "ARM"; |
| 1974 | break; | |
| 1975 | case CallingConventionSysV: | |
| 1976 | if (g->zig_target->arch != ZigLLVM_x86_64) | |
| 1977 | allowed_platforms = "x86_64"; | |
| 1972 | 1978 | } |
| 1973 | 1979 | if (allowed_platforms != nullptr) { |
| 1974 | 1980 | add_node_error(g, source_node, buf_sprintf( |
| ... | ... | @@ -3805,6 +3811,7 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) { |
| 3805 | 3811 | case CallingConventionAPCS: |
| 3806 | 3812 | case CallingConventionAAPCS: |
| 3807 | 3813 | case CallingConventionAAPCSVFP: |
| 3814 | case CallingConventionSysV: | |
| 3808 | 3815 | add_fn_export(g, fn_table_entry, buf_ptr(&fn_table_entry->symbol_name), |
| 3809 | 3816 | GlobalLinkageIdStrong, fn_cc); |
| 3810 | 3817 | break; |
src/stage1/codegen.cpp+5| ... | ... | @@ -204,6 +204,9 @@ static ZigLLVM_CallingConv get_llvm_cc(CodeGen *g, CallingConvention cc) { |
| 204 | 204 | case CallingConventionSignal: |
| 205 | 205 | assert(g->zig_target->arch == ZigLLVM_avr); |
| 206 | 206 | return ZigLLVM_AVR_SIGNAL; |
| 207 | case CallingConventionSysV: | |
| 208 | assert(g->zig_target->arch == ZigLLVM_x86_64); | |
| 209 | return ZigLLVM_X86_64_SysV; | |
| 207 | 210 | } |
| 208 | 211 | zig_unreachable(); |
| 209 | 212 | } |
| ... | ... | @@ -348,6 +351,7 @@ static bool cc_want_sret_attr(CallingConvention cc) { |
| 348 | 351 | case CallingConventionAPCS: |
| 349 | 352 | case CallingConventionAAPCS: |
| 350 | 353 | case CallingConventionAAPCSVFP: |
| 354 | case CallingConventionSysV: | |
| 351 | 355 | return true; |
| 352 | 356 | case CallingConventionAsync: |
| 353 | 357 | case CallingConventionUnspecified: |
| ... | ... | @@ -9077,6 +9081,7 @@ Buf *codegen_generate_builtin_source(CodeGen *g) { |
| 9077 | 9081 | static_assert(CallingConventionAPCS == 11, ""); |
| 9078 | 9082 | static_assert(CallingConventionAAPCS == 12, ""); |
| 9079 | 9083 | static_assert(CallingConventionAAPCSVFP == 13, ""); |
| 9084 | static_assert(CallingConventionSysV == 14, ""); | |
| 9080 | 9085 | |
| 9081 | 9086 | static_assert(BuiltinPtrSizeOne == 0, ""); |
| 9082 | 9087 | static_assert(BuiltinPtrSizeMany == 1, ""); |
src/stage1/ir.cpp+1| ... | ... | @@ -19216,6 +19216,7 @@ static IrInstGen *ir_analyze_instruction_export(IrAnalyze *ira, IrInstSrcExport |
| 19216 | 19216 | case CallingConventionAPCS: |
| 19217 | 19217 | case CallingConventionAAPCS: |
| 19218 | 19218 | case CallingConventionAAPCSVFP: |
| 19219 | case CallingConventionSysV: | |
| 19219 | 19220 | add_fn_export(ira->codegen, fn_entry, buf_ptr(symbol_name), global_linkage_id, cc); |
| 19220 | 19221 | fn_entry->section_name = section_name; |
| 19221 | 19222 | break; |
src/translate_c.zig+1| ... | ... | @@ -4416,6 +4416,7 @@ fn transCC( |
| 4416 | 4416 | .X86ThisCall => return CallingConvention.Thiscall, |
| 4417 | 4417 | .AAPCS => return CallingConvention.AAPCS, |
| 4418 | 4418 | .AAPCS_VFP => return CallingConvention.AAPCSVFP, |
| 4419 | .X86_64SysV => return CallingConvention.SysV, | |
| 4419 | 4420 | else => return fail( |
| 4420 | 4421 | c, |
| 4421 | 4422 | error.UnsupportedType, |