Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © <2010>, Intel Corporation.
  3.  *
  4.  * This program is licensed under the terms and conditions of the
  5.  * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at
  6.  * http://www.opensource.org/licenses/eclipse-1.0.php.
  7.  *
  8.  */
  9. // Module Name: Load_Cur_UV_Right_Most_2X8.Asm
  10.  
  11. #if defined(_DEBUG)
  12.         mov             (1)             EntrySignatureC:w                       0xDDD0:w
  13. #endif
  14.  
  15. #if defined(_PROGRESSIVE)
  16.         // Read U+V, (UV MB size = 16x8)
  17.     add (1)     MSGSRC.0:ud             ORIX_CUR:w                      12:w                    { NoDDClr }             // Block origin
  18.     asr (1)     MSGSRC.1:ud             ORIY_CUR:w                      1:w                             { NoDDClr, NoDDChk }            // NV12 U+V block origin y = half of Y comp
  19.     mov (1)     MSGSRC.2:ud             0x00070003:ud                                           { NoDDChk }             // NV12 U+V block width and height (4x8)
  20.         send (8) LEFT_TEMP_D(0)<1>      MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV   
  21. #endif
  22.  
  23. #if defined(_FIELD) || defined(_MBAFF)
  24.  
  25.     // FieldModeCurrentMbFlag determines how to access left MB
  26.         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w               
  27.  
  28.     and.nz.f0.1 (1)     NULLREGW                BitFields:w     BotFieldFlag:w                          // Get bottom field flag
  29.  
  30.         // Read U+V
  31.     add (1)     MSGSRC.0:ud             ORIX_CUR:w                      12:w                            { NoDDClr }             // Block origin
  32.     asr (1)     MSGSRC.1:ud             ORIY_CUR:w                      1:w                             { NoDDClr, NoDDChk }            // NV12 U+V block origin y = half of Y comp
  33.     mov (1)     MSGSRC.2:ud             0x00070003:ud                                           { NoDDChk }             // NV12 U+V block width and height (4x8)
  34.  
  35.         // Load NV12 U+V
  36.        
  37.     // Set message descriptor
  38.  
  39.         (f0.0)  if      (1)             ILDB_LABEL(ELSE_Y_2x8T)
  40.  
  41.     // Frame picture
  42.     mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud                 // Read 1 GRF from SRC_UV
  43.  
  44.         (f0.1) add (1)  MSGSRC.1:d              MSGSRC.1:d              8:w             // Add vertical offset 8 for bot MB in MBAFF mode
  45.  
  46. ILDB_LABEL(ELSE_Y_2x8T):
  47.         else    (1)             ILDB_LABEL(ENDIF_Y_2x8T)
  48.  
  49.         // Field picture
  50.     (f0.1) mov (1)      MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y bottom field
  51.     (-f0.1) mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y top field
  52.  
  53.         endif
  54. ILDB_LABEL(ENDIF_Y_2x8T):
  55.  
  56.         // Read 1 GRF from DEST surface as the above MB has been deblocked.
  57. //      send (8) BUF_D(0)<1>    MSGHDRU MSGSRC<8;8,1>:ud        MSGDSC 
  58.         send (8) LEFT_TEMP_D(0)<1>      MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD MSGDSC 
  59.  
  60. #endif
  61.  
  62.