Changeset 88e3b3e2e1d946eb94ba4fde7f8a20ef44d8825b
- 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
| rbae04ee |
r88e3b3e |
|
| 159 | 159 | } |
|---|
| 160 | 160 | |
|---|
| | 161 | #if 0 |
|---|
| | 162 | static 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 | |
|---|
| 161 | 171 | /* Following functions are local */ |
|---|
| 162 | | |
|---|
| 163 | 172 | /***************************************************************************** |
|---|
| 164 | 173 | * I420_YUY2: planar YUV 4:2:0 to packed YUYV 4:2:2 |
|---|
| … | … | |
| 307 | 316 | #else // defined(MODULE_NAME_IS_i420_yuy2_sse2) |
|---|
| 308 | 317 | /* |
|---|
| 309 | | ** SSE2 128 bytes fetch/store instructions are faster |
|---|
| | 318 | ** SSE2 128 bits fetch/store instructions are faster |
|---|
| 310 | 319 | ** if memory access is 16 bytes aligned |
|---|
| 311 | 320 | */ |
|---|
| | 321 | |
|---|
| 312 | 322 | if( 0 == (15 & (p_source->p[Y_PLANE].i_pitch|p_dest->p->i_pitch| |
|---|
| 313 | 323 | ((int)p_line2|(int)p_y2))) ) |
|---|
| … | … | |
| 367 | 377 | } |
|---|
| 368 | 378 | } |
|---|
| | 379 | |
|---|
| 369 | 380 | #endif // defined(MODULE_NAME_IS_i420_yuy2_sse2) |
|---|
| 370 | 381 | } |
|---|
| … | … | |
| 490 | 501 | #endif |
|---|
| 491 | 502 | } |
|---|
| | 503 | for( i_x = ( p_vout->render.i_width % 8 ) / 2; i_x-- ; ) |
|---|
| | 504 | { |
|---|
| | 505 | C_YUV420_YVYU( ); |
|---|
| | 506 | } |
|---|
| 492 | 507 | |
|---|
| 493 | 508 | p_y1 += i_source_margin; |
|---|
| … | … | |
| 509 | 524 | #else // defined(MODULE_NAME_IS_i420_yuy2_sse2) |
|---|
| 510 | 525 | /* |
|---|
| 511 | | ** SSE2 128 bytes fetch/store instructions are faster |
|---|
| | 526 | ** SSE2 128 bits fetch/store instructions are faster |
|---|
| 512 | 527 | ** if memory access is 16 bytes aligned |
|---|
| 513 | 528 | */ |
|---|
| … | … | |
| 715 | 730 | #else // defined(MODULE_NAME_IS_i420_yuy2_sse2) |
|---|
| 716 | 731 | /* |
|---|
| 717 | | ** SSE2 128 bytes fetch/store instructions are faster |
|---|
| | 732 | ** SSE2 128 bits fetch/store instructions are faster |
|---|
| 718 | 733 | ** if memory access is 16 bytes aligned |
|---|
| 719 | 734 | */ |
|---|
| … | … | |
| 833 | 848 | #endif |
|---|
| 834 | 849 | } |
|---|
| | 850 | for( i_x = ( p_vout->render.i_width % 8 ) / 2; i_x-- ; ) |
|---|
| | 851 | { |
|---|
| | 852 | C_YUV420_UYVY( ); |
|---|
| | 853 | } |
|---|
| 835 | 854 | |
|---|
| 836 | 855 | p_y1 += i_source_margin; |
|---|
| … | … | |
| 848 | 867 | #else // defined(MODULE_NAME_IS_i420_yuy2_sse2) |
|---|
| 849 | 868 | /* |
|---|
| 850 | | ** SSE2 128 bytes fetch/store instructions are faster |
|---|
| | 869 | ** SSE2 128 bits fetch/store instructions are faster |
|---|
| 851 | 870 | ** if memory access is 16 bytes aligned |
|---|
| 852 | 871 | */ |
|---|
| rbae04ee |
r88e3b3e |
|
| 37 | 37 | |
|---|
| 38 | 38 | #define MMX_YUV420_YUYV " \n\ |
|---|
| 39 | | movq (%2), %%mm0 # Load 8 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| 40 | 39 | movd (%4), %%mm1 # Load 4 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| 41 | 40 | movd (%5), %%mm2 # Load 4 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| | 41 | movq (%2), %%mm0 # Load 8 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| | 42 | movq (%3), %%mm3 # Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| 42 | 43 | punpcklbw %%mm2, %%mm1 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| 43 | 44 | movq %%mm0, %%mm2 # y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| … | … | |
| 46 | 47 | punpckhbw %%mm1, %%mm0 # v3 y7 u3 y6 v2 y5 u2 y4 \n\ |
|---|
| 47 | 48 | movq %%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\ |
|---|
| | 49 | movq %%mm3, %%mm4 # Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| | 50 | punpcklbw %%mm1, %%mm4 # v1 Y3 u1 Y2 v0 Y1 u0 Y0 \n\ |
|---|
| | 51 | movq %%mm4, (%1) # Store low YUYV \n\ |
|---|
| | 52 | punpckhbw %%mm1, %%mm3 # v3 Y7 u3 Y6 v2 Y5 u2 Y4 \n\ |
|---|
| | 53 | movq %%mm3, 8(%1) # Store high YUYV \n\ |
|---|
| 54 | 54 | " |
|---|
| 55 | 55 | |
|---|
| 56 | 56 | #define MMX_YUV420_YVYU " \n\ |
|---|
| 57 | | movq (%2), %%mm0 # Load 8 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| 58 | 57 | movd (%4), %%mm2 # Load 4 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| 59 | 58 | movd (%5), %%mm1 # Load 4 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| | 59 | movq (%2), %%mm0 # Load 8 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| | 60 | movq (%3), %%mm3 # Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| 60 | 61 | punpcklbw %%mm2, %%mm1 # u3 v3 u2 v2 u1 v1 u0 v0 \n\ |
|---|
| 61 | 62 | movq %%mm0, %%mm2 # y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| … | … | |
| 64 | 65 | punpckhbw %%mm1, %%mm0 # u3 y7 v3 y6 u2 y5 v2 y4 \n\ |
|---|
| 65 | 66 | movq %%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\ |
|---|
| | 67 | movq %%mm3, %%mm4 # Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| | 68 | punpcklbw %%mm1, %%mm4 # u1 Y3 v1 Y2 u0 Y1 v0 Y0 \n\ |
|---|
| | 69 | movq %%mm4, (%1) # Store low YUYV \n\ |
|---|
| | 70 | punpckhbw %%mm1, %%mm3 # u3 Y7 v3 Y6 u2 Y5 v2 Y4 \n\ |
|---|
| | 71 | movq %%mm3, 8(%1) # Store high YUYV \n\ |
|---|
| 72 | 72 | " |
|---|
| 73 | 73 | |
|---|
| 74 | 74 | #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\ |
|---|
| 77 | 75 | movd (%4), %%mm1 # Load 4 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| 78 | 76 | movd (%5), %%mm2 # Load 4 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| | 77 | movq (%2), %%mm0 # Load 8 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| | 78 | movq (%3), %%mm3 # Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| 79 | 79 | punpcklbw %%mm2, %%mm1 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| 80 | 80 | movq %%mm1, %%mm2 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| … | … | |
| 84 | 84 | punpckhbw %%mm0, %%mm2 # y3 v1 y2 u1 y1 v0 y0 u0 \n\ |
|---|
| 85 | 85 | movq %%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\ |
|---|
| | 86 | movq %%mm1, %%mm4 # u3 v3 u2 v2 u1 v1 u0 v0 \n\ |
|---|
| | 87 | punpcklbw %%mm3, %%mm4 # Y3 v1 Y2 u1 Y1 v0 Y0 u0 \n\ |
|---|
| | 88 | movq %%mm4, (%1) # Store low UYVY \n\ |
|---|
| 89 | 89 | punpckhbw %%mm3, %%mm1 # Y7 v3 Y6 u3 Y5 v2 Y4 u2 \n\ |
|---|
| 90 | 90 | movq %%mm1, 8(%1) # Store high UYVY \n\ |
|---|
| … | … | |
| 130 | 130 | |
|---|
| 131 | 131 | #define SSE2_YUV420_YUYV_ALIGNED " \n\ |
|---|
| 132 | | movdqa (%2), %%xmm0 # Load 16 Y y15 y14 y13 .. y2 y1 y0 \n\ |
|---|
| 133 | 132 | movq (%4), %%xmm1 # Load 8 Cb u7 u6 u5 u4 u3 u2 u1 u0 \n\ |
|---|
| 134 | 133 | movq (%5), %%xmm2 # Load 8 Cr v7 06 v5 v4 v3 v2 v1 v0 \n\ |
|---|
| | 134 | movdqa (%2), %%xmm0 # Load 16 Y y15 y14 y13 .. y2 y1 y0 \n\ |
|---|
| | 135 | movdqa (%3), %%xmm3 # Load 16 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| 135 | 136 | punpcklbw %%xmm2, %%xmm1 # v7 u7 v6 u6 .. u1 v0 u0 \n\ |
|---|
| 136 | 137 | movdqa %%xmm0, %%xmm2 # y15 y14 y13 .. y2 y1 y0 \n\ |
|---|
| … | … | |
| 139 | 140 | punpckhbw %%xmm1, %%xmm0 # v3 y7 u3 y6 v2 y5 u2 y4 \n\ |
|---|
| 140 | 141 | movdqa %%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\ |
|---|
| | 142 | movdqa %%xmm3, %%xmm4 # Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| | 143 | punpcklbw %%xmm1, %%xmm4 # v1 Y3 u1 Y2 v0 Y1 u0 Y0 \n\ |
|---|
| | 144 | movdqa %%xmm4, (%1) # Store low YUYV \n\ |
|---|
| | 145 | punpckhbw %%xmm1, %%xmm3 # v3 Y7 u3 Y6 v2 Y5 u2 Y4 \n\ |
|---|
| | 146 | movdqa %%xmm3, 16(%1) # Store high YUYV \n\ |
|---|
| 147 | 147 | " |
|---|
| 148 | 148 | |
|---|
| 149 | 149 | #define SSE2_YUV420_YUYV_UNALIGNED " \n\ |
|---|
| 150 | | movdqu (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| 151 | 150 | movq (%4), %%xmm1 # Load 8 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| 152 | 151 | movq (%5), %%xmm2 # Load 8 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| | 152 | movdqu (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| | 153 | movdqu (%3), %%xmm3 # Load 16 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| 153 | 154 | punpcklbw %%xmm2, %%xmm1 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| 154 | 155 | movdqa %%xmm0, %%xmm2 # y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| … | … | |
| 157 | 158 | punpckhbw %%xmm1, %%xmm0 # v3 y7 u3 y6 v2 y5 u2 y4 \n\ |
|---|
| 158 | 159 | movdqu %%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\ |
|---|
| | 160 | movdqa %%xmm3, %%xmm4 # Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| | 161 | punpcklbw %%xmm1, %%xmm4 # v1 Y3 u1 Y2 v0 Y1 u0 Y0 \n\ |
|---|
| | 162 | movdqu %%xmm4, (%1) # Store low YUYV \n\ |
|---|
| | 163 | punpckhbw %%xmm1, %%xmm3 # v3 Y7 u3 Y6 v2 Y5 u2 Y4 \n\ |
|---|
| | 164 | movdqu %%xmm3, 16(%1) # Store high YUYV \n\ |
|---|
| 165 | 165 | " |
|---|
| 166 | 166 | |
|---|
| 167 | 167 | #define SSE2_YUV420_YVYU_ALIGNED " \n\ |
|---|
| 168 | | movdqa (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| 169 | 168 | movq (%4), %%xmm2 # Load 8 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| 170 | 169 | movq (%5), %%xmm1 # Load 8 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| | 170 | movdqa (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| | 171 | movdqa (%3), %%xmm3 # Load 16 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| 171 | 172 | punpcklbw %%xmm2, %%xmm1 # u3 v3 u2 v2 u1 v1 u0 v0 \n\ |
|---|
| 172 | 173 | movdqa %%xmm0, %%xmm2 # y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| … | … | |
| 175 | 176 | punpckhbw %%xmm1, %%xmm0 # u3 y7 v3 y6 u2 y5 v2 y4 \n\ |
|---|
| 176 | 177 | movdqa %%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\ |
|---|
| | 178 | movdqa %%xmm3, %%xmm4 # Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| | 179 | punpcklbw %%xmm1, %%xmm4 # u1 Y3 v1 Y2 u0 Y1 v0 Y0 \n\ |
|---|
| | 180 | movdqa %%xmm4, (%1) # Store low YUYV \n\ |
|---|
| | 181 | punpckhbw %%xmm1, %%xmm3 # u3 Y7 v3 Y6 u2 Y5 v2 Y4 \n\ |
|---|
| | 182 | movdqa %%xmm3, 16(%1) # Store high YUYV \n\ |
|---|
| 183 | 183 | " |
|---|
| 184 | 184 | |
|---|
| 185 | 185 | #define SSE2_YUV420_YVYU_UNALIGNED " \n\ |
|---|
| 186 | | movdqu (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| 187 | 186 | movq (%4), %%xmm2 # Load 8 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| 188 | 187 | movq (%5), %%xmm1 # Load 8 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| | 188 | movdqu (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| | 189 | movdqu (%3), %%xmm3 # Load 16 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| 189 | 190 | punpcklbw %%xmm2, %%xmm1 # u3 v3 u2 v2 u1 v1 u0 v0 \n\ |
|---|
| 190 | 191 | movdqu %%xmm0, %%xmm2 # y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| … | … | |
| 193 | 194 | punpckhbw %%xmm1, %%xmm0 # u3 y7 v3 y6 u2 y5 v2 y4 \n\ |
|---|
| 194 | 195 | movdqu %%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\ |
|---|
| | 196 | movdqu %%xmm3, %%xmm4 # Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 \n\ |
|---|
| | 197 | punpcklbw %%xmm1, %%xmm4 # u1 Y3 v1 Y2 u0 Y1 v0 Y0 \n\ |
|---|
| | 198 | movdqu %%xmm4, (%1) # Store low YUYV \n\ |
|---|
| | 199 | punpckhbw %%xmm1, %%xmm3 # u3 Y7 v3 Y6 u2 Y5 v2 Y4 \n\ |
|---|
| | 200 | movdqu %%xmm3, 16(%1) # Store high YUYV \n\ |
|---|
| 201 | 201 | " |
|---|
| 202 | 202 | |
|---|
| 203 | 203 | #define SSE2_YUV420_UYVY_ALIGNED " \n\ |
|---|
| | 204 | movq (%4), %%xmm1 # Load 8 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| | 205 | movq (%5), %%xmm2 # Load 8 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| 204 | 206 | movdqa (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| 205 | 207 | movdqa (%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\ |
|---|
| 208 | 208 | punpcklbw %%xmm2, %%xmm1 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| 209 | 209 | movdqa %%xmm1, %%xmm2 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| … | … | |
| 213 | 213 | punpckhbw %%xmm0, %%xmm2 # y3 v1 y2 u1 y1 v0 y0 u0 \n\ |
|---|
| 214 | 214 | movdqa %%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\ |
|---|
| | 215 | movdqa %%xmm1, %%xmm4 # u3 v3 u2 v2 u1 v1 u0 v0 \n\ |
|---|
| | 216 | punpcklbw %%xmm3, %%xmm4 # Y3 v1 Y2 u1 Y1 v0 Y0 u0 \n\ |
|---|
| | 217 | movdqa %%xmm4, (%1) # Store low UYVY \n\ |
|---|
| 218 | 218 | punpckhbw %%xmm3, %%xmm1 # Y7 v3 Y6 u3 Y5 v2 Y4 u2 \n\ |
|---|
| 219 | 219 | movdqa %%xmm1, 16(%1) # Store high UYVY \n\ |
|---|
| … | … | |
| 221 | 221 | |
|---|
| 222 | 222 | #define SSE2_YUV420_UYVY_UNALIGNED " \n\ |
|---|
| | 223 | movq (%4), %%xmm1 # Load 8 Cb 00 00 00 00 u3 u2 u1 u0 \n\ |
|---|
| | 224 | movq (%5), %%xmm2 # Load 8 Cr 00 00 00 00 v3 v2 v1 v0 \n\ |
|---|
| 223 | 225 | movdqu (%2), %%xmm0 # Load 16 Y y7 y6 y5 y4 y3 y2 y1 y0 \n\ |
|---|
| 224 | 226 | movdqu (%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\ |
|---|
| 227 | 227 | punpcklbw %%xmm2, %%xmm1 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| 228 | 228 | movdqu %%xmm1, %%xmm2 # v3 u3 v2 u2 v1 u1 v0 u0 \n\ |
|---|
| … | … | |
| 232 | 232 | punpckhbw %%xmm0, %%xmm2 # y3 v1 y2 u1 y1 v0 y0 u0 \n\ |
|---|
| 233 | 233 | movdqu %%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\ |
|---|
| | 234 | movdqu %%xmm1, %%xmm4 # u3 v3 u2 v2 u1 v1 u0 v0 \n\ |
|---|
| | 235 | punpcklbw %%xmm3, %%xmm4 # Y3 v1 Y2 u1 Y1 v0 Y0 u0 \n\ |
|---|
| | 236 | movdqu %%xmm4, (%1) # Store low UYVY \n\ |
|---|
| 237 | 237 | punpckhbw %%xmm3, %%xmm1 # Y7 v3 Y6 u3 Y5 v2 Y4 u2 \n\ |
|---|
| 238 | 238 | movdqu %%xmm1, 16(%1) # Store high UYVY \n\ |
|---|