⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yuv_mmx.c

📁 libminigui-1.3.0.tar.gz。 miniGUI的库函数源代码!
💻 C
📖 第 1 页 / 共 2 页
字号:
		 "punpckhbw %%mm2,%%mm6\n"      //  0 R3  0 R2  0 R1  0 R0		 "punpckhbw %%mm1,%%mm5\n"      // G3 B3 G2 B2 G1 B1 G0 B0		 "movq %%mm5,%%mm1\n"           // G3 B3 G2 B2 G1 B1 G0 B0		 "punpcklwd %%mm6,%%mm1\n"      //  0 R1 G1 B1  0 R0 G0 B0		 "movq   %%mm1,(%5)\n"          // wrote out ! row2		 "punpckhwd %%mm6,%%mm5\n"      //  0 R3 G3 B3  0 R2 G2 B2		 "movq   %%mm5,8(%5)\n"         // wrote out ! row2		 		 "addl  $4,%2\n"            // lum+4		 "leal  16(%3),%3\n"        // row1+16		 "leal  16(%5),%5\n"        // row2+16		 "addl  $2, %%ebx\n"        // cr+2		 "addl  $2, %1\n"           // cb+2		 "addl  $4,%6\n"            // x+4		 "cmpl  %4,%6\n"		 "jl    1b\n"		 "addl           %4,     %2\n" // lum += cols 		 "addl           %8,     %3\n" // row1+= mod		 "addl           %8,     %5\n" // row2+= mod		 "movl           $0,     %6\n" // x=0		 "cmpl           %7,     %2\n"		 "jl             1b\n"		 "emms\n"		 "popl %%ebx\n"		 :		 : "m" (cr), "r"(cb),"r"(lum),		 "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod)		 : "%ebx"		 );}void Color565DitherYV12MMX1X( int *colortab, Uint32 *rgb_2_pix,                             unsigned char *lum, unsigned char *cr,                             unsigned char *cb, unsigned char *out,                             int rows, int cols, int mod ){    Uint16 *row1;    Uint16 *row2;    unsigned char* y = lum +cols*rows;    /* Pointer to the end */    int x=0;    row1 = (Uint16 *)out;                 /* 16 bit target */    row2 = (Uint16 *)out+cols+mod;        /* start of second row  */    mod = (mod+cols+mod)*2;               /* increment for row1 in byte */      __asm__ __volatile__(         "pushl %%ebx\n"	 "movl %0, %%ebx\n"         ".align 8\n"         "1:\n"         "movd           (%1),                   %%mm0\n" // 4 Cb         0  0  0  0 u3 u2 u1 u0         "pxor           %%mm7,                  %%mm7\n"         "movd           (%%ebx),                %%mm1\n" // 4 Cr                0  0  0  0 v3 v2 v1 v0         "punpcklbw      %%mm7,                  %%mm0\n" // 4 W cb   0 u3  0 u2  0 u1  0 u0         "punpcklbw      %%mm7,                  %%mm1\n" // 4 W cr   0 v3  0 v2  0 v1  0 v0         "psubw          _MMX_0080w,             %%mm0\n"         "psubw          _MMX_0080w,             %%mm1\n"         "movq           %%mm0,                  %%mm2\n" // Cb                   0 u3  0 u2  0 u1  0 u0         "movq           %%mm1,                  %%mm3\n" // Cr         "pmullw         _MMX_Ugrn565,           %%mm2\n" // Cb2green 0 R3  0 R2  0 R1  0 R0         "movq           (%2),                   %%mm6\n" // L1      l7 L6 L5 L4 L3 L2 L1 L0         "pmullw         _MMX_Ublu5x5,           %%mm0\n" // Cb2blue         "pand           _MMX_00FFw,             %%mm6\n" // L1      00 L6 00 L4 00 L2 00 L0         "pmullw         _MMX_Vgrn565,           %%mm3\n" // Cr2green         "movq           (%2),                   %%mm7\n" // L2         "pmullw         _MMX_Vred5x5,           %%mm1\n" // Cr2red         "psrlw          $8,                     %%mm7\n"        // L2           00 L7 00 L5 00 L3 00 L1         "pmullw         _MMX_Ycoeff,            %%mm6\n" // lum1         "paddw          %%mm3,                  %%mm2\n" // Cb2green + Cr2green == green         "pmullw         _MMX_Ycoeff,            %%mm7\n" // lum2         "movq           %%mm6,                  %%mm4\n" // lum1         "paddw          %%mm0,                  %%mm6\n" // lum1 +blue 00 B6 00 B4 00 B2 00 B0         "movq           %%mm4,                  %%mm5\n" // lum1         "paddw          %%mm1,                  %%mm4\n" // lum1 +red  00 R6 00 R4 00 R2 00 R0         "paddw          %%mm2,                  %%mm5\n" // lum1 +green 00 G6 00 G4 00 G2 00 G0         "psraw          $6,                     %%mm4\n" // R1 0 .. 64         "movq           %%mm7,                  %%mm3\n" // lum2                       00 L7 00 L5 00 L3 00 L1         "psraw          $6,                     %%mm5\n" // G1  - .. +         "paddw          %%mm0,                  %%mm7\n" // Lum2 +blue 00 B7 00 B5 00 B3 00 B1         "psraw          $6,                     %%mm6\n" // B1         0 .. 64         "packuswb       %%mm4,                  %%mm4\n" // R1 R1         "packuswb       %%mm5,                  %%mm5\n" // G1 G1         "packuswb       %%mm6,                  %%mm6\n" // B1 B1         "punpcklbw      %%mm4,                  %%mm4\n"         "punpcklbw      %%mm5,                  %%mm5\n"         "pand           _MMX_red565,            %%mm4\n"         "psllw          $3,                     %%mm5\n" // GREEN       1         "punpcklbw      %%mm6,                  %%mm6\n"         "pand           _MMX_grn565,            %%mm5\n"         "pand           _MMX_red565,            %%mm6\n"         "por            %%mm5,                  %%mm4\n" //         "psrlw          $11,                    %%mm6\n" // BLUE        1         "movq           %%mm3,                  %%mm5\n" // lum2         "paddw          %%mm1,                  %%mm3\n" // lum2 +red      00 R7 00 R5 00 R3 00 R1         "paddw          %%mm2,                  %%mm5\n" // lum2 +green 00 G7 00 G5 00 G3 00 G1         "psraw          $6,                     %%mm3\n" // R2         "por            %%mm6,                  %%mm4\n" // MM4         "psraw          $6,                     %%mm5\n" // G2         "movq           (%2, %4),               %%mm6\n" // L3 load lum2         "psraw          $6,                     %%mm7\n"         "packuswb       %%mm3,                  %%mm3\n"         "packuswb       %%mm5,                  %%mm5\n"         "packuswb       %%mm7,                  %%mm7\n"         "pand           _MMX_00FFw,             %%mm6\n" // L3         "punpcklbw      %%mm3,                  %%mm3\n"         "punpcklbw      %%mm5,                  %%mm5\n"         "pmullw         _MMX_Ycoeff,            %%mm6\n" // lum3         "punpcklbw      %%mm7,                  %%mm7\n"         "psllw          $3,                     %%mm5\n" // GREEN 2         "pand           _MMX_red565,            %%mm7\n"         "pand           _MMX_red565,            %%mm3\n"         "psrlw          $11,                    %%mm7\n" // BLUE  2         "pand           _MMX_grn565,            %%mm5\n"         "por            %%mm7,                  %%mm3\n"         "movq           (%2,%4),                %%mm7\n" // L4 load lum2         "por            %%mm5,                  %%mm3\n" //         "psrlw          $8,                     %%mm7\n" // L4         "movq           %%mm4,                  %%mm5\n"         "punpcklwd      %%mm3,                  %%mm4\n"         "pmullw         _MMX_Ycoeff,            %%mm7\n" // lum4         "punpckhwd      %%mm3,                  %%mm5\n"         "movq           %%mm4,                  (%3)\n"  // write row1         "movq           %%mm5,                  8(%3)\n" // write row1         "movq           %%mm6,                  %%mm4\n" // Lum3         "paddw          %%mm0,                  %%mm6\n" // Lum3 +blue         "movq           %%mm4,                  %%mm5\n" // Lum3         "paddw          %%mm1,                  %%mm4\n" // Lum3 +red         "paddw          %%mm2,                  %%mm5\n" // Lum3 +green         "psraw          $6,                     %%mm4\n"         "movq           %%mm7,                  %%mm3\n" // Lum4         "psraw          $6,                     %%mm5\n"         "paddw          %%mm0,                  %%mm7\n" // Lum4 +blue         "psraw          $6,                     %%mm6\n" // Lum3 +blue         "movq           %%mm3,                  %%mm0\n" // Lum4         "packuswb       %%mm4,                  %%mm4\n"         "paddw          %%mm1,                  %%mm3\n" // Lum4 +red         "packuswb       %%mm5,                  %%mm5\n"         "paddw          %%mm2,                  %%mm0\n" // Lum4 +green         "packuswb       %%mm6,                  %%mm6\n"         "punpcklbw      %%mm4,                  %%mm4\n"         "punpcklbw      %%mm5,                  %%mm5\n"         "punpcklbw      %%mm6,                  %%mm6\n"         "psllw          $3,                     %%mm5\n" // GREEN 3         "pand           _MMX_red565,            %%mm4\n"         "psraw          $6,                     %%mm3\n" // psr 6         "psraw          $6,                     %%mm0\n"         "pand           _MMX_red565,            %%mm6\n" // BLUE         "pand           _MMX_grn565,            %%mm5\n"         "psrlw          $11,                    %%mm6\n" // BLUE  3         "por            %%mm5,                  %%mm4\n"         "psraw          $6,                     %%mm7\n"         "por            %%mm6,                  %%mm4\n"         "packuswb       %%mm3,                  %%mm3\n"         "packuswb       %%mm0,                  %%mm0\n"         "packuswb       %%mm7,                  %%mm7\n"         "punpcklbw      %%mm3,                  %%mm3\n"         "punpcklbw      %%mm0,                  %%mm0\n"         "punpcklbw      %%mm7,                  %%mm7\n"         "pand           _MMX_red565,            %%mm3\n"         "pand           _MMX_red565,            %%mm7\n" // BLUE         "psllw          $3,                     %%mm0\n" // GREEN 4         "psrlw          $11,                    %%mm7\n"         "pand           _MMX_grn565,            %%mm0\n"         "por            %%mm7,                  %%mm3\n"         "por            %%mm0,                  %%mm3\n"         "movq           %%mm4,                  %%mm5\n"         "punpcklwd      %%mm3,                  %%mm4\n"         "punpckhwd      %%mm3,                  %%mm5\n"         "movq           %%mm4,                  (%5)\n"	 "movq           %%mm5,                  8(%5)\n"         "addl           $8,                     %6\n"         "addl           $8,                     %2\n"         "addl           $4,                     %%ebx\n"         "addl           $4,                     %1\n"         "cmpl           %4,                     %6\n"         "leal           16(%3),                 %3\n"	 "leal           16(%5),%5\n" // row2+16         "jl             1b\n"	 "addl           %4,     %2\n" // lum += cols 	 "addl           %8,     %3\n" // row1+= mod	 "addl           %8,     %5\n" // row2+= mod	 "movl           $0,     %6\n" // x=0	 "cmpl           %7,     %2\n"	 "jl             1b\n"         "emms\n"	 "popl %%ebx\n"         :         :"m" (cr), "r"(cb),"r"(lum),	 "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod)	 : "%ebx"         );}#endif /* GCC i386 inline assembly */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -