1#include "io.h" 2 3int main(void) 4{ 5 long long rs, rt, dsp; 6 long long ach = 5, acl = 5; 7 long long resulth, resultl, resultdsp; 8 9 rs = 0xBC0123AD; 10 rt = 0x01643721; 11 12 resulth = 0xfffffffffdf4cbe0; 13 resultl = 0xFFFFFFFFd138776b; 14 resultdsp = 0x00; 15 __asm 16 ("mthi %0, $ac1\n\t" 17 "mtlo %1, $ac1\n\t" 18 "dpsq_sa.l.w $ac1, %3, %4\n\t" 19 "mfhi %0, $ac1\n\t" 20 "mflo %1, $ac1\n\t" 21 "rddsp %2\n\t" 22 : "+r"(ach), "+r"(acl), "=r"(dsp) 23 : "r"(rs), "r"(rt) 24 ); 25 dsp = (dsp >> 17) & 0x01; 26 if ((dsp != resultdsp) || (ach != resulth) || (acl != resultl)) { 27 printf("1 dpsq_sa.l.w wrong\n"); 28 29 return -1; 30 } 31 32 ach = 0x54321123; 33 acl = 5; 34 rs = 0x80000000; 35 rt = 0x80000000; 36 37 resulth = 0xffffffffd4321123; 38 resultl = 0x06; 39 resultdsp = 0x01; 40 41 __asm 42 ("mthi %0, $ac1\n\t" 43 "mtlo %1, $ac1\n\t" 44 "dpsq_sa.l.w $ac1, %3, %4\n\t" 45 "mfhi %0, $ac1\n\t" 46 "mflo %1, $ac1\n\t" 47 "rddsp %2\n\t" 48 : "+r"(ach), "+r"(acl), "=r"(dsp) 49 : "r"(rs), "r"(rt) 50 ); 51 dsp = (dsp >> 17) & 0x01; 52 if ((dsp != resultdsp) || (ach != resulth) || (acl != resultl)) { 53 printf("2 dpsq_sa.l.w wrong\n"); 54 55 return -1; 56 } 57 58 return 0; 59} 60