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

📄 mdma_get_mb_refwin.asm

📁 adi bf533视频编码程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
_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 + -