qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

test_dsp_r1_extrv_w.c (1549B)


      1 #include<stdio.h>
      2 #include<assert.h>
      3 
      4 int main()
      5 {
      6     int rt, rs, ach, acl, dsp;
      7     int result;
      8 
      9     ach = 0x05;
     10     acl = 0xB4CB;
     11     dsp = 0x07;
     12     rs  = 0x03;
     13     result = 0xA0001699;
     14 
     15     __asm
     16         ("wrdsp %1, 0x01\n\t"
     17          "mthi %3, $ac1\n\t"
     18          "mtlo %4, $ac1\n\t"
     19          "extrv.w %0, $ac1, %2\n\t"
     20          "rddsp %1\n\t"
     21          : "=r"(rt), "+r"(dsp)
     22          : "r"(rs), "r"(ach), "r"(acl)
     23         );
     24     dsp = (dsp >> 23) & 0x01;
     25     assert(dsp == 1);
     26     assert(result == rt);
     27 
     28     /* Clear dspcontrol */
     29     dsp = 0;
     30     __asm
     31         ("wrdsp %0\n\t"
     32          :
     33          : "r"(dsp)
     34         );
     35 
     36     rs = 4;
     37     ach = 0x01;
     38     acl = 0xB4CB;
     39     result = 0x10000B4C;
     40     __asm
     41         ("wrdsp %1, 0x01\n\t"
     42          "mthi %3, $ac1\n\t"
     43          "mtlo %4, $ac1\n\t"
     44          "extrv.w %0, $ac1, %2\n\t"
     45          "rddsp %1\n\t"
     46          : "=r"(rt), "+r"(dsp)
     47          : "r"(rs), "r"(ach), "r"(acl)
     48         );
     49     dsp = (dsp >> 23) & 0x01;
     50     assert(dsp == 0);
     51     assert(result == rt);
     52 
     53     /* Clear dspcontrol */
     54     dsp = 0;
     55     __asm
     56         ("wrdsp %0\n\t"
     57          :
     58          : "r"(dsp)
     59         );
     60 
     61     rs = 31;
     62     ach = 0x3fffffff;
     63     acl = 0x2bcdef01;
     64     result = 0x7ffffffe;
     65     __asm
     66         ("wrdsp %1, 0x01\n\t"
     67          "mthi %3, $ac1\n\t"
     68          "mtlo %4, $ac1\n\t"
     69          "extrv.w %0, $ac1, %2\n\t"
     70          "rddsp %1\n\t"
     71          : "=r"(rt), "+r"(dsp)
     72          : "r"(rs), "r"(ach), "r"(acl)
     73         );
     74     dsp = (dsp >> 23) & 0x01;
     75     assert(dsp == 0);
     76     assert(result == rt);
     77 
     78 
     79     return 0;
     80 }