[Ffmpeg-devel] gcc4 support & MMX fixups (from Debian)

Loren Merritt lorenm
Thu Feb 2 18:38:56 CET 2006


On Thu, 2 Feb 2006, Mns Rullgrd wrote:
> Pawel Sikora said:
>> On Thu, 2 Feb 2006, Michael Niedermayer wrote:
>>>
>>> On Thu, Feb 02, 2006 at 09:41:37AM +0100, Pawe? Sikora wrote:
>>>>>> I suggest we should use a size_t type for params like *_stride
>>>>>> to avoid (on x86-64) unneeded 32<->64 conversions.
>>>>>
>>>>> no, size_t is unsigned, stride must be signed!
>>>>
>>>> Right, I think off_t from sys/types.h is a good candidate.
>>>> It's signed, on x86-32 has 32 bits, on x86-64 has 64 bits.
>>>
>>> NO!
>>>
>>> -- Data Type: off_t
>>>     This is an arithmetic data type used to represent file sizes.  In
>>>     the GNU system, this is equivalent to `fpos_t' or `long int'.
>>>
>>>     If the source is compiled with `_FILE_OFFSET_BITS == 64' this type
>>>     is transparently replaced by `off64_t'.
>>
>> Ok, last attempt  - ptrdiff_t.
>>
>> C and C++ define a special type for pointer arithmetic, namely ptrdiff_t,
>> which is a typedef of a platform-specific signed integral type. You can
>> use a variable of type ptrdiff_t to store the result of subtracting and
>> adding pointers.
>
> The int_fastXX_t types were invented for exactly this type of situations.
> Specifically, int_fast32_t is 32 bits on 32-bit x86 and 64 bits on x86_64.
>
> Using ptrdiff_t for anything other than things involving pointers is bad.
> There could theoretically exist a machine with 64-bit longs and 32-bit
> pointers.  On one of these, ptrdiff_t could legally be 32 bits, and result
> in the same suboptimal code we wanted to avoid.

The idea was specifically to use ptrdiff_t for strides. A stride is a 
difference between pointers. The reason for wanting 64bit is to avoid a 
conversion to 64bit before adding them to a pointer, not because 64bit 
math is any faster than 32bit math.

--Loren Merritt





More information about the ffmpeg-devel mailing list