diff -ur filter/tomsmocomp-old/SearchLoopBottom.inc filter/tomsmocomp/SearchLoopBottom.inc --- filter/tomsmocomp-old/SearchLoopBottom.inc 2009-02-21 15:34:02.000000000 +0100 +++ filter/tomsmocomp/SearchLoopBottom.inc 2009-05-27 20:04:00.000000000 +0200 @@ -50,31 +50,31 @@ "movl "_pDest", %%eax\n\t" + "addl "_olddx", %%eax\n\t" #ifdef USE_VERTICAL_FILTER "movq %%mm0, %%mm1\n\t" - // pavgb mm0, qword ptr[ebx] - V_PAVGB ("%%mm0", "(%%ebx)", "%%mm2", _ShiftMask) - // movntq qword ptr[eax+edx], mm0 - V_MOVNTQ ("(%%eax, %%edx)", "%%mm0") - // pavgb mm1, qword ptr[ebx+ecx] - V_PAVGB ("%%mm1", "(%%ebx, %%ecx)", "%%mm2", _ShiftMask) + // pavgb mm0, qword ptr[edx] + V_PAVGB ("%%mm0", "(%%edx)", "%%mm2", _ShiftMask) + // movntq qword ptr[eax+_olddx], mm0 + V_MOVNTQ ("(%%eax)", "%%mm0") + // pavgb mm1, qword ptr[edx+ecx] + V_PAVGB ("%%mm1", "(%%edx, %%ecx)", "%%mm2", _ShiftMask) "addl "_dst_pitchw", %%eax" - // movntq qword ptr[eax+edx], mm1 - V_MOVNTQ ("(%%eax, %%edx)", "%%mm1") + // movntq qword ptr[eax+_olddx], mm1 + V_MOVNTQ ("(%%eax)", "%%mm1") #else - // movntq qword ptr[eax+edx], mm0 - V_MOVNTQ ("(%%eax, %%edx)", "%%mm0") + // movntq qword ptr[eax+_olddx], mm0 + V_MOVNTQ ("(%%eax)", "%%mm0") #endif - "leal 8(%%edx), %%edx\n\t" // bump offset pointer - "cmpl "_Last8", %%edx\n\t" // done with line? + "addl $8, "_olddx"\n\t" // bump offset pointer + "movl "_olddx", %%eax\n\t" + "cmpl "_Last8", %%eax\n\t" // done with line? "jb 1b\n\t" // y #endif - "popl %%ebx\n\t" - : /* no outputs */ : "m"(pBob), "m"(src_pitch2), @@ -93,7 +93,8 @@ "m"(ONES[0]), "m"(UVMask[0]), "m"(Max_Mov[0]), - "m"(YMask[0]) + "m"(YMask[0]), + "m"(olddx) : "eax", "ecx", "edx", "esi", "edi", "st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)", @@ -119,6 +120,7 @@ #undef _UVMask #undef _Max_Mov #undef _YMask +#undef _olddx // adjust for next line pSrc += src_pitch2; diff -ur filter/tomsmocomp-old/SearchLoopTop.inc filter/tomsmocomp/SearchLoopTop.inc --- filter/tomsmocomp-old/SearchLoopTop.inc 2009-02-21 15:34:02.000000000 +0100 +++ filter/tomsmocomp/SearchLoopTop.inc 2009-05-27 20:02:28.000000000 +0200 @@ -1,6 +1,7 @@ // -*- c++ -*- unsigned char* pDest; +long olddx; const unsigned char* pSrcP; const unsigned char* pSrc; const unsigned char* pBob; @@ -84,6 +85,7 @@ #define _UVMask "%15" #define _Max_Mov "%16" #define _YMask "%17" +#define _olddx "%18" for (y=1; y < FldHeight-1; y++) { @@ -99,21 +101,18 @@ // edi - prev weave pixels, 1 line up // esi - next weave pixels, 1 line up - // Save ebx (-fPIC) - "pushl %%ebx\n\t" - #ifdef IS_SSE2 // sse2 code deleted for now #else // simple bob first 8 bytes - "movl "_pBob", %%ebx\n\t" + "movl "_pBob", %%edx\n\t" "movl "_src_pitch2", %%ecx\n\t" #ifdef USE_VERTICAL_FILTER - "movq (%%ebx), %%mm0\n\t" - "movq (%%ebx, %%ecx), %%mm1\n\t" //, qword ptr[ebx+ecx] + "movq (%%edx), %%mm0\n\t" + "movq (%%edx, %%ecx), %%mm1\n\t" //, qword ptr[edx+ecx] "movq %%mm0, %%mm2\n\t" V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // halfway between V_PAVGB ("%%mm0", "%%mm2", "%%mm3", _ShiftMask) // 1/4 way @@ -124,44 +123,47 @@ V_MOVNTQ ("(%%edi, %%eax)", "%%mm1") // qword ptr[edi+eax], mm1 // simple bob last 8 bytes - "movl "_Last8", %%edx\n\t" - "leal (%%ebx, %%edx), %%esi\n\t" // [ebx+edx] + "movl "_Last8", %%esi\n\t" + "movl %%esi, "_olddx"\n\t" + "addl %%edx, %%esi\n\t" // [edx+_olddx] "movq (%%esi), %%mm0\n\t" "movq (%%esi, %%ecx), %%mm1\n\t" // qword ptr[esi+ecx] "movq %%mm0, %%mm2\n\t" V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // halfway between V_PAVGB ("%%mm0", "%%mm2", "%%mm3", _ShiftMask) // 1/4 way V_PAVGB ("%%mm1", "%%mm2", "%%mm3", _ShiftMask) // 3/4 way - "addl %%edx, %%edi\n\t" // last 8 bytes of dest + "addl "_olddx", %%edi\n\t" // last 8 bytes of dest V_MOVNTQ ("%%edi", "%%mm0") V_MOVNTQ ("(%%edi, %%eax)", "%%mm1") // qword ptr[edi+eax], mm1) #else - "movq (%%ebx), %%mm0\n\t" - // pavgb mm0, qword ptr[ebx+ecx] - V_PAVGB ("%%mm0", "(%%ebx, %%ecx)", "%%mm2", _ShiftMask) // qword ptr[ebx+ecx], mm2, ShiftMask) + "movq (%%edx), %%mm0\n\t" + // pavgb mm0, qword ptr[edx+ecx] + V_PAVGB ("%%mm0", "(%%edx, %%ecx)", "%%mm2", _ShiftMask) // qword ptr[edx+ecx], mm2, ShiftMask) "movl "_pDest", %%edi\n\t" V_MOVNTQ ("(%%edi)", "%%mm0") // simple bob last 8 bytes - "movl "_Last8", %%edx\n\t" - "leal (%%ebx, %%edx), %%esi\n\t" //esi, [ebx+edx] + "movl "_Last8", %%esi\n\t" + "movl %%esi, "_olddx"\n\t" + "addl %%edx, %%esi\n\t" //esi, [edx+_olddx] "movq (%%esi), %%mm0\n\t" // pavgb mm0, qword ptr[esi+ecx] V_PAVGB ("%%mm0", "(%%esi, %%ecx)", "%%mm2", _ShiftMask) // qword ptr[esi+ecx], mm2, ShiftMask) - V_MOVNTQ ("(%%edi, %%edx)", "%%mm0") // qword ptr[edi+edx], mm0) + "addl "_olddx", %%edi\n\t" + V_MOVNTQ ("(%%edi)", "%%mm0") // qword ptr[edi+_olddx], mm0) #endif // now loop and get the middle qwords "movl "_pSrc", %%esi\n\t" "movl "_pSrcP", %%edi\n\t" - "movl $8, %%edx\n\t" // curr offset into all lines + "movl $8, "_olddx"\n\t" // curr offset into all lines "1:\n\t" "movl "_pBobP", %%eax\n\t" "addl $8, %%edi\n\t" "addl $8, %%esi\n\t" - "addl $8, %%ebx\n\t" - "addl %%edx, %%eax\n\t" + "addl $8, %%edx\n\t" + "addl "_olddx", %%eax\n\t" #ifdef USE_STRANGE_BOB #include "StrangeBob.inc" diff -ur filter/tomsmocomp-old/StrangeBob.inc filter/tomsmocomp/StrangeBob.inc --- filter/tomsmocomp-old/StrangeBob.inc 2009-02-21 15:34:02.000000000 +0100 +++ filter/tomsmocomp/StrangeBob.inc 2009-05-27 20:02:28.000000000 +0200 @@ -31,8 +31,8 @@ "pxor %%mm6, %%mm6\n\t" "pxor %%mm7, %%mm7\n\t" - "movq -2(%%ebx), %%mm0\n\t" // value a from top left - "movq -4(%%ebx, %%ecx), %%mm1\n\t" // value m from bottom right + "movq -2(%%edx), %%mm0\n\t" // value a from top left + "movq -4(%%edx, %%ecx), %%mm1\n\t" // value m from bottom right "movq %%mm0, %%mm3\n\t" "psubusb %%mm1, %%mm3\n\t" @@ -45,8 +45,8 @@ "pcmpeqb %%mm3, %%mm4\n\t" // here ff where abs(a,m) > Thres, else 00 - "movq -4(%%ebx), %%mm0\n\t" // value j - "movq 4(%%ebx, %%ecx), %%mm1\n\t" // value n + "movq -4(%%edx), %%mm0\n\t" // value j + "movq 4(%%edx, %%ecx), %%mm1\n\t" // value n "movq %%mm0, %%mm2\n\t" "pavgb %%mm1, %%mm2\n\t" // avg(j,n) "movq %%mm0, %%mm3\n\t" @@ -75,8 +75,8 @@ "por %%mm0, %%mm7\n\t" // k & m - "movq 2(%%ebx), %%mm0\n\t" // value c from top left - "movq 4(%%ebx, %%ecx), %%mm1\n\t" // value n from bottom right + "movq 2(%%edx), %%mm0\n\t" // value c from top left + "movq 4(%%edx, %%ecx), %%mm1\n\t" // value n from bottom right "movq %%mm0, %%mm3\n\t" "psubusb %%mm1, %%mm3\n\t" @@ -89,8 +89,8 @@ "pcmpeqb %%mm3, %%mm4\n\t" // here ff where abs(c,n) > Thres, else 00 - "movq 4(%%ebx), %%mm0\n\t" // value k - "movq -4(%%ebx, %%ecx), %%mm1\n\t" // value m + "movq 4(%%edx), %%mm0\n\t" // value k + "movq -4(%%edx, %%ecx), %%mm1\n\t" // value m "movq %%mm0, %%mm2\n\t" V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // avg(k,m) "movq %%mm0, %%mm3\n\t" @@ -120,8 +120,8 @@ // c & d - "movq (%%ebx), %%mm0\n\t" // value b from top left - "movq 2(%%ebx, %%ecx), %%mm1\n\t" // value f from bottom right + "movq (%%edx), %%mm0\n\t" // value b from top left + "movq 2(%%edx, %%ecx), %%mm1\n\t" // value f from bottom right "movq %%mm0, %%mm3\n\t" "psubusb %%mm1, %%mm3\n\t" @@ -133,8 +133,8 @@ "pcmpeqb %%mm4, %%mm3\n\t" // now ff where abs(b,f) < Thres, else 00 "pcmpeqb %%mm3, %%mm4\n\t" // here ff where abs(b,f) > Thres, else 00 - "movq 2(%%ebx), %%mm0\n\t" // value c - "movq -2(%%ebx, %%ecx), %%mm1\n\t" // value d + "movq 2(%%edx), %%mm0\n\t" // value c + "movq -2(%%edx, %%ecx), %%mm1\n\t" // value d "movq %%mm0, %%mm2\n\t" V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // avg(c,d) "movq %%mm0, %%mm3\n\t" @@ -163,8 +163,8 @@ "por %%mm0, %%mm7\n\t" // a & f - "movq (%%ebx), %%mm0\n\t" // value b from top left - "movq -2(%%ebx, %%ecx), %%mm1\n\t" // value d from bottom right + "movq (%%edx), %%mm0\n\t" // value b from top left + "movq -2(%%edx, %%ecx), %%mm1\n\t" // value d from bottom right "movq %%mm0, %%mm3\n\t" "psubusb %%mm1, %%mm3\n\t" @@ -176,8 +176,8 @@ "pcmpeqb %%mm4, %%mm3\n\t" // now ff where abs(b,d) < Thres, else 00 "pcmpeqb %%mm3, %%mm4\n\t" // here ff where abs(b,d) > Thres, else 00 - "movq -2(%%ebx), %%mm0\n\t" // value a - "movq 2(%%ebx, %%ecx), %%mm1\n\t" // value f + "movq -2(%%edx), %%mm0\n\t" // value a + "movq 2(%%edx, %%ecx), %%mm1\n\t" // value f "movq %%mm0, %%mm2\n\t" V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // avg(a,f) "movq %%mm0, %%mm3\n\t" @@ -210,8 +210,8 @@ "pand "_YMask", %%mm7\n\t" // mask out chroma from here // b,e - "movq (%%ebx), %%mm0\n\t" // value b from top - "movq (%%ebx, %%ecx), %%mm1\n\t" // value e from bottom + "movq (%%edx), %%mm0\n\t" // value b from top + "movq (%%edx, %%ecx), %%mm1\n\t" // value e from bottom "movq %%mm0, %%mm2\n\t" V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // avg(b,e) "movq %%mm0, %%mm3\n\t" @@ -238,8 +238,8 @@ "por %%mm0, %%mm7\n\t" // bob in any leftovers - "movq (%%ebx), %%mm0\n\t" // value b from top - "movq (%%ebx, %%ecx), %%mm1\n\t" // value e from bottom + "movq (%%edx), %%mm0\n\t" // value b from top + "movq (%%edx, %%ecx), %%mm1\n\t" // value e from bottom // We will also calc here the max/min values to later limit comb diff -ur filter/tomsmocomp-old/WierdBob.inc filter/tomsmocomp/WierdBob.inc --- filter/tomsmocomp-old/WierdBob.inc 2009-02-21 15:34:02.000000000 +0100 +++ filter/tomsmocomp/WierdBob.inc 2009-05-27 20:02:28.000000000 +0200 @@ -14,8 +14,8 @@ // selected for the smallest of abs(a,f), abs(c,d), or abs(b,e), etc. // a,f - "movq -2(%%ebx), %%mm0\n\t" // value a from top left - "movq 2(%%ebx, %%ecx), %%mm1\n\t" // value f from bottom right + "movq -2(%%edx), %%mm0\n\t" // value a from top left + "movq 2(%%edx, %%ecx), %%mm1\n\t" // value f from bottom right "movq %%mm0, %%mm6\n\t" // pavgb %%mm6, %%mm1 // avg(a,f), also best so far V_PAVGB ("%%mm6", "%%mm1", "%%mm7", _ShiftMask) // avg(a,f), also best so far @@ -25,8 +25,8 @@ "por %%mm1, %%mm7\n\t" // abs diff, also best so far // c,d - "movq 2(%%ebx), %%mm0\n\t" // value a from top left - "movq -2(%%ebx, %%ecx), %%mm1\n\t" // value f from bottom right + "movq 2(%%edx), %%mm0\n\t" // value a from top left + "movq -2(%%edx, %%ecx), %%mm1\n\t" // value f from bottom right "movq %%mm0, %%mm2\n\t" // pavgb %%mm2, %%mm1 // avg(c,d) V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // avg(c,d) @@ -53,8 +53,8 @@ "pand "_YMask", %%mm5\n\t" // mask out chroma from here also // j,n - "movq -4(%%ebx), %%mm0\n\t" // value j from top left - "movq 4(%%ebx, %%ecx), %%mm1\n\t" // value n from bottom right + "movq -4(%%edx), %%mm0\n\t" // value j from top left + "movq 4(%%edx, %%ecx), %%mm1\n\t" // value n from bottom right "movq %%mm0, %%mm2\n\t" // pavgb %%mm2, %%mm1 // avg(j,n) V_PAVGB ("%%mm2", "%%mm1", "%%mm3", _ShiftMask) // avg(j,n) @@ -79,8 +79,8 @@ "por %%mm1, %%mm7\n\t" // " // k, m - "movq 4(%%ebx), %%mm0\n\t" // value k from top right - "movq -4(%%ebx, %%ecx), %%mm1\n\t" // value n from bottom left + "movq 4(%%edx), %%mm0\n\t" // value k from top right + "movq -4(%%edx, %%ecx), %%mm1\n\t" // value n from bottom left "movq %%mm0, %%mm4\n\t" // pavgb %%mm4, %%mm1 // avg(k,m) V_PAVGB ("%%mm4", "%%mm1", "%%mm3", _ShiftMask) // avg(k,m) @@ -108,8 +108,8 @@ "por %%mm1, %%mm7\n\t" // " // b,e - "movq (%%ebx), %%mm0\n\t" // value b from top - "movq (%%ebx, %%ecx), %%mm1\n\t" // value e from bottom + "movq (%%edx), %%mm0\n\t" // value b from top + "movq (%%edx, %%ecx), %%mm1\n\t" // value e from bottom // We will also calc here the max/min values to later limit comb // so the max excursion will not exceed the Max_Comb constant