diff options
Diffstat (limited to 'src/post/deinterlace/plugins/tomsmocomp/SearchLoopTop.inc')
-rw-r--r-- | src/post/deinterlace/plugins/tomsmocomp/SearchLoopTop.inc | 64 |
1 files changed, 28 insertions, 36 deletions
diff --git a/src/post/deinterlace/plugins/tomsmocomp/SearchLoopTop.inc b/src/post/deinterlace/plugins/tomsmocomp/SearchLoopTop.inc index 4504be1d1..5e9f7f04a 100644 --- a/src/post/deinterlace/plugins/tomsmocomp/SearchLoopTop.inc +++ b/src/post/deinterlace/plugins/tomsmocomp/SearchLoopTop.inc @@ -66,17 +66,7 @@ long dst_pitchw = dst_pitch; // local stor so asm can ref #define _pSrc "%5" #define _pSrcP "%6" #define _pBobP "%7" -#define _olddx "%8" -#define _UVMask "%9" -#define _ShiftMask "%10" -#define _FOURS "%11" -#define _TENS "%12" -#define _Max_Vals "%13" -#define _Min_Vals "%14" -#define _YMask "%15" -#define _Max_Mov "%16" -#define _ONES "%17" -#define _DiffThres "%18" +#define _oldbx "%8" #endif for (y=1; y < FldHeight-1; y++) @@ -87,73 +77,75 @@ long dst_pitchw = dst_pitch; // local stor so asm can ref // Loop general reg usage // // XAX - pBobP, then pDest - // XDX - pBob + // XBX - pBob // XCX - src_pitch2 - // _olddx - current offset + // XDX - current offset // XDI - prev weave pixels, 1 line up // XSI - next weave pixels, 1 line up + // Save "XBX" (-fPIC) + MOVX" %%"XBX", "_oldbx"\n\t" + #ifdef IS_SSE2 // sse2 code deleted for now #else // simple bob first 8 bytes - MOVX" "_pBob", %%"XDX"\n\t" + MOVX" "_pBob", %%"XBX"\n\t" MOVX" "_src_pitch2", %%"XCX"\n\t" #ifdef USE_VERTICAL_FILTER - "movq (%%"XDX"), %%mm0\n\t" - "movq (%%"XDX", %%"XCX"), %%mm1\n\t" //, qword ptr["XDX"+"XCX"] + "movq (%%"XBX"), %%mm0\n\t" + "movq (%%"XBX", %%"XCX"), %%mm1\n\t" //, qword ptr["XBX"+"XCX"] "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 + V_PAVGB ("%%mm2", "%%mm1", "%%mm3", MANGLE(ShiftMask)) // halfway between + V_PAVGB ("%%mm0", "%%mm2", "%%mm3", MANGLE(ShiftMask)) // 1/4 way + V_PAVGB ("%%mm1", "%%mm2", "%%mm3", MANGLE(ShiftMask)) // 3/4 way MOVX" "_pDest", %%"XDI"\n\t" MOVX" "_dst_pitchw", %%"XAX"\n\t" V_MOVNTQ ("(%%"XDI")", "%%mm0") V_MOVNTQ ("(%%"XDI", %%"XAX")", "%%mm1") // qword ptr["XDI"+"XAX"], mm1 // simple bob last 8 bytes - MOVX" "_Last8", %%"XSI"\n\t" - ADDX" %%"XDX", %%"XSI"\n\t" // ["XDX"+"olddx"] + MOVX" "_Last8", %%"XDX"\n\t" + LEAX" (%%"XBX", %%"XDX"), %%"XSI"\n\t" // ["XBX"+"XDX"] "movq (%%"XSI"), %%mm0\n\t" "movq (%%"XSI", %%"XCX"), %%mm1\n\t" // qword ptr["XSI"+"XCX"] "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 - ADDX" "_olddx", %%"XDI"\n\t" // last 8 bytes of dest + V_PAVGB ("%%mm2", "%%mm1", "%%mm3", MANGLE(ShiftMask)) // halfway between + V_PAVGB ("%%mm0", "%%mm2", "%%mm3", MANGLE(ShiftMask)) // 1/4 way + V_PAVGB ("%%mm1", "%%mm2", "%%mm3", MANGLE(ShiftMask)) // 3/4 way + ADDX" %%"XDX", %%"XDI"\n\t" // last 8 bytes of dest V_MOVNTQ ("%%"XDI"", "%%mm0") V_MOVNTQ ("(%%"XDI", %%"XAX")", "%%mm1") // qword ptr["XDI"+"XAX"], mm1) #else - "movq (%%"XDX"), %%mm0\n\t" - // pavgb mm0, qword ptr["XDX"+"XCX"] - V_PAVGB ("%%mm0", "(%%"XDX", %%"XCX")", "%%mm2", _ShiftMask) // qword ptr["XDX"+"XCX"], mm2, ShiftMask) + "movq (%%"XBX"), %%mm0\n\t" + // pavgb mm0, qword ptr["XBX"+"XCX"] + V_PAVGB ("%%mm0", "(%%"XBX", %%"XCX")", "%%mm2", MANGLE(ShiftMask)) // qword ptr["XBX"+"XCX"], mm2, ShiftMask) MOVX" "_pDest", %%"XDI"\n\t" V_MOVNTQ ("(%%"XDI")", "%%mm0") // simple bob last 8 bytes - MOVX" "_Last8", %%"XSI"\n\t" - ADDX" %%"XDX", %%"XSI"\n\t" //"XSI", ["XDX"+"olddx"] + MOVX" "_Last8", %%"XDX"\n\t" + LEAX" (%%"XBX", %%"XDX"), %%"XSI"\n\t" //"XSI", ["XBX"+"XDX"] "movq (%%"XSI"), %%mm0\n\t" // pavgb mm0, qword ptr["XSI"+"XCX"] - V_PAVGB ("%%mm0", "(%%"XSI", %%"XCX")", "%%mm2", _ShiftMask) // qword ptr["XSI"+"XCX"], mm2, ShiftMask) - ADDX" "_olddx", %%"XDI"\n\t" - V_MOVNTQ ("(%%"XDI")", "%%mm0") // qword ptr["XDI"+"olddx"], mm0) + V_PAVGB ("%%mm0", "(%%"XSI", %%"XCX")", "%%mm2", MANGLE(ShiftMask)) // qword ptr["XSI"+"XCX"], mm2, ShiftMask) + V_MOVNTQ ("(%%"XDI", %%"XDX")", "%%mm0") // qword ptr["XDI"+"XDX"], mm0) #endif // now loop and get the middle qwords MOVX" "_pSrc", %%"XSI"\n\t" MOVX" "_pSrcP", %%"XDI"\n\t" - MOVX" $8, "_olddx"\n\t" // curr offset longo all lines + MOVX" $8, %%"XDX"\n\t" // curr offset longo all lines "1:\n\t" MOVX" "_pBobP", %%"XAX"\n\t" ADDX" $8, %%"XDI"\n\t" ADDX" $8, %%"XSI"\n\t" - ADDX" $8, %%"XDX"\n\t" - ADDX" "_olddx", %%"XAX"\n\t" + ADDX" $8, %%"XBX"\n\t" + ADDX" %%"XDX", %%"XAX"\n\t" #ifdef USE_STRANGE_BOB #include "StrangeBob.inc" |