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

📄 fdct_mmx.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************** *                                                                  * * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   * * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       * *                                                                  * * THE Theora SOURCE CODE IS COPYRIGHT (C) 1999-2001                * * by the Xiph.Org Foundation http://www.xiph.org/                  * *                                                                  * ********************************************************************//* mmx fdct implementation *//* $Id: fdct_mmx.c 11582 2006-06-16 10:57:19Z msmith $ */#include "theora/theora.h"#include "codec_internal.h"#include "dsp.h"static const __attribute__ ((aligned(8),used)) ogg_int64_t xC1S7 = 0x0fb15fb15fb15fb15LL;static const __attribute__ ((aligned(8),used)) ogg_int64_t xC2S6 = 0x0ec83ec83ec83ec83LL;static const __attribute__ ((aligned(8),used)) ogg_int64_t xC3S5 = 0x0d4dbd4dbd4dbd4dbLL;static const __attribute__ ((aligned(8),used)) ogg_int64_t xC4S4 = 0x0b505b505b505b505LL;static const __attribute__ ((aligned(8),used)) ogg_int64_t xC5S3 = 0x08e3a8e3a8e3a8e3aLL;static const __attribute__ ((aligned(8),used)) ogg_int64_t xC6S2 = 0x061f861f861f861f8LL;static const __attribute__ ((aligned(8),used)) ogg_int64_t xC7S1 = 0x031f131f131f131f1LL;/* execute stage 1 of forward DCT */#define Fdct_mmx(ip0,ip1,ip2,ip3,ip4,ip5,ip6,ip7,temp)                        \  "  movq      " #ip0 ", %%mm0      \n\t"                                     \  "  movq      " #ip1 ", %%mm1      \n\t"                                     \  "  movq      " #ip3 ", %%mm2      \n\t"                                     \  "  movq      " #ip5 ", %%mm3      \n\t"                                     \  "  movq        %%mm0, %%mm4       \n\t"                                     \  "  movq        %%mm1, %%mm5       \n\t"                                     \  "  movq        %%mm2, %%mm6       \n\t"                                     \  "  movq        %%mm3, %%mm7       \n\t"                                     \                                                                              \  "  paddsw    " #ip7 ", %%mm0      \n\t" /* mm0 = ip0 + ip7 = is07 */        \  "  paddsw    " #ip2 ", %%mm1      \n\t" /* mm1 = ip1 + ip2 = is12 */        \  "  paddsw    " #ip4 ", %%mm2      \n\t" /* mm2 = ip3 + ip4 = is34 */        \  "  paddsw    " #ip6 ", %%mm3      \n\t" /* mm3 = ip5 + ip6 = is56 */        \  "  psubsw    " #ip7 ", %%mm4      \n\t" /* mm4 = ip0 - ip7 = id07 */        \  "  psubsw    " #ip2 ", %%mm5      \n\t" /* mm5 = ip1 - ip2 = id12 */        \                                                                              \  "  psubsw      %%mm2, %%mm0       \n\t" /* mm0 = is07 - is34 */             \                                                                              \  "  paddsw      %%mm2, %%mm2       \n\t"                                     \                                                                              \  "  psubsw    " #ip4 ", %%mm6      \n\t" /* mm6 = ip3 - ip4 = id34 */        \                                                                              \  "  paddsw      %%mm0, %%mm2       \n\t" /* mm2 = is07 + is34 = is0734 */    \  "  psubsw      %%mm3, %%mm1       \n\t" /* mm1 = is12 - is56 */             \  "  movq        %%mm0," #temp "    \n\t" /* Save is07 - is34 to free mm0; */ \  "  paddsw      %%mm3, %%mm3       \n\t"                                     \  "  paddsw      %%mm1, %%mm3       \n\t" /* mm3 = is12 + 1s56	= is1256 */   \                                                                              \  "  psubsw    " #ip6 ", %%mm7      \n\t" /* mm7 = ip5 - ip6 = id56 */        \  /* ------------------------------------------------------------------- */   \  "  psubsw      %%mm7, %%mm5       \n\t" /* mm5 = id12 - id56 */             \  "  paddsw      %%mm7, %%mm7       \n\t"                                     \  "  paddsw      %%mm5, %%mm7       \n\t" /* mm7 = id12 + id56 */             \  /* ------------------------------------------------------------------- */   \  "  psubsw      %%mm3, %%mm2       \n\t" /* mm2 = is0734 - is1256 */         \  "  paddsw      %%mm3, %%mm3       \n\t"                                     \                                                                              \  "  movq        %%mm2, %%mm0       \n\t" /* make a copy */                   \  "  paddsw      %%mm2, %%mm3       \n\t" /* mm3 = is0734 + is1256 */         \                                                                              \  "  pmulhw      %[xC4S4], %%mm0    \n\t" /* mm0 = xC4S4 * ( is0734 - is1256 ) - ( is0734 - is1256 ) */ \  "  paddw       %%mm2, %%mm0       \n\t" /* mm0 = xC4S4 * ( is0734 - is1256 ) */ \  "  psrlw       $15, %%mm2         \n\t"                                     \  "  paddw       %%mm2, %%mm0       \n\t" /* Truncate mm0, now it is op[4] */ \                                                                              \  "  movq        %%mm3, %%mm2       \n\t"                                     \  "  movq        %%mm0," #ip4 "     \n\t" /* save ip4, now mm0,mm2 are free */ \                                                                              \  "  movq        %%mm3, %%mm0       \n\t"                                     \  "  pmulhw      %[xC4S4], %%mm3    \n\t" /* mm3 = xC4S4 * ( is0734 +is1256 ) - ( is0734 +is1256 ) */ \                                                                              \  "  psrlw       $15, %%mm2         \n\t"                                     \  "  paddw       %%mm0, %%mm3       \n\t" /* mm3 = xC4S4 * ( is0734 +is1256 )	 */ \  "  paddw       %%mm2, %%mm3       \n\t" /* Truncate mm3, now it is op[0] */ \                                                                              \  "  movq        %%mm3," #ip0 "     \n\t"                                     \  /* ------------------------------------------------------------------- */   \  "  movq      " #temp ", %%mm3     \n\t" /* mm3 = irot_input_y */            \  "  pmulhw      %[xC2S6], %%mm3    \n\t" /* mm3 = xC2S6 * irot_input_y - irot_input_y */ \                                                                              \  "  movq      " #temp ", %%mm2     \n\t"                                     \  "  movq        %%mm2, %%mm0       \n\t"                                     \                                                                              \  "  psrlw       $15, %%mm2         \n\t" /* mm3 = xC2S6 * irot_input_y */    \  "  paddw       %%mm0, %%mm3       \n\t"                                     \                                                                              \  "  paddw       %%mm2, %%mm3       \n\t" /* Truncated */                     \  "  movq        %%mm5, %%mm0       \n\t"                                     \                                                                              \  "  movq        %%mm5, %%mm2       \n\t"                                     \  "  pmulhw      %[xC6S2], %%mm0    \n\t" /* mm0 = xC6S2 * irot_input_x */    \                                                                              \  "  psrlw       $15, %%mm2         \n\t"                                     \  "  paddw       %%mm2, %%mm0       \n\t" /* Truncated */                     \                                                                              \  "  paddsw      %%mm0, %%mm3       \n\t" /* ip[2] */                         \  "  movq        %%mm3," #ip2 "     \n\t" /* Save ip2 */                      \                                                                              \  "  movq        %%mm5, %%mm0       \n\t"                                     \  "  movq        %%mm5, %%mm2       \n\t"                                     \                                                                              \  "  pmulhw     %[xC2S6], %%mm5     \n\t" /* mm5 = xC2S6 * irot_input_x - irot_input_x */ \  "  psrlw       $15, %%mm2         \n\t"                                     \                                                                              \  "  movq      " #temp ", %%mm3     \n\t"                                     \  "  paddw       %%mm0, %%mm5       \n\t" /* mm5 = xC2S6 * irot_input_x */    \                                                                              \  "  paddw       %%mm2, %%mm5       \n\t" /* Truncated */                     \  "  movq        %%mm3, %%mm2       \n\t"                                     \                                                                              \  "  pmulhw      %[xC6S2], %%mm3    \n\t" /* mm3 = xC6S2 * irot_input_y */    \  "  psrlw       $15, %%mm2         \n\t"                                     \                                                                              \  "  paddw       %%mm2, %%mm3       \n\t" /* Truncated */                     \  "  psubsw      %%mm5, %%mm3       \n\t"                                     \                                                                              \  "  movq        %%mm3," #ip6 "     \n\t"                                     \  /* ------------------------------------------------------------------- */   \  "  movq        %[xC4S4], %%mm0    \n\t"                                     \  "  movq        %%mm1, %%mm2       \n\t"                                     \  "  movq        %%mm1, %%mm3       \n\t"                                     \                                                                              \  "  pmulhw      %%mm0, %%mm1       \n\t" /* mm0 = xC4S4 * ( is12 - is56 ) - ( is12 - is56 ) */ \  "  psrlw       $15, %%mm2         \n\t"				      \                                                                              \  "  paddw       %%mm3, %%mm1       \n\t" /* mm0 = xC4S4 * ( is12 - is56 ) */ \  "  paddw       %%mm2, %%mm1       \n\t" /* Truncate mm1, now it is icommon_product1 */ \                                                                              \  "  movq        %%mm7, %%mm2       \n\t"                                     \  "  movq        %%mm7, %%mm3       \n\t"			              \                                                                              \  "  pmulhw      %%mm0, %%mm7       \n\t" /* mm7 = xC4S4 * ( id12 + id56 ) - ( id12 + id56 ) */ \  "  psrlw       $15, %%mm2         \n\t"			              \                                                                              \  "  paddw       %%mm3, %%mm7       \n\t" /* mm7 = xC4S4 * ( id12 + id56 ) */ \  "  paddw       %%mm2, %%mm7       \n\t" /* Truncate mm7, now it is icommon_product2 */ \  /* ------------------------------------------------------------------- */   \  "  pxor        %%mm0, %%mm0       \n\t" /* Clear mm0 */                     \  "  psubsw      %%mm6, %%mm0       \n\t" /* mm0 = - id34 */                  \                                                                              \  "  psubsw      %%mm7, %%mm0       \n\t" /* mm0 = - ( id34 + idcommon_product2 ) */ \  "  paddsw      %%mm6, %%mm6       \n\t"                                     \  "  paddsw      %%mm0, %%mm6       \n\t" /* mm6 = id34 - icommon_product2 */ \                                                                              \  "  psubsw      %%mm1, %%mm4       \n\t" /* mm4 = id07 - icommon_product1 */ \  "  paddsw      %%mm1, %%mm1       \n\t"                                     \  "  paddsw      %%mm4, %%mm1       \n\t" /* mm1 = id07 + icommon_product1 */ \  /* ------------------------------------------------------------------- */   \  "  movq        %[xC1S7], %%mm7    \n\t"                                     \  "  movq        %%mm1, %%mm2       \n\t"                                     \                                                                              \  "  movq        %%mm1, %%mm3       \n\t"                                     \  "  pmulhw      %%mm7, %%mm1       \n\t" /* mm1 = xC1S7 * irot_input_x - irot_input_x */ \                                                                              \  "  movq        %[xC7S1], %%mm7    \n\t"                                     \  "  psrlw       $15, %%mm2         \n\t"                                     \                                                                              \  "  paddw       %%mm3, %%mm1       \n\t" /* mm1 = xC1S7 * irot_input_x */    \

⌨️ 快捷键说明

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