target/i386: fix fscale handling of rounding precision
commitc535d68755576bfa33be7aef7bd294a601f776e0
authorJoseph Myers <joseph@codesourcery.com>
Thu, 7 May 2020 00:46:28 +0000 (7 00:46 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 10 Jun 2020 16:10:21 +0000 (10 12:10 -0400)
treea38e6c956706bdc5786520ade140301433ef73e2
parentc1c5fb8f9067c830e36830c2b82c0ec146c03d7b
target/i386: fix fscale handling of rounding precision

The fscale implementation uses floatx80_scalbn for the final scaling
operation.  floatx80_scalbn ends up rounding the result using the
dynamic rounding precision configured for the FPU.  But only a limited
set of x87 floating-point instructions are supposed to respect the
dynamic rounding precision, and fscale is not in that set.  Fix the
implementation to save and restore the rounding precision around the
call to floatx80_scalbn.

Signed-off-by: Joseph Myers <joseph@codesourcery.com>
Message-Id: <alpine.DEB.2.21.2005070045430.18350@digraph.polyomino.org.uk>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
target/i386/fpu_helper.c
tests/tcg/i386/test-i386-fscale.c