📄 mdma_get_mb_refwin.asm
字号:
_MDMA0_ISR1.end:
P2 = [SP++];
P1 = [SP++];
P0 = [SP++];
R0 = [SP++];
ASTAT = [SP++];
RETI = [SP++];
RTI;
NOP;
/****************************************************
//void get_MB_dma_no_pre(Ipp8u *src656, Ipp8u *dstMB);
.global _get_MB_dma_no_pre;
_get_MB_dma_no_pre:
[--SP] = (R7:4, P5:3);
[--SP] = RETS;
L0 = 0;
L1 = 0;
P0.L = _dma_done; //clear flag
P0.H = _dma_done;
R7 = 0;
[P0] = R7;
P0.L = _get_refwin;
P0.H = _get_refwin;
[P0] = R7;
R2.L = _Y656_queue_no_pre;
R2.H = _Y656_queue_no_pre;
R3 = R2;
R3 += 2;
I0 = R3;
R0 += 1;
R3.L = _UV656_queue;
R3.H = _UV656_queue;
R3 += 2;
I1 = R3;
R3 += 16;
W[I0++] = R0.L;
W[I0] = R0.H;
I0 = R3;
R0 += -1;
W[I1++] = R0.L;
W[I1] = R0.H;
R0 += 2;
W[I0++] = R0.L;
W[I0] = R0.H;
P0.L = LO(MDMA_S0_NEXT_DESC_PTR);
P0.H = HI(MDMA_S0_NEXT_DESC_PTR);
[P0] = R2;
R2.L = _MBY_queue_no_pre;
R2.H = _MBY_queue_no_pre;
R3 = R2;
R3 += 2;
I0 = R3;
R3.L = _MBUV_queue;
R3.H = _MBUV_queue;
R3 += 2;
I1 = R3;
R3 += 16;
W[I0++] = R1.L;
W[I0] = R1.H;
I0 = R3;
R7 = 432; //24*18;
R1 = R1 + R7;
W[I1++] = R1.L;
W[I1] = R1.H;
R7 = 64;
R1 = R1 + R7;
W[I0++] = R1.L;
W[I0++] = R1.H;
P1.L = LO(MDMA_D0_NEXT_DESC_PTR);
P1.H = HI(MDMA_D0_NEXT_DESC_PTR);
[P1] = R2;
R0 = 0x6811;
W[P0+MDMA_S0_CONFIG-MDMA_S0_NEXT_DESC_PTR] = R0;
SSYNC;
R0 = 0x6813;
W[P1+MDMA_D0_CONFIG-MDMA_D0_NEXT_DESC_PTR] = R0;
SSYNC;
RETS = [SP++];
(R7:4, P5:3) = [SP++];
_get_MB_dma_no_pre.end:
RTS;
NOP;
//void get_MB_dma_prepro(Ipp8u *src656, Ipp8u *dstMB);
.global _get_MB_dma_prepro;
_get_MB_dma_prepro:
[--SP] = (R7:4, P5:3);
[--SP] = RETS;
L0 = 0;
L1 = 0;
P0.L = _dma_done; //clear flag
P0.H = _dma_done;
R7 = 0;
[P0] = R7;
P0.L = _get_refwin;
P0.H = _get_refwin;
[P0] = R7;
R2.L = _Y656_queue_prepro;
R2.H = _Y656_queue_prepro;
R3 = R2;
R3 += 2;
I0 = R3;
R3.L = _UV656_queue;
R3.H = _UV656_queue;
R3 += 2;
I1 = R3;
R3 += 16;
R4 = R0;
P0.L = _prepro_back_offset;
P0.H = _prepro_back_offset;
R7 = [P0];
R4 = R4 - R7;
R4 += 1; //Y SRC
W[I0++] = R4.L;
W[I0] = R4.H;
I0 = R3;
W[I1++] = R0.L;
W[I1] = R0.H;
R0 += 2;
W[I0++] = R0.L;
W[I0++] = R0.H;
P0.L = LO(MDMA_S0_NEXT_DESC_PTR);
P0.H = HI(MDMA_S0_NEXT_DESC_PTR);
[P0] = R2;
R2.L = _MBY_queue_prepro;
R2.H = _MBY_queue_prepro;
R3 = R2;
R3 += 2;
I0 = R3;
R3.L = _MBUV_queue;
R3.H = _MBUV_queue;
R3 += 2;
I1 = R3;
R3 += 16;
R4 = R1;
R4 += 3; //Y DST
W[I0++] = R4.L;
W[I0] = R4.H;
I0 = R3;
R7 = 432; //24*18;
R1 = R1 + R7;
W[I1++] = R1.L;
W[I1] = R1.H;
R7 = 64;
R1 = R1 + R7;
W[I0++] = R1.L;
W[I0++] = R1.H;
P1.L = LO(MDMA_D0_NEXT_DESC_PTR);
P1.H = HI(MDMA_D0_NEXT_DESC_PTR);
[P1] = R2;
R0 = 0x6811;
W[P0+MDMA_S0_CONFIG-MDMA_S0_NEXT_DESC_PTR] = R0;
SSYNC;
R0 = 0x6813;
W[P1+MDMA_D0_CONFIG-MDMA_D0_NEXT_DESC_PTR] = R0;
SSYNC;
RETS = [SP++];
(R7:4, P5:3) = [SP++];
_get_MB_dma_prepro.end:
RTS;
NOP;
//void get_MB_refwin_dma_no_pre(Ipp8u *src656, Ipp8u *win_Y_src, Ipp8u *MB_dst, Ipp8u *win_dst, Ipp8u *win_U_src, Ipp8u *win_V_src);
.global _get_MB_refwin_dma_no_pre;
_get_MB_refwin_dma_no_pre:
[--SP] = (R7:4, P5:3);
[--SP] = RETS;
L0 = 0;
L1 = 0;
P0.L = _dma_done; //clear flag
P0.H = _dma_done;
R7 = 0;
[P0] = R7;
P0.L = _get_refwin;
P0.H = _get_refwin;
R7 = 1;
[P0] = R7;
R5.L = _ref_src_queue;
R5.H = _ref_src_queue;
R5 += 2;
I0 = R5;
R5 += 16;
I1 = R5;
R5 += 16;
R7 = [SP+48];
W[I0++] = R1.L;
W[I0] = R1.H;
I0 = R5;
W[I1++] = R7.L;
W[I1] = R7.H;
R7 = [SP+52];
R5.L = _Y656_queue_no_pre;
R5.H = _Y656_queue_no_pre;
R4 = R5; //store next_desc_ptr;
R5 += 2;
W[I0++] = R7.L;
W[I0] = R7.H;
I1 = R5;
R5.L = _UV656_queue;
R5.H = _UV656_queue;
R5 += 2;
I0 = R5;
R0 += 1;
W[I1++] = R0.L;
W[I1] = R0.H;
R5 += 16;
I1 = R5;
R0 += -1; //U SRC
W[I0++] = R0.L;
W[I0] = R0.H;
R0 += 2;
W[I1++] = R0.L;
W[I1] = R0.H;
P0.L = LO(MDMA_S0_NEXT_DESC_PTR);
P0.H = HI(MDMA_S0_NEXT_DESC_PTR);
[P0] = R4;
R5.L = _refwin_queue;
R5.H = _refwin_queue;
R5 += 2;
I0 = R5;
R3 = [SP+44];
R5 += 16;
I1 = R5;
R5 += 16;
W[I0++] = R3.L;
W[I0] = R3.H;
I0 = R5;
R7 = 2304; //48*48;
R3 = R3 + R7;
W[I1++] = R3.L;
W[I1] = R3.H;
R7 = 576; //24*24;
R3 = R3 + R7;
W[I0++] = R3.L;
W[I0] = R3.H;
R5.L = _MBY_queue_no_pre;
R5.H = _MBY_queue_no_pre;
R4 = R5;
R5 += 2;
I1 = R5;
R5.L = _MBUV_queue;
R5.H = _MBUV_queue;
R5 += 2;
I0 = R5;
W[I1++] = R2.L;
W[I1] = R2.H;
R7 = 432; //24*18;
R2 = R2 + R7;
R5 += 16;
I1 = R5;
W[I0++] = R2.L;
W[I0] = R2.H;
R7 = 64;
R2 = R2 + R7;
W[I1++] = R2.L;
W[I1++] = R2.H;
P1.L = LO(MDMA_D0_NEXT_DESC_PTR);
P1.H = HI(MDMA_D0_NEXT_DESC_PTR);
[P1] = R4;
R0 = 0x6811;
W[P0+MDMA_S0_CONFIG-MDMA_S0_NEXT_DESC_PTR] = R0;
SSYNC;
R0 = 0x6813;
W[P1+MDMA_D0_CONFIG-MDMA_D0_NEXT_DESC_PTR] = R0;
SSYNC;
RETS = [SP++];
(R7:4, P5:3) = [SP++];
_get_MB_refwin_dma_no_pre.end:
RTS;
NOP;
//void get_MB_refwin_dma_prepro(Ipp8u *src656, Ipp8u *win_Y_src, Ipp8u *MB_dst, Ipp8u *win_dst, Ipp8u *win_U_src, Ipp8u *win_V_src);
.global _get_MB_refwin_dma_prepro;
_get_MB_refwin_dma_prepro:
[--SP] = (R7:4, P5:3);
[--SP] = RETS;
L0 = 0;
L1 = 0;
P0.L = _dma_done; //clear flag
P0.H = _dma_done;
R7 = 0;
[P0] = R7;
P0.L = _get_refwin;
P0.H = _get_refwin;
R7 = 1;
[P0] = R7;
R5.L = _ref_src_queue;
R5.H = _ref_src_queue;
R5 += 2;
I0 = R5;
R5 += 16;
I1 = R5;
R5 += 16;
R7 = [SP+48];
W[I0++] = R1.L;
W[I0] = R1.H;
I0 = R5;
W[I1++] = R7.L;
W[I1] = R7.H;
R7 = [SP+52];
R5.L = _Y656_queue_prepro;
R5.H = _Y656_queue_prepro;
R4 = R5;
R5 += 2;
I1 = R5;
W[I0++] = R7.L;
W[I0]= R7.H;
R5.L = _UV656_queue;
R5.H = _UV656_queue;
R5 += 2;
I0 = R5;
R6 = R0;
P0.L = _prepro_back_offset;
P0.H = _prepro_back_offset;
R7 = [P0];
R6 = R6 - R7;
R6 += 1;
W[I1++] = R6.L;
W[I1] = R6.H;
R5 += 16;
I1 = R5;
W[I0++] = R0.L; //U SRC
W[I0] = R0.H;
R0 += 2; //V SRC
W[I1++] = R0.L;
W[I1] = R0.H;
P0.L = LO(MDMA_S0_NEXT_DESC_PTR);
P0.H = HI(MDMA_S0_NEXT_DESC_PTR);
[P0] = R4;
R5.L = _refwin_queue;
R5.H = _refwin_queue;
R5 += 2;
I0 = R5;
R3 = [SP+44];
R5 += 16;
I1 = R5;
R5 += 16;
W[I0++] = R3.L;
W[I0] = R3.H;
I0 = R5;
R7 = 2304; //48*48
R3 = R3 + R7;
W[I1++] = R3.L;
W[I1] = R3.H;
R7 = 576; //24*24
R3 = R3 + R7;
W[I0++] = R3.L;
W[I0] = R3.H;
R5.L = _MBY_queue_prepro;
R5.H = _MBY_queue_prepro;
R4 = R5;
R5 += 2;
I1 = R5;
R5.L = _MBUV_queue;
R5.H = _MBUV_queue;
R5 += 2;
I0 = R5;
R6 = R2;
R6 += 3; //MB Y DST
W[I1++] = R6.L;
W[I1] = R6.H;
R7 = 432; //24*18;
R2 = R2 + R7;
R5 += 16;
I1 = R5;
W[I0++] = R2.L;
W[I0] = R2.H;
R7 = 64;
R2 = R2 + R7;
W[I1++] = R2.L;
W[I1++] = R2.H;
P1.L = LO(MDMA_D0_NEXT_DESC_PTR);
P1.H = HI(MDMA_D0_NEXT_DESC_PTR);
[P1] = R4;
R0 = 0x6811;
W[P0+MDMA_S0_CONFIG-MDMA_S0_NEXT_DESC_PTR] = R0;
SSYNC;
R0 = 0x6813;
W[P1+MDMA_D0_CONFIG-MDMA_D0_NEXT_DESC_PTR] = R0;
SSYNC;
RETS = [SP++];
(R7:4, P5:3) = [SP++];
_get_MB_refwin_dma_prepro.end:
RTS;
NOP;
***************************************************/
//void restore_MB_get_MB_refwin( 11
// Ipp8u *MB_restore, Ipp8u *refvop_Y, Ipp8u *refvop_U, Ipp8u *refvop_V,
// 12 13
// Ipp8u *src656, Ipp8u *MB_dst,
// 14 15 16
// Ipp8u *win_Y_src, Ipp8u *win_U_src, Ipp8u *win_V_src,
// 17 18 19
// Ipp8u *win_Y_dst, Ipp8u *win_U_dst, Ipp8u *win_V_dst,
// 20
// int flag
// );
_restore_MB_get_MB_refwin_no_pre:
[--SP] = (R7:4, P5:3);
[--SP] = RETS;
L0 = 0;
L1 = 0;
P0.L = _dma_done; //clear flag
P0.H = _dma_done;
R7 = 0;
[P0] = R7;
R4.L = _MB_restore_queue;
R4.H = _MB_restore_queue;
R6 = R4;
R4 += 2;
I0 = R4;
R4 += 16;
R5.L = _refvop_queue;
R5.H = _refvop_queue;
R7 = R5;
R5 += 2;
I1 = R5;
R5 += 16;
W[I0++] = R0.L;
W[I0] = R0.H;
I0 = R4;
W[I1++] = R1.L;
W[I1] = R1.H;
I1 = R5;
R3 = 432; //24*18
R0 = R0 + R3;
W[I0++] = R0.L;
W[I0] = R0.H;
R4 += 16;
I0 = R4;
W[I1++] = R2.L;
W[I1] = R2.H;
R5 += 16;
I1 = R5;
R3 = 64;
R0 = R0 + R3;
W[I0++] = R0.L;
W[I0] = R0.H;
R3 = [SP+44];
W[I1++] = R3.L;
W[I1] = R3.H;
P0.L = LO(MDMA_S0_NEXT_DESC_PTR);
P0.H = HI(MDMA_S0_NEXT_DESC_PTR);
[P0] = R6;
P1.L = LO(MDMA_D0_NEXT_DESC_PTR);
P1.H = HI(MDMA_D0_NEXT_DESC_PTR);
[P1] = R7;
R7 = [SP+80];
P2.L = _get_MB_refwin;
P2.H = _get_MB_refwin;
[P2] = R7;
CC = BITTST(R7, 1); //get MB flag;
IF !CC JUMP no_more_dma1;
P3.L = _MBY_queue_addr;
P3.H = _MBY_queue_addr;
P4.L = _Y656_queue_addr;
P4.H = _Y656_queue_addr;
R4.L = _Y656_queue_no_pre;
R4.H = _Y656_queue_no_pre;
[P4] = R4;
R4 += 2;
R5.L = _MBY_queue_no_pre;
R5.H = _MBY_queue_no_pre;
[P3] = R5;
R5 += 2;
I0 = R4;
I1 = R5;
R0 = [SP+48];
R1 = [SP+52];
R0 += 1;
W[I0++] = R0.L;
W[I0] = R0.H;
R4.L = _UV656_queue;
R4.H = _UV656_queue;
R4 += 2;
I0 = R4;
W[I1++] = R1.L;
W[I1] = R1.H;
R5.L = _MBUV_queue;
R5.H = _MBUV_queue;
R5 += 2;
I1 = R5;
R0 += -1;
W[I0++] = R0.L;
W[I0] = R0.H;
R4 += 16;
I0 = R4;
R6 = 432;
R1 = R1 + R6;
W[I1++] = R1.L;
W[I1] = R1.H;
R5 += 16;
I1 = R5;
R0 += 2;
W[I0++] = R0.L;
W[I0] = R0.H;
R6 = 64;
R1 = R1 + R6;
W[I1++] = R1.L;
W[I1] = R1.H;
CC = BITTST(R7, 0); //get refwin flag;
IF !CC JUMP no_more_dma1;
P2.L = _ref_src_queue_addr;
P2.H = _ref_src_queue_addr;
P3.L = _refwin_queue_addr;
P3.H = _refwin_queue_addr;
R4.L = _ref_src_queue;
R4.H = _ref_src_queue;
R5.L = _refwin_queue;
R5.H = _refwin_queue;
R0.L = _ref_src_queue1;
R0.H = _ref_src_queue1;
R1.L = _refwin_queue1;
R1.H = _refwin_queue1;
CC = BITTST(R7, 2);
IF CC R4=R0;
IF CC R5=R1;
[P2] = R4;
[P3] = R5;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -