Commit 3af471f9 authored by David Hildenbrand's avatar David Hildenbrand Committed by Cornelia Huck
Browse files

s390x/tcg: Fix rounding from float128 to uint64_t/uint32_t



Let's use the proper conversion functions now that we have them.

Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
Message-Id: <20190218122710.23639-3-david@redhat.com>
Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
parent fc7cc951
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -509,9 +509,7 @@ uint64_t HELPER(clgdb)(CPUS390XState *env, uint64_t v2, uint32_t m3)
uint64_t HELPER(clgxb)(CPUS390XState *env, uint64_t h, uint64_t l, uint32_t m3)
{
    int hold = swap_round_mode(env, m3);
    float128 v2 = make_float128(h, l);
    /* ??? Not 100% correct.  */
    uint64_t ret = float128_to_int64(v2, &env->fpu_status);
    uint64_t ret = float128_to_uint64(make_float128(h, l), &env->fpu_status);
    set_float_rounding_mode(hold, &env->fpu_status);
    handle_exceptions(env, GETPC());
    return ret;
@@ -541,9 +539,7 @@ uint64_t HELPER(clfdb)(CPUS390XState *env, uint64_t v2, uint32_t m3)
uint64_t HELPER(clfxb)(CPUS390XState *env, uint64_t h, uint64_t l, uint32_t m3)
{
    int hold = swap_round_mode(env, m3);
    float128 v2 = make_float128(h, l);
    /* Not 100% correct.  */
    uint32_t ret = float128_to_int64(v2, &env->fpu_status);
    uint32_t ret = float128_to_uint32(make_float128(h, l), &env->fpu_status);
    set_float_rounding_mode(hold, &env->fpu_status);
    handle_exceptions(env, GETPC());
    return ret;