authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-09-21 23:29:34+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-08 11:14:21-07:00
loge2104ecc2d31b5e55305a4c6a358ab8690255d19
treeeb2ad3d080030f070480de1ea780d9f69459c9cd
parent05fefc0d3f1c35b7a95368db26f25293093263c3

stage1: Fix type mapping for c_longdouble

A quick and dirty job to let the compiler use the correct size and alignment.

1 files changed, 51 insertions(+), 1 deletions(-)

src/stage1/codegen.cpp+51-1
...@@ -8587,7 +8587,57 @@ static void define_builtin_types(CodeGen *g) {...@@ -8587,7 +8587,57 @@ static void define_builtin_types(CodeGen *g) {
8587 add_fp_entry(g, "f32", 32, LLVMFloatType(), &g->builtin_types.entry_f32);8587 add_fp_entry(g, "f32", 32, LLVMFloatType(), &g->builtin_types.entry_f32);
8588 add_fp_entry(g, "f64", 64, LLVMDoubleType(), &g->builtin_types.entry_f64);8588 add_fp_entry(g, "f64", 64, LLVMDoubleType(), &g->builtin_types.entry_f64);
8589 add_fp_entry(g, "f128", 128, LLVMFP128Type(), &g->builtin_types.entry_f128);8589 add_fp_entry(g, "f128", 128, LLVMFP128Type(), &g->builtin_types.entry_f128);
8590 add_fp_entry(g, "c_longdouble", 80, LLVMX86FP80Type(), &g->builtin_types.entry_c_longdouble);8590
8591 switch (g->zig_target->arch) {
8592 case ZigLLVM_x86:
8593 case ZigLLVM_x86_64:
8594 if (g->zig_target->abi != ZigLLVM_MSVC)
8595 add_fp_entry(g, "c_longdouble", 80, LLVMX86FP80Type(), &g->builtin_types.entry_c_longdouble);
8596 else
8597 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8598 break;
8599 case ZigLLVM_arm:
8600 case ZigLLVM_armeb:
8601 case ZigLLVM_thumb:
8602 case ZigLLVM_thumbeb:
8603 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8604 break;
8605 case ZigLLVM_aarch64:
8606 case ZigLLVM_aarch64_be:
8607 if (g->zig_target->os == OsWindows || target_os_is_darwin(g->zig_target->os))
8608 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8609 else
8610 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8611 break;
8612 case ZigLLVM_riscv32:
8613 case ZigLLVM_riscv64:
8614 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8615 break;
8616 case ZigLLVM_wasm32:
8617 case ZigLLVM_wasm64:
8618 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8619 break;
8620 case ZigLLVM_mips:
8621 case ZigLLVM_mipsel:
8622 // Assume o32 ABI
8623 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8624 break;
8625 case ZigLLVM_mips64:
8626 case ZigLLVM_mips64el:
8627 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8628 break;
8629 case ZigLLVM_ppc:
8630 case ZigLLVM_ppc64:
8631 case ZigLLVM_ppc64le:
8632 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8633 break;
8634 case ZigLLVM_avr:
8635 // It's either a float or a double, depending on a toolchain switch
8636 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8637 break;
8638 default:
8639 zig_panic("TODO implement mapping for c_longdouble");
8640 }
85918641
8592 {8642 {
8593 ZigType *entry = new_type_table_entry(ZigTypeIdVoid);8643 ZigType *entry = new_type_table_entry(ZigTypeIdVoid);