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