| ... | @@ -8094,10 +8094,18 @@ static LLVMValueRef gen_const_val(CodeGen *g, ZigValue *const_val, const char *n | ... | @@ -8094,10 +8094,18 @@ static LLVMValueRef gen_const_val(CodeGen *g, ZigValue *const_val, const char *n |
| 8094 | case 64: | 8094 | case 64: |
| 8095 | return LLVMConstReal(get_llvm_type(g, type_entry), const_val->data.x_f64); | 8095 | return LLVMConstReal(get_llvm_type(g, type_entry), const_val->data.x_f64); |
| 8096 | case 80: { | 8096 | case 80: { |
| 8097 | uint64_t buf[2]; | 8097 | LLVMTypeRef llvm_i80 = LLVMIntType(80); |
| 8098 | memcpy(&buf, &const_val->data.x_f80, 16); | 8098 | LLVMValueRef x; |
| 8099 | LLVMValueRef as_int = LLVMConstIntOfArbitraryPrecision(LLVMInt128Type(), 2, buf); | 8099 | if (g->is_big_endian) { |
| 8100 | return LLVMConstBitCast(as_int, get_llvm_type(g, type_entry)); | 8100 | x = LLVMConstInt(llvm_i80, const_val->data.x_f80.signExp, false); |
| | 8101 | x = LLVMConstShl(x, LLVMConstInt(llvm_i80, 64, false)); |
| | 8102 | x = LLVMConstOr(x, LLVMConstInt(llvm_i80, const_val->data.x_f80.signif, false)); |
| | 8103 | } else { |
| | 8104 | x = LLVMConstInt(llvm_i80, const_val->data.x_f80.signif, false); |
| | 8105 | x = LLVMConstShl(x, LLVMConstInt(llvm_i80, 16, false)); |
| | 8106 | x = LLVMConstOr(x, LLVMConstInt(llvm_i80, const_val->data.x_f80.signExp, false)); |
| | 8107 | } |
| | 8108 | return LLVMConstBitCast(x, get_llvm_type(g, type_entry)); |
| 8101 | } | 8109 | } |
| 8102 | case 128: | 8110 | case 128: |
| 8103 | { | 8111 | { |