58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #include "io.h"
 | ||
|  | 
 | ||
|  | int main(void) | ||
|  | { | ||
|  |     long long rt, rs; | ||
|  |     long long achi, acli; | ||
|  |     long long acho, aclo; | ||
|  |     long long resh, resl; | ||
|  | 
 | ||
|  |     achi = 0x1; | ||
|  |     acli = 0x1; | ||
|  | 
 | ||
|  |     rs = 0x0000000100000001; | ||
|  |     rt = 0x0000000200000002; | ||
|  | 
 | ||
|  |     resh = 0x1; | ||
|  |     resl = 0x5; | ||
|  |     __asm | ||
|  |        ("mthi %2, $ac1 \t\n" | ||
|  |         "mtlo %3, $ac1 \t\n" | ||
|  |         "dmadd $ac1, %4, %5\t\n" | ||
|  |         "mfhi %0, $ac1 \t\n" | ||
|  |         "mflo %1, $ac1 \t\n" | ||
|  |         : "=r"(acho), "=r"(aclo) | ||
|  |         : "r"(achi), "r"(acli), "r"(rs), "r"(rt) | ||
|  |       ); | ||
|  |     if ((acho != resh) || (aclo != resl)) { | ||
|  |         printf("1 dmadd error\n"); | ||
|  | 
 | ||
|  |         return -1; | ||
|  |     } | ||
|  | 
 | ||
|  |     achi = 0x1; | ||
|  |     acli = 0x1; | ||
|  | 
 | ||
|  |     rs = 0xaaaabbbbccccdddd; | ||
|  |     rt = 0xaaaabbbbccccdddd; | ||
|  | 
 | ||
|  |     resh = 0x0000000000000000; | ||
|  |     resl = 0xffffffffca860b63; | ||
|  | 
 | ||
|  |     __asm | ||
|  |        ("mthi %2, $ac1 \t\n" | ||
|  |         "mtlo %3, $ac1 \t\n" | ||
|  |         "dmadd $ac1, %4, %5\t\n" | ||
|  |         "mfhi %0, $ac1 \t\n" | ||
|  |         "mflo %1, $ac1 \t\n" | ||
|  |         : "=r"(acho), "=r"(aclo) | ||
|  |         : "r"(achi), "r"(acli), "r"(rs), "r"(rt) | ||
|  |       ); | ||
|  |     if ((acho != resh) || (aclo != resl)) { | ||
|  |         printf("2 dmadd error\n"); | ||
|  | 
 | ||
|  |         return -1; | ||
|  |     } | ||
|  |     return 0; | ||
|  | } |