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 <[email protected]> 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 [email protected] http://www.aurel32.net _______________________________________________ SeaBIOS mailing list [email protected] http://www.seabios.org/mailman/listinfo/seabios
