• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

libswscale/swscale_template.c

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
00003  *
00004  * This file is part of FFmpeg.
00005  *
00006  * FFmpeg is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2 of the License, or
00009  * (at your option) any later version.
00010  *
00011  * FFmpeg is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with FFmpeg; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
00019  *
00020  * The C code (not assembly, MMX, ...) of this file can be used
00021  * under the LGPL license.
00022  */
00023 
00024 #undef REAL_MOVNTQ
00025 #undef MOVNTQ
00026 #undef PAVGB
00027 #undef PREFETCH
00028 #undef PREFETCHW
00029 #undef EMMS
00030 #undef SFENCE
00031 
00032 #if HAVE_AMD3DNOW
00033 /* On K6 femms is faster than emms. On K7 femms is directly mapped to emms. */
00034 #define EMMS     "femms"
00035 #else
00036 #define EMMS     "emms"
00037 #endif
00038 
00039 #if HAVE_AMD3DNOW
00040 #define PREFETCH  "prefetch"
00041 #define PREFETCHW "prefetchw"
00042 #elif HAVE_MMX2
00043 #define PREFETCH "prefetchnta"
00044 #define PREFETCHW "prefetcht0"
00045 #else
00046 #define PREFETCH  " # nop"
00047 #define PREFETCHW " # nop"
00048 #endif
00049 
00050 #if HAVE_MMX2
00051 #define SFENCE "sfence"
00052 #else
00053 #define SFENCE " # nop"
00054 #endif
00055 
00056 #if HAVE_MMX2
00057 #define PAVGB(a,b) "pavgb " #a ", " #b " \n\t"
00058 #elif HAVE_AMD3DNOW
00059 #define PAVGB(a,b) "pavgusb " #a ", " #b " \n\t"
00060 #endif
00061 
00062 #if HAVE_MMX2
00063 #define REAL_MOVNTQ(a,b) "movntq " #a ", " #b " \n\t"
00064 #else
00065 #define REAL_MOVNTQ(a,b) "movq " #a ", " #b " \n\t"
00066 #endif
00067 #define MOVNTQ(a,b)  REAL_MOVNTQ(a,b)
00068 
00069 #if HAVE_ALTIVEC
00070 #include "swscale_altivec_template.c"
00071 #endif
00072 
00073 #define YSCALEYUV2YV12X(x, offset, dest, width) \
00074     __asm__ volatile(\
00075     "xor                          %%"REG_a", %%"REG_a"  \n\t"\
00076     "movq             "VROUNDER_OFFSET"(%0), %%mm3      \n\t"\
00077     "movq                             %%mm3, %%mm4      \n\t"\
00078     "lea                     " offset "(%0), %%"REG_d"  \n\t"\
00079     "mov                        (%%"REG_d"), %%"REG_S"  \n\t"\
00080     ASMALIGN(4) /* FIXME Unroll? */\
00081     "1:                                                 \n\t"\
00082     "movq                      8(%%"REG_d"), %%mm0      \n\t" /* filterCoeff */\
00083     "movq   "  x "(%%"REG_S", %%"REG_a", 2), %%mm2      \n\t" /* srcData */\
00084     "movq 8+"  x "(%%"REG_S", %%"REG_a", 2), %%mm5      \n\t" /* srcData */\
00085     "add                                $16, %%"REG_d"  \n\t"\
00086     "mov                        (%%"REG_d"), %%"REG_S"  \n\t"\
00087     "test                         %%"REG_S", %%"REG_S"  \n\t"\
00088     "pmulhw                           %%mm0, %%mm2      \n\t"\
00089     "pmulhw                           %%mm0, %%mm5      \n\t"\
00090     "paddw                            %%mm2, %%mm3      \n\t"\
00091     "paddw                            %%mm5, %%mm4      \n\t"\
00092     " jnz                                1b             \n\t"\
00093     "psraw                               $3, %%mm3      \n\t"\
00094     "psraw                               $3, %%mm4      \n\t"\
00095     "packuswb                         %%mm4, %%mm3      \n\t"\
00096     MOVNTQ(%%mm3, (%1, %%REGa))\
00097     "add                                 $8, %%"REG_a"  \n\t"\
00098     "cmp                                 %2, %%"REG_a"  \n\t"\
00099     "movq             "VROUNDER_OFFSET"(%0), %%mm3      \n\t"\
00100     "movq                             %%mm3, %%mm4      \n\t"\
00101     "lea                     " offset "(%0), %%"REG_d"  \n\t"\
00102     "mov                        (%%"REG_d"), %%"REG_S"  \n\t"\
00103     "jb                                  1b             \n\t"\
00104     :: "r" (&c->redDither),\
00105     "r" (dest), "g" (width)\
00106     : "%"REG_a, "%"REG_d, "%"REG_S\
00107     );
00108 
00109 #define YSCALEYUV2YV12X_ACCURATE(x, offset, dest, width) \
00110     __asm__ volatile(\
00111     "lea                     " offset "(%0), %%"REG_d"  \n\t"\
00112     "xor                          %%"REG_a", %%"REG_a"  \n\t"\
00113     "pxor                             %%mm4, %%mm4      \n\t"\
00114     "pxor                             %%mm5, %%mm5      \n\t"\
00115     "pxor                             %%mm6, %%mm6      \n\t"\
00116     "pxor                             %%mm7, %%mm7      \n\t"\
00117     "mov                        (%%"REG_d"), %%"REG_S"  \n\t"\
00118     ASMALIGN(4) \
00119     "1:                                                 \n\t"\
00120     "movq   "  x "(%%"REG_S", %%"REG_a", 2), %%mm0      \n\t" /* srcData */\
00121     "movq 8+"  x "(%%"REG_S", %%"REG_a", 2), %%mm2      \n\t" /* srcData */\
00122     "mov        "STR(APCK_PTR2)"(%%"REG_d"), %%"REG_S"  \n\t"\
00123     "movq   "  x "(%%"REG_S", %%"REG_a", 2), %%mm1      \n\t" /* srcData */\
00124     "movq                             %%mm0, %%mm3      \n\t"\
00125     "punpcklwd                        %%mm1, %%mm0      \n\t"\
00126     "punpckhwd                        %%mm1, %%mm3      \n\t"\
00127     "movq       "STR(APCK_COEF)"(%%"REG_d"), %%mm1      \n\t" /* filterCoeff */\
00128     "pmaddwd                          %%mm1, %%mm0      \n\t"\
00129     "pmaddwd                          %%mm1, %%mm3      \n\t"\
00130     "paddd                            %%mm0, %%mm4      \n\t"\
00131     "paddd                            %%mm3, %%mm5      \n\t"\
00132     "movq 8+"  x "(%%"REG_S", %%"REG_a", 2), %%mm3      \n\t" /* srcData */\
00133     "mov        "STR(APCK_SIZE)"(%%"REG_d"), %%"REG_S"  \n\t"\
00134     "add                  $"STR(APCK_SIZE)", %%"REG_d"  \n\t"\
00135     "test                         %%"REG_S", %%"REG_S"  \n\t"\
00136     "movq                             %%mm2, %%mm0      \n\t"\
00137     "punpcklwd                        %%mm3, %%mm2      \n\t"\
00138     "punpckhwd                        %%mm3, %%mm0      \n\t"\
00139     "pmaddwd                          %%mm1, %%mm2      \n\t"\
00140     "pmaddwd                          %%mm1, %%mm0      \n\t"\
00141     "paddd                            %%mm2, %%mm6      \n\t"\
00142     "paddd                            %%mm0, %%mm7      \n\t"\
00143     " jnz                                1b             \n\t"\
00144     "psrad                              $16, %%mm4      \n\t"\
00145     "psrad                              $16, %%mm5      \n\t"\
00146     "psrad                              $16, %%mm6      \n\t"\
00147     "psrad                              $16, %%mm7      \n\t"\
00148     "movq             "VROUNDER_OFFSET"(%0), %%mm0      \n\t"\
00149     "packssdw                         %%mm5, %%mm4      \n\t"\
00150     "packssdw                         %%mm7, %%mm6      \n\t"\
00151     "paddw                            %%mm0, %%mm4      \n\t"\
00152     "paddw                            %%mm0, %%mm6      \n\t"\
00153     "psraw                               $3, %%mm4      \n\t"\
00154     "psraw                               $3, %%mm6      \n\t"\
00155     "packuswb                         %%mm6, %%mm4      \n\t"\
00156     MOVNTQ(%%mm4, (%1, %%REGa))\
00157     "add                                 $8, %%"REG_a"  \n\t"\
00158     "cmp                                 %2, %%"REG_a"  \n\t"\
00159     "lea                     " offset "(%0), %%"REG_d"  \n\t"\
00160     "pxor                             %%mm4, %%mm4      \n\t"\
00161     "pxor                             %%mm5, %%mm5      \n\t"\
00162     "pxor                             %%mm6, %%mm6      \n\t"\
00163     "pxor                             %%mm7, %%mm7      \n\t"\
00164     "mov                        (%%"REG_d"), %%"REG_S"  \n\t"\
00165     "jb                                  1b             \n\t"\
00166     :: "r" (&c->redDither),\
00167     "r" (dest), "g" (width)\
00168     : "%"REG_a, "%"REG_d, "%"REG_S\
00169     );
00170 
00171 #define YSCALEYUV2YV121 \
00172     "mov %2, %%"REG_a"                    \n\t"\
00173     ASMALIGN(4) /* FIXME Unroll? */\
00174     "1:                                   \n\t"\
00175     "movq  (%0, %%"REG_a", 2), %%mm0      \n\t"\
00176     "movq 8(%0, %%"REG_a", 2), %%mm1      \n\t"\
00177     "psraw                 $7, %%mm0      \n\t"\
00178     "psraw                 $7, %%mm1      \n\t"\
00179     "packuswb           %%mm1, %%mm0      \n\t"\
00180     MOVNTQ(%%mm0, (%1, %%REGa))\
00181     "add                   $8, %%"REG_a"  \n\t"\
00182     "jnc                   1b             \n\t"
00183 
00184 #define YSCALEYUV2YV121_ACCURATE \
00185     "mov %2, %%"REG_a"                    \n\t"\
00186     "pcmpeqw %%mm7, %%mm7                 \n\t"\
00187     "psrlw                 $15, %%mm7     \n\t"\
00188     "psllw                  $6, %%mm7     \n\t"\
00189     ASMALIGN(4) /* FIXME Unroll? */\
00190     "1:                                   \n\t"\
00191     "movq  (%0, %%"REG_a", 2), %%mm0      \n\t"\
00192     "movq 8(%0, %%"REG_a", 2), %%mm1      \n\t"\
00193     "paddsw             %%mm7, %%mm0      \n\t"\
00194     "paddsw             %%mm7, %%mm1      \n\t"\
00195     "psraw                 $7, %%mm0      \n\t"\
00196     "psraw                 $7, %%mm1      \n\t"\
00197     "packuswb           %%mm1, %%mm0      \n\t"\
00198     MOVNTQ(%%mm0, (%1, %%REGa))\
00199     "add                   $8, %%"REG_a"  \n\t"\
00200     "jnc                   1b             \n\t"
00201 
00202 /*
00203     :: "m" (-lumFilterSize), "m" (-chrFilterSize),
00204        "m" (lumMmxFilter+lumFilterSize*4), "m" (chrMmxFilter+chrFilterSize*4),
00205        "r" (dest), "m" (dstW),
00206        "m" (lumSrc+lumFilterSize), "m" (chrSrc+chrFilterSize)
00207     : "%eax", "%ebx", "%ecx", "%edx", "%esi"
00208 */
00209 #define YSCALEYUV2PACKEDX_UV \
00210     __asm__ volatile(\
00211     "xor                   %%"REG_a", %%"REG_a"     \n\t"\
00212     ASMALIGN(4)\
00213     "nop                                            \n\t"\
00214     "1:                                             \n\t"\
00215     "lea "CHR_MMX_FILTER_OFFSET"(%0), %%"REG_d"     \n\t"\
00216     "mov                 (%%"REG_d"), %%"REG_S"     \n\t"\
00217     "movq      "VROUNDER_OFFSET"(%0), %%mm3         \n\t"\
00218     "movq                      %%mm3, %%mm4         \n\t"\
00219     ASMALIGN(4)\
00220     "2:                                             \n\t"\
00221     "movq               8(%%"REG_d"), %%mm0         \n\t" /* filterCoeff */\
00222     "movq     (%%"REG_S", %%"REG_a"), %%mm2         \n\t" /* UsrcData */\
00223     "movq "AV_STRINGIFY(VOF)"(%%"REG_S", %%"REG_a"), %%mm5         \n\t" /* VsrcData */\
00224     "add                         $16, %%"REG_d"     \n\t"\
00225     "mov                 (%%"REG_d"), %%"REG_S"     \n\t"\
00226     "pmulhw                    %%mm0, %%mm2         \n\t"\
00227     "pmulhw                    %%mm0, %%mm5         \n\t"\
00228     "paddw                     %%mm2, %%mm3         \n\t"\
00229     "paddw                     %%mm5, %%mm4         \n\t"\
00230     "test                  %%"REG_S", %%"REG_S"     \n\t"\
00231     " jnz                         2b                \n\t"\
00232 
00233 #define YSCALEYUV2PACKEDX_YA(offset) \
00234     "lea                "offset"(%0), %%"REG_d"     \n\t"\
00235     "mov                 (%%"REG_d"), %%"REG_S"     \n\t"\
00236     "movq      "VROUNDER_OFFSET"(%0), %%mm1         \n\t"\
00237     "movq                      %%mm1, %%mm7         \n\t"\
00238     ASMALIGN(4)\
00239     "2:                                             \n\t"\
00240     "movq               8(%%"REG_d"), %%mm0         \n\t" /* filterCoeff */\
00241     "movq  (%%"REG_S", %%"REG_a", 2), %%mm2         \n\t" /* Y1srcData */\
00242     "movq 8(%%"REG_S", %%"REG_a", 2), %%mm5         \n\t" /* Y2srcData */\
00243     "add                         $16, %%"REG_d"            \n\t"\
00244     "mov                 (%%"REG_d"), %%"REG_S"     \n\t"\
00245     "pmulhw                    %%mm0, %%mm2         \n\t"\
00246     "pmulhw                    %%mm0, %%mm5         \n\t"\
00247     "paddw                     %%mm2, %%mm1         \n\t"\
00248     "paddw                     %%mm5, %%mm7         \n\t"\
00249     "test                  %%"REG_S", %%"REG_S"     \n\t"\
00250     " jnz                         2b                \n\t"\
00251 
00252 #define YSCALEYUV2PACKEDX \
00253     YSCALEYUV2PACKEDX_UV \
00254     YSCALEYUV2PACKEDX_YA(LUM_MMX_FILTER_OFFSET) \
00255 
00256 #define YSCALEYUV2PACKEDX_END                 \
00257     :: "r" (&c->redDither),                   \
00258         "m" (dummy), "m" (dummy), "m" (dummy),\
00259         "r" (dest), "m" (dstW)                \
00260     : "%"REG_a, "%"REG_d, "%"REG_S            \
00261     );
00262 
00263 #define YSCALEYUV2PACKEDX_ACCURATE_UV \
00264     __asm__ volatile(\
00265     "xor %%"REG_a", %%"REG_a"                       \n\t"\
00266     ASMALIGN(4)\
00267     "nop                                            \n\t"\
00268     "1:                                             \n\t"\
00269     "lea "CHR_MMX_FILTER_OFFSET"(%0), %%"REG_d"     \n\t"\
00270     "mov                 (%%"REG_d"), %%"REG_S"     \n\t"\
00271     "pxor                      %%mm4, %%mm4         \n\t"\
00272     "pxor                      %%mm5, %%mm5         \n\t"\
00273     "pxor                      %%mm6, %%mm6         \n\t"\
00274     "pxor                      %%mm7, %%mm7         \n\t"\
00275     ASMALIGN(4)\
00276     "2:                                             \n\t"\
00277     "movq     (%%"REG_S", %%"REG_a"), %%mm0         \n\t" /* UsrcData */\
00278     "movq "AV_STRINGIFY(VOF)"(%%"REG_S", %%"REG_a"), %%mm2         \n\t" /* VsrcData */\
00279     "mov "STR(APCK_PTR2)"(%%"REG_d"), %%"REG_S"     \n\t"\
00280     "movq     (%%"REG_S", %%"REG_a"), %%mm1         \n\t" /* UsrcData */\
00281     "movq                      %%mm0, %%mm3         \n\t"\
00282     "punpcklwd                 %%mm1, %%mm0         \n\t"\
00283     "punpckhwd                 %%mm1, %%mm3         \n\t"\
00284     "movq "STR(APCK_COEF)"(%%"REG_d"),%%mm1         \n\t" /* filterCoeff */\
00285     "pmaddwd                   %%mm1, %%mm0         \n\t"\
00286     "pmaddwd                   %%mm1, %%mm3         \n\t"\
00287     "paddd                     %%mm0, %%mm4         \n\t"\
00288     "paddd                     %%mm3, %%mm5         \n\t"\
00289     "movq "AV_STRINGIFY(VOF)"(%%"REG_S", %%"REG_a"), %%mm3         \n\t" /* VsrcData */\
00290     "mov "STR(APCK_SIZE)"(%%"REG_d"), %%"REG_S"     \n\t"\
00291     "add           $"STR(APCK_SIZE)", %%"REG_d"     \n\t"\
00292     "test                  %%"REG_S", %%"REG_S"     \n\t"\
00293     "movq                      %%mm2, %%mm0         \n\t"\
00294     "punpcklwd                 %%mm3, %%mm2         \n\t"\
00295     "punpckhwd                 %%mm3, %%mm0         \n\t"\
00296     "pmaddwd                   %%mm1, %%mm2         \n\t"\
00297     "pmaddwd                   %%mm1, %%mm0         \n\t"\
00298     "paddd                     %%mm2, %%mm6         \n\t"\
00299     "paddd                     %%mm0, %%mm7         \n\t"\
00300     " jnz                         2b                \n\t"\
00301     "psrad                       $16, %%mm4         \n\t"\
00302     "psrad                       $16, %%mm5         \n\t"\
00303     "psrad                       $16, %%mm6         \n\t"\
00304     "psrad                       $16, %%mm7         \n\t"\
00305     "movq      "VROUNDER_OFFSET"(%0), %%mm0         \n\t"\
00306     "packssdw                  %%mm5, %%mm4         \n\t"\
00307     "packssdw                  %%mm7, %%mm6         \n\t"\
00308     "paddw                     %%mm0, %%mm4         \n\t"\
00309     "paddw                     %%mm0, %%mm6         \n\t"\
00310     "movq                      %%mm4, "U_TEMP"(%0)  \n\t"\
00311     "movq                      %%mm6, "V_TEMP"(%0)  \n\t"\
00312 
00313 #define YSCALEYUV2PACKEDX_ACCURATE_YA(offset) \
00314     "lea                "offset"(%0), %%"REG_d"     \n\t"\
00315     "mov                 (%%"REG_d"), %%"REG_S"     \n\t"\
00316     "pxor                      %%mm1, %%mm1         \n\t"\
00317     "pxor                      %%mm5, %%mm5         \n\t"\
00318     "pxor                      %%mm7, %%mm7         \n\t"\
00319     "pxor                      %%mm6, %%mm6         \n\t"\
00320     ASMALIGN(4)\
00321     "2:                                             \n\t"\
00322     "movq  (%%"REG_S", %%"REG_a", 2), %%mm0         \n\t" /* Y1srcData */\
00323     "movq 8(%%"REG_S", %%"REG_a", 2), %%mm2         \n\t" /* Y2srcData */\
00324     "mov "STR(APCK_PTR2)"(%%"REG_d"), %%"REG_S"     \n\t"\
00325     "movq  (%%"REG_S", %%"REG_a", 2), %%mm4         \n\t" /* Y1srcData */\
00326     "movq                      %%mm0, %%mm3         \n\t"\
00327     "punpcklwd                 %%mm4, %%mm0         \n\t"\
00328     "punpckhwd                 %%mm4, %%mm3         \n\t"\
00329     "movq "STR(APCK_COEF)"(%%"REG_d"), %%mm4         \n\t" /* filterCoeff */\
00330     "pmaddwd                   %%mm4, %%mm0         \n\t"\
00331     "pmaddwd                   %%mm4, %%mm3         \n\t"\
00332     "paddd                     %%mm0, %%mm1         \n\t"\
00333     "paddd                     %%mm3, %%mm5         \n\t"\
00334     "movq 8(%%"REG_S", %%"REG_a", 2), %%mm3         \n\t" /* Y2srcData */\
00335     "mov "STR(APCK_SIZE)"(%%"REG_d"), %%"REG_S"     \n\t"\
00336     "add           $"STR(APCK_SIZE)", %%"REG_d"     \n\t"\
00337     "test                  %%"REG_S", %%"REG_S"     \n\t"\
00338     "movq                      %%mm2, %%mm0         \n\t"\
00339     "punpcklwd                 %%mm3, %%mm2         \n\t"\
00340     "punpckhwd                 %%mm3, %%mm0         \n\t"\
00341     "pmaddwd                   %%mm4, %%mm2         \n\t"\
00342     "pmaddwd                   %%mm4, %%mm0         \n\t"\
00343     "paddd                     %%mm2, %%mm7         \n\t"\
00344     "paddd                     %%mm0, %%mm6         \n\t"\
00345     " jnz                         2b                \n\t"\
00346     "psrad                       $16, %%mm1         \n\t"\
00347     "psrad                       $16, %%mm5         \n\t"\
00348     "psrad                       $16, %%mm7         \n\t"\
00349     "psrad                       $16, %%mm6         \n\t"\
00350     "movq      "VROUNDER_OFFSET"(%0), %%mm0         \n\t"\
00351     "packssdw                  %%mm5, %%mm1         \n\t"\
00352     "packssdw                  %%mm6, %%mm7         \n\t"\
00353     "paddw                     %%mm0, %%mm1         \n\t"\
00354     "paddw                     %%mm0, %%mm7         \n\t"\
00355     "movq               "U_TEMP"(%0), %%mm3         \n\t"\
00356     "movq               "V_TEMP"(%0), %%mm4         \n\t"\
00357 
00358 #define YSCALEYUV2PACKEDX_ACCURATE \
00359     YSCALEYUV2PACKEDX_ACCURATE_UV \
00360     YSCALEYUV2PACKEDX_ACCURATE_YA(LUM_MMX_FILTER_OFFSET)
00361 
00362 #define YSCALEYUV2RGBX \
00363     "psubw  "U_OFFSET"(%0), %%mm3       \n\t" /* (U-128)8*/\
00364     "psubw  "V_OFFSET"(%0), %%mm4       \n\t" /* (V-128)8*/\
00365     "movq            %%mm3, %%mm2       \n\t" /* (U-128)8*/\
00366     "movq            %%mm4, %%mm5       \n\t" /* (V-128)8*/\
00367     "pmulhw "UG_COEFF"(%0), %%mm3       \n\t"\
00368     "pmulhw "VG_COEFF"(%0), %%mm4       \n\t"\
00369 /* mm2=(U-128)8, mm3=ug, mm4=vg mm5=(V-128)8 */\
00370     "pmulhw "UB_COEFF"(%0), %%mm2       \n\t"\
00371     "pmulhw "VR_COEFF"(%0), %%mm5       \n\t"\
00372     "psubw  "Y_OFFSET"(%0), %%mm1       \n\t" /* 8(Y-16)*/\
00373     "psubw  "Y_OFFSET"(%0), %%mm7       \n\t" /* 8(Y-16)*/\
00374     "pmulhw  "Y_COEFF"(%0), %%mm1       \n\t"\
00375     "pmulhw  "Y_COEFF"(%0), %%mm7       \n\t"\
00376 /* mm1= Y1, mm2=ub, mm3=ug, mm4=vg mm5=vr, mm7=Y2 */\
00377     "paddw           %%mm3, %%mm4       \n\t"\
00378     "movq            %%mm2, %%mm0       \n\t"\
00379     "movq            %%mm5, %%mm6       \n\t"\
00380     "movq            %%mm4, %%mm3       \n\t"\
00381     "punpcklwd       %%mm2, %%mm2       \n\t"\
00382     "punpcklwd       %%mm5, %%mm5       \n\t"\
00383     "punpcklwd       %%mm4, %%mm4       \n\t"\
00384     "paddw           %%mm1, %%mm2       \n\t"\
00385     "paddw           %%mm1, %%mm5       \n\t"\
00386     "paddw           %%mm1, %%mm4       \n\t"\
00387     "punpckhwd       %%mm0, %%mm0       \n\t"\
00388     "punpckhwd       %%mm6, %%mm6       \n\t"\
00389     "punpckhwd       %%mm3, %%mm3       \n\t"\
00390     "paddw           %%mm7, %%mm0       \n\t"\
00391     "paddw           %%mm7, %%mm6       \n\t"\
00392     "paddw           %%mm7, %%mm3       \n\t"\
00393     /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
00394     "packuswb        %%mm0, %%mm2       \n\t"\
00395     "packuswb        %%mm6, %%mm5       \n\t"\
00396     "packuswb        %%mm3, %%mm4       \n\t"\
00397 
00398 #define REAL_YSCALEYUV2PACKED(index, c) \
00399     "movq "CHR_MMX_FILTER_OFFSET"+8("#c"), %%mm0              \n\t"\
00400     "movq "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm1              \n\t"\
00401     "psraw                $3, %%mm0                           \n\t"\
00402     "psraw                $3, %%mm1                           \n\t"\
00403     "movq              %%mm0, "CHR_MMX_FILTER_OFFSET"+8("#c") \n\t"\
00404     "movq              %%mm1, "LUM_MMX_FILTER_OFFSET"+8("#c") \n\t"\
00405     "xor            "#index", "#index"                        \n\t"\
00406     ASMALIGN(4)\
00407     "1:                                 \n\t"\
00408     "movq     (%2, "#index"), %%mm2     \n\t" /* uvbuf0[eax]*/\
00409     "movq     (%3, "#index"), %%mm3     \n\t" /* uvbuf1[eax]*/\
00410     "movq "AV_STRINGIFY(VOF)"(%2, "#index"), %%mm5     \n\t" /* uvbuf0[eax+2048]*/\
00411     "movq "AV_STRINGIFY(VOF)"(%3, "#index"), %%mm4     \n\t" /* uvbuf1[eax+2048]*/\
00412     "psubw             %%mm3, %%mm2     \n\t" /* uvbuf0[eax] - uvbuf1[eax]*/\
00413     "psubw             %%mm4, %%mm5     \n\t" /* uvbuf0[eax+2048] - uvbuf1[eax+2048]*/\
00414     "movq "CHR_MMX_FILTER_OFFSET"+8("#c"), %%mm0    \n\t"\
00415     "pmulhw            %%mm0, %%mm2     \n\t" /* (uvbuf0[eax] - uvbuf1[eax])uvalpha1>>16*/\
00416     "pmulhw            %%mm0, %%mm5     \n\t" /* (uvbuf0[eax+2048] - uvbuf1[eax+2048])uvalpha1>>16*/\
00417     "psraw                $7, %%mm3     \n\t" /* uvbuf0[eax] - uvbuf1[eax] >>4*/\
00418     "psraw                $7, %%mm4     \n\t" /* uvbuf0[eax+2048] - uvbuf1[eax+2048] >>4*/\
00419     "paddw             %%mm2, %%mm3     \n\t" /* uvbuf0[eax]uvalpha1 - uvbuf1[eax](1-uvalpha1)*/\
00420     "paddw             %%mm5, %%mm4     \n\t" /* uvbuf0[eax+2048]uvalpha1 - uvbuf1[eax+2048](1-uvalpha1)*/\
00421     "movq  (%0, "#index", 2), %%mm0     \n\t" /*buf0[eax]*/\
00422     "movq  (%1, "#index", 2), %%mm1     \n\t" /*buf1[eax]*/\
00423     "movq 8(%0, "#index", 2), %%mm6     \n\t" /*buf0[eax]*/\
00424     "movq 8(%1, "#index", 2), %%mm7     \n\t" /*buf1[eax]*/\
00425     "psubw             %%mm1, %%mm0     \n\t" /* buf0[eax] - buf1[eax]*/\
00426     "psubw             %%mm7, %%mm6     \n\t" /* buf0[eax] - buf1[eax]*/\
00427     "pmulhw "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm0  \n\t" /* (buf0[eax] - buf1[eax])yalpha1>>16*/\
00428     "pmulhw "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm6  \n\t" /* (buf0[eax] - buf1[eax])yalpha1>>16*/\
00429     "psraw                $7, %%mm1     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00430     "psraw                $7, %%mm7     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00431     "paddw             %%mm0, %%mm1     \n\t" /* buf0[eax]yalpha1 + buf1[eax](1-yalpha1) >>16*/\
00432     "paddw             %%mm6, %%mm7     \n\t" /* buf0[eax]yalpha1 + buf1[eax](1-yalpha1) >>16*/\
00433 
00434 #define YSCALEYUV2PACKED(index, c)  REAL_YSCALEYUV2PACKED(index, c)
00435 
00436 #define REAL_YSCALEYUV2RGB_UV(index, c) \
00437     "xor            "#index", "#index"  \n\t"\
00438     ASMALIGN(4)\
00439     "1:                                 \n\t"\
00440     "movq     (%2, "#index"), %%mm2     \n\t" /* uvbuf0[eax]*/\
00441     "movq     (%3, "#index"), %%mm3     \n\t" /* uvbuf1[eax]*/\
00442     "movq "AV_STRINGIFY(VOF)"(%2, "#index"), %%mm5     \n\t" /* uvbuf0[eax+2048]*/\
00443     "movq "AV_STRINGIFY(VOF)"(%3, "#index"), %%mm4     \n\t" /* uvbuf1[eax+2048]*/\
00444     "psubw             %%mm3, %%mm2     \n\t" /* uvbuf0[eax] - uvbuf1[eax]*/\
00445     "psubw             %%mm4, %%mm5     \n\t" /* uvbuf0[eax+2048] - uvbuf1[eax+2048]*/\
00446     "movq "CHR_MMX_FILTER_OFFSET"+8("#c"), %%mm0    \n\t"\
00447     "pmulhw            %%mm0, %%mm2     \n\t" /* (uvbuf0[eax] - uvbuf1[eax])uvalpha1>>16*/\
00448     "pmulhw            %%mm0, %%mm5     \n\t" /* (uvbuf0[eax+2048] - uvbuf1[eax+2048])uvalpha1>>16*/\
00449     "psraw                $4, %%mm3     \n\t" /* uvbuf0[eax] - uvbuf1[eax] >>4*/\
00450     "psraw                $4, %%mm4     \n\t" /* uvbuf0[eax+2048] - uvbuf1[eax+2048] >>4*/\
00451     "paddw             %%mm2, %%mm3     \n\t" /* uvbuf0[eax]uvalpha1 - uvbuf1[eax](1-uvalpha1)*/\
00452     "paddw             %%mm5, %%mm4     \n\t" /* uvbuf0[eax+2048]uvalpha1 - uvbuf1[eax+2048](1-uvalpha1)*/\
00453     "psubw  "U_OFFSET"("#c"), %%mm3     \n\t" /* (U-128)8*/\
00454     "psubw  "V_OFFSET"("#c"), %%mm4     \n\t" /* (V-128)8*/\
00455     "movq              %%mm3, %%mm2     \n\t" /* (U-128)8*/\
00456     "movq              %%mm4, %%mm5     \n\t" /* (V-128)8*/\
00457     "pmulhw "UG_COEFF"("#c"), %%mm3     \n\t"\
00458     "pmulhw "VG_COEFF"("#c"), %%mm4     \n\t"\
00459     /* mm2=(U-128)8, mm3=ug, mm4=vg mm5=(V-128)8 */\
00460 
00461 #define REAL_YSCALEYUV2RGB_YA(index, c) \
00462     "movq  (%0, "#index", 2), %%mm0     \n\t" /*buf0[eax]*/\
00463     "movq  (%1, "#index", 2), %%mm1     \n\t" /*buf1[eax]*/\
00464     "movq 8(%0, "#index", 2), %%mm6     \n\t" /*buf0[eax]*/\
00465     "movq 8(%1, "#index", 2), %%mm7     \n\t" /*buf1[eax]*/\
00466     "psubw             %%mm1, %%mm0     \n\t" /* buf0[eax] - buf1[eax]*/\
00467     "psubw             %%mm7, %%mm6     \n\t" /* buf0[eax] - buf1[eax]*/\
00468     "pmulhw "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm0  \n\t" /* (buf0[eax] - buf1[eax])yalpha1>>16*/\
00469     "pmulhw "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm6  \n\t" /* (buf0[eax] - buf1[eax])yalpha1>>16*/\
00470     "psraw                $4, %%mm1     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00471     "psraw                $4, %%mm7     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00472     "paddw             %%mm0, %%mm1     \n\t" /* buf0[eax]yalpha1 + buf1[eax](1-yalpha1) >>16*/\
00473     "paddw             %%mm6, %%mm7     \n\t" /* buf0[eax]yalpha1 + buf1[eax](1-yalpha1) >>16*/\
00474 
00475 #define REAL_YSCALEYUV2RGB_COEFF(c) \
00476     "pmulhw "UB_COEFF"("#c"), %%mm2     \n\t"\
00477     "pmulhw "VR_COEFF"("#c"), %%mm5     \n\t"\
00478     "psubw  "Y_OFFSET"("#c"), %%mm1     \n\t" /* 8(Y-16)*/\
00479     "psubw  "Y_OFFSET"("#c"), %%mm7     \n\t" /* 8(Y-16)*/\
00480     "pmulhw  "Y_COEFF"("#c"), %%mm1     \n\t"\
00481     "pmulhw  "Y_COEFF"("#c"), %%mm7     \n\t"\
00482     /* mm1= Y1, mm2=ub, mm3=ug, mm4=vg mm5=vr, mm7=Y2 */\
00483     "paddw             %%mm3, %%mm4     \n\t"\
00484     "movq              %%mm2, %%mm0     \n\t"\
00485     "movq              %%mm5, %%mm6     \n\t"\
00486     "movq              %%mm4, %%mm3     \n\t"\
00487     "punpcklwd         %%mm2, %%mm2     \n\t"\
00488     "punpcklwd         %%mm5, %%mm5     \n\t"\
00489     "punpcklwd         %%mm4, %%mm4     \n\t"\
00490     "paddw             %%mm1, %%mm2     \n\t"\
00491     "paddw             %%mm1, %%mm5     \n\t"\
00492     "paddw             %%mm1, %%mm4     \n\t"\
00493     "punpckhwd         %%mm0, %%mm0     \n\t"\
00494     "punpckhwd         %%mm6, %%mm6     \n\t"\
00495     "punpckhwd         %%mm3, %%mm3     \n\t"\
00496     "paddw             %%mm7, %%mm0     \n\t"\
00497     "paddw             %%mm7, %%mm6     \n\t"\
00498     "paddw             %%mm7, %%mm3     \n\t"\
00499     /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
00500     "packuswb          %%mm0, %%mm2     \n\t"\
00501     "packuswb          %%mm6, %%mm5     \n\t"\
00502     "packuswb          %%mm3, %%mm4     \n\t"\
00503 
00504 #define YSCALEYUV2RGB_YA(index, c) REAL_YSCALEYUV2RGB_YA(index, c)
00505 
00506 #define YSCALEYUV2RGB(index, c) \
00507     REAL_YSCALEYUV2RGB_UV(index, c) \
00508     REAL_YSCALEYUV2RGB_YA(index, c) \
00509     REAL_YSCALEYUV2RGB_COEFF(c)
00510 
00511 #define REAL_YSCALEYUV2PACKED1(index, c) \
00512     "xor            "#index", "#index"  \n\t"\
00513     ASMALIGN(4)\
00514     "1:                                 \n\t"\
00515     "movq     (%2, "#index"), %%mm3     \n\t" /* uvbuf0[eax]*/\
00516     "movq "AV_STRINGIFY(VOF)"(%2, "#index"), %%mm4     \n\t" /* uvbuf0[eax+2048]*/\
00517     "psraw                $7, %%mm3     \n\t" \
00518     "psraw                $7, %%mm4     \n\t" \
00519     "movq  (%0, "#index", 2), %%mm1     \n\t" /*buf0[eax]*/\
00520     "movq 8(%0, "#index", 2), %%mm7     \n\t" /*buf0[eax]*/\
00521     "psraw                $7, %%mm1     \n\t" \
00522     "psraw                $7, %%mm7     \n\t" \
00523 
00524 #define YSCALEYUV2PACKED1(index, c)  REAL_YSCALEYUV2PACKED1(index, c)
00525 
00526 #define REAL_YSCALEYUV2RGB1(index, c) \
00527     "xor            "#index", "#index"  \n\t"\
00528     ASMALIGN(4)\
00529     "1:                                 \n\t"\
00530     "movq     (%2, "#index"), %%mm3     \n\t" /* uvbuf0[eax]*/\
00531     "movq "AV_STRINGIFY(VOF)"(%2, "#index"), %%mm4     \n\t" /* uvbuf0[eax+2048]*/\
00532     "psraw                $4, %%mm3     \n\t" /* uvbuf0[eax] - uvbuf1[eax] >>4*/\
00533     "psraw                $4, %%mm4     \n\t" /* uvbuf0[eax+2048] - uvbuf1[eax+2048] >>4*/\
00534     "psubw  "U_OFFSET"("#c"), %%mm3     \n\t" /* (U-128)8*/\
00535     "psubw  "V_OFFSET"("#c"), %%mm4     \n\t" /* (V-128)8*/\
00536     "movq              %%mm3, %%mm2     \n\t" /* (U-128)8*/\
00537     "movq              %%mm4, %%mm5     \n\t" /* (V-128)8*/\
00538     "pmulhw "UG_COEFF"("#c"), %%mm3     \n\t"\
00539     "pmulhw "VG_COEFF"("#c"), %%mm4     \n\t"\
00540     /* mm2=(U-128)8, mm3=ug, mm4=vg mm5=(V-128)8 */\
00541     "movq  (%0, "#index", 2), %%mm1     \n\t" /*buf0[eax]*/\
00542     "movq 8(%0, "#index", 2), %%mm7     \n\t" /*buf0[eax]*/\
00543     "psraw                $4, %%mm1     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00544     "psraw                $4, %%mm7     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00545     "pmulhw "UB_COEFF"("#c"), %%mm2     \n\t"\
00546     "pmulhw "VR_COEFF"("#c"), %%mm5     \n\t"\
00547     "psubw  "Y_OFFSET"("#c"), %%mm1     \n\t" /* 8(Y-16)*/\
00548     "psubw  "Y_OFFSET"("#c"), %%mm7     \n\t" /* 8(Y-16)*/\
00549     "pmulhw  "Y_COEFF"("#c"), %%mm1     \n\t"\
00550     "pmulhw  "Y_COEFF"("#c"), %%mm7     \n\t"\
00551     /* mm1= Y1, mm2=ub, mm3=ug, mm4=vg mm5=vr, mm7=Y2 */\
00552     "paddw             %%mm3, %%mm4     \n\t"\
00553     "movq              %%mm2, %%mm0     \n\t"\
00554     "movq              %%mm5, %%mm6     \n\t"\
00555     "movq              %%mm4, %%mm3     \n\t"\
00556     "punpcklwd         %%mm2, %%mm2     \n\t"\
00557     "punpcklwd         %%mm5, %%mm5     \n\t"\
00558     "punpcklwd         %%mm4, %%mm4     \n\t"\
00559     "paddw             %%mm1, %%mm2     \n\t"\
00560     "paddw             %%mm1, %%mm5     \n\t"\
00561     "paddw             %%mm1, %%mm4     \n\t"\
00562     "punpckhwd         %%mm0, %%mm0     \n\t"\
00563     "punpckhwd         %%mm6, %%mm6     \n\t"\
00564     "punpckhwd         %%mm3, %%mm3     \n\t"\
00565     "paddw             %%mm7, %%mm0     \n\t"\
00566     "paddw             %%mm7, %%mm6     \n\t"\
00567     "paddw             %%mm7, %%mm3     \n\t"\
00568     /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
00569     "packuswb          %%mm0, %%mm2     \n\t"\
00570     "packuswb          %%mm6, %%mm5     \n\t"\
00571     "packuswb          %%mm3, %%mm4     \n\t"\
00572 
00573 #define YSCALEYUV2RGB1(index, c)  REAL_YSCALEYUV2RGB1(index, c)
00574 
00575 #define REAL_YSCALEYUV2PACKED1b(index, c) \
00576     "xor "#index", "#index"             \n\t"\
00577     ASMALIGN(4)\
00578     "1:                                 \n\t"\
00579     "movq     (%2, "#index"), %%mm2     \n\t" /* uvbuf0[eax]*/\
00580     "movq     (%3, "#index"), %%mm3     \n\t" /* uvbuf1[eax]*/\
00581     "movq "AV_STRINGIFY(VOF)"(%2, "#index"), %%mm5     \n\t" /* uvbuf0[eax+2048]*/\
00582     "movq "AV_STRINGIFY(VOF)"(%3, "#index"), %%mm4     \n\t" /* uvbuf1[eax+2048]*/\
00583     "paddw             %%mm2, %%mm3     \n\t" /* uvbuf0[eax] + uvbuf1[eax]*/\
00584     "paddw             %%mm5, %%mm4     \n\t" /* uvbuf0[eax+2048] + uvbuf1[eax+2048]*/\
00585     "psrlw                $8, %%mm3     \n\t" \
00586     "psrlw                $8, %%mm4     \n\t" \
00587     "movq  (%0, "#index", 2), %%mm1     \n\t" /*buf0[eax]*/\
00588     "movq 8(%0, "#index", 2), %%mm7     \n\t" /*buf0[eax]*/\
00589     "psraw                $7, %%mm1     \n\t" \
00590     "psraw                $7, %%mm7     \n\t"
00591 #define YSCALEYUV2PACKED1b(index, c)  REAL_YSCALEYUV2PACKED1b(index, c)
00592 
00593 // do vertical chrominance interpolation
00594 #define REAL_YSCALEYUV2RGB1b(index, c) \
00595     "xor            "#index", "#index"  \n\t"\
00596     ASMALIGN(4)\
00597     "1:                                 \n\t"\
00598     "movq     (%2, "#index"), %%mm2     \n\t" /* uvbuf0[eax]*/\
00599     "movq     (%3, "#index"), %%mm3     \n\t" /* uvbuf1[eax]*/\
00600     "movq "AV_STRINGIFY(VOF)"(%2, "#index"), %%mm5     \n\t" /* uvbuf0[eax+2048]*/\
00601     "movq "AV_STRINGIFY(VOF)"(%3, "#index"), %%mm4     \n\t" /* uvbuf1[eax+2048]*/\
00602     "paddw             %%mm2, %%mm3     \n\t" /* uvbuf0[eax] + uvbuf1[eax]*/\
00603     "paddw             %%mm5, %%mm4     \n\t" /* uvbuf0[eax+2048] + uvbuf1[eax+2048]*/\
00604     "psrlw                $5, %%mm3     \n\t" /*FIXME might overflow*/\
00605     "psrlw                $5, %%mm4     \n\t" /*FIXME might overflow*/\
00606     "psubw  "U_OFFSET"("#c"), %%mm3     \n\t" /* (U-128)8*/\
00607     "psubw  "V_OFFSET"("#c"), %%mm4     \n\t" /* (V-128)8*/\
00608     "movq              %%mm3, %%mm2     \n\t" /* (U-128)8*/\
00609     "movq              %%mm4, %%mm5     \n\t" /* (V-128)8*/\
00610     "pmulhw "UG_COEFF"("#c"), %%mm3     \n\t"\
00611     "pmulhw "VG_COEFF"("#c"), %%mm4     \n\t"\
00612     /* mm2=(U-128)8, mm3=ug, mm4=vg mm5=(V-128)8 */\
00613     "movq  (%0, "#index", 2), %%mm1     \n\t" /*buf0[eax]*/\
00614     "movq 8(%0, "#index", 2), %%mm7     \n\t" /*buf0[eax]*/\
00615     "psraw                $4, %%mm1     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00616     "psraw                $4, %%mm7     \n\t" /* buf0[eax] - buf1[eax] >>4*/\
00617     "pmulhw "UB_COEFF"("#c"), %%mm2     \n\t"\
00618     "pmulhw "VR_COEFF"("#c"), %%mm5     \n\t"\
00619     "psubw  "Y_OFFSET"("#c"), %%mm1     \n\t" /* 8(Y-16)*/\
00620     "psubw  "Y_OFFSET"("#c"), %%mm7     \n\t" /* 8(Y-16)*/\
00621     "pmulhw  "Y_COEFF"("#c"), %%mm1     \n\t"\
00622     "pmulhw  "Y_COEFF"("#c"), %%mm7     \n\t"\
00623     /* mm1= Y1, mm2=ub, mm3=ug, mm4=vg mm5=vr, mm7=Y2 */\
00624     "paddw             %%mm3, %%mm4     \n\t"\
00625     "movq              %%mm2, %%mm0     \n\t"\
00626     "movq              %%mm5, %%mm6     \n\t"\
00627     "movq              %%mm4, %%mm3     \n\t"\
00628     "punpcklwd         %%mm2, %%mm2     \n\t"\
00629     "punpcklwd         %%mm5, %%mm5     \n\t"\
00630     "punpcklwd         %%mm4, %%mm4     \n\t"\
00631     "paddw             %%mm1, %%mm2     \n\t"\
00632     "paddw             %%mm1, %%mm5     \n\t"\
00633     "paddw             %%mm1, %%mm4     \n\t"\
00634     "punpckhwd         %%mm0, %%mm0     \n\t"\
00635     "punpckhwd         %%mm6, %%mm6     \n\t"\
00636     "punpckhwd         %%mm3, %%mm3     \n\t"\
00637     "paddw             %%mm7, %%mm0     \n\t"\
00638     "paddw             %%mm7, %%mm6     \n\t"\
00639     "paddw             %%mm7, %%mm3     \n\t"\
00640     /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
00641     "packuswb          %%mm0, %%mm2     \n\t"\
00642     "packuswb          %%mm6, %%mm5     \n\t"\
00643     "packuswb          %%mm3, %%mm4     \n\t"\
00644 
00645 #define YSCALEYUV2RGB1b(index, c)  REAL_YSCALEYUV2RGB1b(index, c)
00646 
00647 #define REAL_WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t) \
00648     "movq       "#b", "#q2"     \n\t" /* B */\
00649     "movq       "#r", "#t"      \n\t" /* R */\
00650     "punpcklbw  "#g", "#b"      \n\t" /* GBGBGBGB 0 */\
00651     "punpcklbw  "#a", "#r"      \n\t" /* ARARARAR 0 */\
00652     "punpckhbw  "#g", "#q2"     \n\t" /* GBGBGBGB 2 */\
00653     "punpckhbw  "#a", "#t"      \n\t" /* ARARARAR 2 */\
00654     "movq       "#b", "#q0"     \n\t" /* GBGBGBGB 0 */\
00655     "movq      "#q2", "#q3"     \n\t" /* GBGBGBGB 2 */\
00656     "punpcklwd  "#r", "#q0"     \n\t" /* ARGBARGB 0 */\
00657     "punpckhwd  "#r", "#b"      \n\t" /* ARGBARGB 1 */\
00658     "punpcklwd  "#t", "#q2"     \n\t" /* ARGBARGB 2 */\
00659     "punpckhwd  "#t", "#q3"     \n\t" /* ARGBARGB 3 */\
00660 \
00661     MOVNTQ(   q0,   (dst, index, 4))\
00662     MOVNTQ(    b,  8(dst, index, 4))\
00663     MOVNTQ(   q2, 16(dst, index, 4))\
00664     MOVNTQ(   q3, 24(dst, index, 4))\
00665 \
00666     "add      $8, "#index"      \n\t"\
00667     "cmp "#dstw", "#index"      \n\t"\
00668     " jb      1b                \n\t"
00669 #define WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t)  REAL_WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t)
00670 
00671 #define REAL_WRITERGB16(dst, dstw, index) \
00672     "pand "MANGLE(bF8)", %%mm2  \n\t" /* B */\
00673     "pand "MANGLE(bFC)", %%mm4  \n\t" /* G */\
00674     "pand "MANGLE(bF8)", %%mm5  \n\t" /* R */\
00675     "psrlq           $3, %%mm2  \n\t"\
00676 \
00677     "movq         %%mm2, %%mm1  \n\t"\
00678     "movq         %%mm4, %%mm3  \n\t"\
00679 \
00680     "punpcklbw    %%mm7, %%mm3  \n\t"\
00681     "punpcklbw    %%mm5, %%mm2  \n\t"\
00682     "punpckhbw    %%mm7, %%mm4  \n\t"\
00683     "punpckhbw    %%mm5, %%mm1  \n\t"\
00684 \
00685     "psllq           $3, %%mm3  \n\t"\
00686     "psllq           $3, %%mm4  \n\t"\
00687 \
00688     "por          %%mm3, %%mm2  \n\t"\
00689     "por          %%mm4, %%mm1  \n\t"\
00690 \
00691     MOVNTQ(%%mm2,  (dst, index, 2))\
00692     MOVNTQ(%%mm1, 8(dst, index, 2))\
00693 \
00694     "add             $8, "#index"   \n\t"\
00695     "cmp        "#dstw", "#index"   \n\t"\
00696     " jb             1b             \n\t"
00697 #define WRITERGB16(dst, dstw, index)  REAL_WRITERGB16(dst, dstw, index)
00698 
00699 #define REAL_WRITERGB15(dst, dstw, index) \
00700     "pand "MANGLE(bF8)", %%mm2  \n\t" /* B */\
00701     "pand "MANGLE(bF8)", %%mm4  \n\t" /* G */\
00702     "pand "MANGLE(bF8)", %%mm5  \n\t" /* R */\
00703     "psrlq           $3, %%mm2  \n\t"\
00704     "psrlq           $1, %%mm5  \n\t"\
00705 \
00706     "movq         %%mm2, %%mm1  \n\t"\
00707     "movq         %%mm4, %%mm3  \n\t"\
00708 \
00709     "punpcklbw    %%mm7, %%mm3  \n\t"\
00710     "punpcklbw    %%mm5, %%mm2  \n\t"\
00711     "punpckhbw    %%mm7, %%mm4  \n\t"\
00712     "punpckhbw    %%mm5, %%mm1  \n\t"\
00713 \
00714     "psllq           $2, %%mm3  \n\t"\
00715     "psllq           $2, %%mm4  \n\t"\
00716 \
00717     "por          %%mm3, %%mm2  \n\t"\
00718     "por          %%mm4, %%mm1  \n\t"\
00719 \
00720     MOVNTQ(%%mm2,  (dst, index, 2))\
00721     MOVNTQ(%%mm1, 8(dst, index, 2))\
00722 \
00723     "add             $8, "#index"   \n\t"\
00724     "cmp        "#dstw", "#index"   \n\t"\
00725     " jb             1b             \n\t"
00726 #define WRITERGB15(dst, dstw, index)  REAL_WRITERGB15(dst, dstw, index)
00727 
00728 #define WRITEBGR24OLD(dst, dstw, index) \
00729     /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */\
00730     "movq      %%mm2, %%mm1             \n\t" /* B */\
00731     "movq      %%mm5, %%mm6             \n\t" /* R */\
00732     "punpcklbw %%mm4, %%mm2             \n\t" /* GBGBGBGB 0 */\
00733     "punpcklbw %%mm7, %%mm5             \n\t" /* 0R0R0R0R 0 */\
00734     "punpckhbw %%mm4, %%mm1             \n\t" /* GBGBGBGB 2 */\
00735     "punpckhbw %%mm7, %%mm6             \n\t" /* 0R0R0R0R 2 */\
00736     "movq      %%mm2, %%mm0             \n\t" /* GBGBGBGB 0 */\
00737     "movq      %%mm1, %%mm3             \n\t" /* GBGBGBGB 2 */\
00738     "punpcklwd %%mm5, %%mm0             \n\t" /* 0RGB0RGB 0 */\
00739     "punpckhwd %%mm5, %%mm2             \n\t" /* 0RGB0RGB 1 */\
00740     "punpcklwd %%mm6, %%mm1             \n\t" /* 0RGB0RGB 2 */\
00741     "punpckhwd %%mm6, %%mm3             \n\t" /* 0RGB0RGB 3 */\
00742 \
00743     "movq      %%mm0, %%mm4             \n\t" /* 0RGB0RGB 0 */\
00744     "psrlq        $8, %%mm0             \n\t" /* 00RGB0RG 0 */\
00745     "pand "MANGLE(bm00000111)", %%mm4   \n\t" /* 00000RGB 0 */\
00746     "pand "MANGLE(bm11111000)", %%mm0   \n\t" /* 00RGB000 0.5 */\
00747     "por       %%mm4, %%mm0             \n\t" /* 00RGBRGB 0 */\
00748     "movq      %%mm2, %%mm4             \n\t" /* 0RGB0RGB 1 */\
00749     "psllq       $48, %%mm2             \n\t" /* GB000000 1 */\
00750     "por       %%mm2, %%mm0             \n\t" /* GBRGBRGB 0 */\
00751 \
00752     "movq      %%mm4, %%mm2             \n\t" /* 0RGB0RGB 1 */\
00753     "psrld       $16, %%mm4             \n\t" /* 000R000R 1 */\
00754     "psrlq       $24, %%mm2             \n\t" /* 0000RGB0 1.5 */\
00755     "por       %%mm4, %%mm2             \n\t" /* 000RRGBR 1 */\
00756     "pand "MANGLE(bm00001111)", %%mm2   \n\t" /* 0000RGBR 1 */\
00757     "movq      %%mm1, %%mm4             \n\t" /* 0RGB0RGB 2 */\
00758     "psrlq        $8, %%mm1             \n\t" /* 00RGB0RG 2 */\
00759     "pand "MANGLE(bm00000111)", %%mm4   \n\t" /* 00000RGB 2 */\
00760     "pand "MANGLE(bm11111000)", %%mm1   \n\t" /* 00RGB000 2.5 */\
00761     "por       %%mm4, %%mm1             \n\t" /* 00RGBRGB 2 */\
00762     "movq      %%mm1, %%mm4             \n\t" /* 00RGBRGB 2 */\
00763     "psllq       $32, %%mm1             \n\t" /* BRGB0000 2 */\
00764     "por       %%mm1, %%mm2             \n\t" /* BRGBRGBR 1 */\
00765 \
00766     "psrlq       $32, %%mm4             \n\t" /* 000000RG 2.5 */\
00767     "movq      %%mm3, %%mm5             \n\t" /* 0RGB0RGB 3 */\
00768     "psrlq        $8, %%mm3             \n\t" /* 00RGB0RG 3 */\
00769     "pand "MANGLE(bm00000111)", %%mm5   \n\t" /* 00000RGB 3 */\
00770     "pand "MANGLE(bm11111000)", %%mm3   \n\t" /* 00RGB000 3.5 */\
00771     "por       %%mm5, %%mm3             \n\t" /* 00RGBRGB 3 */\
00772     "psllq       $16, %%mm3             \n\t" /* RGBRGB00 3 */\
00773     "por       %%mm4, %%mm3             \n\t" /* RGBRGBRG 2.5 */\
00774 \
00775     MOVNTQ(%%mm0,   (dst))\
00776     MOVNTQ(%%mm2,  8(dst))\
00777     MOVNTQ(%%mm3, 16(dst))\
00778     "add         $24, "#dst"            \n\t"\
00779 \
00780     "add          $8, "#index"          \n\t"\
00781     "cmp     "#dstw", "#index"          \n\t"\
00782     " jb          1b                    \n\t"
00783 
00784 #define WRITEBGR24MMX(dst, dstw, index) \
00785     /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */\
00786     "movq      %%mm2, %%mm1     \n\t" /* B */\
00787     "movq      %%mm5, %%mm6     \n\t" /* R */\
00788     "punpcklbw %%mm4, %%mm2     \n\t" /* GBGBGBGB 0 */\
00789     "punpcklbw %%mm7, %%mm5     \n\t" /* 0R0R0R0R 0 */\
00790     "punpckhbw %%mm4, %%mm1     \n\t" /* GBGBGBGB 2 */\
00791     "punpckhbw %%mm7, %%mm6     \n\t" /* 0R0R0R0R 2 */\
00792     "movq      %%mm2, %%mm0     \n\t" /* GBGBGBGB 0 */\
00793     "movq      %%mm1, %%mm3     \n\t" /* GBGBGBGB 2 */\
00794     "punpcklwd %%mm5, %%mm0     \n\t" /* 0RGB0RGB 0 */\
00795     "punpckhwd %%mm5, %%mm2     \n\t" /* 0RGB0RGB 1 */\
00796     "punpcklwd %%mm6, %%mm1     \n\t" /* 0RGB0RGB 2 */\
00797     "punpckhwd %%mm6, %%mm3     \n\t" /* 0RGB0RGB 3 */\
00798 \
00799     "movq      %%mm0, %%mm4     \n\t" /* 0RGB0RGB 0 */\
00800     "movq      %%mm2, %%mm6     \n\t" /* 0RGB0RGB 1 */\
00801     "movq      %%mm1, %%mm5     \n\t" /* 0RGB0RGB 2 */\
00802     "movq      %%mm3, %%mm7     \n\t" /* 0RGB0RGB 3 */\
00803 \
00804     "psllq       $40, %%mm0     \n\t" /* RGB00000 0 */\
00805     "psllq       $40, %%mm2     \n\t" /* RGB00000 1 */\
00806     "psllq       $40, %%mm1     \n\t" /* RGB00000 2 */\
00807     "psllq       $40, %%mm3     \n\t" /* RGB00000 3 */\
00808 \
00809     "punpckhdq %%mm4, %%mm0     \n\t" /* 0RGBRGB0 0 */\
00810     "punpckhdq %%mm6, %%mm2     \n\t" /* 0RGBRGB0 1 */\
00811     "punpckhdq %%mm5, %%mm1     \n\t" /* 0RGBRGB0 2 */\
00812     "punpckhdq %%mm7, %%mm3     \n\t" /* 0RGBRGB0 3 */\
00813 \
00814     "psrlq        $8, %%mm0     \n\t" /* 00RGBRGB 0 */\
00815     "movq      %%mm2, %%mm6     \n\t" /* 0RGBRGB0 1 */\
00816     "psllq       $40, %%mm2     \n\t" /* GB000000 1 */\
00817     "por       %%mm2, %%mm0     \n\t" /* GBRGBRGB 0 */\
00818     MOVNTQ(%%mm0, (dst))\
00819 \
00820     "psrlq       $24, %%mm6     \n\t" /* 0000RGBR 1 */\
00821     "movq      %%mm1, %%mm5     \n\t" /* 0RGBRGB0 2 */\
00822     "psllq       $24, %%mm1     \n\t" /* BRGB0000 2 */\
00823     "por       %%mm1, %%mm6     \n\t" /* BRGBRGBR 1 */\
00824     MOVNTQ(%%mm6, 8(dst))\
00825 \
00826     "psrlq       $40, %%mm5     \n\t" /* 000000RG 2 */\
00827     "psllq        $8, %%mm3     \n\t" /* RGBRGB00 3 */\
00828     "por       %%mm3, %%mm5     \n\t" /* RGBRGBRG 2 */\
00829     MOVNTQ(%%mm5, 16(dst))\
00830 \
00831     "add         $24, "#dst"    \n\t"\
00832 \
00833     "add          $8, "#index"  \n\t"\
00834     "cmp     "#dstw", "#index"  \n\t"\
00835     " jb          1b            \n\t"
00836 
00837 #define WRITEBGR24MMX2(dst, dstw, index) \
00838     /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */\
00839     "movq "MANGLE(ff_M24A)", %%mm0 \n\t"\
00840     "movq "MANGLE(ff_M24C)", %%mm7 \n\t"\
00841     "pshufw $0x50, %%mm2, %%mm1 \n\t" /* B3 B2 B3 B2  B1 B0 B1 B0 */\
00842     "pshufw $0x50, %%mm4, %%mm3 \n\t" /* G3 G2 G3 G2  G1 G0 G1 G0 */\
00843     "pshufw $0x00, %%mm5, %%mm6 \n\t" /* R1 R0 R1 R0  R1 R0 R1 R0 */\
00844 \
00845     "pand   %%mm0, %%mm1        \n\t" /*    B2        B1       B0 */\
00846     "pand   %%mm0, %%mm3        \n\t" /*    G2        G1       G0 */\
00847     "pand   %%mm7, %%mm6        \n\t" /*       R1        R0       */\
00848 \
00849     "psllq     $8, %%mm3        \n\t" /* G2        G1       G0    */\
00850     "por    %%mm1, %%mm6        \n\t"\
00851     "por    %%mm3, %%mm6        \n\t"\
00852     MOVNTQ(%%mm6, (dst))\
00853 \
00854     "psrlq     $8, %%mm4        \n\t" /* 00 G7 G6 G5  G4 G3 G2 G1 */\
00855     "pshufw $0xA5, %%mm2, %%mm1 \n\t" /* B5 B4 B5 B4  B3 B2 B3 B2 */\
00856     "pshufw $0x55, %%mm4, %%mm3 \n\t" /* G4 G3 G4 G3  G4 G3 G4 G3 */\
00857     "pshufw $0xA5, %%mm5, %%mm6 \n\t" /* R5 R4 R5 R4  R3 R2 R3 R2 */\
00858 \
00859     "pand "MANGLE(ff_M24B)", %%mm1 \n\t" /* B5       B4        B3    */\
00860     "pand   %%mm7, %%mm3        \n\t" /*       G4        G3       */\
00861     "pand   %%mm0, %%mm6        \n\t" /*    R4        R3       R2 */\
00862 \
00863     "por    %%mm1, %%mm3        \n\t" /* B5    G4 B4     G3 B3    */\
00864     "por    %%mm3, %%mm6        \n\t"\
00865     MOVNTQ(%%mm6, 8(dst))\
00866 \
00867     "pshufw $0xFF, %%mm2, %%mm1 \n\t" /* B7 B6 B7 B6  B7 B6 B6 B7 */\
00868     "pshufw $0xFA, %%mm4, %%mm3 \n\t" /* 00 G7 00 G7  G6 G5 G6 G5 */\
00869     "pshufw $0xFA, %%mm5, %%mm6 \n\t" /* R7 R6 R7 R6  R5 R4 R5 R4 */\
00870 \
00871     "pand   %%mm7, %%mm1        \n\t" /*       B7        B6       */\
00872     "pand   %%mm0, %%mm3        \n\t" /*    G7        G6       G5 */\
00873     "pand "MANGLE(ff_M24B)", %%mm6 \n\t" /* R7       R6        R5    */\
00874 \
00875     "por    %%mm1, %%mm3        \n\t"\
00876     "por    %%mm3, %%mm6        \n\t"\
00877     MOVNTQ(%%mm6, 16(dst))\
00878 \
00879     "add      $24, "#dst"       \n\t"\
00880 \
00881     "add       $8, "#index"     \n\t"\
00882     "cmp  "#dstw", "#index"     \n\t"\
00883     " jb       1b               \n\t"
00884 
00885 #if HAVE_MMX2
00886 #undef WRITEBGR24
00887 #define WRITEBGR24(dst, dstw, index)  WRITEBGR24MMX2(dst, dstw, index)
00888 #else
00889 #undef WRITEBGR24
00890 #define WRITEBGR24(dst, dstw, index)  WRITEBGR24MMX(dst, dstw, index)
00891 #endif
00892 
00893 #define REAL_WRITEYUY2(dst, dstw, index) \
00894     "packuswb  %%mm3, %%mm3     \n\t"\
00895     "packuswb  %%mm4, %%mm4     \n\t"\
00896     "packuswb  %%mm7, %%mm1     \n\t"\
00897     "punpcklbw %%mm4, %%mm3     \n\t"\
00898     "movq      %%mm1, %%mm7     \n\t"\
00899     "punpcklbw %%mm3, %%mm1     \n\t"\
00900     "punpckhbw %%mm3, %%mm7     \n\t"\
00901 \
00902     MOVNTQ(%%mm1, (dst, index, 2))\
00903     MOVNTQ(%%mm7, 8(dst, index, 2))\
00904 \
00905     "add          $8, "#index"  \n\t"\
00906     "cmp     "#dstw", "#index"  \n\t"\
00907     " jb          1b            \n\t"
00908 #define WRITEYUY2(dst, dstw, index)  REAL_WRITEYUY2(dst, dstw, index)
00909 
00910 
00911 static inline void RENAME(yuv2yuvX)(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
00912                                     int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
00913                                     uint8_t *dest, uint8_t *uDest, uint8_t *vDest, long dstW, long chrDstW)
00914 {
00915 #if HAVE_MMX
00916     if(!(c->flags & SWS_BITEXACT)){
00917         if (c->flags & SWS_ACCURATE_RND){
00918             if (uDest){
00919                 YSCALEYUV2YV12X_ACCURATE(   "0", CHR_MMX_FILTER_OFFSET, uDest, chrDstW)
00920                 YSCALEYUV2YV12X_ACCURATE(AV_STRINGIFY(VOF), CHR_MMX_FILTER_OFFSET, vDest, chrDstW)
00921             }
00922 
00923             YSCALEYUV2YV12X_ACCURATE("0", LUM_MMX_FILTER_OFFSET, dest, dstW)
00924         }else{
00925             if (uDest){
00926                 YSCALEYUV2YV12X(   "0", CHR_MMX_FILTER_OFFSET, uDest, chrDstW)
00927                 YSCALEYUV2YV12X(AV_STRINGIFY(VOF), CHR_MMX_FILTER_OFFSET, vDest, chrDstW)
00928             }
00929 
00930             YSCALEYUV2YV12X("0", LUM_MMX_FILTER_OFFSET, dest, dstW)
00931         }
00932         return;
00933     }
00934 #endif
00935 #if HAVE_ALTIVEC
00936 yuv2yuvX_altivec_real(lumFilter, lumSrc, lumFilterSize,
00937                       chrFilter, chrSrc, chrFilterSize,
00938                       dest, uDest, vDest, dstW, chrDstW);
00939 #else //HAVE_ALTIVEC
00940 yuv2yuvXinC(lumFilter, lumSrc, lumFilterSize,
00941             chrFilter, chrSrc, chrFilterSize,
00942             dest, uDest, vDest, dstW, chrDstW);
00943 #endif //!HAVE_ALTIVEC
00944 }
00945 
00946 static inline void RENAME(yuv2nv12X)(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
00947                                      int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
00948                                      uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat)
00949 {
00950 yuv2nv12XinC(lumFilter, lumSrc, lumFilterSize,
00951              chrFilter, chrSrc, chrFilterSize,
00952              dest, uDest, dstW, chrDstW, dstFormat);
00953 }
00954 
00955 static inline void RENAME(yuv2yuv1)(SwsContext *c, int16_t *lumSrc, int16_t *chrSrc,
00956                                     uint8_t *dest, uint8_t *uDest, uint8_t *vDest, long dstW, long chrDstW)
00957 {
00958     int i;
00959 #if HAVE_MMX
00960     if(!(c->flags & SWS_BITEXACT)){
00961         long p= uDest ? 3 : 1;
00962         uint8_t *src[3]= {lumSrc + dstW, chrSrc + chrDstW, chrSrc + VOFW + chrDstW};
00963         uint8_t *dst[3]= {dest, uDest, vDest};
00964         long counter[3] = {dstW, chrDstW, chrDstW};
00965 
00966         if (c->flags & SWS_ACCURATE_RND){
00967             while(p--){
00968                 __asm__ volatile(
00969                     YSCALEYUV2YV121_ACCURATE
00970                     :: "r" (src[p]), "r" (dst[p] + counter[p]),
00971                     "g" (-counter[p])
00972                     : "%"REG_a
00973                 );
00974             }
00975         }else{
00976             while(p--){
00977                 __asm__ volatile(
00978                     YSCALEYUV2YV121
00979                     :: "r" (src[p]), "r" (dst[p] + counter[p]),
00980                     "g" (-counter[p])
00981                     : "%"REG_a
00982                 );
00983             }
00984         }
00985         return;
00986     }
00987 #endif
00988     for (i=0; i<dstW; i++)
00989     {
00990         int val= (lumSrc[i]+64)>>7;
00991 
00992         if (val&256){
00993             if (val<0) val=0;
00994             else       val=255;
00995         }
00996 
00997         dest[i]= val;
00998     }
00999 
01000     if (uDest)
01001         for (i=0; i<chrDstW; i++)
01002         {
01003             int u=(chrSrc[i       ]+64)>>7;
01004             int v=(chrSrc[i + VOFW]+64)>>7;
01005 
01006             if ((u|v)&256){
01007                 if (u<0)        u=0;
01008                 else if (u>255) u=255;
01009                 if (v<0)        v=0;
01010                 else if (v>255) v=255;
01011             }
01012 
01013             uDest[i]= u;
01014             vDest[i]= v;
01015         }
01016 }
01017 
01018 
01022 static inline void RENAME(yuv2packedX)(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
01023                                        int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
01024                                        uint8_t *dest, long dstW, long dstY)
01025 {
01026 #if HAVE_MMX
01027     long dummy=0;
01028     if(!(c->flags & SWS_BITEXACT)){
01029         if (c->flags & SWS_ACCURATE_RND){
01030             switch(c->dstFormat){
01031             case PIX_FMT_RGB32:
01032                 YSCALEYUV2PACKEDX_ACCURATE
01033                 YSCALEYUV2RGBX
01034                 "pcmpeqd %%mm7, %%mm7 \n\t"
01035                 WRITEBGR32(%4, %5, %%REGa, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
01036 
01037                 YSCALEYUV2PACKEDX_END
01038                 return;
01039             case PIX_FMT_BGR24:
01040                 YSCALEYUV2PACKEDX_ACCURATE
01041                 YSCALEYUV2RGBX
01042                 "pxor %%mm7, %%mm7 \n\t"
01043                 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_c"\n\t" //FIXME optimize
01044                 "add %4, %%"REG_c"                        \n\t"
01045                 WRITEBGR24(%%REGc, %5, %%REGa)
01046 
01047 
01048                 :: "r" (&c->redDither),
01049                 "m" (dummy), "m" (dummy), "m" (dummy),
01050                 "r" (dest), "m" (dstW)
01051                 : "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S
01052                 );
01053                 return;
01054             case PIX_FMT_RGB555:
01055                 YSCALEYUV2PACKEDX_ACCURATE
01056                 YSCALEYUV2RGBX
01057                 "pxor %%mm7, %%mm7 \n\t"
01058                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01059 #ifdef DITHER1XBPP
01060                 "paddusb "BLUE_DITHER"(%0), %%mm2\n\t"
01061                 "paddusb "GREEN_DITHER"(%0), %%mm4\n\t"
01062                 "paddusb "RED_DITHER"(%0), %%mm5\n\t"
01063 #endif
01064 
01065                 WRITERGB15(%4, %5, %%REGa)
01066                 YSCALEYUV2PACKEDX_END
01067                 return;
01068             case PIX_FMT_RGB565:
01069                 YSCALEYUV2PACKEDX_ACCURATE
01070                 YSCALEYUV2RGBX
01071                 "pxor %%mm7, %%mm7 \n\t"
01072                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01073 #ifdef DITHER1XBPP
01074                 "paddusb "BLUE_DITHER"(%0), %%mm2\n\t"
01075                 "paddusb "GREEN_DITHER"(%0), %%mm4\n\t"
01076                 "paddusb "RED_DITHER"(%0), %%mm5\n\t"
01077 #endif
01078 
01079                 WRITERGB16(%4, %5, %%REGa)
01080                 YSCALEYUV2PACKEDX_END
01081                 return;
01082             case PIX_FMT_YUYV422:
01083                 YSCALEYUV2PACKEDX_ACCURATE
01084                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01085 
01086                 "psraw $3, %%mm3    \n\t"
01087                 "psraw $3, %%mm4    \n\t"
01088                 "psraw $3, %%mm1    \n\t"
01089                 "psraw $3, %%mm7    \n\t"
01090                 WRITEYUY2(%4, %5, %%REGa)
01091                 YSCALEYUV2PACKEDX_END
01092                 return;
01093             }
01094         }else{
01095             switch(c->dstFormat)
01096             {
01097             case PIX_FMT_RGB32:
01098                 YSCALEYUV2PACKEDX
01099                 YSCALEYUV2RGBX
01100                 "pcmpeqd %%mm7, %%mm7 \n\t"
01101                 WRITEBGR32(%4, %5, %%REGa, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
01102                 YSCALEYUV2PACKEDX_END
01103                 return;
01104             case PIX_FMT_BGR24:
01105                 YSCALEYUV2PACKEDX
01106                 YSCALEYUV2RGBX
01107                 "pxor                    %%mm7, %%mm7       \n\t"
01108                 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_c"   \n\t" //FIXME optimize
01109                 "add                        %4, %%"REG_c"   \n\t"
01110                 WRITEBGR24(%%REGc, %5, %%REGa)
01111 
01112                 :: "r" (&c->redDither),
01113                 "m" (dummy), "m" (dummy), "m" (dummy),
01114                 "r" (dest),  "m" (dstW)
01115                 : "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S
01116                 );
01117                 return;
01118             case PIX_FMT_RGB555:
01119                 YSCALEYUV2PACKEDX
01120                 YSCALEYUV2RGBX
01121                 "pxor %%mm7, %%mm7 \n\t"
01122                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01123 #ifdef DITHER1XBPP
01124                 "paddusb "BLUE_DITHER"(%0), %%mm2  \n\t"
01125                 "paddusb "GREEN_DITHER"(%0), %%mm4  \n\t"
01126                 "paddusb "RED_DITHER"(%0), %%mm5  \n\t"
01127 #endif
01128 
01129                 WRITERGB15(%4, %5, %%REGa)
01130                 YSCALEYUV2PACKEDX_END
01131                 return;
01132             case PIX_FMT_RGB565:
01133                 YSCALEYUV2PACKEDX
01134                 YSCALEYUV2RGBX
01135                 "pxor %%mm7, %%mm7 \n\t"
01136                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01137 #ifdef DITHER1XBPP
01138                 "paddusb "BLUE_DITHER"(%0), %%mm2  \n\t"
01139                 "paddusb "GREEN_DITHER"(%0), %%mm4  \n\t"
01140                 "paddusb "RED_DITHER"(%0), %%mm5  \n\t"
01141 #endif
01142 
01143                 WRITERGB16(%4, %5, %%REGa)
01144                 YSCALEYUV2PACKEDX_END
01145                 return;
01146             case PIX_FMT_YUYV422:
01147                 YSCALEYUV2PACKEDX
01148                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01149 
01150                 "psraw $3, %%mm3    \n\t"
01151                 "psraw $3, %%mm4    \n\t"
01152                 "psraw $3, %%mm1    \n\t"
01153                 "psraw $3, %%mm7    \n\t"
01154                 WRITEYUY2(%4, %5, %%REGa)
01155                 YSCALEYUV2PACKEDX_END
01156                 return;
01157             }
01158         }
01159     }
01160 #endif /* HAVE_MMX */
01161 #if HAVE_ALTIVEC
01162     /* The following list of supported dstFormat values should
01163        match what's found in the body of altivec_yuv2packedX() */
01164     if (!(c->flags & SWS_BITEXACT) &&
01165        (c->dstFormat==PIX_FMT_ABGR  || c->dstFormat==PIX_FMT_BGRA  ||
01166         c->dstFormat==PIX_FMT_BGR24 || c->dstFormat==PIX_FMT_RGB24 ||
01167         c->dstFormat==PIX_FMT_RGBA  || c->dstFormat==PIX_FMT_ARGB))
01168             altivec_yuv2packedX (c, lumFilter, lumSrc, lumFilterSize,
01169                                  chrFilter, chrSrc, chrFilterSize,
01170                                  dest, dstW, dstY);
01171     else
01172 #endif
01173         yuv2packedXinC(c, lumFilter, lumSrc, lumFilterSize,
01174                        chrFilter, chrSrc, chrFilterSize,
01175                        dest, dstW, dstY);
01176 }
01177 
01181 static inline void RENAME(yuv2packed2)(SwsContext *c, uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, uint16_t *uvbuf1,
01182                           uint8_t *dest, int dstW, int yalpha, int uvalpha, int y)
01183 {
01184     int  yalpha1=4095- yalpha;
01185     int uvalpha1=4095-uvalpha;
01186     int i;
01187 
01188 #if HAVE_MMX
01189     if(!(c->flags & SWS_BITEXACT)){
01190         switch(c->dstFormat)
01191         {
01192             //Note 8280 == DSTW_OFFSET but the preprocessor can't handle that there :(
01193             case PIX_FMT_RGB32:
01194                 __asm__ volatile(
01195                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01196                 "mov        %4, %%"REG_b"               \n\t"
01197                 "push %%"REG_BP"                        \n\t"
01198                 YSCALEYUV2RGB(%%REGBP, %5)
01199                 "pcmpeqd %%mm7, %%mm7                   \n\t"
01200                 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
01201                 "pop %%"REG_BP"                         \n\t"
01202                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01203 
01204                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01205                 "a" (&c->redDither)
01206                 );
01207                 return;
01208             case PIX_FMT_BGR24:
01209                 __asm__ volatile(
01210                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01211                 "mov        %4, %%"REG_b"               \n\t"
01212                 "push %%"REG_BP"                        \n\t"
01213                 YSCALEYUV2RGB(%%REGBP, %5)
01214                 "pxor    %%mm7, %%mm7                   \n\t"
01215                 WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
01216                 "pop %%"REG_BP"                         \n\t"
01217                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01218                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01219                 "a" (&c->redDither)
01220                 );
01221                 return;
01222             case PIX_FMT_RGB555:
01223                 __asm__ volatile(
01224                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01225                 "mov        %4, %%"REG_b"               \n\t"
01226                 "push %%"REG_BP"                        \n\t"
01227                 YSCALEYUV2RGB(%%REGBP, %5)
01228                 "pxor    %%mm7, %%mm7                   \n\t"
01229                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01230 #ifdef DITHER1XBPP
01231                 "paddusb "BLUE_DITHER"(%5), %%mm2      \n\t"
01232                 "paddusb "GREEN_DITHER"(%5), %%mm4      \n\t"
01233                 "paddusb "RED_DITHER"(%5), %%mm5      \n\t"
01234 #endif
01235 
01236                 WRITERGB15(%%REGb, 8280(%5), %%REGBP)
01237                 "pop %%"REG_BP"                         \n\t"
01238                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01239 
01240                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01241                 "a" (&c->redDither)
01242                 );
01243                 return;
01244             case PIX_FMT_RGB565:
01245                 __asm__ volatile(
01246                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01247                 "mov        %4, %%"REG_b"               \n\t"
01248                 "push %%"REG_BP"                        \n\t"
01249                 YSCALEYUV2RGB(%%REGBP, %5)
01250                 "pxor    %%mm7, %%mm7                   \n\t"
01251                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01252 #ifdef DITHER1XBPP
01253                 "paddusb "BLUE_DITHER"(%5), %%mm2      \n\t"
01254                 "paddusb "GREEN_DITHER"(%5), %%mm4      \n\t"
01255                 "paddusb "RED_DITHER"(%5), %%mm5      \n\t"
01256 #endif
01257 
01258                 WRITERGB16(%%REGb, 8280(%5), %%REGBP)
01259                 "pop %%"REG_BP"                         \n\t"
01260                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01261                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01262                 "a" (&c->redDither)
01263                 );
01264                 return;
01265             case PIX_FMT_YUYV422:
01266                 __asm__ volatile(
01267                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01268                 "mov %4, %%"REG_b"                        \n\t"
01269                 "push %%"REG_BP"                        \n\t"
01270                 YSCALEYUV2PACKED(%%REGBP, %5)
01271                 WRITEYUY2(%%REGb, 8280(%5), %%REGBP)
01272                 "pop %%"REG_BP"                         \n\t"
01273                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01274                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01275                 "a" (&c->redDither)
01276                 );
01277                 return;
01278             default: break;
01279         }
01280     }
01281 #endif //HAVE_MMX
01282 YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGB2_C, YSCALE_YUV_2_PACKED2_C, YSCALE_YUV_2_GRAY16_2_C, YSCALE_YUV_2_MONO2_C)
01283 }
01284 
01288 static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t *uvbuf0, uint16_t *uvbuf1,
01289                           uint8_t *dest, int dstW, int uvalpha, int dstFormat, int flags, int y)
01290 {
01291     const int yalpha1=0;
01292     int i;
01293 
01294     uint16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
01295     const int yalpha= 4096; //FIXME ...
01296 
01297     if (flags&SWS_FULL_CHR_H_INT)
01298     {
01299         RENAME(yuv2packed2)(c, buf0, buf0, uvbuf0, uvbuf1, dest, dstW, 0, uvalpha, y);
01300         return;
01301     }
01302 
01303 #if HAVE_MMX
01304     if(!(flags & SWS_BITEXACT)){
01305         if (uvalpha < 2048) // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
01306         {
01307             switch(dstFormat)
01308             {
01309             case PIX_FMT_RGB32:
01310                 __asm__ volatile(
01311                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01312                 "mov        %4, %%"REG_b"               \n\t"
01313                 "push %%"REG_BP"                        \n\t"
01314                 YSCALEYUV2RGB1(%%REGBP, %5)
01315                 "pcmpeqd %%mm7, %%mm7                   \n\t"
01316                 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
01317                 "pop %%"REG_BP"                         \n\t"
01318                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01319 
01320                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01321                 "a" (&c->redDither)
01322                 );
01323                 return;
01324             case PIX_FMT_BGR24:
01325                 __asm__ volatile(
01326                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01327                 "mov        %4, %%"REG_b"               \n\t"
01328                 "push %%"REG_BP"                        \n\t"
01329                 YSCALEYUV2RGB1(%%REGBP, %5)
01330                 "pxor    %%mm7, %%mm7                   \n\t"
01331                 WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
01332                 "pop %%"REG_BP"                         \n\t"
01333                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01334 
01335                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01336                 "a" (&c->redDither)
01337                 );
01338                 return;
01339             case PIX_FMT_RGB555:
01340                 __asm__ volatile(
01341                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01342                 "mov        %4, %%"REG_b"               \n\t"
01343                 "push %%"REG_BP"                        \n\t"
01344                 YSCALEYUV2RGB1(%%REGBP, %5)
01345                 "pxor    %%mm7, %%mm7                   \n\t"
01346                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01347 #ifdef DITHER1XBPP
01348                 "paddusb "BLUE_DITHER"(%5), %%mm2      \n\t"
01349                 "paddusb "GREEN_DITHER"(%5), %%mm4      \n\t"
01350                 "paddusb "RED_DITHER"(%5), %%mm5      \n\t"
01351 #endif
01352                 WRITERGB15(%%REGb, 8280(%5), %%REGBP)
01353                 "pop %%"REG_BP"                         \n\t"
01354                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01355 
01356                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01357                 "a" (&c->redDither)
01358                 );
01359                 return;
01360             case PIX_FMT_RGB565:
01361                 __asm__ volatile(
01362                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01363                 "mov        %4, %%"REG_b"               \n\t"
01364                 "push %%"REG_BP"                        \n\t"
01365                 YSCALEYUV2RGB1(%%REGBP, %5)
01366                 "pxor    %%mm7, %%mm7                   \n\t"
01367                 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
01368 #ifdef DITHER1XBPP
01369                 "paddusb "BLUE_DITHER"(%5), %%mm2      \n\t"
01370                 "paddusb "GREEN_DITHER"(%5), %%mm4      \n\t"
01371                 "paddusb "RED_DITHER"(%5), %%mm5      \n\t"
01372 #endif
01373 
01374                 WRITERGB16(%%REGb, 8280(%5), %%REGBP)
01375                 "pop %%"REG_BP"                         \n\t"
01376                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01377 
01378                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01379                 "a" (&c->redDither)
01380                 );
01381                 return;
01382             case PIX_FMT_YUYV422:
01383                 __asm__ volatile(
01384                 "mov %%"REG_b", "ESP_OFFSET"(%5)        \n\t"
01385                 "mov        %4, %%"REG_b"               \n\t"
01386                 "push %%"REG_BP"                        \n\t"
01387                 YSCALEYUV2PACKED1(%%REGBP, %5)
01388                 WRITEYUY2(%%REGb, 8280(%5), %%REGBP)
01389                 "pop %%"REG_BP"                         \n\t"
01390                 "mov "ESP_OFFSET"(%5), %%"REG_b"        \n\t"
01391 
01392                 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)
01394                 );
01395                 return;
01396             }
01397         }
01398         else
01399         {
01400             switch(dstFormat)
01401             {
01402             case PIX_FMT_RGB32:
01403                 __asm__ volatile(
0140cea71d748a517">S" (uvbuf0), "D" (uvbuf1), "m" (dest),
01393                 "a" (&c->redDither)