Re: [hatari-devel] undefined behaviour fixes |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
]
- To: hatari-devel@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [hatari-devel] undefined behaviour fixes
- From: Thomas Huth <th.huth@xxxxxxxxx>
- Date: Sun, 12 Jan 2025 12:56:12 +0000
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.de; s=2017; t=1736686574; bh=mGlj/oFqLnX4LiTLtEYEz+p+rS8bW1CGdC+mxgvp6OM=; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type: Content-Transfer-Encoding:From; b=jiLdQyZkmxeLkU5NSDKDRnQ096ILZ84cCRV6zO+jqYzbzei7J0bGf6kRayKsQ4XYn TtojZcpuI4V8mF3uZNLI7bnJmonJysA6xjcICPDb3eB7sKACq6ApTb86CBSKTZN2yM iNZrd9cNnbDRKB0cTDQnHVytRTYsiurlJxNp4Oe9xwDeDZzMg/fCtVtWLeRlxFznMM CCHhAPl9VWAEBVyR6v7/lXY3faTxtExZ2K3xAOh4V1aHKjkRCpQaa9oCmD6YDuhMbD m8aI7kSQszrQvM6+N+CTWbYDVDfbZG59G2wXkEZb7kH/KDUCfWKW9jCDsqjyMsnxbP /uaH37wgu737w==
Am Sat, 11 Jan 2025 13:10:51 -0800
schrieb David Savinkoff <dsavnkff@xxxxxxxxx>:
> Hi,
> This filter's function call is passed an int16_t and returns an int16_t.
> The filter calculates using int32_t so that there is no possibility of
> shifting too much.
This is not about shifting too much, it's about shifting signed (negative)
values which is undefined behavior in C.
> This is why there is no warning.
There is a warning when compiling with "-fsanitize=undefined".
> I love the 1 clock cycle barrel shifter in non-legacy CPUs.
I think modern C compilers are smart enough to convert multiplications by
32768 into the corresponding shift assembly instruction.
Thomas
> On Fri, Jan 10, 2025 at 11:37 PM Thomas Huth <th.huth@xxxxxxxxx> wrote:
> >
> > Am Sat, 11 Jan 2025 07:30:35 +0000
> > schrieb Thomas Huth <th.huth@xxxxxxxxx>:
> > ...
> > >
> > > > Because I still think it is bad coding style to shift negative values and similar in my opinion we should only set -fwrapv where really necessary. So we should probably only do that in the CPU core, like in my previous patch. As I said previously, the parts of Hatari that are used in Previous including the DSP do not trigger any warning. So Hatari is aside from the CPU core likely to be clean and should stay like that.
> > >
> > > It's not. There is at least one more spot in the sound code:
> > >
> > > src/sound.c:389:18: runtime error: left shift of negative value -893
> > >
> > > Maybe Nicolas could have a look at it? ... those filters
> > > are not really my turf.
> >
> > I guess the fix would be as easy as:
> >
> > diff --git a/src/sound.c b/src/sound.c
> > --- a/src/sound.c
> > +++ b/src/sound.c
> > @@ -386,8 +386,8 @@ ymsample Subsonic_IIR_HPF_Left(ymsample x0)
> > if ( YM2149_HPF_Filter == YM2149_HPF_FILTER_NONE )
> > return x0;
> >
> > - y1 += ((x0 - x1)<<15) - (y0<<6); /* 64*y0 */
> > - y0 = y1>>15;
> > + y1 += ((x0 - x1) * 32768) - (y0 * 64); /* 64*y0 */
> > + y0 = y1 / 32768;
> > x1 = x0;
> >
> > return y0;
> >
> > ?
> >
> > Thomas
> >
> >
>
>