| author | |
| committer | |
| log | 9ebdbca379fb71da7236e7534e1d3465f7fb151f |
| tree | 2dc10ac2490a756c8c568259ee0984e053da2d71 |
| parent | 9f744f19e7036df9a410f780f3394f6669b8079e |
6 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 | case CallingConventionSysV: | |
| 1975 | if (g->zig_target->arch != ZigLLVM_x86_64) | |
| 1976 | allowed_platforms = "x86_64"; | |
| 1977 | break; | |
| 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: |
| ... | ... | @@ -9101,6 +9105,7 @@ Buf *codegen_generate_builtin_source(CodeGen *g) { |
| 9101 | 9105 | static_assert(CallingConventionAPCS == 11, ""); |
| 9102 | 9106 | static_assert(CallingConventionAAPCS == 12, ""); |
| 9103 | 9107 | static_assert(CallingConventionAAPCSVFP == 13, ""); |
| 9108 | static_assert(CallingConventionSysV == 14, ""); | |
| 9104 | 9109 | |
| 9105 | 9110 | static_assert(BuiltinPtrSizeOne == 0, ""); |
| 9106 | 9111 | static_assert(BuiltinPtrSizeMany == 1, ""); |
src/stage1/ir.cpp+1| ... | ... | @@ -19223,6 +19223,7 @@ static IrInstGen *ir_analyze_instruction_export(IrAnalyze *ira, IrInstSrcExport |
| 19223 | 19223 | case CallingConventionAPCS: |
| 19224 | 19224 | case CallingConventionAAPCS: |
| 19225 | 19225 | case CallingConventionAAPCSVFP: |
| 19226 | case CallingConventionSysV: | |
| 19226 | 19227 | add_fn_export(ira->codegen, fn_entry, buf_ptr(symbol_name), global_linkage_id, cc); |
| 19227 | 19228 | fn_entry->section_name = section_name; |
| 19228 | 19229 | break; |
src/translate_c.zig+1| ... | ... | @@ -4381,6 +4381,7 @@ fn transCC( |
| 4381 | 4381 | .X86ThisCall => return CallingConvention.Thiscall, |
| 4382 | 4382 | .AAPCS => return CallingConvention.AAPCS, |
| 4383 | 4383 | .AAPCS_VFP => return CallingConvention.AAPCSVFP, |
| 4384 | .X86_64SysV => return CallingConvention.SysV, | |
| 4384 | 4385 | else => return fail( |
| 4385 | 4386 | c, |
| 4386 | 4387 | error.UnsupportedType, |