?? halfhpel16_refine.asm
字號(hào):
/*
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;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -