authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-09-21 23:29:34+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-11-05 16:10:15+01:00
log4664eae1e40813fb50bab83247cc7391312e38cb
tree190cee3c589de6e3b16b1f553f506c710fc0bb53
parent806097c165ce26d0a1817a0f2189b20ad5ef796d

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
......@@ -8485,7 +8485,57 @@ static void define_builtin_types(CodeGen *g) {
84858485 add_fp_entry(g, "f32", 32, LLVMFloatType(), &g->builtin_types.entry_f32);
84868486 add_fp_entry(g, "f64", 64, LLVMDoubleType(), &g->builtin_types.entry_f64);
84878487 add_fp_entry(g, "f128", 128, LLVMFP128Type(), &g->builtin_types.entry_f128);
8488 add_fp_entry(g, "c_longdouble", 80, LLVMX86FP80Type(), &g->builtin_types.entry_c_longdouble);
8488
8489 switch (g->zig_target->arch) {
8490 case ZigLLVM_x86:
8491 case ZigLLVM_x86_64:
8492 if (g->zig_target->abi != ZigLLVM_MSVC)
8493 add_fp_entry(g, "c_longdouble", 80, LLVMX86FP80Type(), &g->builtin_types.entry_c_longdouble);
8494 else
8495 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8496 break;
8497 case ZigLLVM_arm:
8498 case ZigLLVM_armeb:
8499 case ZigLLVM_thumb:
8500 case ZigLLVM_thumbeb:
8501 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8502 break;
8503 case ZigLLVM_aarch64:
8504 case ZigLLVM_aarch64_be:
8505 if (g->zig_target->os == OsWindows || target_os_is_darwin(g->zig_target->os))
8506 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8507 else
8508 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8509 break;
8510 case ZigLLVM_riscv32:
8511 case ZigLLVM_riscv64:
8512 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8513 break;
8514 case ZigLLVM_wasm32:
8515 case ZigLLVM_wasm64:
8516 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8517 break;
8518 case ZigLLVM_mips:
8519 case ZigLLVM_mipsel:
8520 // Assume o32 ABI
8521 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8522 break;
8523 case ZigLLVM_mips64:
8524 case ZigLLVM_mips64el:
8525 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8526 break;
8527 case ZigLLVM_ppc:
8528 case ZigLLVM_ppc64:
8529 case ZigLLVM_ppc64le:
8530 add_fp_entry(g, "c_longdouble", 128, LLVMFP128Type(), &g->builtin_types.entry_c_longdouble);
8531 break;
8532 case ZigLLVM_avr:
8533 // It's either a float or a double, depending on a toolchain switch
8534 add_fp_entry(g, "c_longdouble", 64, LLVMDoubleType(), &g->builtin_types.entry_c_longdouble);
8535 break;
8536 default:
8537 zig_panic("TODO implement mapping for c_longdouble");
8538 }
84898539
84908540 {
84918541 ZigType *entry = new_type_table_entry(ZigTypeIdVoid);