authorgravatar for sreeharisreedev1@gmail.comSreehari S <sreeharisreedev1@gmail.com> 2021-04-08 21:00:53-07:00
committergravatar for sreeharisreedev1@gmail.comSreehari S <sreeharisreedev1@gmail.com> 2021-04-08 21:00:53-07:00
log9ebdbca379fb71da7236e7534e1d3465f7fb151f
tree2dc10ac2490a756c8c568259ee0984e053da2d71
parent9f744f19e7036df9a410f780f3394f6669b8079e

callconv: add SysV


6 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};
169170
170/// This data structure is used by the Zig language code generation and171/// 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};
8889
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 case CallingConventionSysV:
1975 if (g->zig_target->arch != ZigLLVM_x86_64)
1976 allowed_platforms = "x86_64";
1977 break;
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:
...@@ -9101,6 +9105,7 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {...@@ -9101,6 +9105,7 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
9101 static_assert(CallingConventionAPCS == 11, "");9105 static_assert(CallingConventionAPCS == 11, "");
9102 static_assert(CallingConventionAAPCS == 12, "");9106 static_assert(CallingConventionAAPCS == 12, "");
9103 static_assert(CallingConventionAAPCSVFP == 13, "");9107 static_assert(CallingConventionAAPCSVFP == 13, "");
9108 static_assert(CallingConventionSysV == 14, "");
91049109
9105 static_assert(BuiltinPtrSizeOne == 0, "");9110 static_assert(BuiltinPtrSizeOne == 0, "");
9106 static_assert(BuiltinPtrSizeMany == 1, "");9111 static_assert(BuiltinPtrSizeMany == 1, "");
src/stage1/ir.cpp+1
...@@ -19223,6 +19223,7 @@ static IrInstGen *ir_analyze_instruction_export(IrAnalyze *ira, IrInstSrcExport...@@ -19223,6 +19223,7 @@ static IrInstGen *ir_analyze_instruction_export(IrAnalyze *ira, IrInstSrcExport
19223 case CallingConventionAPCS:19223 case CallingConventionAPCS:
19224 case CallingConventionAAPCS:19224 case CallingConventionAAPCS:
19225 case CallingConventionAAPCSVFP:19225 case CallingConventionAAPCSVFP:
19226 case CallingConventionSysV:
19226 add_fn_export(ira->codegen, fn_entry, buf_ptr(symbol_name), global_linkage_id, cc);19227 add_fn_export(ira->codegen, fn_entry, buf_ptr(symbol_name), global_linkage_id, cc);
19227 fn_entry->section_name = section_name;19228 fn_entry->section_name = section_name;
19228 break;19229 break;
src/translate_c.zig+1
...@@ -4381,6 +4381,7 @@ fn transCC(...@@ -4381,6 +4381,7 @@ fn transCC(
4381 .X86ThisCall => return CallingConvention.Thiscall,4381 .X86ThisCall => return CallingConvention.Thiscall,
4382 .AAPCS => return CallingConvention.AAPCS,4382 .AAPCS => return CallingConvention.AAPCS,
4383 .AAPCS_VFP => return CallingConvention.AAPCSVFP,4383 .AAPCS_VFP => return CallingConvention.AAPCSVFP,
4384 .X86_64SysV => return CallingConvention.SysV,
4384 else => return fail(4385 else => return fail(
4385 c,4386 c,
4386 error.UnsupportedType,4387 error.UnsupportedType,