| author | |
| committer | |
| log | 435528a7c53adb9a8c4094d8cecacccb8228d17b |
| tree | 43734a0ffb42ff9a6dc99301ed309438d4264f26 |
| parent | e99209baf04f97dfdb9df92752224b49fc275d67 |
3 files changed, 142 insertions(+), 54 deletions(-)
src/codegen.cpp+41-51| ... | ... | @@ -262,76 +262,66 @@ static const char *get_mangled_name(CodeGen *g, const char *original_name, bool |
| 262 | 262 | } |
| 263 | 263 | } |
| 264 | 264 | |
| 265 | static LLVMCallConv get_llvm_cc(CodeGen *g, CallingConvention cc) { | |
| 265 | static ZigLLVM_CallingConv get_llvm_cc(CodeGen *g, CallingConvention cc) { | |
| 266 | 266 | switch (cc) { |
| 267 | case CallingConventionUnspecified: return LLVMFastCallConv; | |
| 268 | case CallingConventionC: return LLVMCCallConv; | |
| 267 | case CallingConventionUnspecified: | |
| 268 | return ZigLLVM_Fast; | |
| 269 | case CallingConventionC: | |
| 270 | return ZigLLVM_C; | |
| 269 | 271 | case CallingConventionCold: |
| 270 | // cold calling convention only works on x86. | |
| 271 | if (g->zig_target->arch == ZigLLVM_x86 || | |
| 272 | g->zig_target->arch == ZigLLVM_x86_64) | |
| 273 | { | |
| 274 | // cold calling convention is not supported on windows | |
| 275 | if (g->zig_target->os == OsWindows) { | |
| 276 | return LLVMCCallConv; | |
| 277 | } else { | |
| 278 | return LLVMColdCallConv; | |
| 279 | } | |
| 280 | } else { | |
| 281 | return LLVMCCallConv; | |
| 282 | } | |
| 283 | break; | |
| 272 | if ((g->zig_target->arch == ZigLLVM_x86 || | |
| 273 | g->zig_target->arch == ZigLLVM_x86_64) && | |
| 274 | g->zig_target->os != OsWindows) | |
| 275 | return ZigLLVM_Cold; | |
| 276 | return ZigLLVM_C; | |
| 284 | 277 | case CallingConventionNaked: |
| 285 | 278 | zig_unreachable(); |
| 286 | 279 | case CallingConventionStdcall: |
| 287 | 280 | if (g->zig_target->arch == ZigLLVM_x86) |
| 288 | return LLVMX86StdcallCallConv; | |
| 289 | return LLVMCCallConv; | |
| 281 | return ZigLLVM_X86_StdCall; | |
| 282 | return ZigLLVM_C; | |
| 290 | 283 | case CallingConventionFastcall: |
| 291 | 284 | if (g->zig_target->arch == ZigLLVM_x86) |
| 292 | return LLVMX86FastcallCallConv; | |
| 293 | return LLVMCCallConv; | |
| 285 | return ZigLLVM_X86_FastCall; | |
| 286 | return ZigLLVM_C; | |
| 294 | 287 | case CallingConventionVectorcall: |
| 295 | 288 | if (g->zig_target->arch == ZigLLVM_x86) |
| 296 | return LLVMX86VectorCallCallConv; | |
| 297 | // XXX Enable this when the C API exports this enum member too | |
| 298 | #if 0 | |
| 289 | return ZigLLVM_X86_VectorCall; | |
| 299 | 290 | if (target_is_arm(g->zig_target) && |
| 300 | 291 | target_arch_pointer_bit_width(g->zig_target->arch) == 64) |
| 301 | return LLVMAARCH64VectorCallCallConv; | |
| 302 | #endif | |
| 303 | return LLVMCCallConv; | |
| 292 | return ZigLLVM_AArch64_VectorCall; | |
| 293 | return ZigLLVM_C; | |
| 304 | 294 | case CallingConventionThiscall: |
| 305 | 295 | if (g->zig_target->arch == ZigLLVM_x86) |
| 306 | return LLVMX86ThisCallCallConv; | |
| 307 | return LLVMCCallConv; | |
| 296 | return ZigLLVM_X86_ThisCall; | |
| 297 | return ZigLLVM_C; | |
| 308 | 298 | case CallingConventionAsync: |
| 309 | return LLVMFastCallConv; | |
| 299 | return ZigLLVM_Fast; | |
| 310 | 300 | case CallingConventionAPCS: |
| 311 | 301 | if (target_is_arm(g->zig_target)) |
| 312 | return LLVMARMAPCSCallConv; | |
| 313 | return LLVMCCallConv; | |
| 302 | return ZigLLVM_ARM_APCS; | |
| 303 | return ZigLLVM_C; | |
| 314 | 304 | case CallingConventionAAPCS: |
| 315 | 305 | if (target_is_arm(g->zig_target)) |
| 316 | return LLVMARMAAPCSCallConv; | |
| 317 | return LLVMCCallConv; | |
| 306 | return ZigLLVM_ARM_AAPCS; | |
| 307 | return ZigLLVM_C; | |
| 318 | 308 | case CallingConventionAAPCSVFP: |
| 319 | 309 | if (target_is_arm(g->zig_target)) |
| 320 | return LLVMARMAAPCSVFPCallConv; | |
| 321 | return LLVMCCallConv; | |
| 310 | return ZigLLVM_ARM_AAPCS_VFP; | |
| 311 | return ZigLLVM_C; | |
| 322 | 312 | case CallingConventionInterrupt: |
| 323 | 313 | if (g->zig_target->arch == ZigLLVM_x86 || |
| 324 | 314 | g->zig_target->arch == ZigLLVM_x86_64) |
| 325 | return LLVMX86INTRCallConv; | |
| 315 | return ZigLLVM_X86_INTR; | |
| 326 | 316 | if (g->zig_target->arch == ZigLLVM_avr) |
| 327 | return LLVMAVRINTRCallConv; | |
| 317 | return ZigLLVM_AVR_INTR; | |
| 328 | 318 | if (g->zig_target->arch == ZigLLVM_msp430) |
| 329 | return LLVMMSP430INTRCallConv; | |
| 330 | return LLVMCCallConv; | |
| 319 | return ZigLLVM_MSP430_INTR; | |
| 320 | return ZigLLVM_C; | |
| 331 | 321 | case CallingConventionSignal: |
| 332 | 322 | if (g->zig_target->arch == ZigLLVM_avr) |
| 333 | return LLVMAVRSIGNALCallConv; | |
| 334 | return LLVMCCallConv; | |
| 323 | return ZigLLVM_AVR_SIGNAL; | |
| 324 | return ZigLLVM_C; | |
| 335 | 325 | } |
| 336 | 326 | zig_unreachable(); |
| 337 | 327 | } |
| ... | ... | @@ -528,7 +518,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) { |
| 528 | 518 | if (cc == CallingConventionNaked) { |
| 529 | 519 | addLLVMFnAttr(llvm_fn, "naked"); |
| 530 | 520 | } else { |
| 531 | LLVMSetFunctionCallConv(llvm_fn, get_llvm_cc(g, fn_type->data.fn.fn_type_id.cc)); | |
| 521 | ZigLLVMFunctionSetCallingConv(llvm_fn, get_llvm_cc(g, fn_type->data.fn.fn_type_id.cc)); | |
| 532 | 522 | } |
| 533 | 523 | |
| 534 | 524 | bool want_cold = fn->is_cold || cc == CallingConventionCold; |
| ... | ... | @@ -1023,7 +1013,7 @@ static void gen_panic(CodeGen *g, LLVMValueRef msg_arg, LLVMValueRef stack_trace |
| 1023 | 1013 | { |
| 1024 | 1014 | assert(g->panic_fn != nullptr); |
| 1025 | 1015 | LLVMValueRef fn_val = fn_llvm_value(g, g->panic_fn); |
| 1026 | LLVMCallConv llvm_cc = get_llvm_cc(g, g->panic_fn->type_entry->data.fn.fn_type_id.cc); | |
| 1016 | ZigLLVM_CallingConv llvm_cc = get_llvm_cc(g, g->panic_fn->type_entry->data.fn.fn_type_id.cc); | |
| 1027 | 1017 | if (stack_trace_arg == nullptr) { |
| 1028 | 1018 | stack_trace_arg = LLVMConstNull(get_llvm_type(g, ptr_to_stack_trace_type(g))); |
| 1029 | 1019 | } |
| ... | ... | @@ -1134,7 +1124,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) { |
| 1134 | 1124 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); |
| 1135 | 1125 | addLLVMFnAttr(fn_val, "alwaysinline"); |
| 1136 | 1126 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 1137 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 1127 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 1138 | 1128 | addLLVMFnAttr(fn_val, "nounwind"); |
| 1139 | 1129 | add_uwtable_attr(g, fn_val); |
| 1140 | 1130 | // Error return trace memory is in the stack, which is impossible to be at address 0 |
| ... | ... | @@ -1215,7 +1205,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) { |
| 1215 | 1205 | addLLVMFnAttr(fn_val, "noinline"); // so that we can look at return address |
| 1216 | 1206 | addLLVMFnAttr(fn_val, "cold"); |
| 1217 | 1207 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 1218 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 1208 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 1219 | 1209 | addLLVMFnAttr(fn_val, "nounwind"); |
| 1220 | 1210 | add_uwtable_attr(g, fn_val); |
| 1221 | 1211 | if (codegen_have_frame_pointer(g)) { |
| ... | ... | @@ -1299,7 +1289,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) { |
| 1299 | 1289 | addLLVMFnAttr(fn_val, "noreturn"); |
| 1300 | 1290 | addLLVMFnAttr(fn_val, "cold"); |
| 1301 | 1291 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 1302 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 1292 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 1303 | 1293 | addLLVMFnAttr(fn_val, "nounwind"); |
| 1304 | 1294 | add_uwtable_attr(g, fn_val); |
| 1305 | 1295 | if (codegen_have_frame_pointer(g)) { |
| ... | ... | @@ -2195,7 +2185,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) { |
| 2195 | 2185 | const char *fn_name = get_mangled_name(g, "__zig_merge_error_return_traces", false); |
| 2196 | 2186 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); |
| 2197 | 2187 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 2198 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 2188 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 2199 | 2189 | addLLVMFnAttr(fn_val, "nounwind"); |
| 2200 | 2190 | add_uwtable_attr(g, fn_val); |
| 2201 | 2191 | addLLVMArgAttr(fn_val, (unsigned)0, "noalias"); |
| ... | ... | @@ -2372,7 +2362,7 @@ static LLVMValueRef gen_resume(CodeGen *g, LLVMValueRef fn_val, LLVMValueRef tar |
| 2372 | 2362 | LLVMValueRef arg_val = LLVMConstSub(LLVMConstAllOnes(usize_type_ref), |
| 2373 | 2363 | LLVMConstInt(usize_type_ref, resume_id, false)); |
| 2374 | 2364 | LLVMValueRef args[] = {target_frame_ptr, arg_val}; |
| 2375 | return ZigLLVMBuildCall(g->builder, fn_val, args, 2, LLVMFastCallConv, ZigLLVM_CallAttrAuto, ""); | |
| 2365 | return ZigLLVMBuildCall(g->builder, fn_val, args, 2, ZigLLVM_Fast, ZigLLVM_CallAttrAuto, ""); | |
| 2376 | 2366 | } |
| 2377 | 2367 | |
| 2378 | 2368 | static LLVMBasicBlockRef gen_suspend_begin(CodeGen *g, const char *name_hint) { |
| ... | ... | @@ -4262,7 +4252,7 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr |
| 4262 | 4252 | break; |
| 4263 | 4253 | } |
| 4264 | 4254 | |
| 4265 | LLVMCallConv llvm_cc = get_llvm_cc(g, cc); | |
| 4255 | ZigLLVM_CallingConv llvm_cc = get_llvm_cc(g, cc); | |
| 4266 | 4256 | LLVMValueRef result; |
| 4267 | 4257 | |
| 4268 | 4258 | if (callee_is_async) { |
| ... | ... | @@ -4972,7 +4962,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) { |
| 4972 | 4962 | buf_ptr(buf_sprintf("__zig_tag_name_%s", buf_ptr(&enum_type->name))), false); |
| 4973 | 4963 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref); |
| 4974 | 4964 | LLVMSetLinkage(fn_val, LLVMInternalLinkage); |
| 4975 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 4965 | ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | |
| 4976 | 4966 | addLLVMFnAttr(fn_val, "nounwind"); |
| 4977 | 4967 | add_uwtable_attr(g, fn_val); |
| 4978 | 4968 | if (codegen_have_frame_pointer(g)) { |
src/zig_llvm.cpp+51-2| ... | ... | @@ -273,10 +273,10 @@ ZIG_EXTERN_C LLVMTypeRef ZigLLVMTokenTypeInContext(LLVMContextRef context_ref) { |
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args, |
| 276 | unsigned NumArgs, unsigned CC, ZigLLVM_CallAttr attr, const char *Name) | |
| 276 | unsigned NumArgs, ZigLLVM_CallingConv CC, ZigLLVM_CallAttr attr, const char *Name) | |
| 277 | 277 | { |
| 278 | 278 | CallInst *call_inst = CallInst::Create(unwrap(Fn), makeArrayRef(unwrap(Args), NumArgs), Name); |
| 279 | call_inst->setCallingConv(CC); | |
| 279 | call_inst->setCallingConv(static_cast<CallingConv::ID>(CC)); | |
| 280 | 280 | switch (attr) { |
| 281 | 281 | case ZigLLVM_CallAttrAuto: |
| 282 | 282 | break; |
| ... | ... | @@ -932,6 +932,9 @@ void ZigLLVMFunctionSetPrefixData(LLVMValueRef function, LLVMValueRef data) { |
| 932 | 932 | unwrap<Function>(function)->setPrefixData(unwrap<Constant>(data)); |
| 933 | 933 | } |
| 934 | 934 | |
| 935 | void ZigLLVMFunctionSetCallingConv(LLVMValueRef function, ZigLLVM_CallingConv cc) { | |
| 936 | unwrap<Function>(function)->setCallingConv(static_cast<CallingConv::ID>(cc)); | |
| 937 | } | |
| 935 | 938 | |
| 936 | 939 | class MyOStream: public raw_ostream { |
| 937 | 940 | public: |
| ... | ... | @@ -1315,3 +1318,49 @@ static_assert((Triple::ObjectFormatType)ZigLLVM_ELF == Triple::ELF, ""); |
| 1315 | 1318 | static_assert((Triple::ObjectFormatType)ZigLLVM_MachO == Triple::MachO, ""); |
| 1316 | 1319 | static_assert((Triple::ObjectFormatType)ZigLLVM_Wasm == Triple::Wasm, ""); |
| 1317 | 1320 | static_assert((Triple::ObjectFormatType)ZigLLVM_XCOFF == Triple::XCOFF, ""); |
| 1321 | ||
| 1322 | static_assert((CallingConv::ID)ZigLLVM_C == llvm::CallingConv::C, ""); | |
| 1323 | static_assert((CallingConv::ID)ZigLLVM_Fast == llvm::CallingConv::Fast, ""); | |
| 1324 | static_assert((CallingConv::ID)ZigLLVM_Cold == llvm::CallingConv::Cold, ""); | |
| 1325 | static_assert((CallingConv::ID)ZigLLVM_GHC == llvm::CallingConv::GHC, ""); | |
| 1326 | static_assert((CallingConv::ID)ZigLLVM_HiPE == llvm::CallingConv::HiPE, ""); | |
| 1327 | static_assert((CallingConv::ID)ZigLLVM_WebKit_JS == llvm::CallingConv::WebKit_JS, ""); | |
| 1328 | static_assert((CallingConv::ID)ZigLLVM_AnyReg == llvm::CallingConv::AnyReg, ""); | |
| 1329 | static_assert((CallingConv::ID)ZigLLVM_PreserveMost == llvm::CallingConv::PreserveMost, ""); | |
| 1330 | static_assert((CallingConv::ID)ZigLLVM_PreserveAll == llvm::CallingConv::PreserveAll, ""); | |
| 1331 | static_assert((CallingConv::ID)ZigLLVM_Swift == llvm::CallingConv::Swift, ""); | |
| 1332 | static_assert((CallingConv::ID)ZigLLVM_CXX_FAST_TLS == llvm::CallingConv::CXX_FAST_TLS, ""); | |
| 1333 | static_assert((CallingConv::ID)ZigLLVM_FirstTargetCC == llvm::CallingConv::FirstTargetCC, ""); | |
| 1334 | static_assert((CallingConv::ID)ZigLLVM_X86_StdCall == llvm::CallingConv::X86_StdCall, ""); | |
| 1335 | static_assert((CallingConv::ID)ZigLLVM_X86_FastCall == llvm::CallingConv::X86_FastCall, ""); | |
| 1336 | static_assert((CallingConv::ID)ZigLLVM_ARM_APCS == llvm::CallingConv::ARM_APCS, ""); | |
| 1337 | static_assert((CallingConv::ID)ZigLLVM_ARM_AAPCS == llvm::CallingConv::ARM_AAPCS, ""); | |
| 1338 | static_assert((CallingConv::ID)ZigLLVM_ARM_AAPCS_VFP == llvm::CallingConv::ARM_AAPCS_VFP, ""); | |
| 1339 | static_assert((CallingConv::ID)ZigLLVM_MSP430_INTR == llvm::CallingConv::MSP430_INTR, ""); | |
| 1340 | static_assert((CallingConv::ID)ZigLLVM_X86_ThisCall == llvm::CallingConv::X86_ThisCall, ""); | |
| 1341 | static_assert((CallingConv::ID)ZigLLVM_PTX_Kernel == llvm::CallingConv::PTX_Kernel, ""); | |
| 1342 | static_assert((CallingConv::ID)ZigLLVM_PTX_Device == llvm::CallingConv::PTX_Device, ""); | |
| 1343 | static_assert((CallingConv::ID)ZigLLVM_SPIR_FUNC == llvm::CallingConv::SPIR_FUNC, ""); | |
| 1344 | static_assert((CallingConv::ID)ZigLLVM_SPIR_KERNEL == llvm::CallingConv::SPIR_KERNEL, ""); | |
| 1345 | static_assert((CallingConv::ID)ZigLLVM_Intel_OCL_BI == llvm::CallingConv::Intel_OCL_BI, ""); | |
| 1346 | static_assert((CallingConv::ID)ZigLLVM_X86_64_SysV == llvm::CallingConv::X86_64_SysV, ""); | |
| 1347 | static_assert((CallingConv::ID)ZigLLVM_Win64 == llvm::CallingConv::Win64, ""); | |
| 1348 | static_assert((CallingConv::ID)ZigLLVM_X86_VectorCall == llvm::CallingConv::X86_VectorCall, ""); | |
| 1349 | static_assert((CallingConv::ID)ZigLLVM_HHVM == llvm::CallingConv::HHVM, ""); | |
| 1350 | static_assert((CallingConv::ID)ZigLLVM_HHVM_C == llvm::CallingConv::HHVM_C, ""); | |
| 1351 | static_assert((CallingConv::ID)ZigLLVM_X86_INTR == llvm::CallingConv::X86_INTR, ""); | |
| 1352 | static_assert((CallingConv::ID)ZigLLVM_AVR_INTR == llvm::CallingConv::AVR_INTR, ""); | |
| 1353 | static_assert((CallingConv::ID)ZigLLVM_AVR_SIGNAL == llvm::CallingConv::AVR_SIGNAL, ""); | |
| 1354 | static_assert((CallingConv::ID)ZigLLVM_AVR_BUILTIN == llvm::CallingConv::AVR_BUILTIN, ""); | |
| 1355 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_VS == llvm::CallingConv::AMDGPU_VS, ""); | |
| 1356 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_GS == llvm::CallingConv::AMDGPU_GS, ""); | |
| 1357 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_PS == llvm::CallingConv::AMDGPU_PS, ""); | |
| 1358 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_CS == llvm::CallingConv::AMDGPU_CS, ""); | |
| 1359 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_KERNEL == llvm::CallingConv::AMDGPU_KERNEL, ""); | |
| 1360 | static_assert((CallingConv::ID)ZigLLVM_X86_RegCall == llvm::CallingConv::X86_RegCall, ""); | |
| 1361 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_HS == llvm::CallingConv::AMDGPU_HS, ""); | |
| 1362 | static_assert((CallingConv::ID)ZigLLVM_MSP430_BUILTIN == llvm::CallingConv::MSP430_BUILTIN, ""); | |
| 1363 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_LS == llvm::CallingConv::AMDGPU_LS, ""); | |
| 1364 | static_assert((CallingConv::ID)ZigLLVM_AMDGPU_ES == llvm::CallingConv::AMDGPU_ES, ""); | |
| 1365 | static_assert((CallingConv::ID)ZigLLVM_AArch64_VectorCall == llvm::CallingConv::AArch64_VectorCall, ""); | |
| 1366 | static_assert((CallingConv::ID)ZigLLVM_MaxID == llvm::CallingConv::MaxID, ""); |
src/zig_llvm.h+50-1| ... | ... | @@ -64,6 +64,54 @@ ZIG_EXTERN_C LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, co |
| 64 | 64 | |
| 65 | 65 | ZIG_EXTERN_C LLVMTypeRef ZigLLVMTokenTypeInContext(LLVMContextRef context_ref); |
| 66 | 66 | |
| 67 | enum ZigLLVM_CallingConv { | |
| 68 | ZigLLVM_C = 0, | |
| 69 | ZigLLVM_Fast = 8, | |
| 70 | ZigLLVM_Cold = 9, | |
| 71 | ZigLLVM_GHC = 10, | |
| 72 | ZigLLVM_HiPE = 11, | |
| 73 | ZigLLVM_WebKit_JS = 12, | |
| 74 | ZigLLVM_AnyReg = 13, | |
| 75 | ZigLLVM_PreserveMost = 14, | |
| 76 | ZigLLVM_PreserveAll = 15, | |
| 77 | ZigLLVM_Swift = 16, | |
| 78 | ZigLLVM_CXX_FAST_TLS = 17, | |
| 79 | ZigLLVM_FirstTargetCC = 64, | |
| 80 | ZigLLVM_X86_StdCall = 64, | |
| 81 | ZigLLVM_X86_FastCall = 65, | |
| 82 | ZigLLVM_ARM_APCS = 66, | |
| 83 | ZigLLVM_ARM_AAPCS = 67, | |
| 84 | ZigLLVM_ARM_AAPCS_VFP = 68, | |
| 85 | ZigLLVM_MSP430_INTR = 69, | |
| 86 | ZigLLVM_X86_ThisCall = 70, | |
| 87 | ZigLLVM_PTX_Kernel = 71, | |
| 88 | ZigLLVM_PTX_Device = 72, | |
| 89 | ZigLLVM_SPIR_FUNC = 75, | |
| 90 | ZigLLVM_SPIR_KERNEL = 76, | |
| 91 | ZigLLVM_Intel_OCL_BI = 77, | |
| 92 | ZigLLVM_X86_64_SysV = 78, | |
| 93 | ZigLLVM_Win64 = 79, | |
| 94 | ZigLLVM_X86_VectorCall = 80, | |
| 95 | ZigLLVM_HHVM = 81, | |
| 96 | ZigLLVM_HHVM_C = 82, | |
| 97 | ZigLLVM_X86_INTR = 83, | |
| 98 | ZigLLVM_AVR_INTR = 84, | |
| 99 | ZigLLVM_AVR_SIGNAL = 85, | |
| 100 | ZigLLVM_AVR_BUILTIN = 86, | |
| 101 | ZigLLVM_AMDGPU_VS = 87, | |
| 102 | ZigLLVM_AMDGPU_GS = 88, | |
| 103 | ZigLLVM_AMDGPU_PS = 89, | |
| 104 | ZigLLVM_AMDGPU_CS = 90, | |
| 105 | ZigLLVM_AMDGPU_KERNEL = 91, | |
| 106 | ZigLLVM_X86_RegCall = 92, | |
| 107 | ZigLLVM_AMDGPU_HS = 93, | |
| 108 | ZigLLVM_MSP430_BUILTIN = 94, | |
| 109 | ZigLLVM_AMDGPU_LS = 95, | |
| 110 | ZigLLVM_AMDGPU_ES = 96, | |
| 111 | ZigLLVM_AArch64_VectorCall = 97, | |
| 112 | ZigLLVM_MaxID = 1023, | |
| 113 | }; | |
| 114 | ||
| 67 | 115 | enum ZigLLVM_CallAttr { |
| 68 | 116 | ZigLLVM_CallAttrAuto, |
| 69 | 117 | ZigLLVM_CallAttrNeverTail, |
| ... | ... | @@ -72,7 +120,7 @@ enum ZigLLVM_CallAttr { |
| 72 | 120 | ZigLLVM_CallAttrAlwaysInline, |
| 73 | 121 | }; |
| 74 | 122 | ZIG_EXTERN_C LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args, |
| 75 | unsigned NumArgs, unsigned CC, enum ZigLLVM_CallAttr attr, const char *Name); | |
| 123 | unsigned NumArgs, enum ZigLLVM_CallingConv CC, enum ZigLLVM_CallAttr attr, const char *Name); | |
| 76 | 124 | |
| 77 | 125 | ZIG_EXTERN_C LLVMValueRef ZigLLVMBuildMemCpy(LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign, |
| 78 | 126 | LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size, bool isVolatile); |
| ... | ... | @@ -215,6 +263,7 @@ ZIG_EXTERN_C struct ZigLLVMDILocation *ZigLLVMGetDebugLoc(unsigned line, unsigne |
| 215 | 263 | ZIG_EXTERN_C void ZigLLVMSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state); |
| 216 | 264 | ZIG_EXTERN_C void ZigLLVMSetTailCall(LLVMValueRef Call); |
| 217 | 265 | ZIG_EXTERN_C void ZigLLVMFunctionSetPrefixData(LLVMValueRef fn, LLVMValueRef data); |
| 266 | ZIG_EXTERN_C void ZigLLVMFunctionSetCallingConv(LLVMValueRef function, enum ZigLLVM_CallingConv cc); | |
| 218 | 267 | |
| 219 | 268 | ZIG_EXTERN_C void ZigLLVMAddFunctionAttr(LLVMValueRef fn, const char *attr_name, const char *attr_value); |
| 220 | 269 | ZIG_EXTERN_C void ZigLLVMAddByValAttr(LLVMValueRef fn_ref, unsigned ArgNo, LLVMTypeRef type_val); |