@@ -263,76 +263,66 @@ static const char *get_mangled_name(CodeGen *g, const char *original_name, bool
263
263
}
264
264
}
265
265
266
- static LLVMCallConv get_llvm_cc (CodeGen *g, CallingConvention cc) {
266
+ static ZigLLVM_CallingConv get_llvm_cc (CodeGen *g, CallingConvention cc) {
267
267
switch (cc) {
268
- case CallingConventionUnspecified: return LLVMFastCallConv;
269
- case CallingConventionC: return LLVMCCallConv;
268
+ case CallingConventionUnspecified:
269
+ return ZigLLVM_Fast;
270
+ case CallingConventionC:
271
+ return ZigLLVM_C;
270
272
case CallingConventionCold:
271
- // cold calling convention only works on x86.
272
- if (g->zig_target ->arch == ZigLLVM_x86 ||
273
- g->zig_target ->arch == ZigLLVM_x86_64)
274
- {
275
- // cold calling convention is not supported on windows
276
- if (g->zig_target ->os == OsWindows) {
277
- return LLVMCCallConv;
278
- } else {
279
- return LLVMColdCallConv;
280
- }
281
- } else {
282
- return LLVMCCallConv;
283
- }
284
- break ;
273
+ if ((g->zig_target ->arch == ZigLLVM_x86 ||
274
+ g->zig_target ->arch == ZigLLVM_x86_64) &&
275
+ g->zig_target ->os != OsWindows)
276
+ return ZigLLVM_Cold;
277
+ return ZigLLVM_C;
285
278
case CallingConventionNaked:
286
279
zig_unreachable ();
287
280
case CallingConventionStdcall:
288
281
if (g->zig_target ->arch == ZigLLVM_x86)
289
- return LLVMX86StdcallCallConv ;
290
- return LLVMCCallConv ;
282
+ return ZigLLVM_X86_StdCall ;
283
+ return ZigLLVM_C ;
291
284
case CallingConventionFastcall:
292
285
if (g->zig_target ->arch == ZigLLVM_x86)
293
- return LLVMX86FastcallCallConv ;
294
- return LLVMCCallConv ;
286
+ return ZigLLVM_X86_FastCall ;
287
+ return ZigLLVM_C ;
295
288
case CallingConventionVectorcall:
296
289
if (g->zig_target ->arch == ZigLLVM_x86)
297
- return LLVMX86VectorCallCallConv;
298
- // XXX Enable this when the C API exports this enum member too
299
- #if 0
290
+ return ZigLLVM_X86_VectorCall;
300
291
if (target_is_arm (g->zig_target ) &&
301
292
target_arch_pointer_bit_width (g->zig_target ->arch ) == 64 )
302
- return LLVMAARCH64VectorCallCallConv;
303
- #endif
304
- return LLVMCCallConv;
293
+ return ZigLLVM_AArch64_VectorCall;
294
+ return ZigLLVM_C;
305
295
case CallingConventionThiscall:
306
296
if (g->zig_target ->arch == ZigLLVM_x86)
307
- return LLVMX86ThisCallCallConv ;
308
- return LLVMCCallConv ;
297
+ return ZigLLVM_X86_ThisCall ;
298
+ return ZigLLVM_C ;
309
299
case CallingConventionAsync:
310
- return LLVMFastCallConv ;
300
+ return ZigLLVM_Fast ;
311
301
case CallingConventionAPCS:
312
302
if (target_is_arm (g->zig_target ))
313
- return LLVMARMAPCSCallConv ;
314
- return LLVMCCallConv ;
303
+ return ZigLLVM_ARM_APCS ;
304
+ return ZigLLVM_C ;
315
305
case CallingConventionAAPCS:
316
306
if (target_is_arm (g->zig_target ))
317
- return LLVMARMAAPCSCallConv ;
318
- return LLVMCCallConv ;
307
+ return ZigLLVM_ARM_AAPCS ;
308
+ return ZigLLVM_C ;
319
309
case CallingConventionAAPCSVFP:
320
310
if (target_is_arm (g->zig_target ))
321
- return LLVMARMAAPCSVFPCallConv ;
322
- return LLVMCCallConv ;
311
+ return ZigLLVM_ARM_AAPCS_VFP ;
312
+ return ZigLLVM_C ;
323
313
case CallingConventionInterrupt:
324
314
if (g->zig_target ->arch == ZigLLVM_x86 ||
325
315
g->zig_target ->arch == ZigLLVM_x86_64)
326
- return LLVMX86INTRCallConv ;
316
+ return ZigLLVM_X86_INTR ;
327
317
if (g->zig_target ->arch == ZigLLVM_avr)
328
- return LLVMAVRINTRCallConv ;
318
+ return ZigLLVM_AVR_INTR ;
329
319
if (g->zig_target ->arch == ZigLLVM_msp430)
330
- return LLVMMSP430INTRCallConv ;
331
- return LLVMCCallConv ;
320
+ return ZigLLVM_MSP430_INTR ;
321
+ return ZigLLVM_C ;
332
322
case CallingConventionSignal:
333
323
if (g->zig_target ->arch == ZigLLVM_avr)
334
- return LLVMAVRSIGNALCallConv ;
335
- return LLVMCCallConv ;
324
+ return ZigLLVM_AVR_SIGNAL ;
325
+ return ZigLLVM_C ;
336
326
}
337
327
zig_unreachable ();
338
328
}
@@ -529,7 +519,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
529
519
if (cc == CallingConventionNaked) {
530
520
addLLVMFnAttr (llvm_fn, " naked" );
531
521
} else {
532
- LLVMSetFunctionCallConv (llvm_fn, get_llvm_cc (g, fn_type->data .fn .fn_type_id .cc ));
522
+ ZigLLVMFunctionSetCallingConv (llvm_fn, get_llvm_cc (g, fn_type->data .fn .fn_type_id .cc ));
533
523
}
534
524
535
525
bool want_cold = fn->is_cold || cc == CallingConventionCold;
@@ -1024,7 +1014,7 @@ static void gen_panic(CodeGen *g, LLVMValueRef msg_arg, LLVMValueRef stack_trace
1024
1014
{
1025
1015
assert (g->panic_fn != nullptr );
1026
1016
LLVMValueRef fn_val = fn_llvm_value (g, g->panic_fn );
1027
- LLVMCallConv llvm_cc = get_llvm_cc (g, g->panic_fn ->type_entry ->data .fn .fn_type_id .cc );
1017
+ ZigLLVM_CallingConv llvm_cc = get_llvm_cc (g, g->panic_fn ->type_entry ->data .fn .fn_type_id .cc );
1028
1018
if (stack_trace_arg == nullptr ) {
1029
1019
stack_trace_arg = LLVMConstNull (get_llvm_type (g, ptr_to_stack_trace_type (g)));
1030
1020
}
@@ -1135,7 +1125,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {
1135
1125
LLVMValueRef fn_val = LLVMAddFunction (g->module , fn_name, fn_type_ref);
1136
1126
addLLVMFnAttr (fn_val, " alwaysinline" );
1137
1127
LLVMSetLinkage (fn_val, LLVMInternalLinkage);
1138
- LLVMSetFunctionCallConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
1128
+ ZigLLVMFunctionSetCallingConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
1139
1129
addLLVMFnAttr (fn_val, " nounwind" );
1140
1130
add_uwtable_attr (g, fn_val);
1141
1131
// Error return trace memory is in the stack, which is impossible to be at address 0
@@ -1216,7 +1206,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {
1216
1206
addLLVMFnAttr (fn_val, " noinline" ); // so that we can look at return address
1217
1207
addLLVMFnAttr (fn_val, " cold" );
1218
1208
LLVMSetLinkage (fn_val, LLVMInternalLinkage);
1219
- LLVMSetFunctionCallConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
1209
+ ZigLLVMFunctionSetCallingConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
1220
1210
addLLVMFnAttr (fn_val, " nounwind" );
1221
1211
add_uwtable_attr (g, fn_val);
1222
1212
if (codegen_have_frame_pointer (g)) {
@@ -1300,7 +1290,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
1300
1290
addLLVMFnAttr (fn_val, " noreturn" );
1301
1291
addLLVMFnAttr (fn_val, " cold" );
1302
1292
LLVMSetLinkage (fn_val, LLVMInternalLinkage);
1303
- LLVMSetFunctionCallConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
1293
+ ZigLLVMFunctionSetCallingConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
1304
1294
addLLVMFnAttr (fn_val, " nounwind" );
1305
1295
add_uwtable_attr (g, fn_val);
1306
1296
if (codegen_have_frame_pointer (g)) {
@@ -2193,7 +2183,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) {
2193
2183
const char *fn_name = get_mangled_name (g, " __zig_merge_error_return_traces" , false );
2194
2184
LLVMValueRef fn_val = LLVMAddFunction (g->module , fn_name, fn_type_ref);
2195
2185
LLVMSetLinkage (fn_val, LLVMInternalLinkage);
2196
- LLVMSetFunctionCallConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
2186
+ ZigLLVMFunctionSetCallingConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
2197
2187
addLLVMFnAttr (fn_val, " nounwind" );
2198
2188
add_uwtable_attr (g, fn_val);
2199
2189
addLLVMArgAttr (fn_val, (unsigned )0 , " noalias" );
@@ -2370,7 +2360,7 @@ static LLVMValueRef gen_resume(CodeGen *g, LLVMValueRef fn_val, LLVMValueRef tar
2370
2360
LLVMValueRef arg_val = LLVMConstSub (LLVMConstAllOnes (usize_type_ref),
2371
2361
LLVMConstInt (usize_type_ref, resume_id, false ));
2372
2362
LLVMValueRef args[] = {target_frame_ptr, arg_val};
2373
- return ZigLLVMBuildCall (g->builder , fn_val, args, 2 , LLVMFastCallConv , ZigLLVM_CallAttrAuto, " " );
2363
+ return ZigLLVMBuildCall (g->builder , fn_val, args, 2 , ZigLLVM_Fast , ZigLLVM_CallAttrAuto, " " );
2374
2364
}
2375
2365
2376
2366
static LLVMBasicBlockRef gen_suspend_begin (CodeGen *g, const char *name_hint) {
@@ -4260,7 +4250,7 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr
4260
4250
break ;
4261
4251
}
4262
4252
4263
- LLVMCallConv llvm_cc = get_llvm_cc (g, cc);
4253
+ ZigLLVM_CallingConv llvm_cc = get_llvm_cc (g, cc);
4264
4254
LLVMValueRef result;
4265
4255
4266
4256
if (callee_is_async) {
@@ -4970,7 +4960,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {
4970
4960
buf_ptr (buf_sprintf (" __zig_tag_name_%s" , buf_ptr (&enum_type->name ))), false );
4971
4961
LLVMValueRef fn_val = LLVMAddFunction (g->module , fn_name, fn_type_ref);
4972
4962
LLVMSetLinkage (fn_val, LLVMInternalLinkage);
4973
- LLVMSetFunctionCallConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
4963
+ ZigLLVMFunctionSetCallingConv (fn_val, get_llvm_cc (g, CallingConventionUnspecified));
4974
4964
addLLVMFnAttr (fn_val, " nounwind" );
4975
4965
add_uwtable_attr (g, fn_val);
4976
4966
if (codegen_have_frame_pointer (g)) {
0 commit comments