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

📄 idct_sse2_xvid.c

📁 ffmpeg移植到symbian的全部源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#define iLLM_HEAD                           \    "movdqa   "MANGLE(tan3)", "TAN3"  \n\t" \    "movdqa   "MANGLE(tan1)", "TAN1"  \n\t" \///IDCT pass on columns.#define iLLM_PASS(dct)                      \    "movdqa   "TAN3", %%xmm1          \n\t" \    "movdqa   "TAN1", %%xmm3          \n\t" \    "pmulhw   %%xmm4, "TAN3"          \n\t" \    "pmulhw   %%xmm5, %%xmm1          \n\t" \    "paddsw   %%xmm4, "TAN3"          \n\t" \    "paddsw   %%xmm5, %%xmm1          \n\t" \    "psubsw   %%xmm5, "TAN3"          \n\t" \    "paddsw   %%xmm4, %%xmm1          \n\t" \    "pmulhw   %%xmm7, %%xmm3          \n\t" \    "pmulhw   %%xmm6, "TAN1"          \n\t" \    "paddsw   %%xmm6, %%xmm3          \n\t" \    "psubsw   %%xmm7, "TAN1"          \n\t" \    "movdqa   %%xmm3, %%xmm7          \n\t" \    "movdqa   "TAN1", %%xmm6          \n\t" \    "psubsw   %%xmm1, %%xmm3          \n\t" \    "psubsw   "TAN3", "TAN1"          \n\t" \    "paddsw   %%xmm7, %%xmm1          \n\t" \    "paddsw   %%xmm6, "TAN3"          \n\t" \    "movdqa   %%xmm3, %%xmm6          \n\t" \    "psubsw   "TAN3", %%xmm3          \n\t" \    "paddsw   %%xmm6, "TAN3"          \n\t" \    "movdqa   "MANGLE(sqrt2)", %%xmm4 \n\t" \    "pmulhw   %%xmm4, %%xmm3          \n\t" \    "pmulhw   %%xmm4, "TAN3"          \n\t" \    "paddsw   "TAN3", "TAN3"          \n\t" \    "paddsw   %%xmm3, %%xmm3          \n\t" \    "movdqa   "MANGLE(tan2)", %%xmm7  \n\t" \    MOV_32_ONLY ROW2", "REG2"         \n\t" \    MOV_32_ONLY ROW6", "REG6"         \n\t" \    "movdqa   %%xmm7, %%xmm5          \n\t" \    "pmulhw   "REG6", %%xmm7          \n\t" \    "pmulhw   "REG2", %%xmm5          \n\t" \    "paddsw   "REG2", %%xmm7          \n\t" \    "psubsw   "REG6", %%xmm5          \n\t" \    MOV_32_ONLY ROW0", "REG0"         \n\t" \    MOV_32_ONLY ROW4", "REG4"         \n\t" \    MOV_32_ONLY"  "TAN1", (%0)        \n\t" \    "movdqa   "REG0", "XMMS"          \n\t" \    "psubsw   "REG4", "REG0"          \n\t" \    "paddsw   "XMMS", "REG4"          \n\t" \    "movdqa   "REG4", "XMMS"          \n\t" \    "psubsw   %%xmm7, "REG4"          \n\t" \    "paddsw   "XMMS", %%xmm7          \n\t" \    "movdqa   "REG0", "XMMS"          \n\t" \    "psubsw   %%xmm5, "REG0"          \n\t" \    "paddsw   "XMMS", %%xmm5          \n\t" \    "movdqa   %%xmm5, "XMMS"          \n\t" \    "psubsw   "TAN3", %%xmm5          \n\t" \    "paddsw   "XMMS", "TAN3"          \n\t" \    "movdqa   "REG0", "XMMS"          \n\t" \    "psubsw   %%xmm3, "REG0"          \n\t" \    "paddsw   "XMMS", %%xmm3          \n\t" \    MOV_32_ONLY"  (%0), "TAN1"        \n\t" \    "psraw        $6, %%xmm5          \n\t" \    "psraw        $6, "REG0"          \n\t" \    "psraw        $6, "TAN3"          \n\t" \    "psraw        $6, %%xmm3          \n\t" \    "movdqa   "TAN3", 1*16("dct")     \n\t" \    "movdqa   %%xmm3, 2*16("dct")     \n\t" \    "movdqa   "REG0", 5*16("dct")     \n\t" \    "movdqa   %%xmm5, 6*16("dct")     \n\t" \    "movdqa   %%xmm7, %%xmm0          \n\t" \    "movdqa   "REG4", %%xmm4          \n\t" \    "psubsw   %%xmm1, %%xmm7          \n\t" \    "psubsw   "TAN1", "REG4"          \n\t" \    "paddsw   %%xmm0, %%xmm1          \n\t" \    "paddsw   %%xmm4, "TAN1"          \n\t" \    "psraw        $6, %%xmm1          \n\t" \    "psraw        $6, %%xmm7          \n\t" \    "psraw        $6, "TAN1"          \n\t" \    "psraw        $6, "REG4"          \n\t" \    "movdqa   %%xmm1, ("dct")         \n\t" \    "movdqa   "TAN1", 3*16("dct")     \n\t" \    "movdqa   "REG4", 4*16("dct")     \n\t" \    "movdqa   %%xmm7, 7*16("dct")     \n\t"///IDCT pass on columns, assuming rows 4-7 are zero.#define iLLM_PASS_SPARSE(dct)               \    "pmulhw   %%xmm4, "TAN3"          \n\t" \    "paddsw   %%xmm4, "TAN3"          \n\t" \    "movdqa   %%xmm6, %%xmm3          \n\t" \    "pmulhw   %%xmm6, "TAN1"          \n\t" \    "movdqa   %%xmm4, %%xmm1          \n\t" \    "psubsw   %%xmm1, %%xmm3          \n\t" \    "paddsw   %%xmm6, %%xmm1          \n\t" \    "movdqa   "TAN1", %%xmm6          \n\t" \    "psubsw   "TAN3", "TAN1"          \n\t" \    "paddsw   %%xmm6, "TAN3"          \n\t" \    "movdqa   %%xmm3, %%xmm6          \n\t" \    "psubsw   "TAN3", %%xmm3          \n\t" \    "paddsw   %%xmm6, "TAN3"          \n\t" \    "movdqa   "MANGLE(sqrt2)", %%xmm4 \n\t" \    "pmulhw   %%xmm4, %%xmm3          \n\t" \    "pmulhw   %%xmm4, "TAN3"          \n\t" \    "paddsw   "TAN3", "TAN3"          \n\t" \    "paddsw   %%xmm3, %%xmm3          \n\t" \    "movdqa   "MANGLE(tan2)", %%xmm5  \n\t" \    MOV_32_ONLY ROW2", "SREG2"        \n\t" \    "pmulhw   "SREG2", %%xmm5         \n\t" \    MOV_32_ONLY ROW0", "REG0"         \n\t" \    "movdqa   "REG0", %%xmm6          \n\t" \    "psubsw   "SREG2", %%xmm6         \n\t" \    "paddsw   "REG0", "SREG2"         \n\t" \    MOV_32_ONLY"  "TAN1", (%0)        \n\t" \    "movdqa   "REG0", "XMMS"          \n\t" \    "psubsw   %%xmm5, "REG0"          \n\t" \    "paddsw   "XMMS", %%xmm5          \n\t" \    "movdqa   %%xmm5, "XMMS"          \n\t" \    "psubsw   "TAN3", %%xmm5          \n\t" \    "paddsw   "XMMS", "TAN3"          \n\t" \    "movdqa   "REG0", "XMMS"          \n\t" \    "psubsw   %%xmm3, "REG0"          \n\t" \    "paddsw   "XMMS", %%xmm3          \n\t" \    MOV_32_ONLY"  (%0), "TAN1"        \n\t" \    "psraw        $6, %%xmm5          \n\t" \    "psraw        $6, "REG0"          \n\t" \    "psraw        $6, "TAN3"          \n\t" \    "psraw        $6, %%xmm3          \n\t" \    "movdqa   "TAN3", 1*16("dct")     \n\t" \    "movdqa   %%xmm3, 2*16("dct")     \n\t" \    "movdqa   "REG0", 5*16("dct")     \n\t" \    "movdqa   %%xmm5, 6*16("dct")     \n\t" \    "movdqa   "SREG2", %%xmm0         \n\t" \    "movdqa   %%xmm6, %%xmm4          \n\t" \    "psubsw   %%xmm1, "SREG2"         \n\t" \    "psubsw   "TAN1", %%xmm6          \n\t" \    "paddsw   %%xmm0, %%xmm1          \n\t" \    "paddsw   %%xmm4, "TAN1"          \n\t" \    "psraw        $6, %%xmm1          \n\t" \    "psraw        $6, "SREG2"         \n\t" \    "psraw        $6, "TAN1"          \n\t" \    "psraw        $6, %%xmm6          \n\t" \    "movdqa   %%xmm1, ("dct")         \n\t" \    "movdqa   "TAN1", 3*16("dct")     \n\t" \    "movdqa   %%xmm6, 4*16("dct")     \n\t" \    "movdqa   "SREG2", 7*16("dct")    \n\t"inline void ff_idct_xvid_sse2(short *block){    asm volatile(    "movq     "MANGLE(m127)", %%mm0                              \n\t"    iMTX_MULT("(%0)",     MANGLE(iTab1), ROUND(walkenIdctRounders),      PUT_EVEN(ROW0))    iMTX_MULT("1*16(%0)", MANGLE(iTab2), ROUND(walkenIdctRounders+1*16), PUT_ODD(ROW1))    iMTX_MULT("2*16(%0)", MANGLE(iTab3), ROUND(walkenIdctRounders+2*16), PUT_EVEN(ROW2))    TEST_TWO_ROWS("3*16(%0)", "4*16(%0)", "%%eax", "%%ecx", CLEAR_ODD(ROW3), CLEAR_EVEN(ROW4))    JZ("%%eax", "1f")    iMTX_MULT("3*16(%0)", MANGLE(iTab4), ROUND(walkenIdctRounders+3*16), PUT_ODD(ROW3))    TEST_TWO_ROWS("5*16(%0)", "6*16(%0)", "%%eax", "%%edx", CLEAR_ODD(ROW5), CLEAR_EVEN(ROW6))    TEST_ONE_ROW("7*16(%0)", "%%esi", CLEAR_ODD(ROW7))    iLLM_HEAD    ASMALIGN(4)    JNZ("%%ecx", "2f")    JNZ("%%eax", "3f")    JNZ("%%edx", "4f")    JNZ("%%esi", "5f")    iLLM_PASS_SPARSE("%0")    "jmp 6f                                                      \n\t"    "2:                                                          \n\t"    iMTX_MULT("4*16(%0)", MANGLE(iTab1), "#", PUT_EVEN(ROW4))    "3:                                                          \n\t"    iMTX_MULT("5*16(%0)", MANGLE(iTab4), ROUND(walkenIdctRounders+4*16), PUT_ODD(ROW5))    JZ("%%edx", "1f")    "4:                                                          \n\t"    iMTX_MULT("6*16(%0)", MANGLE(iTab3), ROUND(walkenIdctRounders+5*16), PUT_EVEN(ROW6))    JZ("%%esi", "1f")    "5:                                                          \n\t"    iMTX_MULT("7*16(%0)", MANGLE(iTab2), ROUND(walkenIdctRounders+5*16), PUT_ODD(ROW7))#ifndef ARCH_X86_64    iLLM_HEAD#endif    iLLM_PASS("%0")    "6:                                                          \n\t"    : "+r"(block)    :    : "%eax", "%ecx", "%edx", "%esi", "memory");}void ff_idct_xvid_sse2_put(uint8_t *dest, int line_size, short *block){    ff_idct_xvid_sse2(block);    put_pixels_clamped_mmx(block, dest, line_size);}void ff_idct_xvid_sse2_add(uint8_t *dest, int line_size, short *block){    ff_idct_xvid_sse2(block);    add_pixels_clamped_mmx(block, dest, line_size);}

⌨️ 快捷键说明

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