[FFmpeg-devel] [PATCH 7/9] sbrdsp: unroll and use integer operations
Michael Niedermayer
michaelni at gmx.at
Fri Apr 5 12:55:54 CEST 2013
On Fri, Apr 05, 2013 at 12:18:25PM +0200, Christophe Gisquet wrote:
> Hi,
>
> 2013/4/5 Michael Niedermayer <michaelni at gmx.at>:
> > casting *float to *int32 and dereferencing is a strict aliassing
> > violation,
>
[...]
> My C-fu may be lacking here, but if instead I do:
> union av_intfloat32 *p = (union av_intfloat32*)x;
> for (i = 1; i < 64; i += 4)
> {
> p[i+0].i ^= 1U<<31;
> p[i+2].i ^= 1U<<31;
> }
> then it is ok, but I'm quite unsure I have improved anything.
> """
> The details may change (if it's called av_intfloat, the name of the
> union members) but you should get the picture.
>
> Given this additional data, do you have any updated opinion?
av_intfloat32 is ok
the other variant that generated additional instructions should better
be avoided for that reason
The whole is because such "strict aliassing violations" are undefined
in C and some compilers base optimizations on the absence of such
things, so the original code could have been miscompiled in theory.
Using a union should avoid the issue
Thanks
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
He who knows, does not speak. He who speaks, does not know. -- Lao Tsu
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130405/8d8eed20/attachment.asc>
More information about the ffmpeg-devel
mailing list