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