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

📄 dsputil_mmx.c

📁 ffmpeg移植到symbian的全部源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm2, %%mm3, %%mm0, %%mm1, %5, %6, %5,   (%0),   (%0),  8(%0), 48(%0), (%1), OP)\        \        QPEL_V_LOW(%%mm3, %%mm0, %%mm1, %%mm2, %5, %6, %5,   (%0),  8(%0), 16(%0), 56(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm0, %%mm1, %%mm2, %%mm3, %5, %6, %5,  8(%0), 16(%0), 24(%0), 64(%0), (%1), OP)\        QPEL_V_LOW(%%mm1, %%mm2, %%mm3, %%mm0, %5, %6, %5, 16(%0), 24(%0), 32(%0), 72(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm2, %%mm3, %%mm0, %%mm1, %5, %6, %5, 24(%0), 32(%0), 40(%0), 80(%0), (%1), OP)\        QPEL_V_LOW(%%mm3, %%mm0, %%mm1, %%mm2, %5, %6, %5, 32(%0), 40(%0), 48(%0), 88(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm0, %%mm1, %%mm2, %%mm3, %5, %6, %5, 40(%0), 48(%0), 56(%0), 96(%0), (%1), OP)\        QPEL_V_LOW(%%mm1, %%mm2, %%mm3, %%mm0, %5, %6, %5, 48(%0), 56(%0), 64(%0),104(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm2, %%mm3, %%mm0, %%mm1, %5, %6, %5, 56(%0), 64(%0), 72(%0),112(%0), (%1), OP)\        QPEL_V_LOW(%%mm3, %%mm0, %%mm1, %%mm2, %5, %6, %5, 64(%0), 72(%0), 80(%0),120(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm0, %%mm1, %%mm2, %%mm3, %5, %6, %5, 72(%0), 80(%0), 88(%0),128(%0), (%1), OP)\        \        QPEL_V_LOW(%%mm1, %%mm2, %%mm3, %%mm0, %5, %6, %5, 80(%0), 88(%0), 96(%0),128(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"  \        QPEL_V_LOW(%%mm2, %%mm3, %%mm0, %%mm1, %5, %6, %5, 88(%0), 96(%0),104(%0),120(%0), (%1), OP)\        QPEL_V_LOW(%%mm3, %%mm0, %%mm1, %%mm2, %5, %6, %5, 96(%0),104(%0),112(%0),112(%0), (%1, %3), OP)\        \        "add $136, %0                   \n\t"\        "add %6, %1                     \n\t"\        "decl %2                        \n\t"\        " jnz 1b                        \n\t"\        \        : "+r"(temp_ptr), "+r"(dst), "+g"(count)\        : "r"((x86_reg)dstStride), "r"(2*(x86_reg)dstStride), /*"m"(ff_pw_20), "m"(ff_pw_3),*/ "m"(ROUNDER), "g"(4-14*(x86_reg)dstStride)\        :"memory"\    );\}\\static void OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\    uint64_t temp[9*2];\    uint64_t *temp_ptr= temp;\    int count= 9;\\    /*FIXME unroll */\    asm volatile(\        "pxor %%mm7, %%mm7              \n\t"\        "1:                             \n\t"\        "movq (%0), %%mm0               \n\t"\        "movq (%0), %%mm1               \n\t"\        "punpcklbw %%mm7, %%mm0         \n\t"\        "punpckhbw %%mm7, %%mm1         \n\t"\        "movq %%mm0, (%1)               \n\t"\        "movq %%mm1, 9*8(%1)            \n\t"\        "add $8, %1                     \n\t"\        "add %3, %0                     \n\t"\        "decl %2                        \n\t"\        " jnz 1b                        \n\t"\        : "+r" (src), "+r" (temp_ptr), "+r"(count)\        : "r" ((x86_reg)srcStride)\        : "memory"\    );\    \    temp_ptr= temp;\    count=2;\    \/*FIXME reorder for speed */\    asm volatile(\        /*"pxor %%mm7, %%mm7              \n\t"*/\        "1:                             \n\t"\        "movq (%0), %%mm0               \n\t"\        "movq 8(%0), %%mm1              \n\t"\        "movq 16(%0), %%mm2             \n\t"\        "movq 24(%0), %%mm3             \n\t"\        QPEL_V_LOW(%%mm0, %%mm1, %%mm2, %%mm3, %5, %6, %5, 16(%0),  8(%0),   (%0), 32(%0), (%1), OP)\        QPEL_V_LOW(%%mm1, %%mm2, %%mm3, %%mm0, %5, %6, %5,  8(%0),   (%0),   (%0), 40(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm2, %%mm3, %%mm0, %%mm1, %5, %6, %5,   (%0),   (%0),  8(%0), 48(%0), (%1), OP)\        \        QPEL_V_LOW(%%mm3, %%mm0, %%mm1, %%mm2, %5, %6, %5,   (%0),  8(%0), 16(%0), 56(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm0, %%mm1, %%mm2, %%mm3, %5, %6, %5,  8(%0), 16(%0), 24(%0), 64(%0), (%1), OP)\        \        QPEL_V_LOW(%%mm1, %%mm2, %%mm3, %%mm0, %5, %6, %5, 16(%0), 24(%0), 32(%0), 64(%0), (%1, %3), OP)\        "add %4, %1                     \n\t"\        QPEL_V_LOW(%%mm2, %%mm3, %%mm0, %%mm1, %5, %6, %5, 24(%0), 32(%0), 40(%0), 56(%0), (%1), OP)\        QPEL_V_LOW(%%mm3, %%mm0, %%mm1, %%mm2, %5, %6, %5, 32(%0), 40(%0), 48(%0), 48(%0), (%1, %3), OP)\                \        "add $72, %0                    \n\t"\        "add %6, %1                     \n\t"\        "decl %2                        \n\t"\        " jnz 1b                        \n\t"\         \        : "+r"(temp_ptr), "+r"(dst), "+g"(count)\        : "r"((x86_reg)dstStride), "r"(2*(x86_reg)dstStride), /*"m"(ff_pw_20), "m"(ff_pw_3),*/ "m"(ROUNDER), "g"(4-6*(x86_reg)dstStride)\        : "memory"\   );\}\\static void OPNAME ## qpel8_mc00_ ## MMX (uint8_t *dst, uint8_t *src, int stride){\    OPNAME ## pixels8_ ## MMX(dst, src, stride, 8);\}\\static void OPNAME ## qpel8_mc10_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[8];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, stride, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, src, half, stride, stride, 8);\}\\static void OPNAME ## qpel8_mc20_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    OPNAME ## mpeg4_qpel8_h_lowpass_ ## MMX(dst, src, stride, stride, 8);\}\\static void OPNAME ## qpel8_mc30_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[8];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, stride, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, src+1, half, stride, stride, 8);\}\\static void OPNAME ## qpel8_mc01_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[8];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, 8, stride);\    OPNAME ## pixels8_l2_ ## MMX(dst, src, half, stride, stride, 8);\}\\static void OPNAME ## qpel8_mc02_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, src, stride, stride);\}\\static void OPNAME ## qpel8_mc03_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[8];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, 8, stride);\    OPNAME ## pixels8_l2_ ## MMX(dst, src+stride, half, stride, stride, 8);\}\static void OPNAME ## qpel8_mc11_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half) + 64;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, 8, stride, 9);\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, stride, 8, 8);\}\static void OPNAME ## qpel8_mc31_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half) + 64;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## pixels8_l2_ ## MMX(halfH, src+1, halfH, 8, stride, 9);\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, stride, 8, 8);\}\static void OPNAME ## qpel8_mc13_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half) + 64;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, 8, stride, 9);\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, halfH+8, halfHV, stride, 8, 8);\}\static void OPNAME ## qpel8_mc33_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half) + 64;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## pixels8_l2_ ## MMX(halfH, src+1, halfH, 8, stride, 9);\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, halfH+8, halfHV, stride, 8, 8);\}\static void OPNAME ## qpel8_mc21_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half) + 64;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, stride, 8, 8);\}\static void OPNAME ## qpel8_mc23_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half) + 64;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\    OPNAME ## pixels8_l2_ ## MMX(dst, halfH+8, halfHV, stride, 8, 8);\}\static void OPNAME ## qpel8_mc12_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, 8, stride, 9);\    OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, stride, 8);\}\static void OPNAME ## qpel8_mc32_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[8 + 9];\    uint8_t * const halfH= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    put ## RND ## pixels8_l2_ ## MMX(halfH, src+1, halfH, 8, stride, 9);\    OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, stride, 8);\}\static void OPNAME ## qpel8_mc22_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[9];\    uint8_t * const halfH= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\    OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, stride, 8);\}\static void OPNAME ## qpel16_mc00_ ## MMX (uint8_t *dst, uint8_t *src, int stride){\    OPNAME ## pixels16_ ## MMX(dst, src, stride, 16);\}\\static void OPNAME ## qpel16_mc10_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[32];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(half, src, 16, stride, 16);\    OPNAME ## pixels16_l2_ ## MMX(dst, src, half, stride, stride, 16);\}\\static void OPNAME ## qpel16_mc20_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    OPNAME ## mpeg4_qpel16_h_lowpass_ ## MMX(dst, src, stride, stride, 16);\}\\static void OPNAME ## qpel16_mc30_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[32];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(half, src, 16, stride, 16);\    OPNAME ## pixels16_l2_ ## MMX(dst, src+1, half, stride, stride, 16);\}\\static void OPNAME ## qpel16_mc01_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[32];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(half, src, 16, stride);\    OPNAME ## pixels16_l2_ ## MMX(dst, src, half, stride, stride, 16);\}\\static void OPNAME ## qpel16_mc02_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, src, stride, stride);\}\\static void OPNAME ## qpel16_mc03_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t temp[32];\    uint8_t * const half= (uint8_t*)temp;\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(half, src, 16, stride);\    OPNAME ## pixels16_l2_ ## MMX(dst, src+stride, half, stride, stride, 16);\}\static void OPNAME ## qpel16_mc11_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[16*2 + 17*2];\    uint8_t * const halfH= ((uint8_t*)half) + 256;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\    put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, stride, 17);\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\    OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, stride, 16, 16);\}\static void OPNAME ## qpel16_mc31_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[16*2 + 17*2];\    uint8_t * const halfH= ((uint8_t*)half) + 256;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\    put ## RND ## pixels16_l2_ ## MMX(halfH, src+1, halfH, 16, stride, 17);\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\    OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, stride, 16, 16);\}\static void OPNAME ## qpel16_mc13_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[16*2 + 17*2];\    uint8_t * const halfH= ((uint8_t*)half) + 256;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\    put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, stride, 17);\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\    OPNAME ## pixels16_l2_ ## MMX(dst, halfH+16, halfHV, stride, 16, 16);\}\static void OPNAME ## qpel16_mc33_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[16*2 + 17*2];\    uint8_t * const halfH= ((uint8_t*)half) + 256;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\    put ## RND ## pixels16_l2_ ## MMX(halfH, src+1, halfH, 16, stride, 17);\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\    OPNAME ## pixels16_l2_ ## MMX(dst, halfH+16, halfHV, stride, 16, 16);\}\static void OPNAME ## qpel16_mc21_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[16*2 + 17*2];\    uint8_t * const halfH= ((uint8_t*)half) + 256;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\    OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, stride, 16, 16);\}\static void OPNAME ## qpel16_mc23_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\    uint64_t half[16*2 + 17*2];\    uint8_t * const halfH= ((uint8_t*)half) + 256;\    uint8_t * const halfHV= ((uint8_t*)half);\    put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\    put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 1

⌨️ 快捷键说明

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