| ... | ... | @@ -8094,10 +8094,18 @@ static LLVMValueRef gen_const_val(CodeGen *g, ZigValue *const_val, const char *n |
| 8094 | 8094 | case 64: |
| 8095 | 8095 | return LLVMConstReal(get_llvm_type(g, type_entry), const_val->data.x_f64); |
| 8096 | 8096 | case 80: { |
| 8097 | | uint64_t buf[2]; |
| 8098 | | memcpy(&buf, &const_val->data.x_f80, 16); |
| 8099 | | LLVMValueRef as_int = LLVMConstIntOfArbitraryPrecision(LLVMInt128Type(), 2, buf); |
| 8100 | | return LLVMConstBitCast(as_int, get_llvm_type(g, type_entry)); |
| 8097 | LLVMTypeRef llvm_i80 = LLVMIntType(80); |
| 8098 | LLVMValueRef x; |
| 8099 | if (g->is_big_endian) { |
| 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 | 8110 | case 128: |
| 8103 | 8111 | { |