Changeset 88e3b3e2e1d946eb94ba4fde7f8a20ef44d8825b

Show
Ignore:
Timestamp:
06/01/07 16:23:25 (1 year ago)
Author:
Damien Fouilleul <damienf@videolan.org>
git-committer:
Damien Fouilleul <damienf@videolan.org> 1180707805 +0000
git-parent:

[be2879d8232e60b386382017839e9649a1cc9c8d]

git-author:
Damien Fouilleul <damienf@videolan.org> 1180707805 +0000
Message:

chromas converstion: optimize MMX/SSE acceleration even more by leveraging out of order execution, basically avoid CPU stalls by using more registers and by spacing memory fetch and use as much as possible (CPU will run available instructions while waiting for memory fecth to complete)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/video_chroma/i420_yuy2.c

    rbae04ee r88e3b3e  
    159159} 
    160160 
     161#if 0 
     162static inline unsigned long long read_cycles(void) 
     163{ 
     164    unsigned long long v; 
     165    __asm__ __volatile__("rdtsc" : "=A" (v): ); 
     166 
     167    return v; 
     168} 
     169#endif 
     170 
    161171/* Following functions are local */ 
    162  
    163172/***************************************************************************** 
    164173 * I420_YUY2: planar YUV 4:2:0 to packed YUYV 4:2:2 
     
    307316#else // defined(MODULE_NAME_IS_i420_yuy2_sse2) 
    308317    /* 
    309     ** SSE2 128 bytes fetch/store instructions are faster  
     318    ** SSE2 128 bits fetch/store instructions are faster  
    310319    ** if memory access is 16 bytes aligned 
    311320    */ 
     321 
    312322    if( 0 == (15 & (p_source->p[Y_PLANE].i_pitch|p_dest->p->i_pitch| 
    313323        ((int)p_line2|(int)p_y2))) ) 
     
    367377        } 
    368378    } 
     379 
    369380#endif // defined(MODULE_NAME_IS_i420_yuy2_sse2) 
    370381} 
     
    490501#endif 
    491502        } 
     503        for( i_x = ( p_vout->render.i_width % 8 ) / 2; i_x-- ; ) 
     504        { 
     505            C_YUV420_YVYU( ); 
     506        } 
    492507 
    493508        p_y1 += i_source_margin; 
     
    509524#else // defined(MODULE_NAME_IS_i420_yuy2_sse2) 
    510525    /* 
    511     ** SSE2 128 bytes fetch/store instructions are faster  
     526    ** SSE2 128 bits fetch/store instructions are faster  
    512527    ** if memory access is 16 bytes aligned 
    513528    */ 
     
    715730#else // defined(MODULE_NAME_IS_i420_yuy2_sse2) 
    716731    /* 
    717     ** SSE2 128 bytes fetch/store instructions are faster  
     732    ** SSE2 128 bits fetch/store instructions are faster  
    718733    ** if memory access is 16 bytes aligned 
    719734    */ 
     
    833848#endif 
    834849        } 
     850        for( i_x = ( p_vout->render.i_width % 8 ) / 2; i_x-- ; ) 
     851        { 
     852            C_YUV420_UYVY( ); 
     853        } 
    835854 
    836855        p_y1 += i_source_margin; 
     
    848867#else // defined(MODULE_NAME_IS_i420_yuy2_sse2) 
    849868    /* 
    850     ** SSE2 128 bytes fetch/store instructions are faster  
     869    ** SSE2 128 bits fetch/store instructions are faster  
    851870    ** if memory access is 16 bytes aligned 
    852871    */ 
  • modules/video_chroma/i420_yuy2.h

    rbae04ee r88e3b3e  
    3737 
    3838#define MMX_YUV420_YUYV "                                                 \n\ 
    39 movq       (%2), %%mm0  # Load 8 Y            y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    4039movd       (%4), %%mm1  # Load 4 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
    4140movd       (%5), %%mm2  # Load 4 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
     41movq       (%2), %%mm0  # Load 8 Y            y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     42movq       (%3), %%mm3  # Load 8 Y            Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    4243punpcklbw %%mm2, %%mm1  #                     v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
    4344movq      %%mm0, %%mm2  #                     y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     
    4647punpckhbw %%mm1, %%mm0  #                     v3 y7 u3 y6 v2 y5 u2 y4     \n\ 
    4748movq      %%mm0, 8(%0)  # Store high YUYV                                 \n\ 
    48 movq       (%3), %%mm0  # Load 8 Y            Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    49 movq      %%mm0, %%mm2  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    50 punpcklbw %%mm1, %%mm2  #                     v1 Y3 u1 Y2 v0 Y1 u0 Y0     \n\ 
    51 movq      %%mm2, (%1)   # Store low YUYV                                  \n\ 
    52 punpckhbw %%mm1, %%mm0  #                     v3 Y7 u3 Y6 v2 Y5 u2 Y4     \n\ 
    53 movq      %%mm0, 8(%1)  # Store high YUYV                                 \n\ 
     49movq      %%mm3, %%mm4  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
     50punpcklbw %%mm1, %%mm4  #                     v1 Y3 u1 Y2 v0 Y1 u0 Y0     \n\ 
     51movq      %%mm4, (%1)   # Store low YUYV                                  \n\ 
     52punpckhbw %%mm1, %%mm3  #                     v3 Y7 u3 Y6 v2 Y5 u2 Y4     \n\ 
     53movq      %%mm3, 8(%1)  # Store high YUYV                                 \n\ 
    5454" 
    5555 
    5656#define MMX_YUV420_YVYU "                                                 \n\ 
    57 movq       (%2), %%mm0  # Load 8 Y            y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    5857movd       (%4), %%mm2  # Load 4 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
    5958movd       (%5), %%mm1  # Load 4 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
     59movq       (%2), %%mm0  # Load 8 Y            y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     60movq       (%3), %%mm3  # Load 8 Y            Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    6061punpcklbw %%mm2, %%mm1  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
    6162movq      %%mm0, %%mm2  #                     y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     
    6465punpckhbw %%mm1, %%mm0  #                     u3 y7 v3 y6 u2 y5 v2 y4     \n\ 
    6566movq      %%mm0, 8(%0)  # Store high YUYV                                 \n\ 
    66 movq       (%3), %%mm0  # Load 8 Y            Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    67 movq      %%mm0, %%mm2  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    68 punpcklbw %%mm1, %%mm2  #                     u1 Y3 v1 Y2 u0 Y1 v0 Y0     \n\ 
    69 movq      %%mm2, (%1)   # Store low YUYV                                  \n\ 
    70 punpckhbw %%mm1, %%mm0  #                     u3 Y7 v3 Y6 u2 Y5 v2 Y4     \n\ 
    71 movq      %%mm0, 8(%1)  # Store high YUYV                                 \n\ 
     67movq      %%mm3, %%mm4  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
     68punpcklbw %%mm1, %%mm4  #                     u1 Y3 v1 Y2 u0 Y1 v0 Y0     \n\ 
     69movq      %%mm4, (%1)   # Store low YUYV                                  \n\ 
     70punpckhbw %%mm1, %%mm3  #                     u3 Y7 v3 Y6 u2 Y5 v2 Y4     \n\ 
     71movq      %%mm3, 8(%1)  # Store high YUYV                                 \n\ 
    7272" 
    7373 
    7474#define MMX_YUV420_UYVY "                                                 \n\ 
    75 movq       (%2), %%mm0  # Load 8 Y            y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    76 movq       (%3), %%mm3  # Load 8 Y            Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    7775movd       (%4), %%mm1  # Load 4 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
    7876movd       (%5), %%mm2  # Load 4 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
     77movq       (%2), %%mm0  # Load 8 Y            y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     78movq       (%3), %%mm3  # Load 8 Y            Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    7979punpcklbw %%mm2, %%mm1  #                     v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
    8080movq      %%mm1, %%mm2  #                     v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
     
    8484punpckhbw %%mm0, %%mm2  #                     y3 v1 y2 u1 y1 v0 y0 u0     \n\ 
    8585movq      %%mm2, 8(%0)  # Store high UYVY                                 \n\ 
    86 movq      %%mm1, %%mm2  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
    87 punpcklbw %%mm3, %%mm2  #                     Y3 v1 Y2 u1 Y1 v0 Y0 u0     \n\ 
    88 movq      %%mm2, (%1)   # Store low UYVY                                  \n\ 
     86movq      %%mm1, %%mm4  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
     87punpcklbw %%mm3, %%mm4  #                     Y3 v1 Y2 u1 Y1 v0 Y0 u0     \n\ 
     88movq      %%mm4, (%1)   # Store low UYVY                                  \n\ 
    8989punpckhbw %%mm3, %%mm1  #                     Y7 v3 Y6 u3 Y5 v2 Y4 u2     \n\ 
    9090movq      %%mm1, 8(%1)  # Store high UYVY                                 \n\ 
     
    130130 
    131131#define SSE2_YUV420_YUYV_ALIGNED "                                        \n\ 
    132 movdqa      (%2), %%xmm0  # Load 16 Y         y15 y14 y13 .. y2 y1 y0     \n\ 
    133132movq        (%4), %%xmm1  # Load 8 Cb         u7 u6 u5 u4 u3 u2 u1 u0     \n\ 
    134133movq        (%5), %%xmm2  # Load 8 Cr         v7 06 v5 v4 v3 v2 v1 v0     \n\ 
     134movdqa      (%2), %%xmm0  # Load 16 Y         y15 y14 y13 .. y2 y1 y0     \n\ 
     135movdqa      (%3), %%xmm3  # Load 16 Y         Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    135136punpcklbw %%xmm2, %%xmm1  #                   v7 u7 v6 u6 .. u1 v0 u0     \n\ 
    136137movdqa    %%xmm0, %%xmm2  #                   y15 y14 y13 .. y2 y1 y0     \n\ 
     
    139140punpckhbw %%xmm1, %%xmm0  #                   v3 y7 u3 y6 v2 y5 u2 y4     \n\ 
    140141movdqa    %%xmm0, 16(%0)  # Store high YUYV                               \n\ 
    141 movdqa      (%3), %%xmm0  # Load 8 Y          Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    142 movdqa    %%xmm0, %%xmm2  #                   Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    143 punpcklbw %%xmm1, %%xmm2  #                   v1 Y3 u1 Y2 v0 Y1 u0 Y0     \n\ 
    144 movdqa    %%xmm2, (%1)    # Store low YUYV                                \n\ 
    145 punpckhbw %%xmm1, %%xmm0  #                   v3 Y7 u3 Y6 v2 Y5 u2 Y4     \n\ 
    146 movdqa    %%xmm0, 16(%1)  # Store high YUYV                               \n\ 
     142movdqa    %%xmm3, %%xmm4  #                   Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
     143punpcklbw %%xmm1, %%xmm4  #                   v1 Y3 u1 Y2 v0 Y1 u0 Y0     \n\ 
     144movdqa    %%xmm4, (%1)    # Store low YUYV                                \n\ 
     145punpckhbw %%xmm1, %%xmm3  #                   v3 Y7 u3 Y6 v2 Y5 u2 Y4     \n\ 
     146movdqa    %%xmm3, 16(%1)  # Store high YUYV                               \n\ 
    147147" 
    148148 
    149149#define SSE2_YUV420_YUYV_UNALIGNED "                                      \n\ 
    150 movdqu      (%2), %%xmm0  # Load 16 Y         y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    151150movq        (%4), %%xmm1  # Load 8 Cb         00 00 00 00 u3 u2 u1 u0     \n\ 
    152151movq        (%5), %%xmm2  # Load 8 Cr         00 00 00 00 v3 v2 v1 v0     \n\ 
     152movdqu      (%2), %%xmm0  # Load 16 Y         y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     153movdqu      (%3), %%xmm3  # Load 16 Y         Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    153154punpcklbw %%xmm2, %%xmm1  #                   v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
    154155movdqa    %%xmm0, %%xmm2  #                   y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     
    157158punpckhbw %%xmm1, %%xmm0  #                   v3 y7 u3 y6 v2 y5 u2 y4     \n\ 
    158159movdqu    %%xmm0, 16(%0)  # Store high YUYV                               \n\ 
    159 movdqu      (%3), %%xmm0  # Load 16 Y         Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    160 movdqa    %%xmm0, %%xmm2  #                   Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    161 punpcklbw %%xmm1, %%xmm2  #                   v1 Y3 u1 Y2 v0 Y1 u0 Y0     \n\ 
    162 movdqu    %%xmm2, (%1)    # Store low YUYV                                \n\ 
    163 punpckhbw %%xmm1, %%xmm0  #                   v3 Y7 u3 Y6 v2 Y5 u2 Y4     \n\ 
    164 movdqu    %%xmm0, 16(%1)  # Store high YUYV                               \n\ 
     160movdqa    %%xmm3, %%xmm4  #                   Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
     161punpcklbw %%xmm1, %%xmm4  #                   v1 Y3 u1 Y2 v0 Y1 u0 Y0     \n\ 
     162movdqu    %%xmm4, (%1)    # Store low YUYV                                \n\ 
     163punpckhbw %%xmm1, %%xmm3  #                   v3 Y7 u3 Y6 v2 Y5 u2 Y4     \n\ 
     164movdqu    %%xmm3, 16(%1)  # Store high YUYV                               \n\ 
    165165" 
    166166 
    167167#define SSE2_YUV420_YVYU_ALIGNED "                                          \n\ 
    168 movdqa      (%2), %%xmm0  # Load 16 Y           y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    169168movq        (%4), %%xmm2  # Load 8 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
    170169movq        (%5), %%xmm1  # Load 8 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
     170movdqa      (%2), %%xmm0  # Load 16 Y           y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     171movdqa      (%3), %%xmm3  # Load 16 Y           Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    171172punpcklbw %%xmm2, %%xmm1  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
    172173movdqa    %%xmm0, %%xmm2  #                     y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     
    175176punpckhbw %%xmm1, %%xmm0  #                     u3 y7 v3 y6 u2 y5 v2 y4     \n\ 
    176177movdqa    %%xmm0, 16(%0)  # Store high YUYV                                 \n\ 
    177 movdqa      (%3), %%xmm0  # Load 16 Y           Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    178 movdqa    %%xmm0, %%xmm2  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    179 punpcklbw %%xmm1, %%xmm2  #                     u1 Y3 v1 Y2 u0 Y1 v0 Y0     \n\ 
    180 movdqa    %%xmm2, (%1)    # Store low YUYV                                  \n\ 
    181 punpckhbw %%xmm1, %%xmm0  #                     u3 Y7 v3 Y6 u2 Y5 v2 Y4     \n\ 
    182 movdqa    %%xmm0, 16(%1)  # Store high YUYV                                 \n\ 
     178movdqa    %%xmm3, %%xmm4  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
     179punpcklbw %%xmm1, %%xmm4  #                     u1 Y3 v1 Y2 u0 Y1 v0 Y0     \n\ 
     180movdqa    %%xmm4, (%1)    # Store low YUYV                                  \n\ 
     181punpckhbw %%xmm1, %%xmm3  #                     u3 Y7 v3 Y6 u2 Y5 v2 Y4     \n\ 
     182movdqa    %%xmm3, 16(%1)  # Store high YUYV                                 \n\ 
    183183" 
    184184 
    185185#define SSE2_YUV420_YVYU_UNALIGNED "                                        \n\ 
    186 movdqu      (%2), %%xmm0  # Load 16 Y           y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    187186movq        (%4), %%xmm2  # Load 8 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
    188187movq        (%5), %%xmm1  # Load 8 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
     188movdqu      (%2), %%xmm0  # Load 16 Y           y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     189movdqu      (%3), %%xmm3  # Load 16 Y           Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    189190punpcklbw %%xmm2, %%xmm1  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
    190191movdqu    %%xmm0, %%xmm2  #                     y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
     
    193194punpckhbw %%xmm1, %%xmm0  #                     u3 y7 v3 y6 u2 y5 v2 y4     \n\ 
    194195movdqu    %%xmm0, 16(%0)  # Store high YUYV                                 \n\ 
    195 movdqu      (%3), %%xmm0  # Load 16 Y           Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    196 movdqu    %%xmm0, %%xmm2  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    197 punpcklbw %%xmm1, %%xmm2  #                     u1 Y3 v1 Y2 u0 Y1 v0 Y0     \n\ 
    198 movdqu    %%xmm2, (%1)    # Store low YUYV                                  \n\ 
    199 punpckhbw %%xmm1, %%xmm0  #                     u3 Y7 v3 Y6 u2 Y5 v2 Y4     \n\ 
    200 movdqu    %%xmm0, 16(%1)  # Store high YUYV                                 \n\ 
     196movdqu    %%xmm3, %%xmm4  #                     Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
     197punpcklbw %%xmm1, %%xmm4  #                     u1 Y3 v1 Y2 u0 Y1 v0 Y0     \n\ 
     198movdqu    %%xmm4, (%1)    # Store low YUYV                                  \n\ 
     199punpckhbw %%xmm1, %%xmm3  #                     u3 Y7 v3 Y6 u2 Y5 v2 Y4     \n\ 
     200movdqu    %%xmm3, 16(%1)  # Store high YUYV                                 \n\ 
    201201" 
    202202 
    203203#define SSE2_YUV420_UYVY_ALIGNED "                                          \n\ 
     204movq        (%4), %%xmm1  # Load 8 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
     205movq        (%5), %%xmm2  # Load 8 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
    204206movdqa      (%2), %%xmm0  # Load 16 Y           y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    205207movdqa      (%3), %%xmm3  # Load 16 Y           Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    206 movq        (%4), %%xmm1  # Load 8 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
    207 movq        (%5), %%xmm2  # Load 8 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
    208208punpcklbw %%xmm2, %%xmm1  #                     v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
    209209movdqa    %%xmm1, %%xmm2  #                     v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
     
    213213punpckhbw %%xmm0, %%xmm2  #                     y3 v1 y2 u1 y1 v0 y0 u0     \n\ 
    214214movdqa    %%xmm2, 16(%0)  # Store high UYVY                                 \n\ 
    215 movdqa    %%xmm1, %%xmm2  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
    216 punpcklbw %%xmm3, %%xmm2  #                     Y3 v1 Y2 u1 Y1 v0 Y0 u0     \n\ 
    217 movdqa    %%xmm2, (%1)    # Store low UYVY                                  \n\ 
     215movdqa    %%xmm1, %%xmm4  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
     216punpcklbw %%xmm3, %%xmm4  #                     Y3 v1 Y2 u1 Y1 v0 Y0 u0     \n\ 
     217movdqa    %%xmm4, (%1)    # Store low UYVY                                  \n\ 
    218218punpckhbw %%xmm3, %%xmm1  #                     Y7 v3 Y6 u3 Y5 v2 Y4 u2     \n\ 
    219219movdqa    %%xmm1, 16(%1)  # Store high UYVY                                 \n\ 
     
    221221 
    222222#define SSE2_YUV420_UYVY_UNALIGNED "                                        \n\ 
     223movq        (%4), %%xmm1  # Load 8 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
     224movq        (%5), %%xmm2  # Load 8 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
    223225movdqu      (%2), %%xmm0  # Load 16 Y           y7 y6 y5 y4 y3 y2 y1 y0     \n\ 
    224226movdqu      (%3), %%xmm3  # Load 16 Y           Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0     \n\ 
    225 movq        (%4), %%xmm1  # Load 8 Cb           00 00 00 00 u3 u2 u1 u0     \n\ 
    226 movq        (%5), %%xmm2  # Load 8 Cr           00 00 00 00 v3 v2 v1 v0     \n\ 
    227227punpcklbw %%xmm2, %%xmm1  #                     v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
    228228movdqu    %%xmm1, %%xmm2  #                     v3 u3 v2 u2 v1 u1 v0 u0     \n\ 
     
    232232punpckhbw %%xmm0, %%xmm2  #                     y3 v1 y2 u1 y1 v0 y0 u0     \n\ 
    233233movdqu    %%xmm2, 16(%0)  # Store high UYVY                                 \n\ 
    234 movdqu    %%xmm1, %%xmm2  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
    235 punpcklbw %%xmm3, %%xmm2  #                     Y3 v1 Y2 u1 Y1 v0 Y0 u0     \n\ 
    236 movdqu    %%xmm2, (%1)    # Store low UYVY                                  \n\ 
     234movdqu    %%xmm1, %%xmm4  #                     u3 v3 u2 v2 u1 v1 u0 v0     \n\ 
     235punpcklbw %%xmm3, %%xmm4  #                     Y3 v1 Y2 u1 Y1 v0 Y0 u0     \n\ 
     236movdqu    %%xmm4, (%1)    # Store low UYVY                                  \n\ 
    237237punpckhbw %%xmm3, %%xmm1  #                     Y7 v3 Y6 u3 Y5 v2 Y4 u2     \n\ 
    238238movdqu    %%xmm1, 16(%1)  # Store high UYVY                                 \n\