diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/checker.cpp | 1 | ||||
| -rw-r--r-- | src/llvm_backend.cpp | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index 092d7bc31..2792bdece 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1751,6 +1751,7 @@ void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("divti3"), str_lit("fixdfti"), str_lit("floattidf"), + str_lit("floattidf_unsigned"), str_lit("truncsfhf2"), str_lit("truncdfhf2"), str_lit("gnu_h2f_ieee"), diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 505d45b93..a4e6ddbe5 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -7821,6 +7821,17 @@ lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) { return lb_emit_conv(p, res, t); } + if (is_type_integer_128bit(src)) { + auto args = array_make<lbValue>(temporary_allocator(), 1); + args[0] = value; + char const *call = "floattidf"; + if (is_type_unsigned(src)) { + call = "floattidf_unsigned"; + } + lbValue res_f64 = lb_emit_runtime_call(p, call, args); + return lb_emit_conv(p, res_f64, t); + } + lbValue res = {}; res.type = t; if (is_type_unsigned(src)) { |