1#include<stdio.h> 2#include<assert.h> 3 4int main() 5{ 6 int rs, rt, dsp; 7 int ach, acl; 8 int resulth, resultl, resultdsp; 9 10 ach = 0x00000005; 11 acl = 0x00000005; 12 rs = 0x00FF00FF; 13 rt = 0x00010002; 14 resulth = 0x00; 15 resultl = 0x7FFFFFFF; 16 resultdsp = 0x01; 17 dsp = 0; 18 __asm 19 ("wrdsp %2\n\t" 20 "mthi %0, $ac1\n\t" 21 "mtlo %1, $ac1\n\t" 22 "dpaqx_sa.w.ph $ac1, %3, %4\n\t" 23 "mfhi %0, $ac1\n\t" 24 "mflo %1, $ac1\n\t" 25 "rddsp %2\n\t" 26 : "+r"(ach), "+r"(acl), "+r"(dsp) 27 : "r"(rs), "r"(rt) 28 ); 29 assert(dsp >> (16 + 1) == resultdsp); 30 assert(ach == resulth); 31 assert(acl == resultl); 32 33 ach = 0x00000009; 34 acl = 0x0000000B; 35 rs = 0x800000FF; 36 rt = 0x00018000; 37 resulth = 0x00; 38 resultl = 0x7FFFFFFF; 39 resultdsp = 0x01; 40 dsp = 0; 41 __asm 42 ("wrdsp %2\n\t" 43 "mthi %0, $ac1\n\t" 44 "mtlo %1, $ac1\n\t" 45 "dpaqx_sa.w.ph $ac1, %3, %4\n\t" 46 "mfhi %0, $ac1\n\t" 47 "mflo %1, $ac1\n\t" 48 "rddsp %2\n\t" 49 : "+r"(ach), "+r"(acl), "+r"(dsp) 50 : "r"(rs), "r"(rt) 51 ); 52 assert(dsp >> (16 + 1) == resultdsp); 53 assert(ach == resulth); 54 assert(acl == resultl); 55 56 return 0; 57} 58