qemu/tests/tcg/mips/mips64-dspr2/dpsqx_sa_w_ph.c
<<
>>
Prefs
   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