Ticket #19204: patch-filter-yuvdenoise-deinterlace.c.diff

File patch-filter-yuvdenoise-deinterlace.c.diff, 7.9 KB (added by wickedguitar6@…, 16 years ago)

Manual rewritting of assembly loops in filter/yuvdenoise/deinterlace.c

  • filter/yuvdenoise/deinterlace.c

    old new  
    163163                  " pxor        %%mm0 , %%mm0;           /* clear mm0                                          */\n"
    164164                  " pxor        %%mm7 , %%mm7;           /* clear mm7                                          */\n"
    165165                  "                                      /*                                                    */\n"
    166                   " .rept 3                              /* repeat 3 times                                     */\n"
     166                  /*" rep 3                               repeat 3 times                                     \n" */
    167167                  " movq        (%%esi), %%mm1;          /* 8 Pixels from line                                 */\n"
    168168                  " movq        (%%edi), %%mm2;          /* 8 Pixels from displaced                            */\n"
    169169                  " movq         %%mm2 , %%mm3;          /* hold a copy of mm2 in mm3                          */\n"
     
    190190                  " addl         $8    , %%esi;          /* add 8 to frameaddress                              */\n"
    191191                  " addl         $8    , %%eax;          /* add 8 to frameaddress                              */\n"
    192192                  " addl         $8    , %%edi;          /* add 8 to frameaddress                              */\n"
    193                   " .endr                                /* end loop                                           */\n"
     193                  " movq        (%%esi), %%mm1;          /* 8 Pixels from line                                 */\n"
     194                  " movq        (%%edi), %%mm2;          /* 8 Pixels from displaced                            */\n"
     195                  " movq         %%mm2 , %%mm3;          /* hold a copy of mm2 in mm3                          */\n"
     196                  " psubusb      %%mm1 , %%mm3;          /* positive differences between mm2 and mm1           */\n"
     197                  " psubusb      %%mm2 , %%mm1;          /* positive differences between mm1 and mm3           */\n"
     198                  " paddusb      %%mm3 , %%mm1;          /* mm1 now contains abs(mm1-mm2)                      */\n"
     199                  " movq         %%mm1 , %%mm2;          /* copy mm1 to mm2                                    */\n"
     200                  " punpcklbw    %%mm7 , %%mm1;          /* unpack mm1 into mm1 and mm2                        */\n"
     201                  " punpckhbw    %%mm7 , %%mm2;          /*                                                    */\n"
     202                  " paddusw      %%mm1 , %%mm0;          /* add mm1 (stored in mm1 and mm2...)                 */\n"
     203                  " paddusw      %%mm2 , %%mm0;          /* to mm0                                             */\n"
     204                  "                                      /*                                                    */\n"
     205                  " movq        (%%eax), %%mm1;          /* 8 Pixels from line                                 */\n"
     206                  " movq        (%%edi), %%mm2;          /* 8 Pixels from displaced line                       */\n"
     207                  " movq         %%mm2 , %%mm3;          /* hold a copy of mm2 in mm3                          */\n"
     208                  " psubusb      %%mm1 , %%mm3;          /* positive differences between mm2 and mm1           */\n"
     209                  " psubusb      %%mm2 , %%mm1;          /* positive differences between mm1 and mm3           */\n"
     210                  " paddusb      %%mm3 , %%mm1;          /* mm1 now contains abs(mm1-mm2)                      */\n"
     211                  " movq         %%mm1 , %%mm2;          /* copy mm1 to mm2                                    */\n"
     212                  " punpcklbw    %%mm7 , %%mm1;          /* unpack mm1 into mm1 and mm2                        */\n"
     213                  " punpckhbw    %%mm7 , %%mm2;          /*                                                    */\n"
     214                  " paddusw      %%mm1 , %%mm0;          /* add mm1 (stored in mm1 and mm2...)                 */\n"
     215                  " paddusw      %%mm2 , %%mm0;          /* to mm0                                             */\n"
     216                  " addl         $8    , %%esi;          /* add 8 to frameaddress                              */\n"
     217                  " addl         $8    , %%eax;          /* add 8 to frameaddress                              */\n"
     218                  " addl         $8    , %%edi;          /* add 8 to frameaddress                              */\n"
     219                  " movq        (%%esi), %%mm1;          /* 8 Pixels from line                                 */\n"
     220                  " movq        (%%edi), %%mm2;          /* 8 Pixels from displaced                            */\n"
     221                  " movq         %%mm2 , %%mm3;          /* hold a copy of mm2 in mm3                          */\n"
     222                  " psubusb      %%mm1 , %%mm3;          /* positive differences between mm2 and mm1           */\n"
     223                  " psubusb      %%mm2 , %%mm1;          /* positive differences between mm1 and mm3           */\n"
     224                  " paddusb      %%mm3 , %%mm1;          /* mm1 now contains abs(mm1-mm2)                      */\n"
     225                  " movq         %%mm1 , %%mm2;          /* copy mm1 to mm2                                    */\n"
     226                  " punpcklbw    %%mm7 , %%mm1;          /* unpack mm1 into mm1 and mm2                        */\n"
     227                  " punpckhbw    %%mm7 , %%mm2;          /*                                                    */\n"
     228                  " paddusw      %%mm1 , %%mm0;          /* add mm1 (stored in mm1 and mm2...)                 */\n"
     229                  " paddusw      %%mm2 , %%mm0;          /* to mm0                                             */\n"
     230                  "                                      /*                                                    */\n"
     231                  " movq        (%%eax), %%mm1;          /* 8 Pixels from line                                 */\n"
     232                  " movq        (%%edi), %%mm2;          /* 8 Pixels from displaced line                       */\n"
     233                  " movq         %%mm2 , %%mm3;          /* hold a copy of mm2 in mm3                          */\n"
     234                  " psubusb      %%mm1 , %%mm3;          /* positive differences between mm2 and mm1           */\n"
     235                  " psubusb      %%mm2 , %%mm1;          /* positive differences between mm1 and mm3           */\n"
     236                  " paddusb      %%mm3 , %%mm1;          /* mm1 now contains abs(mm1-mm2)                      */\n"
     237                  " movq         %%mm1 , %%mm2;          /* copy mm1 to mm2                                    */\n"
     238                  " punpcklbw    %%mm7 , %%mm1;          /* unpack mm1 into mm1 and mm2                        */\n"
     239                  " punpckhbw    %%mm7 , %%mm2;          /*                                                    */\n"
     240                  " paddusw      %%mm1 , %%mm0;          /* add mm1 (stored in mm1 and mm2...)                 */\n"
     241                  " paddusw      %%mm2 , %%mm0;          /* to mm0                                             */\n"
     242                  " addl         $8    , %%esi;          /* add 8 to frameaddress                              */\n"
     243                  " addl         $8    , %%eax;          /* add 8 to frameaddress                              */\n"
     244                  " addl         $8    , %%edi;          /* add 8 to frameaddress                              */\n"
     245
     246                  /*" .end                                 end loop                                           \n" */
    194247                  "                                      /*                                                    */\n"
    195248                  " movq         %%mm0 , %0   ;          /* make mm0 available to gcc ...                      */\n"
    196249                  :"=m" (a)