1#include<stdio.h> 2#include<assert.h> 3 4int main() 5{ 6 int rt, ach, acl, dsp; 7 int result; 8 9 ach = 0x05; 10 acl = 0xB4CB; 11 dsp = 0x07; 12 result = 0x000C; 13 14 __asm 15 ("wrdsp %1, 0x01\n\t" 16 "mthi %2, $ac1\n\t" 17 "mtlo %3, $ac1\n\t" 18 "extp %0, $ac1, 0x03\n\t" 19 "rddsp %1\n\t" 20 : "=r"(rt), "+r"(dsp) 21 : "r"(ach), "r"(acl) 22 ); 23 dsp = (dsp >> 14) & 0x01; 24 assert(dsp == 0); 25 assert(result == rt); 26 27 ach = 0x05; 28 acl = 0xB4CB; 29 dsp = 0x01; 30 31 __asm 32 ("wrdsp %1, 0x01\n\t" 33 "mthi %2, $ac1\n\t" 34 "mtlo %3, $ac1\n\t" 35 "extp %0, $ac1, 0x03\n\t" 36 "rddsp %1\n\t" 37 : "=r"(rt), "+r"(dsp) 38 : "r"(ach), "r"(acl) 39 ); 40 dsp = (dsp >> 14) & 0x01; 41 assert(dsp == 1); 42 43 ach = 0; 44 acl = 0x80000001; 45 dsp = 0x1F; 46 result = 0x80000001; 47 48 __asm 49 ("wrdsp %1\n\t" 50 "mthi %2, $ac2\n\t" 51 "mtlo %3, $ac2\n\t" 52 "extp %0, $ac2, 0x1F\n\t" 53 "rddsp %1\n\t" 54 : "=r"(rt), "+r"(dsp) 55 : "r"(ach), "r"(acl) 56 ); 57 dsp = (dsp >> 14) & 0x01; 58 assert(dsp == 0); 59 assert(result == rt); 60 61 return 0; 62} 63