[FFmpeg-devel] [PATCH] AAC: type puns for 16 bit floating point rounding

Måns Rullgård mans
Thu Dec 4 19:40:25 CET 2008


"Alex Converse" <alex.converse at gmail.com> writes:

> On Thu, Dec 4, 2008 at 12:11 PM, M?ns Rullg?rd <mans at mansr.com> wrote:
>>
>> Uoti Urpala wrote:
>>> On Thu, 2008-12-04 at 14:22 +0000, M?ns Rullg?rd wrote:
>>>> Uoti Urpala wrote:
>>>> > On Thu, 2008-12-04 at 09:35 +0000, M?ns Rullg?rd wrote:
>>>> >> Uoti Urpala <uoti.urpala at pp1.inet.fi> writes:
>>>> >>
>>>> >> > On Thu, 2008-12-04 at 03:13 +0000, M?ns Rullg?rd wrote:
>>>> >> >> Are this things safe under strict aliasing rules?
>>>> >> >
>>>> >> > Yes GCC does guarantee that it will work (all the accesses use
>>>> >> > unionvalue.field syntax with the same union).
>>>> >>
>>>> >> What gcc does is irrelevant.  Is it guaranteed by the C standard?
>>>> >
>>>> > The GCC behavior is more relevant than the standard in this case. The
>>>>
>>>> That is only true in the reverse situation, i.e. when the standard allows
>>>> something but gcc misbehaves.  Then we have no choice but avoiding the
>>>> offending construct.  If gcc happens to generate intuitively correct
>>>> code for something that is undefined by the standard, we should still not
>>>> be using that something.
>>>
>>> It's not that GCC "happens to" generate the correct result, but that it
>>> explicitly defines it will work.
>>
>> Same thing.  GCC happens to define this one way.  Another compiler may do
>> it differently.  GCC is not the only compiler.  BTW, where is such
>> behaviour of gcc documented?
>
> "The practice of reading from a different union member than the one
> most recently written to (called "type-punning") is common. Even with
> -fstrict-aliasing, type-punning is allowed, provided the memory is
> accessed through the union type."
> http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Optimize-Options.html#index-fstrict_002daliasing-721
>
> [...]
>
>>>> > and it seems unlikely that some compiler would use more strict ones in
>>>> > the future
>>>>
>>>> Upon what do you base this assertion?
>>>
>>> Disallowing that would break even more code than the GCC introduction of
>>> strict aliasing did, it's desirable to have some supported mechanism for
>>> type punning, and disallowing it is unlikely to allow any significant
>>> optimizations.
>>
>> Try for a moment to not see gcc as the centre of the universe.  Until
>> you've tested *every* compiler, you simply cannot say what works and
>> what doesn't.
>>
>
> Suppose we only do this for compilers that claim __GNUC__?

Do other compilers that set __GNUC__ work the same way in this regard?
I can't think of a way to test it reliably.

-- 
M?ns Rullg?rd
mans at mansr.com




More information about the ffmpeg-devel mailing list