|
From: Dominic M. <dma...@ai...> - 2003-04-04 22:18:54
|
On Fri, 4 Apr 2003, Julian Seward wrote:
>
> Hi. Yes, 1.9.4 does have an obscure bug in the handling of floating
> point conditional code sometimes. I've fixed it in cvs and I hope to
> get it out to the world by shipping 1.9.5 at the weekend, or soon
> thereafter. In the meantime I attach a patch with the fix -- easy,
> you just need to delete two lines of code.
>
> It would be good if you could confirm that it works.
Yep, that fixes it. Thanks!
> Thanks for chasing down a small example, even though I didn't use it
> -- you've no idea how much that helps. Reproducing problems that people
> report is the #1 problem we have in debugging V; once we reproduce a
> problem, tracking it down is simple.
I understand all too well. :)
Regards,
Dominic
> J
>
> Index: coregrind/vg_from_ucode.c
> ===================================================================
> RCS file: /cvsroot/valgrind/valgrind/coregrind/vg_from_ucode.c,v
> retrieving revision 1.41
> retrieving revision 1.42
> diff -u -3 -p -r1.41 -r1.42
> --- coregrind/vg_from_ucode.c 26 Mar 2003 21:08:00 -0000 1.41
> +++ coregrind/vg_from_ucode.c 26 Mar 2003 23:43:57 -0000 1.42
> @@ -3412,8 +3412,6 @@ static void emitUInstr ( UCodeBlock* cb,
> case FPU:
> vg_assert(u->tag1 == Lit16);
> vg_assert(u->tag2 == NoValue);
> - if (anyFlagUse ( u ))
> - emit_get_eflags();
> if (!(*fplive)) {
> emit_get_fpu_state();
> *fplive = True;
>
>
> On Friday 04 April 2003 6:57 pm, Dominic Mazzoni wrote:
> > Hi,
> >
> > I've been using valgrind for about six months, and it's been wonderful to
> > have. I was spoiled having access to purify on Solaris machines for a
> > while, and missed having something similar on Linux. Many thanks to
> > Julian Seward and everyone else who contributed to its development.
> >
> > I've included a very small program that generates different output when
> > it's run through valgrind. I noticed the error while I was debugging a
> > function to quickly check if an array of single-precision floats has any
> > NaNs in it - it turns out that doing a bitwise test is 2-3x faster than
> > calling the finite() function.
> >
> > Anyway, the error only occurs if you compile it with the options:
> >
> > gcc -O2 -mcpu=pentiumpro -march=pentiumpro
> >
> > However, the exact same error occurs whether I compile the program with
> > gcc 2.96 (RedHat 7.3's version) or gcc 3.2.
> >
> > The correct output of the program is "0.000000". When run under valgrind
> > 1.9.4, it outputs "1.000000".
> >
> > I hope this helps! It's easy enough for me to work around, but I can only
> > guess that this is probably the symptom of a bug that could manifest
> > itself in other ways.
> >
> > - Dominic
> >
> > #include <stdio.h>
> >
> > int main(int argc, char **argv)
> > {
> > union {
> > float a[2];
> > int b[2];
> > } u;
> >
> > u.a[0] = 0.0 / 0.0;
> > u.a[1] = ((*u.b & 0x7FC00000) != 0x7FC00000);
> > printf("%f\n", u.a[1]);
> >
> > return 0;
> > }
> >
> >
> >
> >
> > -------------------------------------------------------
> > This SF.net email is sponsored by: ValueWeb:
> > Dedicated Hosting for just $79/mo with 500 GB of bandwidth!
> > No other company gives more support or power for your dedicated server
> > http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/
> > _______________________________________________
> > Valgrind-users mailing list
> > Val...@li...
> > https://lists.sourceforge.net/lists/listinfo/valgrind-users
>
>
|