On Tue, Apr 19, 2011 at 06:06:57PM +0100, Peter Maydell wrote: > On 18 April 2011 22:00, Aurelien Jarno <aurel...@aurel32.net> wrote: > > Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> > > --- > > target-i386/op_helper.c | 7 ++++--- > > 1 files changed, 4 insertions(+), 3 deletions(-) > > > > diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c > > index f614893..7dddd37 100644 > > --- a/target-i386/op_helper.c > > +++ b/target-i386/op_helper.c > > @@ -3920,9 +3920,10 @@ void helper_fbld_ST0(target_ulong ptr) > > v = ldub(ptr + i); > > val = (val * 100) + ((v >> 4) * 10) + (v & 0xf); > > } > > - tmp = val; > > - if (ldub(ptr + 9) & 0x80) > > - tmp = -tmp; > > + if (ldub(ptr + 9) & 0x80) { > > + val = -val; > > + } > > + tmp = int64_to_floatx(val, &env->fp_status); > > fpush(); > > ST0 = tmp; > > } > > This doesn't do the right thing for -0 (should generate -0, > not +0). I think: > > tmp = int64_to_floatx(val, &env->fp_status); > if (ldub(ptr + 9) & 0x80) { > floatx_chs(tmp); > } > > ought to do the right thing and work for both softfloat and > sf-native, but I haven't tested it. >
Good catch, this solution works. Thanks. -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net