OSDN Git Service

i965_drv_video: add support for H264 on Clarkdale/Arrandale
[android-x86/hardware-intel-common-libva.git] / i965_drv_video / shaders / h264 / mc / interpolate_C_4x4.asm
1 /*\r
2  * Interpolation kernel for chrominance 4x4 motion compensation\r
3  * Copyright © <2010>, Intel Corporation.\r
4  *\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
8  *\r
9  */\r
10 //      Kernel name: Interpolate_C_4x4_Func.asm\r
11 //\r
12 //      Interpolation kernel for chrominance 4x4 motion compensation\r
13 //\r
14 //  $Revision: 8 $\r
15 //  $Date: 10/09/06 4:00p $\r
16 //\r
17 \r
18 \r
19 //#if !defined(__Interpolate_C_4x4_Func__)              // Make sure this is only included once\r
20 //#define __Interpolate_C_4x4_Func__\r
21 \r
22 \r
23 INTERLABEL(Interpolate_C_4x4_Func):\r
24 \r
25 \r
26         // (8-xFrac) and (8-yFrac)\r
27     add (2)             gW0<1>:w                        gMVX_FRACC<2;2,1>:w                             -0x08:w\r
28 \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
33 \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
42 \r
43         add (2)         gW0<1>:uw                       pREF0<2;2,1>:uw                                 16:w\r
44 \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
49         \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
54 \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
60             \r
61     // xFrac*yFrac*D\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
65 \r
66    \r
67 //#endif        // !defined(__Interpolate_C_4x4_Func__)\r