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

📄 idctchen.cpp

📁 这是一组DCT和iDCT的代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//		punpckhwd		mm2, mm0				//												mm0
//		movq	mm5, [ebx+8+24*2]; 	//								mm5
		movq	[ebx+24*2], mm1 		//												mm1
		 psubw	mm5, mm7						//												mm7
		movq	mm3, mm6						//								mm3			
//#define mm1 mm1
//#define mm0 mm0
		 movq	mm1, mm4						//								mm1			
		punpcklwd		mm6, mm5
		 movq	mm0, mm2						//								mm0

		punpckhwd		mm3, mm5				//												mm5

		punpckhdq		mm0, mm3				// mm0=(07,17,27,37)	

		psraw	mm0, idct_chen_mmx1_RS8

		punpckldq		mm2, mm3				// mm2=(06,16,26,36)	mm3

		psraw	mm2, idct_chen_mmx1_RS8

		punpckhdq		mm1, mm6				// mm1=(05,15,25,35)	

		movq	[ebx+24*2+8], mm0		//												mm0
		 psraw	mm1, idct_chen_mmx1_RS8

		movq	[ebx+16*2+8], mm2		//												mm2
		 punpckldq		mm4, mm6				// mm4=(04,14,24,34)	mm6

		movq	mm0, [ebx+32*2+0*2];			//								mm0
		 psraw	mm4, idct_chen_mmx1_RS8

		movq	mm2, [ebx+32*2+16*2];	//								mm2
		 movq	mm3, mm0						//								mm3
		movq	[ebx+8*2+8], mm1		//												mm1
		 movq		mm5, mm2						//								mm5
//		movq	[ebx+0*2+8], mm4		//												mm4

//#define mm7 mm7
//#define mm0 mm0
//#define mm1 mm1
//#define mm2 mm2
//#define mm3 mm3 
//#define mm4 mm4
//#define mm5 mm5
//#define mm6 mm6
////#define mm1 mm7


//		movq	mm0, [ebx+32*2+0*2];			//								mm0
		movq	mm1, [ebx+32*2+8*2];			//								mm1

		 movq	[ebx+0*2+8], mm4		//												mm4
//		movq	mm2, [ebx+32*2+16*2];	//								mm2
//		movq	mm3, mm0						//								mm3
		 punpcklwd		mm0, mm1
		movq	mm4, [ebx+32*2+24*2];	//								mm4
		 punpckhwd		mm3, mm1				//												mm1
//		movq		mm5, mm2						//								mm5

																// rows calculation

		punpcklwd		mm2, mm4
		 movq	mm6, mm0						//								mm6
		punpckhdq		mm6, mm2				// mm6=(01,11,21,31)	mm2
		 movq	mm1, mm3						//								mm1
		punpckldq		mm0, mm2				// mm0=(00,10,20,30)

		punpckhwd		mm5, mm4				//												mm4

		movq	[ebx+32*2+8*2], mm6 			//												mm6
		 punpckldq		mm3, mm5				// mm3=(02,12,22,32)
//		movq	[ebx+32*2+0*2], mm0 			//												mm0
//		 punpckhdq		mm1, mm5				// mm1=(03,13,23,33)	mm5
//#define mm1 mm1
//		movq	mm1, mm3						//								mm1
//#define mm4 mm4
		movq	mm4, [ebx+32*2+8+0*2];	//								mm4
		 punpckhdq		mm1, mm5				// mm1=(03,13,23,33)	mm5
		movq	[ebx+32*2+0*2], mm0 			//												mm0
		 movq	mm2, mm4						//								mm2
//		punpckldq		mm3, mm5				// mm3=(02,12,22,32)
//#define mm0 mm0
		movq	mm0, [ebx+32*2+8+8*2];	//								mm0
//		punpckhdq		mm1, mm5				// mm1=(03,13,23,33)	mm5
//#define mm2 mm2
		movq	[ebx+32*2+16*2], mm3			//												mm3
//		movq	mm2, mm4						//								mm2



//#define mm6 mm6
		 punpcklwd		mm4, mm0
		movq	[ebx+32*2+24*2], mm1			//												mm1
		 punpckhwd		mm2, mm0				//												mm0
		movq	mm6, [ebx+32*2+8+16*2];		//								mm6
//#define mm5 mm5
//#define mm3 mm3
//		punpckhwd		mm2, mm0				//												mm0
		 movq	mm1, mm4						//								mm1			
		movq	mm5, [ebx+32*2+8+24*2];		//								mm5
		 movq	mm3, mm6						//								mm3			
//#define mm1 mm1
//#define mm0 mm0
//		movq	mm1, mm4						//								mm1			
		punpcklwd		mm6, mm5
		 movq	mm0, mm2						//								mm0
		punpckhdq		mm1, mm6				// mm1=(05,15,25,35)	
		 ;//slot
		punpckhwd		mm3, mm5				//												mm5
		 ;//slot
		movq	[ebx+32*2+8*2+8], mm1	//												mm1
		 punpckhdq		mm0, mm3				// mm0=(07,17,27,37)	

		punpckldq		mm4, mm6				// mm4=(04,14,24,34)	mm6
		 ;//slot

		movq	[ebx+32*2+24*2+8], mm0 //												mm0
		 punpckldq		mm2, mm3				// mm2=(06,16,26,36)	mm3
		movq	mm0, [ebx+32*2+16*2];	// mm0=b2				mm0
		 ;//slot
		movq	[ebx+32*2+0*2+8], mm4	//												
		 movq	mm4, mm0; 					// mm4=mm0=b2 mm4
		movq	[ebx+32*2+16*2+8], mm2 //												mm2
		 ;//slot
		movq	mm3, idct_chen_mmx1_c5c;		//				mm3



//#define mm0 mm0
//#define mm1 mm1
//#define mm2 mm2
//#define mm3 mm3
//#define mm4 mm4
//#define mm5 mm5
//#define mm6 mm6
//#define mm7 mm7
				
//		movq	mm0, [ebx+32*2+16*2];	// mm0=b2				mm0

		movq	mm1, [ebx+32*2+8+16*2];		// mm1=b3				mm1
		movq	mm2, idct_chen_mmx1_c6c;		//				mm2

//		movq	mm3, idct_chen_mmx1_c5c;		//				mm3
//		movq	mm4, mm0; 					// mm4=mm0=b2 mm4


		 movq	mm5, mm1; 					// mm5=mm1=b3 mm5
		paddsw	mm0, mm2; 					// b2+c6c
		 paddsw	mm1, mm2; 					// b3+c6c								mm2

		movq	mm6, idct_chen_mmx1_c6;		//				mm6
		 paddsw	mm4, mm3; 					// b2+c5c
		movq	mm7, idct_chen_mmx1_c5;		//				mm7
		 pmulhw	mm1, mm6; 					//


		pmulhw	mm4, mm7; 					//
		 paddsw	mm5, mm3; 					// b3+c5c								mm3
		movq	mm2, [ebx+32*2+0*2];	// mm2=b0				mm2
		 pmulhw	mm0, mm6; 					//												mm6
		movq	mm3, [ebx+32*2+8+0*2]; // mm3=b1				mm3
		 pmulhw	mm5, mm7; 					//												mm7
		movq	mm6, idct_chen_mmx1_c0;		//				mm6
		 paddsw	mm1, mm4; 					// mm1=a3								mm4
		movq	mm4, idct_chen_mmx1_c0c;		//				mm4
		 ;//slot
		psubsw	mm0,mm5;						// mm0=a2								mm5
//#define mm2 mm2
//#define mm3 mm3
//#define mm4 mm4
//		movq	mm2, [ebx+32*2+0*2];	// mm2=b0				mm2

//		movq	mm3, [ebx+32*2+8+0*2]; // mm3=b1				mm3
//		movq	mm4, idct_chen_mmx1_c0c;		//				mm4

		
		 paddsw	mm2, mm4; 					// b0+c0c
		paddsw	mm3, mm4; 					// b1+c0c								mm4					
//#define mm6 mm6
//		movq	mm6, idct_chen_mmx1_c0;		//				mm6

		 pmulhw	mm2, mm6;
		pmulhw	mm3, mm6; 					//												mm6
//#define mm7 mm7
		 ;//slot
		movq	mm6, [ebx+32*2+8*2];			// mm6=a0				mm6 			
		 movq	mm7, mm2; 					//								mm7
		;//stall
		 ;//slot
		paddsw	mm2, mm3; 					// mm2=a0
		 psubsw	mm7, mm3; 					// mm7=a1								mm3
																// a(0,1,2,3) in rd(24,28,16,17)
//#define mm5 mm5
		movq	mm5, mm2; 					// mm5=mm2=a0 mm5					
		 paddsw	mm2, mm1; 					// mm2=b0
		movq	mm3, [ebx+32*2+8+24*2]; // mm3=a3				mm3
		 psubsw	mm5, mm1; 					// mm5=b3								mm1
		movq	[ebx+32*2+0*2], mm2;	//												mm2
		 movq	mm4, mm7; 					// mm4=mm7=a1 mm4					
		movq	[ebx+32*2+8+16*2], mm5;		//												mm5

//#define mm4 mm4
//		movq	mm4, mm7; 					// mm4=mm7=a1 mm4					
		 paddsw	mm7, mm0; 					// mm7=b1
		movq	mm2, idct_chen_mmx1_c4c;		//				mm2
		 psubsw	mm4, mm0; 					// mm4=b2								mm0
		movq	[ebx+32*2+16*2], mm7;	//												mm7
		 movq	mm5, mm6;						// mm5=mm6=a0	mm5
		movq	[ebx+32*2+8+0*2], mm4; //												mm4
																// b(0,1,2,3) are stored back
								
//#define mm6 mm6
//		movq	mm6, [ebx+32*2+8*2];			// mm6=a0				mm6 			

//#define mm3 mm3
//		movq	mm3, [ebx+32*2+8+24*2]; // mm3=a3				mm3

//#define mm2 mm2
//#define mm1 mm1
//#define mm5 mm5
//#define mm7 mm7
//		movq	mm2, idct_chen_mmx1_c4c;		//				mm2
		 movq	mm7, mm3;						// mm7=mm3=a3	mm7
		movq	mm1, idct_chen_mmx1_c1c;		//				mm1

//		movq	mm5, mm6;						// mm5=mm6=a0	mm5

		 paddsw	mm6, mm2;						// a0+c4c
		movq	mm0, idct_chen_mmx1_c4; 		//				mm0
		 paddsw	mm3, mm2;						// a3+c4c								mm2
		movq	mm4, idct_chen_mmx1_c1; 		//				mm4
		 pmulhw	mm3, mm0;						//
		paddsw	mm5, mm1;						// a0+c1c

//		paddsw	mm7, mm1;						// a3+c1c								mm1

//#define mm0 mm0
//#define mm4 mm4
//		movq	mm0, idct_chen_mmx1_c4; 		//				mm0
//		movq	mm4, idct_chen_mmx1_c1; 		//				mm4

//		pmulhw	mm3, mm0;						//
		 pmulhw	mm6, mm0;						//												mm0
		pmulhw	mm5, mm4;						//
		 paddsw	mm7, mm1;						// a3+c1c								mm1
		movq	mm2, [ebx+32*2+24*2];	// mm2=a1				mm2 			
		 pmulhw	mm7, mm4;						//												mm4
		movq	mm1, [ebx+32*2+8+8*2];	// mm1=a2				mm1
		 movq	mm4, mm2;						// mm4=mm2=a1	mm4
		movq	mm0, idct_chen_mmx1_c3c;		//				mm0
		 paddsw	mm3,mm5;						// mm3=c3								mm5
//		psubsw	mm6,mm7;						// mm6=c0								mm7


//#define mm2 mm2
//#define mm1 mm1
//		movq	mm2, [ebx+32*2+24*2];	// mm2=a1				mm2 			

//		movq	mm1, [ebx+32*2+8+8*2];	// mm1=a2				mm1
//#define mm5 mm5
//#define mm0 mm0

		movq	mm5, idct_chen_mmx1_c2c;		//				mm5
		 psubsw	mm6,mm7;						// mm6=c0								mm7
//		movq	mm0, idct_chen_mmx1_c3c;		//				mm0

//#define mm4 mm4
//#define mm7 mm7
//		movq	mm4, mm2;						// mm4=mm2=a1	mm4
		movq	mm7, mm1;						// mm7=mm1=a2	mm7
		 paddsw	mm2, mm5;						// a1+c2c
		paddsw	mm1, mm5;						// a2+c2c								mm5
		 paddsw	mm4, mm0; 					// a1+c3c
		movq	mm5, idct_chen_mmx1_c2;		//				mm5
		 paddsw	mm7, mm0; 					// a2+c3c								mm0

//#define mm5 mm5
//#define mm0 mm0
//		movq	mm5, idct_chen_mmx1_c2;		//				mm5
		movq	mm0, idct_chen_mmx1_c3;		//				mm0
		 pmulhw	mm1, mm5;						//
		pmulhw	mm4, mm0; 					//
		 ;//slot
		pmulhw	mm2, mm5;						//												mm5
		 movq	mm5, mm3;						// mm5=mm3=c3	mm5
		pmulhw	mm7, mm0; 					//												mm0
		;//slot
		movq	mm0, idct_chen_mmx1_c0c;		//				mm0
		 psubsw	mm1, mm4;						// mm1=c1								mm4
		movq	mm4, mm6;						// mm4=mm6=c0	mm4
		 paddsw	mm6, mm1;						// mm6=a0
		paddsw	mm2, mm7;						// mm2=c2								mm7

																// c(0,1,2,3) in rd(0,9,8,1)


//#define mm4 mm4
//#define mm5 mm5
//#define mm0 mm0
//		movq	mm4, mm6;						// mm4=mm6=c0	mm4
//		paddsw	mm6, mm1;						// mm6=a0
		 psubsw	mm4, mm1;						// mm4=a1								mm1
//		movq	mm5, mm3;						// mm5=mm3=c3	mm5
		paddsw	mm3, mm2;						// mm3=a3 
		 psubsw	mm5, mm2;						// mm5=a2								mm2
																// a(0,1,2,3) in rd(0,31,32,1)


//		movq	mm0, idct_chen_mmx1_c0c;		//				mm0
		movq	mm7, idct_chen_mmx1_c0;		//				mm7
		 psllw	mm5, 1
		psllw	mm4, 1
		 paddsw	mm5, mm0; 					// a2+c0c								mm0
		paddsw	mm4, mm0; 					// a1+c0c
//#define mm7 mm7
//#define mm1 mm1
//#define mm2 mm2
//#define mm0 mm0
		
//		movq	mm7, idct_chen_mmx1_c0;		//				mm7
		 pmulhw	mm5, mm7;
		movq	mm2, [ebx+32*2+0*2];	// mm2=b0				mm2
		 pmulhw	mm4, mm7; 					//												mm7
		movq	mm0, mm2; 					//								mm0
		 paddsw	mm2, mm3;						// mm2=y0
		movq	mm7, [ebx+32*2+16*2];	// mm7=b1				mm7
		 movq	mm1, mm5; 					//								mm1
		movq	[ebx+32*2+0*2], mm2;	//												mm2
		 psubsw	mm0, mm3;						// mm0=y7								mm3
		movq	mm2, [ebx+32*2+8+16*2];		// mm2=b3				mm2
		 psubsw	mm5, mm4; 					// mm5=c1
		movq	[ebx+32*2+8+24*2], mm0;		//												mm0
		 paddsw	mm1, mm4; 					// mm1=c2								mm4
		movq	mm0, [ebx+32*2+8+0*2]; // mm0=b2				mm0
		 movq	mm4, mm7; 					//								mm4																// c(0,1,2,3) in rd(0,32,35,1)

//#define mm7 mm7
//#define mm4 mm4
//#define mm2 mm2
//		movq	mm7, [ebx+32*2+16*2];	// mm7=b1				mm7
//		movq	mm4, mm7; 					//								mm4
//		movq	mm2, [ebx+32*2+8+16*2];		// mm2=b3				mm2
		 paddsw	mm7, mm1; 					// mm7=y1
		psubsw	mm4, mm1; 					// mm4=y6								mm1
		 movq	mm3, mm2; 					//								mm3
		movq	[ebx+32*2+8*2], mm7;	//												mm7
		 paddsw	mm2, mm6;						// mm2=y3
		movq	[ebx+32*2+8+16*2], mm4;		//												mm4

//#define mm3 mm3
//#define mm0 mm0
//#define mm7 mm7
//		movq	mm3, mm2; 					//								mm3
//		paddsw	mm2, mm6;						// mm2=y3
		 psubsw	mm3, mm6;						// mm3=y4								mm6
		movq	[ebx+32*2+24*2], mm2;	//												mm2
//		movq	mm0, [ebx+32*2+8+0*2]; // mm0=b2				mm0
		 movq	mm7, mm0; 					//								mm7
		movq	[ebx+32*2+8+0*2], mm3; //												mm3

		 paddsw	mm0, mm5; 					// mm0=y2
		movq	mm1, [ebx+32*2+8*2];			//								mm1
		 psubsw	mm7, mm5; 					// mm7=y5								mm5
		movq	[ebx+32*2+16*2], mm0;	//												mm0
		 ;//slot
		movq	mm0, [ebx+32*2+0*2];			//								mm0
		 ;//slot
		movq	[ebx+32*2+8+8*2], mm7; //												mm7




//#define mm7 mm7
//#define mm0 mm0
//#define mm1 mm1
//#define mm2 mm2
//#define mm3 mm3 
//#define mm4 mm4
//#define mm5 mm5
//#define mm6 mm6
////#define mm1 mm7

		 pcmpeqw mm7, mm7
		movq	mm2, [ebx+32*2+16*2];	//								mm2
		 psllw	mm7, idct_chen_mmx1_LS8		// mm7=-2

//	  psubw 	mm7, mm7

//		movq	mm0, [ebx+32*2+0*2];			//								mm0
		psubw	mm0, mm7
//		movq	mm1, [ebx+32*2+8*2];			//								mm1
		 psubw	mm1, mm7
		psubw	mm2, mm7
		 movq	mm3, mm0						//								mm3
		movq	mm4, [ebx+32*2+24*2];	//								mm4
		 punpcklwd		mm0, mm1
		psubw	mm4, mm7
		 punpckhwd		mm3, mm1				//												mm1
		movq	mm5, mm2						//								mm5

																// rows calculation

		 punpcklwd		mm2, mm4
		movq	mm6, mm0						//								mm6
		 punpckhwd		mm5, mm4				//												mm4
		movq	mm1, mm3						//								mm1
		 punpckldq		mm0, mm2				// mm0=(00,10,20,30)
		movq	mm4, [ebx+32*2+8+0*2];	//								mm4
		 psraw mm0, idct_chen_mmx1_RS8
		punpckhdq		mm6, mm2				// mm6=(01,11,21,31)	mm2
		 psubw	mm4, mm7
		movq	[ebx+32*2+0*2], mm0 			//												mm0
		 psraw	mm6, idct_chen_mmx1_RS8

//		movq	[ebx+32*2+8*2], mm6 			//												mm6
//#define mm1 mm1
//		movq	mm1, mm3						//								mm1
//#define mm4 mm4
//		movq	mm4, [ebx+32*2+8+0*2];	//								mm4
//		psubw	mm4, mm7
		movq	mm0, [ebx+32*2+8+8*2];	//								mm0
		 punpckldq		mm3, mm5				// mm3=(02,12,22,32)
		movq	[ebx+32*2+8*2], mm6 			//												mm6
		 psraw	mm3, idct_chen_mmx1_RS8
//#define mm0 mm0
//		movq	mm0, [ebx+32*2+8+8*2];	//								mm0
		psubw	mm0, mm7
		 punpckhdq		mm1, mm5				// mm1=(03,13,23,33)	mm5
//		psraw	mm1, idct_chen_mmx1_RS8
//#define mm2 mm2
		
		movq	[ebx+32*2+16*2], mm3			//												mm3
		 psraw	mm1, idct_chen_mmx1_RS8
		movq	mm2, mm4						//								mm2



//#define mm6 mm6
		 punpcklwd		mm4, mm0
		movq	mm6, [ebx+32*2+8+16*2];		//								mm6
		 punpckhwd		mm2, mm0				//												mm0
		movq	[ebx+32*2+24*2], mm1			//												mm1
		 psubw	mm6, mm7
//#define mm5 mm5
//#define mm3 mm3
//		punpckhwd		mm2, mm0				//												mm0
		movq	mm5, [ebx+32*2+8+24*2];		//								mm5
		 movq	mm3, mm6						//								mm3			
		psubw	mm5, mm7						//												mm7
//#define mm1 mm1
//#define mm0 mm0
		 movq	mm1, mm4						//								mm1			
		punpcklwd		mm6, mm5
		 ;//slot
		punpckhwd		mm3, mm5				//												mm5
		 movq	mm0, mm2						//								mm0
		punpckhdq		mm0, mm3				// mm0=(07,17,27,37)	
		 ;//slot
		punpckldq		mm2, mm3		 		// mm2=(06,16,26,36)	mm3
		 ;//slot
		psraw	mm0, idct_chen_mmx1_RS8
		 ;//slot
		punpckhdq		mm1, mm6				// mm1=(05,15,25,35)	
		 ;//slot
		psraw	mm2, idct_chen_mmx1_RS8
		 ;//slot
		punpckldq		mm4, mm6				// mm4=(04,14,24,34)	mm6
		 ;//slot
		movq	[ebx+32*2+24*2+8], mm0 //												mm0
		 psraw	mm1, idct_chen_mmx1_RS8

		movq	[ebx+32*2+16*2+8], mm2 //												mm2
		 psraw	mm4, idct_chen_mmx1_RS8

		movq	[ebx+32*2+8*2+8], mm1	//												mm1
		movq	[ebx+32*2+0*2+8], mm4	//												mm4
 
		  emms
  }
}

⌨️ 快捷键说明

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