1#include "io.h" 2 3int main(void) 4{ 5 long long rt, rs, dsp; 6 long long achi, acli; 7 long long acho, aclo; 8 long long resulth, resultl; 9 10 achi = 0x05; 11 acli = 0x05; 12 13 rs = 0x1234123412340000; 14 rt = 0x9876987698760000; 15 16 resulth = 0x05; 17 resultl = 0x15ae87f5; 18 19 __asm 20 ("mthi %2, $ac1\n\t" 21 "mtlo %3, $ac1\n\t" 22 "maq_s.w.qhlr $ac1, %4, %5\n\t" 23 "mfhi %0, $ac1\n\t" 24 "mflo %1, $ac1\n\t" 25 : "=r"(acho), "=r"(aclo) 26 : "r"(achi), "r"(acli), "r"(rs), "r"(rt) 27 ); 28 29 if ((resulth != acho) || (resultl != aclo)) { 30 printf("1 maq_s.w.qhlr wrong\n"); 31 32 return -1; 33 } 34 35 36 achi = 0x04; 37 acli = 0x06; 38 rs = 0x8000800080000000; 39 rt = 0x8000800080000000; 40 41 resulth = 0x04; 42 resultl = 0xffffffff80000005; 43 44 __asm 45 ("mthi %3, $ac1\n\t" 46 "mtlo %4, $ac1\n\t" 47 "maq_s.w.qhlr $ac1, %5, %6\n\t" 48 "mfhi %0, $ac1\n\t" 49 "mflo %1, $ac1\n\t" 50 "rddsp %2\n\t" 51 : "=r"(acho), "=r"(aclo), "=r"(dsp) 52 : "r"(achi), "r"(acli), "r"(rs), "r"(rt) 53 ); 54 55 dsp = (dsp >> 17) & 0x1; 56 if ((dsp != 0x1) || (resulth != acho) || (resultl != aclo)) { 57 printf("2 maq_s.w.qhlr wrong\n"); 58 59 return -1; 60 } 61 return 0; 62} 63