2 * Interpolation kernel for chrominance 4x4 motion compensation
\r
3 * Copyright © <2010>, Intel Corporation.
\r
5 * This program is licensed under the terms and conditions of the
\r
6 * Eclipse Public License (EPL), version 1.0. The full text of the EPL is at
\r
7 * http://www.opensource.org/licenses/eclipse-1.0.php.
\r
10 // Kernel name: Interpolate_C_4x4_Func.asm
\r
12 // Interpolation kernel for chrominance 4x4 motion compensation
\r
15 // $Date: 10/09/06 4:00p $
\r
19 //#if !defined(__Interpolate_C_4x4_Func__) // Make sure this is only included once
\r
20 //#define __Interpolate_C_4x4_Func__
\r
23 INTERLABEL(Interpolate_C_4x4_Func):
\r
26 // (8-xFrac) and (8-yFrac)
\r
27 add (2) gW0<1>:w gMVX_FRACC<2;2,1>:w -0x08:w
\r
29 // Compute the GRF address of the starting position of the reference area
\r
30 mov (1) pREF0:w nOFFSET_REFC:w {NoDDClr}
\r
31 mov (1) pREF1:uw nOFFSET_REFC+16:w {NoDDChk,NoDDClr}
\r
32 mov (1) pRESULT:uw gpINTPC:uw {NoDDChk}
\r
34 // gCOEFA = (8-xFrac)*(8-yFrac)
\r
35 // gCOEFB = xFrac*(8-yFrac)
\r
36 // gCOEFC = (8-xFrac)*yFrac
\r
37 // gCOEFD = xFrac*yFrac
\r
38 mul (1) gCOEFD:w gMVX_FRACC:w gMVY_FRACC:w {NoDDClr}
\r
39 mul (1) gCOEFA:w -gW0:w -gW1:uw {NoDDClr,NoDDChk}
\r
40 mul (1) gCOEFB:w gMVX_FRACC:w -gW1:uw {NoDDClr,NoDDChk}
\r
41 mul (1) gCOEFC:w -gW0:w gMVY_FRACC:w {NoDDChk}
\r
43 add (2) gW0<1>:uw pREF0<2;2,1>:uw 16:w
\r
45 // (8-xFrac)*(8-yFrac)*A
\r
46 // ---------------------
\r
47 mul (16) acc0<1>:uw r[pREF0,0]<16;8,1>:ub gCOEFA:uw
\r
48 mul (16) acc1<1>:uw r[pREF0,nGRFWIB]<16;8,1>:ub gCOEFA:uw
\r
50 // xFrac*(8-yFrac)*B
\r
51 // -------------------
\r
52 mac (16) acc0<1>:uw r[pREF0,2]<16;8,1>:ub gCOEFB:uw
\r
53 mac (16) acc1<1>:uw r[pREF0,nGRFWIB+2]<16;8,1>:ub gCOEFB:uw
\r
55 // (8-xFrac)*yFrac*C
\r
56 // -------------------
\r
57 mov (2) pREF0<1>:uw gW0<2;2,1>:uw
\r
58 mac (16) acc0<1>:uw r[pREF0,0]<8,1>:ub gCOEFC:uw
\r
59 mac (16) acc1<1>:uw r[pREF0,nGRFWIB]<8,1>:ub gCOEFC:uw
\r
62 // -----------------
\r
63 mac (16) r[pRESULT]<1>:uw r[pREF0,2]<8,1>:ub gCOEFD:uw
\r
64 mac (16) r[pRESULT,GRFWIB]<1>:uw r[pREF0,nGRFWIB+2]<8,1>:ub gCOEFD:uw {SecHalf}
\r
67 //#endif // !defined(__Interpolate_C_4x4_Func__)
\r