[SeaBIOS] [Qemu-devel] Re: QEMU regression problems - Update FPU
Aurelien Jarno
aurelien at aurel32.net
Thu Feb 24 08:31:48 CET 2011
On Thu, Feb 24, 2011 at 08:03:02AM +0100, Gerhard Wiesinger wrote:
> On Wed, 23 Feb 2011, Peter Maydell wrote:
>
> >On 18 February 2011 07:12, Gerhard Wiesinger <lists at wiesinger.com> wrote:
> >>Issue 1.) with FPU still present
> >>I tracked down the problematic code and it is a rounding error from double
> >>precision to 64bit floats: Any ideas how to fix such an issue in general?
> >>
> >>QEMU result in ST0: 0.42925860786976457 (wrong emulated)
> >>KVM result in ST0: 0.42925860786975449 (correct)
> >
> >This is an error when running QEMU in TCG mode, right?
> >At the moment x86 is the odd-one-out in that it doesn't
> >use CONFIG_SOFTFLOAT for its FPU emulation, so somebody
> >has made an explicit choice of preferring speed over
> >accuracy, and I am unsurprised that there are rounding
> >errors as a result.
>
> Yes, QEMU not KVM. Regarding mode: I guess tcg mode because
> softfloat doesn't compile on x64 (AMD) (How to find out which mode
> is used, what other modes exist?).
>
> But can't we use the float64 type and use the normal i386 (or
> higher) instructions and therefore we get:
> 1.) less accurate but correct emulated results
> 2.) Have the full speed
>
> Second solution would be to use a more accurate type like now but to
> use rounding to e.g. float64 after each FPU operation.
>
> Maybe we can also use a define or config switch for accuracy vs. speed.
>
This is not something possible, x86 uses a 80-bit FPU, and floats are
rounded to 64-bit when moved to memory. That's actually probably why you
see a difference between TCG or native/KVM.
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien at aurel32.net http://www.aurel32.net
More information about the SeaBIOS
mailing list