Go to the documentation of this file.
   42             MMI_ULDC1(%[ftmp0], %[
src], 0x00)
 
   43             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
   44             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
   45             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
   46             MMI_ULDC1(%[ftmp2], %[
src], 0x00)
 
   47             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
   48             MMI_ULDC1(%[ftmp3], %[
src], 0x00)
 
   49             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
   51             "addi       %[h],       %[h],           -0x04              \n\t" 
   53             MMI_SDC1(%[ftmp0], %[
dst], 0x00)
 
   54             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
   55             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
   56             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
   57             MMI_SDC1(%[ftmp2], %[
dst], 0x00)
 
   58             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
   59             MMI_SDC1(%[ftmp3], %[
dst], 0x00)
 
   60             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
   63               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
   64               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
   75         A.i = 64 - 
D.i - 
B.i - 
C.i;
 
   78             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t" 
   79             "pshufh     %[A],       %[A],           %[ftmp0]           \n\t" 
   80             "pshufh     %[B],       %[B],           %[ftmp0]           \n\t" 
   81             "mtc1       %[tmp0],    %[ftmp9]                           \n\t" 
   82             "pshufh     %[C],       %[C],           %[ftmp0]           \n\t" 
   83             "pshufh     %[D],       %[D],           %[ftmp0]           \n\t" 
   86             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
   87             MMI_ULDC1(%[ftmp2], %[
src], 0x01)
 
   88             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
   89             MMI_ULDC1(%[ftmp3], %[
src], 0x00)
 
   90             MMI_ULDC1(%[ftmp4], %[
src], 0x01)
 
   91             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
   92             MMI_ULDC1(%[ftmp10], %[
src], 0x00)
 
   93             MMI_ULDC1(%[ftmp11], %[
src], 0x01)
 
   94             "addi       %[h],       %[h],           -0x02              \n\t" 
   96             "punpcklbh  %[ftmp5],   %[ftmp1],       %[ftmp0]           \n\t" 
   97             "punpckhbh  %[ftmp6],   %[ftmp1],       %[ftmp0]           \n\t" 
   98             "punpcklbh  %[ftmp7],   %[ftmp2],       %[ftmp0]           \n\t" 
   99             "punpckhbh  %[ftmp8],   %[ftmp2],       %[ftmp0]           \n\t" 
  100             "pmullh     %[ftmp5],   %[ftmp5],       %[A]               \n\t" 
  101             "pmullh     %[ftmp7],   %[ftmp7],       %[B]               \n\t" 
  102             "paddh      %[ftmp1],   %[ftmp5],       %[ftmp7]           \n\t" 
  103             "pmullh     %[ftmp6],   %[ftmp6],       %[A]               \n\t" 
  104             "pmullh     %[ftmp8],   %[ftmp8],       %[B]               \n\t" 
  105             "paddh      %[ftmp2],   %[ftmp6],       %[ftmp8]           \n\t" 
  106             "punpcklbh  %[ftmp5],   %[ftmp3],       %[ftmp0]           \n\t" 
  107             "punpckhbh  %[ftmp6],   %[ftmp3],       %[ftmp0]           \n\t" 
  108             "punpcklbh  %[ftmp7],   %[ftmp4],       %[ftmp0]           \n\t" 
  109             "punpckhbh  %[ftmp8],   %[ftmp4],       %[ftmp0]           \n\t" 
  110             "pmullh     %[ftmp5],   %[ftmp5],       %[C]               \n\t" 
  111             "pmullh     %[ftmp7],   %[ftmp7],       %[D]               \n\t" 
  112             "paddh      %[ftmp5],   %[ftmp5],       %[ftmp7]           \n\t" 
  113             "pmullh     %[ftmp6],   %[ftmp6],       %[C]               \n\t" 
  114             "pmullh     %[ftmp8],   %[ftmp8],       %[D]               \n\t" 
  115             "paddh      %[ftmp6],   %[ftmp6],       %[ftmp8]           \n\t" 
  116             "paddh      %[ftmp1],   %[ftmp1],       %[ftmp5]           \n\t" 
  117             "paddh      %[ftmp2],   %[ftmp2],       %[ftmp6]           \n\t" 
  118             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]        \n\t" 
  119             "paddh      %[ftmp2],   %[ftmp2],       %[ff_pw_32]        \n\t" 
  120             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp9]           \n\t" 
  121             "psrlh      %[ftmp2],   %[ftmp2],       %[ftmp9]           \n\t" 
  122             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp2]           \n\t" 
  124             "punpcklbh  %[ftmp5],   %[ftmp3],       %[ftmp0]           \n\t" 
  125             "punpckhbh  %[ftmp6],   %[ftmp3],       %[ftmp0]           \n\t" 
  126             "punpcklbh  %[ftmp7],   %[ftmp4],       %[ftmp0]           \n\t" 
  127             "punpckhbh  %[ftmp8],   %[ftmp4],       %[ftmp0]           \n\t" 
  128             "pmullh     %[ftmp5],   %[ftmp5],       %[A]               \n\t" 
  129             "pmullh     %[ftmp7],   %[ftmp7],       %[B]               \n\t" 
  130             "paddh      %[ftmp3],   %[ftmp5],       %[ftmp7]           \n\t" 
  131             "pmullh     %[ftmp6],   %[ftmp6],       %[A]               \n\t" 
  132             "pmullh     %[ftmp8],   %[ftmp8],       %[B]               \n\t" 
  133             "paddh      %[ftmp4],   %[ftmp6],       %[ftmp8]           \n\t" 
  134             "punpcklbh  %[ftmp5],   %[ftmp10],      %[ftmp0]           \n\t" 
  135             "punpckhbh  %[ftmp6],   %[ftmp10],      %[ftmp0]           \n\t" 
  136             "punpcklbh  %[ftmp7],   %[ftmp11],      %[ftmp0]           \n\t" 
  137             "punpckhbh  %[ftmp8],   %[ftmp11],      %[ftmp0]           \n\t" 
  138             "pmullh     %[ftmp5],   %[ftmp5],       %[C]               \n\t" 
  139             "pmullh     %[ftmp7],   %[ftmp7],       %[D]               \n\t" 
  140             "paddh      %[ftmp5],   %[ftmp5],       %[ftmp7]           \n\t" 
  141             "pmullh     %[ftmp6],   %[ftmp6],       %[C]               \n\t" 
  142             "pmullh     %[ftmp8],   %[ftmp8],       %[D]               \n\t" 
  143             "paddh      %[ftmp6],   %[ftmp6],       %[ftmp8]           \n\t" 
  144             "paddh      %[ftmp3],   %[ftmp3],       %[ftmp5]           \n\t" 
  145             "paddh      %[ftmp4],   %[ftmp4],       %[ftmp6]           \n\t" 
  146             "paddh      %[ftmp3],   %[ftmp3],       %[ff_pw_32]        \n\t" 
  147             "paddh      %[ftmp4],   %[ftmp4],       %[ff_pw_32]        \n\t" 
  148             "psrlh      %[ftmp3],   %[ftmp3],       %[ftmp9]           \n\t" 
  149             "psrlh      %[ftmp4],   %[ftmp4],       %[ftmp9]           \n\t" 
  150             "packushb   %[ftmp3],   %[ftmp3],       %[ftmp4]           \n\t" 
  152             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
  153             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
  154             MMI_SDC1(%[ftmp3], %[
dst], 0x00)
 
  155             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
  158               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  159               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  160               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  161               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  162               [ftmp8]
"=&f"(ftmp[8]),        [ftmp9]
"=&f"(ftmp[9]),
 
  163               [ftmp10]
"=&f"(ftmp[10]),      [ftmp11]
"=&f"(ftmp[11]),
 
  167               [
A]
"f"(
A.f),                  [
B]
"f"(
B.f),
 
  168               [
C]
"f"(
C.f),                  [
D]
"f"(
D.f),
 
  178             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t" 
  179             "pshufh     %[A],       %[A],           %[ftmp0]           \n\t" 
  180             "pshufh     %[E],       %[E],           %[ftmp0]           \n\t" 
  181             "mtc1       %[tmp0],    %[ftmp7]                           \n\t" 
  184             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
  185             MMI_ULDC1(%[ftmp2], %[
src], 0x01)
 
  186             "addi       %[h],       %[h],           -0x01              \n\t" 
  187             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
  189             "punpcklbh  %[ftmp3],   %[ftmp1],       %[ftmp0]           \n\t" 
  190             "punpckhbh  %[ftmp4],   %[ftmp1],       %[ftmp0]           \n\t" 
  191             "punpcklbh  %[ftmp5],   %[ftmp2],       %[ftmp0]           \n\t" 
  192             "punpckhbh  %[ftmp6],   %[ftmp2],       %[ftmp0]           \n\t" 
  193             "pmullh     %[ftmp3],   %[ftmp3],       %[A]               \n\t" 
  194             "pmullh     %[ftmp5],   %[ftmp5],       %[E]               \n\t" 
  195             "paddh      %[ftmp1],   %[ftmp3],       %[ftmp5]           \n\t" 
  196             "pmullh     %[ftmp4],   %[ftmp4],       %[A]               \n\t" 
  197             "pmullh     %[ftmp6],   %[ftmp6],       %[E]               \n\t" 
  198             "paddh      %[ftmp2],   %[ftmp4],       %[ftmp6]           \n\t" 
  200             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]        \n\t" 
  201             "paddh      %[ftmp2],   %[ftmp2],       %[ff_pw_32]        \n\t" 
  202             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp7]           \n\t" 
  203             "psrlh      %[ftmp2],   %[ftmp2],       %[ftmp7]           \n\t" 
  204             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp2]           \n\t" 
  205             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
  206             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
  209               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  210               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  211               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  212               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  217               [
A]
"f"(
A.f),                  [
E]
"f"(
E.f)
 
  226             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t" 
  227             "pshufh     %[A],       %[A],           %[ftmp0]           \n\t" 
  228             "pshufh     %[E],       %[E],           %[ftmp0]           \n\t" 
  229             "mtc1       %[tmp0],    %[ftmp7]                           \n\t" 
  232             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
  233             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
  234             MMI_ULDC1(%[ftmp2], %[
src], 0x00)
 
  235             PTR_ADDU   "%[src],     %[src],         %[stride]          \n\t" 
  236             MMI_ULDC1(%[ftmp8], %[
src], 0x00)
 
  237             "addi       %[h],       %[h],           -0x02              \n\t" 
  239             "punpcklbh  %[ftmp3],   %[ftmp1],       %[ftmp0]           \n\t" 
  240             "punpckhbh  %[ftmp4],   %[ftmp1],       %[ftmp0]           \n\t" 
  241             "punpcklbh  %[ftmp5],   %[ftmp2],       %[ftmp0]           \n\t" 
  242             "punpckhbh  %[ftmp6],   %[ftmp2],       %[ftmp0]           \n\t" 
  243             "pmullh     %[ftmp3],   %[ftmp3],       %[A]               \n\t" 
  244             "pmullh     %[ftmp5],   %[ftmp5],       %[E]               \n\t" 
  245             "paddh      %[ftmp3],   %[ftmp3],       %[ftmp5]           \n\t" 
  246             "pmullh     %[ftmp4],   %[ftmp4],       %[A]               \n\t" 
  247             "pmullh     %[ftmp6],   %[ftmp6],       %[E]               \n\t" 
  248             "paddh      %[ftmp4],   %[ftmp4],       %[ftmp6]           \n\t" 
  249             "paddh      %[ftmp3],   %[ftmp3],       %[ff_pw_32]        \n\t" 
  250             "paddh      %[ftmp4],   %[ftmp4],       %[ff_pw_32]        \n\t" 
  251             "psrlh      %[ftmp3],   %[ftmp3],       %[ftmp7]           \n\t" 
  252             "psrlh      %[ftmp4],   %[ftmp4],       %[ftmp7]           \n\t" 
  253             "packushb   %[ftmp1],   %[ftmp3],       %[ftmp4]           \n\t" 
  255             "punpcklbh  %[ftmp3],   %[ftmp2],       %[ftmp0]           \n\t" 
  256             "punpckhbh  %[ftmp4],   %[ftmp2],       %[ftmp0]           \n\t" 
  257             "punpcklbh  %[ftmp5],   %[ftmp8],       %[ftmp0]           \n\t" 
  258             "punpckhbh  %[ftmp6],   %[ftmp8],       %[ftmp0]           \n\t" 
  259             "pmullh     %[ftmp3],   %[ftmp3],       %[A]               \n\t" 
  260             "pmullh     %[ftmp5],   %[ftmp5],       %[E]               \n\t" 
  261             "paddh      %[ftmp3],   %[ftmp3],       %[ftmp5]           \n\t" 
  262             "pmullh     %[ftmp4],   %[ftmp4],       %[A]               \n\t" 
  263             "pmullh     %[ftmp6],   %[ftmp6],       %[E]               \n\t" 
  264             "paddh      %[ftmp4],   %[ftmp4],       %[ftmp6]           \n\t" 
  265             "paddh      %[ftmp3],   %[ftmp3],       %[ff_pw_32]        \n\t" 
  266             "paddh      %[ftmp4],   %[ftmp4],       %[ff_pw_32]        \n\t" 
  267             "psrlh      %[ftmp3],   %[ftmp3],       %[ftmp7]           \n\t" 
  268             "psrlh      %[ftmp4],   %[ftmp4],       %[ftmp7]           \n\t" 
  269             "packushb   %[ftmp2],   %[ftmp3],       %[ftmp4]           \n\t" 
  271             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
  272             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
  273             MMI_SDC1(%[ftmp2], %[
dst], 0x00)
 
  274             PTR_ADDU   "%[dst],     %[dst],         %[stride]          \n\t" 
  277               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  278               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  279               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  280               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  281               [ftmp8]
"=&f"(ftmp[8]),
 
  286               [
E]
"f"(
E.f),                  [tmp0]
"r"(0x06)
 
  305             MMI_ULDC1(%[ftmp0], %[
src], 0x00)
 
  306             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  307             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
  308             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  309             MMI_LDC1(%[ftmp2], %[
dst], 0x00)
 
  310             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  311             MMI_LDC1(%[ftmp3], %[
dst], 0x00)
 
  312             PTR_SUBU   "%[dst],     %[dst],         %[stride]           \n\t" 
  313             "pavgb      %[ftmp0],   %[ftmp0],       %[ftmp2]            \n\t" 
  314             "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t" 
  315             MMI_SDC1(%[ftmp0], %[
dst], 0x00)
 
  316             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  317             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
  318             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  319             "addi       %[h],       %[h],           -0x02               \n\t" 
  322               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  323               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  332         B.i = (x << 3) - 
D.i;
 
  333         C.i = (y << 3) - 
D.i;
 
  334         A.i = 64 - 
D.i - 
B.i - 
C.i;
 
  336             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t" 
  337             "pshufh     %[A],       %[A],           %[ftmp0]       \n\t" 
  338             "pshufh     %[B],       %[B],           %[ftmp0]       \n\t" 
  339             "mtc1       %[tmp0],    %[ftmp9]                       \n\t" 
  340             "pshufh     %[C],       %[C],           %[ftmp0]       \n\t" 
  341             "pshufh     %[D],       %[D],           %[ftmp0]       \n\t" 
  344             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
  345             MMI_ULDC1(%[ftmp2], %[
src], 0x01)
 
  346             PTR_ADDU   "%[src],     %[src],         %[stride]      \n\t" 
  347             MMI_ULDC1(%[ftmp3], %[
src], 0x00)
 
  348             MMI_ULDC1(%[ftmp4], %[
src], 0x01)
 
  349             "addi       %[h],       %[h],           -0x01          \n\t" 
  351             "punpcklbh  %[ftmp5],   %[ftmp1],       %[ftmp0]       \n\t" 
  352             "punpckhbh  %[ftmp6],   %[ftmp1],       %[ftmp0]       \n\t" 
  353             "punpcklbh  %[ftmp7],   %[ftmp2],       %[ftmp0]       \n\t" 
  354             "punpckhbh  %[ftmp8],   %[ftmp2],       %[ftmp0]       \n\t" 
  355             "pmullh     %[ftmp5],   %[ftmp5],       %[A]           \n\t" 
  356             "pmullh     %[ftmp7],   %[ftmp7],       %[B]           \n\t" 
  357             "paddh      %[ftmp1],   %[ftmp5],       %[ftmp7]       \n\t" 
  358             "pmullh     %[ftmp6],   %[ftmp6],       %[A]           \n\t" 
  359             "pmullh     %[ftmp8],   %[ftmp8],       %[B]           \n\t" 
  360             "paddh      %[ftmp2],   %[ftmp6],       %[ftmp8]       \n\t" 
  362             "punpcklbh  %[ftmp5],   %[ftmp3],       %[ftmp0]       \n\t" 
  363             "punpckhbh  %[ftmp6],   %[ftmp3],       %[ftmp0]       \n\t" 
  364             "punpcklbh  %[ftmp7],   %[ftmp4],       %[ftmp0]       \n\t" 
  365             "punpckhbh  %[ftmp8],   %[ftmp4],       %[ftmp0]       \n\t" 
  366             "pmullh     %[ftmp5],   %[ftmp5],       %[C]           \n\t" 
  367             "pmullh     %[ftmp7],   %[ftmp7],       %[D]           \n\t" 
  368             "paddh      %[ftmp3],   %[ftmp5],       %[ftmp7]       \n\t" 
  369             "pmullh     %[ftmp6],   %[ftmp6],       %[C]           \n\t" 
  370             "pmullh     %[ftmp8],   %[ftmp8],       %[D]           \n\t" 
  371             "paddh      %[ftmp4],   %[ftmp6],       %[ftmp8]       \n\t" 
  373             "paddh      %[ftmp1],   %[ftmp1],       %[ftmp3]       \n\t" 
  374             "paddh      %[ftmp2],   %[ftmp2],       %[ftmp4]       \n\t" 
  375             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]    \n\t" 
  376             "paddh      %[ftmp2],   %[ftmp2],       %[ff_pw_32]    \n\t" 
  377             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp9]       \n\t" 
  378             "psrlh      %[ftmp2],   %[ftmp2],       %[ftmp9]       \n\t" 
  379             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp2]       \n\t" 
  380             MMI_LDC1(%[ftmp2], %[
dst], 0x00)
 
  381             "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp2]       \n\t" 
  382             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
  383             PTR_ADDU   "%[dst],     %[dst],         %[stride]      \n\t" 
  386               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  387               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  388               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  389               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  390               [ftmp8]
"=&f"(ftmp[8]),        [ftmp9]
"=&f"(ftmp[9]),
 
  394               [
A]
"f"(
A.f),                  [
B]
"f"(
B.f),
 
  395               [
C]
"f"(
C.f),                  [
D]
"f"(
D.f),
 
  404             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t" 
  405             "pshufh     %[A],       %[A],           %[ftmp0]       \n\t" 
  406             "pshufh     %[E],       %[E],           %[ftmp0]       \n\t" 
  407             "mtc1       %[tmp0],    %[ftmp7]                       \n\t" 
  410             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
  411             MMI_ULDC1(%[ftmp2], %[
src], 0x01)
 
  412             PTR_ADDU   "%[src],     %[src],         %[stride]      \n\t" 
  413             "addi       %[h],       %[h],           -0x01          \n\t" 
  415             "punpcklbh  %[ftmp3],   %[ftmp1],       %[ftmp0]       \n\t" 
  416             "punpckhbh  %[ftmp4],   %[ftmp1],       %[ftmp0]       \n\t" 
  417             "punpcklbh  %[ftmp5],   %[ftmp2],       %[ftmp0]       \n\t" 
  418             "punpckhbh  %[ftmp6],   %[ftmp2],       %[ftmp0]       \n\t" 
  419             "pmullh     %[ftmp3],   %[ftmp3],       %[A]           \n\t" 
  420             "pmullh     %[ftmp5],   %[ftmp5],       %[E]           \n\t" 
  421             "paddh      %[ftmp1],   %[ftmp3],       %[ftmp5]       \n\t" 
  422             "pmullh     %[ftmp4],   %[ftmp4],       %[A]           \n\t" 
  423             "pmullh     %[ftmp6],   %[ftmp6],       %[E]           \n\t" 
  424             "paddh      %[ftmp2],   %[ftmp4],       %[ftmp6]       \n\t" 
  426             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]    \n\t" 
  427             "paddh      %[ftmp2],   %[ftmp2],       %[ff_pw_32]    \n\t" 
  428             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp7]       \n\t" 
  429             "psrlh      %[ftmp2],   %[ftmp2],       %[ftmp7]       \n\t" 
  430             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp2]       \n\t" 
  431             MMI_LDC1(%[ftmp2], %[
dst], 0x00)
 
  432             "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp2]       \n\t" 
  433             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
  434             PTR_ADDU   "%[dst],     %[dst],         %[stride]      \n\t" 
  437               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  438               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  439               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  440               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  445               [
A]
"f"(
A.f),                  [
E]
"f"(
E.f)
 
  453             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t" 
  454             "pshufh     %[A],       %[A],           %[ftmp0]       \n\t" 
  455             "pshufh     %[E],       %[E],           %[ftmp0]       \n\t" 
  456             "mtc1       %[tmp0],    %[ftmp7]                       \n\t" 
  459             MMI_ULDC1(%[ftmp1], %[
src], 0x00)
 
  460             PTR_ADDU   "%[src],     %[src],         %[stride]      \n\t" 
  461             MMI_ULDC1(%[ftmp2], %[
src], 0x00)
 
  462             "addi       %[h],       %[h],           -0x01          \n\t" 
  464             "punpcklbh  %[ftmp3],   %[ftmp1],       %[ftmp0]       \n\t" 
  465             "punpckhbh  %[ftmp4],   %[ftmp1],       %[ftmp0]       \n\t" 
  466             "punpcklbh  %[ftmp5],   %[ftmp2],       %[ftmp0]       \n\t" 
  467             "punpckhbh  %[ftmp6],   %[ftmp2],       %[ftmp0]       \n\t" 
  468             "pmullh     %[ftmp3],   %[ftmp3],       %[A]           \n\t" 
  469             "pmullh     %[ftmp5],   %[ftmp5],       %[E]           \n\t" 
  470             "paddh      %[ftmp1],   %[ftmp3],       %[ftmp5]       \n\t" 
  471             "pmullh     %[ftmp4],   %[ftmp4],       %[A]           \n\t" 
  472             "pmullh     %[ftmp6],   %[ftmp6],       %[E]           \n\t" 
  473             "paddh      %[ftmp2],   %[ftmp4],       %[ftmp6]       \n\t" 
  475             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]  \n\t" 
  476             "paddh      %[ftmp2],   %[ftmp2],       %[ff_pw_32]  \n\t" 
  477             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp7]       \n\t" 
  478             "psrlh      %[ftmp2],   %[ftmp2],       %[ftmp7]       \n\t" 
  479             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp2]       \n\t" 
  480             MMI_LDC1(%[ftmp2], %[
dst], 0x00)
 
  481             "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp2]       \n\t" 
  482             MMI_SDC1(%[ftmp1], %[
dst], 0x00)
 
  483             PTR_ADDU   "%[dst],     %[dst],         %[stride]      \n\t" 
  486               [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  487               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  488               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  489               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  494               [
A]
"f"(
A.f),                  [
E]
"f"(
E.f)
 
  507     A.i = (8 - x) * (8 - y);
 
  515             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t" 
  516             "pshufh     %[A],       %[A],           %[ftmp0]            \n\t" 
  517             "pshufh     %[B],       %[B],           %[ftmp0]            \n\t" 
  518             "mtc1       %[tmp0],    %[ftmp7]                            \n\t" 
  519             "pshufh     %[C],       %[C],           %[ftmp0]            \n\t" 
  520             "pshufh     %[D],       %[D],           %[ftmp0]            \n\t" 
  523             MMI_ULWC1(%[ftmp1], %[
src], 0x00)
 
  524             MMI_ULWC1(%[ftmp2], %[
src], 0x01)
 
  525             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  526             MMI_ULWC1(%[ftmp3], %[
src], 0x00)
 
  527             MMI_ULWC1(%[ftmp4], %[
src], 0x01)
 
  529             "punpcklbh  %[ftmp5],   %[ftmp1],       %[ftmp0]            \n\t" 
  530             "punpcklbh  %[ftmp6],   %[ftmp2],       %[ftmp0]            \n\t" 
  531             "pmullh     %[ftmp5],   %[ftmp5],       %[A]                \n\t" 
  532             "pmullh     %[ftmp6],   %[ftmp6],       %[B]                \n\t" 
  533             "paddh      %[ftmp1],   %[ftmp5],       %[ftmp6]            \n\t" 
  534             "punpcklbh  %[ftmp5],   %[ftmp3],       %[ftmp0]            \n\t" 
  535             "punpcklbh  %[ftmp6],   %[ftmp4],       %[ftmp0]            \n\t" 
  536             "pmullh     %[ftmp5],   %[ftmp5],       %[C]                \n\t" 
  537             "pmullh     %[ftmp6],   %[ftmp6],       %[D]                \n\t" 
  538             "paddh      %[ftmp2],   %[ftmp5],       %[ftmp6]            \n\t" 
  539             "paddh      %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t" 
  540             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]         \n\t" 
  541             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp7]            \n\t" 
  542             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t" 
  544             "addi       %[h],       %[h],           -0x01               \n\t" 
  545             MMI_SWC1(%[ftmp1], %[
dst], 0x00)
 
  546             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  548             : [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  549               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  550               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  551               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  556               [
A]
"f"(
A.f),                  [
B]
"f"(
B.f),
 
  557               [
C]
"f"(
C.f),                  [
D]
"f"(
D.f),
 
  564             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t" 
  565             "pshufh     %[A],       %[A],           %[ftmp0]            \n\t" 
  566             "pshufh     %[E],       %[E],           %[ftmp0]            \n\t" 
  567             "mtc1       %[tmp0],    %[ftmp5]                            \n\t" 
  570             MMI_ULWC1(%[ftmp1], %[
src], 0x00)
 
  571             PTR_ADDU   "%[addr0],   %[src],         %[step]             \n\t" 
  572             MMI_ULWC1(%[ftmp2], %[addr0], 0x00)
 
  573             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  574             "addi       %[h],       %[h],           -0x01               \n\t" 
  575             "punpcklbh  %[ftmp3],   %[ftmp1],       %[ftmp0]            \n\t" 
  576             "punpcklbh  %[ftmp4],   %[ftmp2],       %[ftmp0]            \n\t" 
  577             "pmullh     %[ftmp3],   %[ftmp3],       %[A]                \n\t" 
  578             "pmullh     %[ftmp4],   %[ftmp4],       %[E]                \n\t" 
  579             "paddh      %[ftmp1],   %[ftmp3],       %[ftmp4]            \n\t" 
  580             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]         \n\t" 
  581             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t" 
  582             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t" 
  583             MMI_SWC1(%[ftmp1], %[
dst], 0x00)
 
  584             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  586             : [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  587               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  588               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  590               [addr0]
"=&r"(addr[0]),
 
  595               [
A]
"f"(
A.f),                  [
E]
"f"(
E.f)
 
  601             MMI_ULWC1(%[ftmp0], %[
src], 0x00)
 
  602             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  603             MMI_ULWC1(%[ftmp1], %[
src], 0x00)
 
  604             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  605             "addi       %[h],       %[h],           -0x02               \n\t" 
  606             MMI_SWC1(%[ftmp0], %[
dst], 0x00)
 
  607             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  608             MMI_SWC1(%[ftmp1], %[
dst], 0x00)
 
  609             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  611             : [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  628     A.i = (8 - x) *(8 - y);
 
  636             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t" 
  637             "pshufh     %[A],       %[A],           %[ftmp0]            \n\t" 
  638             "pshufh     %[B],       %[B],           %[ftmp0]            \n\t" 
  639             "mtc1       %[tmp0],    %[ftmp7]                            \n\t" 
  640             "pshufh     %[C],       %[C],           %[ftmp0]            \n\t" 
  641             "pshufh     %[D],       %[D],           %[ftmp0]            \n\t" 
  644             MMI_ULWC1(%[ftmp1], %[
src], 0x00)
 
  645             MMI_ULWC1(%[ftmp2], %[
src], 0x01)
 
  646             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  647             MMI_ULWC1(%[ftmp3], %[
src], 0x00)
 
  648             MMI_ULWC1(%[ftmp4], %[
src], 0x01)
 
  650             "punpcklbh  %[ftmp5],   %[ftmp1],       %[ftmp0]            \n\t" 
  651             "punpcklbh  %[ftmp6],   %[ftmp2],       %[ftmp0]            \n\t" 
  652             "pmullh     %[ftmp5],   %[ftmp5],       %[A]                \n\t" 
  653             "pmullh     %[ftmp6],   %[ftmp6],       %[B]                \n\t" 
  654             "paddh      %[ftmp1],   %[ftmp5],       %[ftmp6]            \n\t" 
  655             "punpcklbh  %[ftmp5],   %[ftmp3],       %[ftmp0]            \n\t" 
  656             "punpcklbh  %[ftmp6],   %[ftmp4],       %[ftmp0]            \n\t" 
  657             "pmullh     %[ftmp5],   %[ftmp5],       %[C]                \n\t" 
  658             "pmullh     %[ftmp6],   %[ftmp6],       %[D]                \n\t" 
  659             "paddh      %[ftmp2],   %[ftmp5],       %[ftmp6]            \n\t" 
  660             "paddh      %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t" 
  661             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]         \n\t" 
  662             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp7]            \n\t" 
  663             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t" 
  664             MMI_LWC1(%[ftmp2], %[
dst], 0x00)
 
  665             "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t" 
  667             "addi       %[h],       %[h],           -0x01               \n\t" 
  668             MMI_SWC1(%[ftmp1], %[
dst], 0x00)
 
  669             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  671             : [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  672               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  673               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  674               [ftmp6]
"=&f"(ftmp[6]),        [ftmp7]
"=&f"(ftmp[7]),
 
  679               [
A]
"f"(
A.f),                  [
B]
"f"(
B.f),
 
  680               [
C]
"f"(
C.f),                  [
D]
"f"(
D.f),
 
  687             "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t" 
  688             "pshufh     %[A],       %[A],           %[ftmp0]            \n\t" 
  689             "pshufh     %[E],       %[E],           %[ftmp0]            \n\t" 
  690             "mtc1       %[tmp0],    %[ftmp5]                            \n\t" 
  693             MMI_ULWC1(%[ftmp1], %[
src], 0x00)
 
  694             PTR_ADDU   "%[addr0],   %[src],         %[step]             \n\t" 
  695             MMI_ULWC1(%[ftmp2], %[addr0], 0x00)
 
  696             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  697             "addi       %[h],       %[h],           -0x01               \n\t" 
  698             "punpcklbh  %[ftmp3],   %[ftmp1],       %[ftmp0]            \n\t" 
  699             "punpcklbh  %[ftmp4],   %[ftmp2],       %[ftmp0]            \n\t" 
  700             "pmullh     %[ftmp3],   %[ftmp3],       %[A]                \n\t" 
  701             "pmullh     %[ftmp4],   %[ftmp4],       %[E]                \n\t" 
  702             "paddh      %[ftmp1],   %[ftmp3],       %[ftmp4]            \n\t" 
  703             "paddh      %[ftmp1],   %[ftmp1],       %[ff_pw_32]         \n\t" 
  704             "psrlh      %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t" 
  705             "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t" 
  706             MMI_LWC1(%[ftmp2], %[
dst], 0x00)
 
  707             "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t" 
  708             MMI_SWC1(%[ftmp1], %[
dst], 0x00)
 
  709             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  711             : [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  712               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  713               [ftmp4]
"=&f"(ftmp[4]),        [ftmp5]
"=&f"(ftmp[5]),
 
  715               [addr0]
"=&r"(addr[0]),
 
  720               [
A]
"f"(
A.f),                  [
E]
"f"(
E.f)
 
  726             MMI_ULWC1(%[ftmp0], %[
src], 0x00)
 
  727             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  728             MMI_ULWC1(%[ftmp1], %[
src], 0x00)
 
  729             PTR_ADDU   "%[src],     %[src],         %[stride]           \n\t" 
  730             "addi       %[h],       %[h],           -0x02               \n\t" 
  731             MMI_LWC1(%[ftmp2], %[
dst], 0x00)
 
  732             "pavgb      %[ftmp0],   %[ftmp0],       %[ftmp2]            \n\t" 
  733             MMI_SWC1(%[ftmp0], %[
dst], 0x00)
 
  734             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  735             MMI_LWC1(%[ftmp3], %[
dst], 0x00)
 
  736             "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t" 
  737             MMI_SWC1(%[ftmp1], %[
dst], 0x00)
 
  738             PTR_ADDU   "%[dst],     %[dst],         %[stride]           \n\t" 
  740             : [ftmp0]
"=&f"(ftmp[0]),        [ftmp1]
"=&f"(ftmp[1]),
 
  741               [ftmp2]
"=&f"(ftmp[2]),        [ftmp3]
"=&f"(ftmp[3]),
 
  
void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y)
 
void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y)
 
#define DECLARE_VAR_LOW32
 
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
 
void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y)
 
const union av_intfloat64 ff_pw_32
 
s EdgeDetect Foobar g libavfilter vf_edgedetect c libavfilter vf_foobar c edit libavfilter and add an entry for foobar following the pattern of the other filters edit libavfilter allfilters and add an entry for foobar following the pattern of the other filters configure make j< whatever > ffmpeg ffmpeg i you should get a foobar png with Lena edge detected That s your new playground is ready Some little details about what s going which in turn will define variables for the build system and the C
 
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
 
#define DECLARE_VAR_ALL64
 
__asm__(".macro        parse_r var r\n\t" "\\var        = -1\n\t" _IFC_REG(0) _IFC_REG(1) _IFC_REG(2) _IFC_REG(3) _IFC_REG(4) _IFC_REG(5) _IFC_REG(6) _IFC_REG(7) _IFC_REG(8) _IFC_REG(9) _IFC_REG(10) _IFC_REG(11) _IFC_REG(12) _IFC_REG(13) _IFC_REG(14) _IFC_REG(15) _IFC_REG(16) _IFC_REG(17) _IFC_REG(18) _IFC_REG(19) _IFC_REG(20) _IFC_REG(21) _IFC_REG(22) _IFC_REG(23) _IFC_REG(24) _IFC_REG(25) _IFC_REG(26) _IFC_REG(27) _IFC_REG(28) _IFC_REG(29) _IFC_REG(30) _IFC_REG(31) ".iflt        \\var\n\t" ".error        \"Unable to parse register name \\r\"\n\t" ".endif\n\t" ".endm")
 
#define RESTRICT_ASM_LOW32
 
#define RESTRICT_ASM_ALL64
 
void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y)