| 
									
										
										
										
											2012-10-24 22:17:13 +08:00
										 |  |  | #include<stdio.h>
 | 
					
						
							|  |  |  | #include<assert.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int rs, rt; | 
					
						
							|  |  |  |     int ach = 5, acl = 5; | 
					
						
							|  |  |  |     int resulth, resultl; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     rs     = 0x00FF00FF; | 
					
						
							|  |  |  |     rt     = 0x00010002; | 
					
						
							|  |  |  |     resulth = 0x05; | 
					
						
							|  |  |  |     resultl = 0x0302; | 
					
						
							|  |  |  |     __asm | 
					
						
							|  |  |  |         ("mthi  %0, $ac1\n\t" | 
					
						
							|  |  |  |          "mtlo  %1, $ac1\n\t" | 
					
						
							|  |  |  |          "dpax.w.ph $ac1, %2, %3\n\t" | 
					
						
							|  |  |  |          "mfhi  %0, $ac1\n\t" | 
					
						
							|  |  |  |          "mflo  %1, $ac1\n\t" | 
					
						
							|  |  |  |          : "+r"(ach), "+r"(acl) | 
					
						
							|  |  |  |          : "r"(rs), "r"(rt) | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     assert(ach == resulth); | 
					
						
							|  |  |  |     assert(acl == resultl); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-02 05:08:48 +01:00
										 |  |  |     ach = 6, acl = 7; | 
					
						
							|  |  |  |     rs     = 0xFFFF00FF; | 
					
						
							|  |  |  |     rt     = 0xFFFF0002; | 
					
						
							|  |  |  |     resulth = 0x05; | 
					
						
							|  |  |  |     resultl = 0xFFFFFF06; | 
					
						
							|  |  |  |     __asm | 
					
						
							|  |  |  |         ("mthi  %0, $ac1\n\t" | 
					
						
							|  |  |  |          "mtlo  %1, $ac1\n\t" | 
					
						
							|  |  |  |          "dpax.w.ph $ac1, %2, %3\n\t" | 
					
						
							|  |  |  |          "mfhi  %0, $ac1\n\t" | 
					
						
							|  |  |  |          "mflo  %1, $ac1\n\t" | 
					
						
							|  |  |  |          : "+r"(ach), "+r"(acl) | 
					
						
							|  |  |  |          : "r"(rs), "r"(rt) | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     assert(ach == resulth); | 
					
						
							|  |  |  |     assert(acl == resultl); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 22:17:13 +08:00
										 |  |  |     return 0; | 
					
						
							|  |  |  | } |