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_Y_16X4.asm
  10. //
  11. // Load Y 16X4 Block to PREV_MB_YD
  12. //
  13. //----------------------------------------------------------------
  14. //  Symbols Need To Be Defined Before Including This Module
  15. //
  16. //      Source Region In :Ud
  17. //      Src_YD:                 Src_Yd Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud                     // 3 Grfs (2 For Y, 1 For U+V)
  18. //
  19. //      Source Region Is :Ub.  The Same Region As :Ud Region
  20. //      Src_YB:                 Src_Yb Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub            // 2 Grfs
  21. //
  22. //      Binding Table Index:
  23. //      Bi_Src_Y:               Binding Table Index Of Y Surface
  24. //
  25. //      Temp Buffer:
  26. //      Buf_D:                  Buf_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=Ud
  27. //      Buf_B:                  Buf_B Base=Rxx Elementsize=1 Srcregion=Region(16,1) Type=Ub
  28. //
  29. //----------------------------------------------------------------
  30.  
  31. #if defined(_DEBUG)
  32.         mov             (1)             EntrySignatureC:w                       0xDDD2:w
  33. #endif
  34.     // FieldModeCurrentMbFlag determines how to access above MB
  35.         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w               
  36.  
  37.     and.nz.f0.1 (1) NULLREGW    BitFields:w   BotFieldFlag:w
  38.  
  39.         // Read Y
  40.     mov (2)     MSGSRC.0<1>:ud  ORIX_TOP<2;2,1>:w               { NoDDClr }             // Block origin
  41.     mov (1)     MSGSRC.2<1>:ud  0x0003000F:ud                   { NoDDChk }             // Block width and height (16x4)
  42.    
  43.     // Set message descriptor
  44.  
  45.         (f0.0)  if      (1)             ELSE_Y_16x4
  46.  
  47.     // Frame picture
  48.     mov (1)     MSGDSC  RESP_LEN(2)+DWBRMSGDSC_RC+BI_DEST_Y:ud                  // Read 2 GRFs from SRC_Y
  49.  
  50.         // Add vertical offset 16 for bot MB in MBAFF mode
  51.         (f0.1) add (1)  MSGSRC.1:d      MSGSRC.1:d              16:w           
  52.        
  53.         // Dual field mode setup
  54.         and.z.f0.1 (1) NULLREGW         DualFieldMode:w         1:w
  55.         (f0.1) jmpi NOT_DUAL_FIELD
  56.  
  57.     add (1)     MSGSRC.1:d              MSGSRC.1:d              -4:w    { NoDDClr }             // Load 8 lines in above MB
  58.         mov (1) MSGSRC.2:ud             0x0007000F:ud                   { NoDDChk }             // New block width and height (16x8)
  59.        
  60.         add (1) MSGDSC                  MSGDSC                  RESP_LEN(2):ud  // 2 more GRF to receive
  61.  
  62. NOT_DUAL_FIELD:
  63.  
  64. ELSE_Y_16x4:
  65.         else    (1)             ENDIF_Y_16x4
  66.  
  67.         asr (1) MSGSRC.1:d              ORIY_CUR:w              1:w             // Reduce y by half in field access mode
  68.  
  69.         // Field picture
  70.     (f0.1) mov (1)      MSGDSC  RESP_LEN(2)+DWBRMSGDSC_RC_BF+BI_DEST_Y:ud  // Read 2 GRFs from SRC_Y bottom field
  71.     (-f0.1) mov (1)     MSGDSC  RESP_LEN(2)+DWBRMSGDSC_RC_TF+BI_DEST_Y:ud  // Read 2 GRFs from SRC_Y top field
  72.  
  73.         add (1) MSGSRC.1:d              MSGSRC.1:d              -4:w    // for last 4 rows of above MB
  74.  
  75.         endif
  76. ENDIF_Y_16x4:
  77.        
  78.     // Read 2 GRFs from DEST surface, as the above MB has been deblocked
  79.     send (8) PREV_MB_YD(0)<1>   MSGHDRY MSGSRC<8;8,1>:ud        DAPREAD MSGDSC
  80.  
  81. // End of load_Y_16x4.asm
  82.