[FFmpeg-devel] [RFC] clobbers for XMM registers

Alexander Strange astrange
Fri Oct 1 02:49:04 CEST 2010


On Sep 30, 2010, at 8:31 PM, Michael Niedermayer wrote:

> On Fri, Oct 01, 2010 at 12:42:33AM +0100, M?ns Rullg?rd wrote:
>> Michael Niedermayer <michaelni at gmx.at> writes:
>> 
>>> On Thu, Sep 30, 2010 at 04:02:00PM -0300, Ramiro Polla wrote:
>>>> 2010/9/30 M?ns Rullg?rd <mans at mansr.com>:
>>>>> Ramiro Polla <ramiro.polla at gmail.com> writes:
>>>>>> 2010/9/30 M?ns Rullg?rd <mans at mansr.com>:
>>>>>>> Ramiro Polla <ramiro.polla at gmail.com> writes:
>>>>>>>> What about
>>>>>>>> #if HAVE_XMM_CLOBBERS
>>>>>>>> #    define XMM_CLOBBERS(a, ...) __VA_ARGS__
>>>>>>>> #else
>>>>>>>> #    define XMM_CLOBBERS(a, ...) a
>>>>>>>> #endif
>>>>>>>> 
>>>>>>>> to be used as in lavc/x86/fft_sse.c:
>>>>>>>>         :"+r"(j), "+r"(k)
>>>>>>>>         :"r"(output+n4), "r"(output+n4*3),
>>>>>>>>          "m"(*m1m1m1m1)
>>>>>>>>         XMM_CLOBBERS(, : "%xmm0", "%xmm1", "%xmm7")
>>>>>>>>     );
>>>>>>> 
>>>>>>> That falls over if any other clobbers are needed.
>>>>>> 
>>>>>> If any other clobbers are needed they could be written before the macro.
>>>>> 
>>>>> That won't work.
>>>> 
>>>> : "eax" XMM_CLOBBERS(,, "%xmm0", "%xmm1", "%xmm7")
>>>> 
>>>> But I agree having "cc" as dummy is simpler.
>>> 
>>> it may be simpler but your variant is more correct
>> 
>> If "cc" is a no-op neither variant is more correct.  Mine is a hell of
>> a lot prettier though.
> 
> unless "cc" is documented to be a no-op on x86 we should not assume it is

svn blame on gcc says it hasn't changed since x86 was rewritten in 1999.
(the code in question being ix86_md_asm_clobbers(), in a file too big to display in viewcvs)

I hardly see how it could change now since it would break all users of asm.




More information about the ffmpeg-devel mailing list