Appendix B: Floating Point
compiler-float-conversion

Add conversion builtins to the compiler:

    if (streq(name, "f64_from_i64")) {
        // compile argument (i64 expression)
        pos += 1; skip();
        c_expression();
        if (cur() == ')') { pos += 1; skip(); }
        emit_op("f64.convert_i64_s");
        c_expr_is_float = true;
        return;
    }
    if (streq(name, "i64_from_f64")) {
        pos += 1; skip();
        const was: bool = c_expr_is_float;
        c_expr_is_float = true;
        c_expression();
        if (cur() == ')') { pos += 1; skip(); }
        emit_op("i64.trunc_f64_s");
        c_expr_is_float = was;
        return;
    }

WAT instructions: f64.convert_i64_s converts a signed i64 to f64. i64.trunc_f64_s truncates an f64 to a signed i64.