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: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20190218122710.23639-3-david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
David Hildenbrand 2019-02-18 13:26:57 +01:00 committed by Cornelia Huck
parent fc7cc951b6
commit 3af471f915

View File

@ -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;