⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 halfhpel16_refine.asm

📁 adi bf533视频编码程序
💻 ASM
字号:

/* 
Halfpel16_Refine() for diamond search 16x16 block
     parameters: tss_par tss_in_out

*/

#define PTR_MACROBLOCK 0
#define PTR_REFERENCE  4
#define WINWIDTH       8

#define H_MV          20
#define V_MV          22
#define PTR_MBY_MATCH 24
#define SAD           28
#define ROUNDING_TYPE  34
.extern __hpel_16x16_16_RND;
.extern __hpel_8x8_16_RND;
 
.section L1_code;
.align 8;
.global __Halfpel16_Refine;
    
__Halfpel16_Refine:
    
    [--SP] = (R7:4, P5:3);
    P5 = R0;                // Address of tss parameter structure
    [--SP] = RETS;
    SP += -36;
      
    
    R0 = [P5 + PTR_REFERENCE];      //pRef
    R1 = [P5 + SAD];                // SAD corresponding to the best match
    R2 = [P5 + PTR_MACROBLOCK];    //pCur
    R3 = [P5 + WINWIDTH];
    [SP + 12] = R3;
    //[SP] = R3;
    R3 = [P5 + PTR_MBY_MATCH];
    [SP + 32] = R3;             //R3->store the best mathing block 
    //[SP + 4] = R3;
   // R4 = B[P5 + ROUNDING_TYPE](Z);
    //CC = R4==1;
    //IF CC JUMP _hpel_Truncate;      
    
    CALL __hpel_16x16_16_RND;        // __hpel is in hpel.asm
    //JUMP hpel_End;
    
//_hpel_Truncate:
  //  CALL __hpel_16x16_16_T;
    
//hpel_End:    
/***************************************************************************/
    R1 = W[P5 + H_MV](X);      // Get horizontal integer pel MV
    R2 = W[P5 + V_MV](X);      // Get vertical integer pel MV
    R1.L = R1.L + R0.L (S); // Compute half pel horizontal MV
    R2.L = R2.L + R0.H (S); // Compute half pel vertical MV
    W[P5 + H_MV] = R1;
    W[P5 + V_MV] = R2;
    R5 = [SP + 16];        //SAD
    W[P5 + SAD] = R5;
    
    SP += 36;
    RETS = [SP++];
    (R7:4, P5:3) = [SP++];
__Halfpel16_Refine.end:
    RTS;
    
    
/* 
Halfpel8_Refine() for diamond search 8x8 block 
     parameters: tss_par tss_in_out

*/
 
.global __Halfpel8_Refine;
    
__Halfpel8_Refine:
    
    [--SP] = (R7:4, P5:3);
    P5 = R0;                // Address of tss parameter structure
    [--SP] = RETS;
    SP += -36;
       
    R0 = [P5 + PTR_REFERENCE];
    R1 = [P5 + SAD];                // SAD corresponding to the best match
    R2 = [P5 + PTR_MACROBLOCK];
    R3 = [P5 + WINWIDTH];
    [SP + 12] = R3;
    R3 = [P5 + PTR_MBY_MATCH];
    [SP + 32] = R3;             //R3->store the best mathing block 
    //R4 = B[P5 + ROUNDING_TYPE](Z);
    //CC = R4==1;
    //IF CC JUMP _hpel8_Truncate;      
    
    CALL __hpel_8x8_16_RND;        // __hpel is in hpel.asm
    //JUMP hpel8_End;
    
//_hpel8_Truncate:
  //  CALL __hpel_8x8_16_T;
    
//hpel8_End:    
    R1 = W[P5 + H_MV](X);      // Get horizontal integer pel MV
    R2 = W[P5 + V_MV](X);      // Get vertical integer pel MV
    R1.L = R1.L + R0.L (S); // Compute half pel horizontal MV
    R2.L = R2.L + R0.H (S); // Compute half pel vertical MV
    W[P5 + H_MV] = R1;
    W[P5 + V_MV] = R2;
    R5 = [SP + 16];        //SAD
    W[P5 + SAD] = R5;
    
    SP += 36;
    RETS = [SP++];
    (R7:4, P5:3) = [SP++];
 __Halfpel8_Refine.end:
    RTS;
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -