svn: contrib/ffmpeg: Work around the fact that there is not enough register available...
[vlc.git] / extras / contrib / src / Patches / ffmpeg-macosx-intel-mmx.patch
1 Index: ffmpeg/libavcodec/i386/dsputil_mmx.c
2 ===================================================================
3 --- ffmpeg/libavcodec/i386/dsputil_mmx.c        (revision 10759)
4 +++ ffmpeg/libavcodec/i386/dsputil_mmx.c        (working copy)
5 @@ -2978,6 +2978,7 @@
6          ::"m"(c), "m"(*ff_pd_1), "m"(*ff_pd_2)
7      );
8  #define WELCH(MOVPD)\
9 +    do {\
10      asm volatile(\
11          "1:                         \n\t"\
12          "movapd   %%xmm7,  %%xmm1   \n\t"\
13 @@ -2985,8 +2986,12 @@
14          "movapd   %%xmm6,  %%xmm0   \n\t"\
15          "subpd    %%xmm1,  %%xmm0   \n\t"\
16          "pshufd   $0x4e,   %%xmm0, %%xmm1 \n\t"\
17 -        "cvtpi2pd (%4,%0), %%xmm2   \n\t"\
18 -        "cvtpi2pd (%5,%1), %%xmm3   \n\t"\
19 +        "cvtpi2pd (%2,%0), %%xmm2   \n\t"\
20 +        "cvtpi2pd (%3,%1), %%xmm3   \n\t"\
21 +        :"+&r"(i), "+&r"(j)\
22 +        :"r"(data+n2), "r"(data+len-2-n2)\
23 +    );\
24 +    asm volatile(\
25          "mulpd    %%xmm0,  %%xmm2   \n\t"\
26          "mulpd    %%xmm1,  %%xmm3   \n\t"\
27          "movapd   %%xmm2, (%2,%0,2) \n\t"\
28 @@ -2996,9 +3001,9 @@
29          "add      $8,      %0       \n\t"\
30          "jl 1b                      \n\t"\
31          :"+&r"(i), "+&r"(j)\
32 -        :"r"(w_data+n2), "r"(w_data+len-2-n2),\
33 -         "r"(data+n2), "r"(data+len-2-n2)\
34 -    );
35 +        :"r"(w_data+n2), "r"(w_data+len-2-n2)\
36 +    );\
37 +    } while(0);
38      if(len&1)
39          WELCH("movupd")
40      else