qemu/tests/tcg/mips/mips64-dsp/mulsaq_s_l_pw.c
<<
>>
Prefs
   1#include "io.h"
   2
   3int main(void)
   4{
   5    long long rs, rt, dsp;
   6    long long achi, acli;
   7    long long acho, aclo;
   8    long long resl, resh;
   9
  10    achi = 0x4;
  11    acli = 0x4;
  12
  13    rs = 0x1234567887654321;
  14    rt = 0x8765432112345678;
  15
  16    resh = 0x4;
  17    resl = 0x4;
  18    __asm
  19        ("mthi %2, $ac1\n\t"
  20         "mtlo %3, $ac1\n\t"
  21         "mulsaq_s.l.pw $ac1, %4, %5\n\t"
  22         "mfhi %0, $ac1\n\t"
  23         "mflo %1, $ac1\n\t"
  24         : "=r"(acho), "=r"(aclo)
  25         : "r"(achi), "r"(acli), "r"(rs), "r"(rt)
  26        );
  27
  28    if ((acho != resh) || (aclo != resl)) {
  29        printf("1 mulsaq_s.l.pw wrong\n");
  30
  31        return -1;
  32    }
  33
  34    achi = 0x4;
  35    acli = 0x4;
  36
  37    rs = 0x8000000087654321;
  38    rt = 0x8000000012345678;
  39
  40    resh = 0x4;
  41    resl = 0x1e8ee513;
  42    __asm
  43        ("mthi %3, $ac1\n\t"
  44         "mtlo %4, $ac1\n\t"
  45         "mulsaq_s.l.pw $ac1, %5, %6\n\t"
  46         "mfhi %0, $ac1\n\t"
  47         "mflo %1, $ac1\n\t"
  48         "rddsp %2\n\t"
  49         : "=r"(acho), "=r"(aclo), "=r"(dsp)
  50         : "r"(achi), "r"(acli), "r"(rs), "r"(rt)
  51        );
  52    dsp = (dsp >> 17) & 0x1;
  53    if ((dsp != 0x1) || (acho != resh) || (aclo != resl)) {
  54        printf("2 mulsaq_s.l.pw wrong\n");
  55
  56        return -1;
  57    }
  58    return 0;
  59}
  60