[FFmpeg-devel] [PATCH] h264: assembly version of get_cabac for x86_64 with PIC

Roland Scheidegger rscheidegger_lists at hispeed.ch
Mon Apr 16 15:50:09 CEST 2012


Am 16.04.2012 14:06, schrieb Michael Niedermayer:
> On Mon, Apr 16, 2012 at 12:55:20PM +0200, Roland Scheidegger wrote:
>> Am 15.04.2012 10:19, schrieb Michael Niedermayer:
>>> On Sat, Apr 14, 2012 at 01:50:21AM +0200, Roland Scheidegger wrote:
>>> [...]
>>>
>>>> +#ifdef BROKEN_RELOCATIONS
>>>> +        BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3",
>>>> +                             "%5", "%q5", "%k0", "%b0",
>>>> +                             "%a11(%6)", "%a12(%6)", "%13")
>>>> +#else
>>>>          BRANCHLESS_GET_CABAC("%4", "(%1)", "%3", "%w3",
>>>>                               "%5", "%k0", "%b0",
>>>>                               "%a11(%6)", "%a12(%6)")
>>>> +#endif
>>>>  
>>>>          "test $1, %4                            \n\t"
>>>>          " jz 4f                                 \n\t"
>>>>          "add  %10, %1                           \n\t"
>>>>  
>>>> +#ifdef BROKEN_RELOCATIONS
>>>> +        BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3",
>>>> +                             "%5", "%q5", "%k0", "%b0",
>>>> +                             "%a11(%6)", "%a12(%6)", "%13")
>>>> +#else
>>>>          BRANCHLESS_GET_CABAC("%4", "(%1)", "%3", "%w3",
>>>>                               "%5", "%k0", "%b0",
>>>>                               "%a11(%6)", "%a12(%6)")
>>>> +#endif
>>>>  
>>>>          "sub  %10, %1                           \n\t"
>>>>          "mov  %2, %0                            \n\t"
>>>
>>> these 2 ifdefs can be avoided by making the macro arguments between
>>> the 2 variants match
>>
>> Of course but then you have unnecessary arguments for the non-pic case.
>> In particular also one reg more. I don't think that's a good idea -
>> didn't test if it even compiles on x86 due to register pressure.
> 
> iam talking about the macro arguments, not the asm arguments.
> The code would be identical after the C preprocessor so no way there
> could be any issue with anything, you have same C source to the
> C compiler and same asm to the assembler and binary identical object
> files except line numbers / debug symbols
> 
Maybe I'm missing some macro-foo (which I'm bad at) but I still don't
see how that should look like, since the macro arguments directly come
from the operand specification of the inline assembly. Or do you suggest
passing in some fake immediate (which will be unused) there or something
similar instead of a reg if we don't need the pic version?

Roland


More information about the ffmpeg-devel mailing list