tests: tcg: mips: Move source files to new locations

MIPS TCG test will be organized by ISAs and ASEs in future.

Reviewed-by: Aleksandar Rikalo <arikalo@wavecomp.com>
Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
This commit is contained in:
Aleksandar Markovic 2019-01-22 16:53:00 +01:00
parent b304981f52
commit 073d9f2ce0
168 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x10017EFD;
result = 0x10017EFD;
__asm
("absq_s.ph %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
rt = 0x8000A536;
result = 0x7FFF5ACA;
__asm
("absq_s.ph %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,37 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x80000000;
result = 0x7FFFFFFF;
__asm
("absq_s.w %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
rt = 0x80030000;
result = 0x7FFD0000;
__asm
("absq_s.w %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
rt = 0x31036080;
result = 0x31036080;
__asm
("absq_s.w %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,46 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0xFFFFFFFF;
rt = 0x10101010;
result = 0x100F100F;
__asm
("addq.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x3712847D;
rt = 0x0031AF2D;
result = 0x374333AA;
__asm
("addq.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x7fff847D;
rt = 0x0031AF2D;
result = 0x803033AA;
__asm
("addq.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
return 0;
}

View file

@ -0,0 +1,69 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0xFFFFFFFF;
rt = 0x10101010;
result = 0x100F100F;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x3712847D;
rt = 0x0031AF2D;
result = 0x37438000;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm
("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
rs = 0x7fff847D;
rt = 0x0031AF2D;
result = 0x7fff8000;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm
("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
rs = 0x8030847D;
rt = 0x8a00AF2D;
result = 0x80008000;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm
("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
return 0;
}

View file

@ -0,0 +1,44 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rt = 0x10017EFD;
rs = 0x11111111;
result = 0x2112900e;
__asm
("addq_s.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rt = 0x80017EFD;
rs = 0x81111111;
result = 0x80000000;
__asm
("addq_s.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rt = 0x7fffffff;
rs = 0x01111111;
result = 0x7fffffff;
__asm
("addq_s.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,33 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x0000000F;
rt = 0x00000001;
result = 0x00000010;
__asm
("addsc %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0xFFFF0FFF;
rt = 0x00010111;
result = 0x00001110;
__asm
("addsc %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 13) & 0x01) == 1);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x00FF00FF;
rt = 0x00010001;
result = 0x00000000;
__asm
("addu.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x01) == 1);
rs = 0xFFFF1111;
rt = 0x00020001;
result = 0xFF011112;
__asm
("addu.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x01) == 1);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x10FF01FF;
rt = 0x10010001;
result = 0x20FF01FF;
__asm
("addu_s.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x1) == 1);
rs = 0xFFFF1111;
rt = 0x00020001;
result = 0xFFFF1112;
__asm
("addu_s.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x1) == 1);
return 0;
}

View file

@ -0,0 +1,49 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dspi, dspo;
int result;
rs = 0x10FF01FF;
rt = 0x10010001;
dspi = 0x00002000;
result = 0x21000201;
__asm
("wrdsp %3\n"
"addwc %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dspi)
);
assert(rd == result);
rs = 0xFFFF1111;
rt = 0x00020001;
dspi = 0x00;
result = 0x00011112;
__asm
("wrdsp %3\n"
"addwc %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dspi)
);
assert(rd == result);
rs = 0x8FFF1111;
rt = 0x80020001;
dspi = 0x00;
result = 0x10011112;
__asm
("wrdsp %4\n"
"addwc %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dspo)
: "r"(rs), "r"(rt), "r"(dspi)
);
assert(rd == result);
assert(((dspo >> 20) & 0x01) == 1);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x12345678;
result = 0x00001E6A;
__asm
("bitrev %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,44 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int dsp, sum;
int result;
dsp = 0x20;
sum = 0x01;
result = 0x02;
__asm
("wrdsp %1\n\t"
"bposge32 test1\n\t"
"nop\n\t"
"addi %0, 0xA2\n\t"
"nop\n\t"
"test1:\n\t"
"addi %0, 0x01\n\t"
: "+r"(sum)
: "r"(dsp)
);
assert(sum == result);
dsp = 0x10;
sum = 0x01;
result = 0xA4;
__asm
("wrdsp %1\n\t"
"bposge32 test2\n\t"
"nop\n\t"
"addi %0, 0xA2\n\t"
"nop\n\t"
"test2:\n\t"
"addi %0, 0x01\n\t"
: "+r"(sum)
: "r"(dsp)
);
assert(sum == result);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA33FF;
result = 0x00;
__asm
("cmp.eq.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x03;
__asm
("cmp.eq.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA33FF;
result = 0x02;
__asm
("cmp.le.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x03;
__asm
("cmp.le.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA33FF;
result = 0x02;
__asm
("cmp.lt.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x00;
__asm
("cmp.lt.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x02;
__asm
("cmpgu.eq.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x0F;
__asm
("cmpgu.eq.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x0F;
__asm
("cmpgu.le.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0x11777066;
rt = 0x11766066;
result = 0x09;
__asm
("cmpgu.le.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x0D;
__asm
("cmpgu.lt.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0x11777066;
rt = 0x11766066;
result = 0x00;
__asm
("cmpgu.lt.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int dsp;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x02;
__asm
("cmpu.eq.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x0F;
__asm
("cmpu.eq.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int dsp;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x0F;
__asm
("cmpu.le.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x0F;
__asm
("cmpu.le.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
return 0;
}

View file

@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int dsp;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x0D;
__asm
("cmpu.lt.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x00;
__asm
("cmpu.lt.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
return 0;
}

View file

@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt, dsp;
int ach = 0, acl = 0;
int resulth, resultl, resultdsp;
rs = 0x800000FF;
rt = 0x80000002;
resulth = 0x00;
resultl = 0x800003FB;
resultdsp = 0x01;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpaq_s.w.ph $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = dsp >> 17 & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,125 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt, dsp;
int ach = 0, acl = 0;
int resulth, resultl, resultdsp;
rs = 0x80000000;
rt = 0x80000000;
resulth = 0x7FFFFFFF;
resultl = 0xFFFFFFFF;
resultdsp = 0x01;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpaq_sa.l.w $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 17) & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
ach = 0x00000012;
acl = 0x00000048;
rs = 0x80000000;
rt = 0x80000000;
resulth = 0x7FFFFFFF;
resultl = 0xFFFFFFFF;
resultdsp = 0x01;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpaq_sa.l.w $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 17) & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
ach = 0x741532A0;
acl = 0xFCEABB08;
rs = 0x80000000;
rt = 0x80000000;
resulth = 0x7FFFFFFF;
resultl = 0xFFFFFFFF;
resultdsp = 0x01;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpaq_sa.l.w $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 17) & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
ach = 0;
acl = 0;
rs = 0xC0000000;
rt = 0x7FFFFFFF;
resulth = 0xC0000000;
resultl = 0x80000000;
resultdsp = 0;
__asm
("wrdsp $0\n\t"
"mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpaq_sa.l.w $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 17) & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
ach = 0x20000000;
acl = 0;
rs = 0xE0000000;
rt = 0x7FFFFFFF;
resulth = 0;
resultl = 0x40000000;
resultdsp = 0;
__asm
("wrdsp $0\n\t"
"mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpaq_sa.l.w $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 17) & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,27 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int ach = 5, acl = 3;
int resulth, resultl;
rs = 0x800000FF;
rt = 0x80000002;
resulth = 0x05;
resultl = 0x4003;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpau.h.qbl $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,27 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int ach = 5, acl = 3;
int resulth, resultl;
rs = 0x800000FF;
rt = 0x80000002;
resulth = 0x05;
resultl = 0x0201;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpau.h.qbr $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,45 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int ach = 5, acl = 5;
int resulth, resultl;
rs = 0xBC0123AD;
rt = 0x01643721;
resulth = 0x00000004;
resultl = 0xF15F94A3;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpsq_s.w.ph $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
ach = 0x1424EF1F;
acl = 0x1035219A;
rs = 0x800083AD;
rt = 0x80003721;
resulth = 0x1424EF1E;
resultl = 0xC5C0D901;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpsq_s.w.ph $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt, dsp;
int ach = 5, acl = 5;
int resulth, resultl, resultdsp;
rs = 0xBC0123AD;
rt = 0x01643721;
resulth = 0x00BD3A22;
resultl = 0xD138776B;
resultdsp = 0x00;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpsq_sa.l.w $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 17) & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
ach = 0x54321123;
acl = 5;
rs = 0x80000000;
rt = 0x80000000;
resulth = 0xd4321123;
resultl = 0x06;
resultdsp = 0x01;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpsq_sa.l.w $ac1, %3, %4\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "+r"(ach), "+r"(acl), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 17) & 0x01;
assert(dsp == resultdsp);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,27 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int ach = 5, acl = 5;
int resulth, resultl;
rs = 0xBC0123AD;
rt = 0x01643721;
resulth = 0x04;
resultl = 0xFFFFFEE5;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpsu.h.qbl $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,27 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int ach = 5, acl = 5;
int resulth, resultl;
rs = 0xBC0123AD;
rt = 0x01643721;
resulth = 0x04;
resultl = 0xFFFFE233;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"dpsu.h.qbr $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,62 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
dsp = 0x07;
result = 0x000C;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extp %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 14) & 0x01;
assert(dsp == 0);
assert(result == rt);
ach = 0x05;
acl = 0xB4CB;
dsp = 0x01;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extp %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 14) & 0x01;
assert(dsp == 1);
ach = 0;
acl = 0x80000001;
dsp = 0x1F;
result = 0x80000001;
__asm
("wrdsp %1\n\t"
"mthi %2, $ac2\n\t"
"mtlo %3, $ac2\n\t"
"extp %0, $ac2, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 14) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,64 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, ach, acl, dsp, pos, efi;
int result;
ach = 0x05;
acl = 0xB4CB;
dsp = 0x07;
result = 0x000C;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extpdp %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl)
);
pos = dsp & 0x3F;
efi = (dsp >> 14) & 0x01;
assert(pos == 3);
assert(efi == 0);
assert(result == rt);
ach = 0x05;
acl = 0xB4CB;
dsp = 0x01;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extpdp %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl)
);
efi = (dsp >> 14) & 0x01;
assert(efi == 1);
ach = 0;
acl = 0;
dsp = 0;
result = 0;
__asm
("wrdsp %1\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extpdp %0, $ac1, 0x00\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl)
);
assert(dsp == 0x3F);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,47 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs, ach, acl, dsp, pos, efi;
int result;
ach = 0x05;
acl = 0xB4CB;
dsp = 0x07;
rs = 0x03;
result = 0x000C;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extpdpv %0, $ac1, %4\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl), "r"(rs)
);
pos = dsp & 0x3F;
efi = (dsp >> 14) & 0x01;
assert(pos == 3);
assert(efi == 0);
assert(result == rt);
ach = 0x05;
acl = 0xB4CB;
dsp = 0x01;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extpdpv %0, $ac1, %4\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl), "r"(rs)
);
efi = (dsp >> 14) & 0x01;
assert(efi == 1);
return 0;
}

View file

@ -0,0 +1,45 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, ac, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
dsp = 0x07;
ac = 0x03;
result = 0x000C;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extpv %0, $ac1, %4\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl), "r"(ac)
);
dsp = (dsp >> 14) & 0x01;
assert(dsp == 0);
assert(result == rt);
ach = 0x05;
acl = 0xB4CB;
dsp = 0x01;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extpv %0, $ac1, %4\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(ach), "r"(acl), "r"(ac)
);
dsp = (dsp >> 14) & 0x01;
assert(dsp == 1);
return 0;
}

View file

@ -0,0 +1,94 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
result = 0xA0001699;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_r.w %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x01;
acl = 0xB4CB;
result = 0x10000B4D;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_r.w %0, $ac1, 0x04\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x3fffffff;
acl = 0x2bcdef01;
result = 0x7ffffffe;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_r.w %0, $ac1, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0xFFFFFFFF;
acl = 0xFFFFFFFF;
result = 0;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_r.w %0, $ac1, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,117 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
result = 0x7FFFFFFF;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_rs.w %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x01;
acl = 0xB4CB;
result = 0x10000B4D;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_rs.w %0, $ac1, 0x04\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x3fffffff;
acl = 0x2bcdef01;
result = 0x7ffffffe;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_rs.w %0, $ac1, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x80000000;
acl = 0x00000000;
result = 0x80000000;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_rs.w %0, $ac1, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0xFFFFFFFF;
acl = 0xFFFFFFFF;
result = 0;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_rs.w %0, $ac1, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,86 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
result = 0x00007FFF;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_s.h %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
ach = 0xffffffff;
acl = 0x12344321;
result = 0xFFFF8000;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_s.h %0, $ac1, 0x08\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dsp */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x00;
acl = 0x4321;
result = 0x432;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_s.h %0, $ac1, 0x04\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dsp */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x123;
acl = 0x87654321;
result = 0x1238;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr_s.h %0, $ac1, 28\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,94 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
result = 0xA0001699;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr.w %0, $ac1, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x01;
acl = 0xB4CB;
result = 0x10000B4C;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr.w %0, $ac1, 0x04\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0x3fffffff;
acl = 0x2bcdef01;
result = 0x7ffffffe;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr.w %0, $ac1, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
ach = 0xFFFFFFFF;
acl = 0xFFFFFFFF;
result = 0xFFFFFFFF;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"extr.w %0, $ac1, 0x1F\n\t"
"rddsp %1\n\t"
: "=r"(rt), "=r"(dsp)
: "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,79 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
dsp = 0x07;
rs = 0x03;
result = 0xA0001699;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_r.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
rs = 4;
ach = 0x01;
acl = 0xB4CB;
result = 0x10000B4D;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_r.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
rs = 31;
ach = 0x3fffffff;
acl = 0x2bcdef01;
result = 0x7ffffffe;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_r.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,77 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs, ach, acl, dsp;
int result;
rs = 0x03;
ach = 0x05;
acl = 0xB4CB;
result = 0x7FFFFFFF;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_rs.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
rs = 0x04;
ach = 0x01;
acl = 0xB4CB;
result = 0x10000B4D;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_rs.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
rs = 0x1F;
ach = 0x3fffffff;
acl = 0x2bcdef01;
result = 0x7ffffffe;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_rs.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,88 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
dsp = 0x07;
rs = 0x03;
result = 0x00007FFF;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_s.h %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
rs = 0x08;
ach = 0xffffffff;
acl = 0x12344321;
result = 0xFFFF8000;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_s.h %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dsp */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
rs = 0x04;
ach = 0x00;
acl = 0x4321;
result = 0x432;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_s.h %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
rs = 0x1C;
ach = 0x123;
acl = 0x87654321;
result = 0x1238;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv_s.h %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,80 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs, ach, acl, dsp;
int result;
ach = 0x05;
acl = 0xB4CB;
dsp = 0x07;
rs = 0x03;
result = 0xA0001699;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 1);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
rs = 4;
ach = 0x01;
acl = 0xB4CB;
result = 0x10000B4C;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
/* Clear dspcontrol */
dsp = 0;
__asm
("wrdsp %0\n\t"
:
: "r"(dsp)
);
rs = 31;
ach = 0x3fffffff;
acl = 0x2bcdef01;
result = 0x7ffffffe;
__asm
("wrdsp %1, 0x01\n\t"
"mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"extrv.w %0, $ac1, %2\n\t"
"rddsp %1\n\t"
: "=r"(rt), "+r"(dsp)
: "r"(rs), "r"(ach), "r"(acl)
);
dsp = (dsp >> 23) & 0x01;
assert(dsp == 0);
assert(result == rt);
return 0;
}

View file

@ -0,0 +1,36 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs, dsp;
int result;
/* msb = 10, lsb = 5 */
dsp = 0x305;
rt = 0x12345678;
rs = 0x87654321;
result = 0x12345438;
__asm
("wrdsp %2, 0x03\n\t"
"insv %0, %1\n\t"
: "+r"(rt)
: "r"(rs), "r"(dsp)
);
assert(rt == result);
dsp = 0x1000;
rt = 0xF0F0F0F0;
rs = 0xA5A5A5A5;
result = 0xA5A5A5A5;
__asm
("wrdsp %2\n\t"
"insv %0, %1\n\t"
: "+r"(rt)
: "r"(rs), "r"(dsp)
);
assert(rt == result);
return 0;
}

View file

@ -0,0 +1,25 @@
#include <stdio.h>
#include <assert.h>
int main(void)
{
int value, rd;
int *p;
unsigned long addr, index;
int result;
value = 0xBCDEF389;
p = &value;
addr = (unsigned long)p;
index = 0;
result = value & 0xFF;
__asm
("lbux %0, %1(%2)\n\t"
: "=r"(rd)
: "r"(index), "r"(addr)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,25 @@
#include <stdio.h>
#include <assert.h>
int main(void)
{
int value, rd;
int *p;
unsigned long addr, index;
int result;
value = 0xBCDEF389;
p = &value;
addr = (unsigned long)p;
index = 0;
result = 0xFFFFF389;
__asm
("lhx %0, %1(%2)\n\t"
: "=r"(rd)
: "r"(index), "r"(addr)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,25 @@
#include <stdio.h>
#include <assert.h>
int main(void)
{
int value, rd;
int *p;
unsigned long addr, index;
int result;
value = 0xBCDEF389;
p = &value;
addr = (unsigned long)p;
index = 0;
result = 0xBCDEF389;
__asm
("lwx %0, %1(%2)\n\t"
: "=r"(rd)
: "r"(index), "r"(addr)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int acho, aclo;
int resulth, resultl;
achi = 0x05;
acli = 0xB4CB;
rs = 0x01;
rt = 0x01;
resulth = 0x05;
resultl = 0xB4CC;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"madd $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
return 0;
}

View file

@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int acho, aclo;
int resulth, resultl;
achi = 0x05;
acli = 0xB4CB;
rs = 0x01;
rt = 0x01;
resulth = 0x05;
resultl = 0xB4CC;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"madd $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
return 0;
}

View file

@ -0,0 +1,6 @@
#include<stdio.h>
int main()
{
printf("hello world\n");
}

View file

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 0x00000005;
acli = 0x0000B4CB;
rs = 0xFF060000;
rt = 0xCB000000;
resulth = 0x00000005;
resultl = 0x006838CB;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"maq_s.w.phl $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
achi = 0x00000006;
acli = 0x0000B4CB;
rs = 0x80000000;
rt = 0x80000000;
resulth = 0x00000006;
resultl = 0x8000B4CA;
resdsp = 1;
__asm
("mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"maq_s.w.phl $ac1, %5, %6\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "=r"(acho), "=r"(aclo), "=r"(dsp)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
assert(((dsp >> 17) & 0x01) == resdsp);
return 0;
}

View file

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 0x00000005;
acli = 0x0000B4CB;
rs = 0x0000FF06;
rt = 0x0000CB00;
resulth = 0x00000005;
resultl = 0x006838CB;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"maq_s.w.phr $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
achi = 0x00000006;
acli = 0x0000B4CB;
rs = 0x00008000;
rt = 0x00008000;
resulth = 0x00000006;
resultl = 0x8000B4CA;
resdsp = 1;
__asm
("mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"maq_s.w.phr $ac1, %5, %6\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "=r"(acho), "=r"(aclo), "=r"(dsp)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
assert(((dsp >> 17) & 0x01) == resdsp);
return 0;
}

View file

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 0x00000000;
acli = 0x0000B4CB;
rs = 0xFF060000;
rt = 0xCB000000;
resulth = 0x00000000;
resultl = 0x006838CB;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"maq_sa.w.phl $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
achi = 0x00000000;
acli = 0x0000B4CB;
rs = 0x80000000;
rt = 0x80000000;
resulth = 0x00;
resultl = 0x7fffffff;
resdsp = 0x01;
__asm
("mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"maq_sa.w.phl $ac1, %5, %6\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "=r"(acho), "=r"(aclo), "=r"(dsp)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
assert(((dsp >> 17) & 0x01) == 0x01);
return 0;
}

View file

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 0x00000000;
acli = 0x0000B4CB;
rs = 0x0000FF06;
rt = 0x0000CB00;
resulth = 0x00000000;
resultl = 0x006838CB;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"maq_sa.w.phr $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
achi = 0x00000000;
acli = 0x0000B4CB;
rs = 0x00008000;
rt = 0x00008000;
resulth = 0x00000000;
resultl = 0x7FFFFFFF;
resdsp = 0x01;
__asm
("mthi %3, $ac1\n\t"
"mtlo %4, $ac1\n\t"
"maq_sa.w.phr $ac1, %5, %6\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
"rddsp %2\n\t"
: "=r"(acho), "=r"(aclo), "=r"(dsp)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(resulth == acho);
assert(resultl == aclo);
assert(((dsp >> 17) & 0x01) == 0x01);
return 0;
}

View file

@ -0,0 +1,21 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int achi, acho;
int result;
achi = 0x004433;
result = 0x004433;
__asm
("mthi %1, $ac1\n\t"
"mfhi %0, $ac1\n\t"
: "=r"(acho)
: "r"(achi)
);
assert(result == acho);
return 0;
}

View file

@ -0,0 +1,21 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int acli, aclo;
int result;
acli = 0x004433;
result = 0x004433;
__asm
("mthi %1, $ac1\n\t"
"mfhi %0, $ac1\n\t"
: "=r"(aclo)
: "r"(acli)
);
assert(result == aclo);
return 0;
}

View file

@ -0,0 +1,30 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0xFFFFFFFF;
rt = 0x000000FF;
result = 0xFFFFFF00;
__asm
("modsub %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x00000000;
rt = 0x00CD1FFF;
result = 0x0000CD1F;
__asm
("modsub %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,30 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int achi, acli, rs, rt;
int acho, aclo;
int resulth, resultl;
rs = 0x00BBAACC;
rt = 0x0B1C3D2F;
achi = 0x00004433;
acli = 0xFFCC0011;
resulth = 0xFFF81F29;
resultl = 0xB355089D;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"msub $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(acho == resulth);
assert(aclo == resultl);
return 0;
}

View file

@ -0,0 +1,30 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int achi, acli, rs, rt;
int acho, aclo;
int resulth, resultl;
rs = 0x00BBAACC;
rt = 0x0B1C3D2F;
achi = 0x00004433;
acli = 0xFFCC0011;
resulth = 0xFFF81F29;
resultl = 0xB355089D;
__asm
("mthi %2, $ac1\n\t"
"mtlo %3, $ac1\n\t"
"msubu $ac1, %4, %5\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(acho), "=r"(aclo)
: "r"(achi), "r"(acli), "r"(rs), "r"(rt)
);
assert(acho == resulth);
assert(aclo == resultl);
return 0;
}

View file

@ -0,0 +1,21 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int achi, acho;
int result;
achi = 0x004433;
result = 0x004433;
__asm
("mthi %1, $ac1\n\t"
"mfhi %0, $ac1\n\t"
: "=r"(acho)
: "r"(achi)
);
assert(result == acho);
return 0;
}

View file

@ -0,0 +1,58 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, ach, acl, dsp;
int result, resulth, resultl;
dsp = 0x07;
ach = 0x05;
acl = 0xB4CB;
rs = 0x00FFBBAA;
resulth = 0xB4CB;
resultl = 0x00FFBBAA;
result = 0x27;
__asm
("wrdsp %0, 0x01\n\t"
"mthi %1, $ac1\n\t"
"mtlo %2, $ac1\n\t"
"mthlip %3, $ac1\n\t"
"mfhi %1, $ac1\n\t"
"mflo %2, $ac1\n\t"
"rddsp %0\n\t"
: "+r"(dsp), "+r"(ach), "+r"(acl)
: "r"(rs)
);
dsp = dsp & 0x3F;
assert(dsp == result);
assert(ach == resulth);
assert(acl == resultl);
dsp = 0x1f;
ach = 0x05;
acl = 0xB4CB;
rs = 0x00FFBBAA;
resulth = 0xB4CB;
resultl = 0x00FFBBAA;
result = 0x3f;
__asm
("wrdsp %0, 0x01\n\t"
"mthi %1, $ac1\n\t"
"mtlo %2, $ac1\n\t"
"mthlip %3, $ac1\n\t"
"mfhi %1, $ac1\n\t"
"mflo %2, $ac1\n\t"
"rddsp %0\n\t"
: "+r"(dsp), "+r"(ach), "+r"(acl)
: "r"(rs)
);
dsp = dsp & 0x3F;
assert(dsp == result);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,21 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int acli, aclo;
int result;
acli = 0x004433;
result = 0x004433;
__asm
("mthi %1, $ac1\n\t"
"mfhi %0, $ac1\n\t"
: "=r"(aclo)
: "r"(acli)
);
assert(result == aclo);
return 0;
}

View file

@ -0,0 +1,41 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x80001234;
rt = 0x80001234;
result = 0x7FFFFFFF;
resultdsp = 1;
__asm
("muleq_s.w.phl %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
rs = 0x12349988;
rt = 0x43219988;
result = 0x98be968;
resultdsp = 1;
__asm
("muleq_s.w.phl %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
return 0;
}

View file

@ -0,0 +1,40 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x8000;
rt = 0x8000;
result = 0x7FFFFFFF;
resultdsp = 1;
__asm
("muleq_s.w.phr %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
rs = 0x1234;
rt = 0x4321;
result = 0x98be968;
resultdsp = 1;
__asm
("muleq_s.w.phr %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
return 0;
}

View file

@ -0,0 +1,25 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x80001234;
rt = 0x80004321;
result = 0xFFFF0000;
resultdsp = 1;
__asm
("muleu_s.ph.qbl %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
return 0;
}

View file

@ -0,0 +1,25 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x8000;
rt = 0x80004321;
result = 0xFFFF0000;
resultdsp = 1;
__asm
("muleu_s.ph.qbr %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
return 0;
}

View file

@ -0,0 +1,42 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x80001234;
rt = 0x80004321;
result = 0x7FFF098C;
resultdsp = 1;
__asm
("wrdsp $0\n\t"
"mulq_rs.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
rs = 0x80011234;
rt = 0x80024321;
result = 0x7FFD098C;
resultdsp = 0;
__asm
("wrdsp $0\n\t"
"mulq_rs.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 21) & 0x01;
assert(rd == result);
assert(dsp == resultdsp);
return 0;
}

View file

@ -0,0 +1,24 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt, ach, acl;
int result, resulth, resultl;
rs = 0x00FFBBAA;
rt = 0x4B231000;
resulth = 0x4b0f01;
resultl = 0x71f8a000;
__asm
("mult $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(ach), "=r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,24 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt, ach, acl;
int result, resulth, resultl;
rs = 0x00FFBBAA;
rt = 0x4B231000;
resulth = 0x4b0f01;
resultl = 0x71f8a000;
__asm
("multu $ac1, %2, %3\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "=r"(ach), "=r"(acl)
: "r"(rs), "r"(rt)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,21 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x12345678;
rt = 0x87654321;
result = 0x56788765;
__asm
("packrl.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,49 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result;
rs = 0x12345678;
rt = 0x87654321;
dsp = 0x0A000000;
result = 0x12344321;
__asm
("wrdsp %3, 0x10\n\t"
"pick.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dsp)
);
assert(rd == result);
rs = 0x12345678;
rt = 0x87654321;
dsp = 0x03000000;
result = 0x12345678;
__asm
("wrdsp %3, 0x10\n\t"
"pick.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dsp)
);
assert(rd == result);
rs = 0x12345678;
rt = 0x87654321;
dsp = 0x00000000;
result = 0x87654321;
__asm
("wrdsp %3, 0x10\n\t"
"pick.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dsp)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,36 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result;
rs = 0x12345678;
rt = 0x87654321;
dsp = 0x0f000000;
result = 0x12345678;
__asm
("wrdsp %3, 0x10\n\t"
"pick.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dsp)
);
assert(rd == result);
rs = 0x12345678;
rt = 0x87654321;
dsp = 0x00000000;
result = 0x87654321;
__asm
("wrdsp %3, 0x10\n\t"
"pick.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dsp)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x87650000;
__asm
("preceq.w.phl %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x43210000;
__asm
("preceq.w.phr %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x43803280;
__asm
("precequ.ph.qbl %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x43802180;
__asm
("precequ.ph.qbla %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x21801080;
__asm
("precequ.ph.qbr %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x32801080;
__asm
("precequ.ph.qbra %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x00870065;
__asm
("preceu.ph.qbl %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x00870043;
__asm
("preceu.ph.qbla %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x00430021;
__asm
("preceu.ph.qbr %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0x00650021;
__asm
("preceu.ph.qbra %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,21 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x12345678;
rt = 0x87654321;
result = 0x12348765;
__asm
("precrq.ph.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,21 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x12345678;
rt = 0x87654321;
result = 0x12568743;
__asm
("precrq.qb.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,51 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x12345678;
rt = 0x87654321;
result = 0x12348765;
__asm
("wrdsp $0\n\t"
"precrq_rs.ph.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x7FFFC678;
rt = 0x865432A0;
result = 0x7FFF8654;
__asm
("wrdsp $0\n\t"
"precrq_rs.ph.w %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(((dsp >> 22) & 0x01) == 1);
assert(result == rd);
rs = 0xBEEFFEED;
rt = 0x7FFF8000;
result = 0xBEF07FFF;
__asm
("wrdsp $0\n\t"
"precrq_rs.ph.w %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(((dsp >> 22) & 0x01) == 1);
assert(result == rd);
return 0;
}

View file

@ -0,0 +1,24 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x12345678;
rt = 0x87657FFF;
result = 0x24AC00FF;
__asm
("precrqu_s.qb.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(result == rd);
assert(((dsp >> 22) & 0x01) == 0x01);
return 0;
}

View file

@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs;
int result;
rs = 0x12345678;
result = 0x114;
__asm
("raddu.w.qb %0, %1\n\t"
: "=r"(rd)
: "r"(rs)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,46 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int dsp_i, dsp_o;
int ccond_i, outflag_i, efi_i, c_i, scount_i, pos_i;
int ccond_o, outflag_o, efi_o, c_o, scount_o, pos_o;
ccond_i = 0x0000000C; /* 4 */
outflag_i = 0x0000001B; /* 3 */
efi_i = 0x00000001; /* 5 */
c_i = 0x00000001; /* 2 */
scount_i = 0x0000000F; /* 1 */
pos_i = 0x0000000C; /* 0 */
dsp_i = (ccond_i << 24) | \
(outflag_i << 16) | \
(efi_i << 14) | \
(c_i << 13) | \
(scount_i << 7) | \
pos_i;
__asm
("wrdsp %1, 0x3F\n\t"
"rddsp %0, 0x3F\n\t"
: "=r"(dsp_o)
: "r"(dsp_i)
);
ccond_o = (dsp_o >> 24) & 0xFF;
outflag_o = (dsp_o >> 16) & 0xFF;
efi_o = (dsp_o >> 14) & 0x01;
c_o = (dsp_o >> 14) & 0x01;
scount_o = (dsp_o >> 7) & 0x3F;
pos_o = dsp_o & 0x1F;
assert(ccond_o == ccond_i);
assert(outflag_o == outflag_i);
assert(efi_o == efi_i);
assert(c_o == c_i);
assert(scount_o == scount_i);
assert(pos_o == pos_i);
return 0;
}

View file

@ -0,0 +1,23 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, result;
result = 0x01BF01BF;
__asm
("repl.ph %0, 0x1BF\n\t"
: "=r"(rd)
);
assert(rd == result);
result = 0x01FF01FF;
__asm
("repl.ph %0, 0x01FF\n\t"
: "=r"(rd)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,16 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, result;
result = 0xBFBFBFBF;
__asm
("repl.qb %0, 0xBF\n\t"
: "=r"(rd)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,19 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x12345678;
result = 0x56785678;
__asm
("replv.ph %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,19 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x12345678;
result = 0x78787878;
__asm
("replv.qb %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,45 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int ach, acl;
int resulth, resultl;
ach = 0xBBAACCFF;
acl = 0x1C3B001D;
resulth = 0x17755;
resultl = 0x99fe3876;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"shilo $ac1, 0x0F\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
);
assert(ach == resulth);
assert(acl == resultl);
ach = 0x1;
acl = 0x80000000;
resulth = 0x3;
resultl = 0x0;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"shilo $ac1, -1\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,49 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, ach, acl;
int resulth, resultl;
rs = 0x0F;
ach = 0xBBAACCFF;
acl = 0x1C3B001D;
resulth = 0x17755;
resultl = 0x99fe3876;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"shilov $ac1, %2\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs)
);
assert(ach == resulth);
assert(acl == resultl);
rs = 0xffffffff;
ach = 0x1;
acl = 0x80000000;
resulth = 0x3;
resultl = 0x0;
__asm
("mthi %0, $ac1\n\t"
"mtlo %1, $ac1\n\t"
"shilov $ac1, %2\n\t"
"mfhi %0, $ac1\n\t"
"mflo %1, $ac1\n\t"
: "+r"(ach), "+r"(acl)
: "r"(rs)
);
assert(ach == resulth);
assert(acl == resultl);
return 0;
}

View file

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt, dsp;
int result, resultdsp;
rt = 0x12345678;
result = 0xA000C000;
resultdsp = 1;
__asm
("wrdsp $0\n\t"
"shll.ph %0, %2, 0x0B\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rt = 0x7fff8000;
result = 0xfffe0000;
resultdsp = 1;
__asm
("wrdsp $0\n\t"
"shll.ph %0, %2, 0x01\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rt = 0x00000001;
result = 0x00008000;
resultdsp = 1;
__asm
("wrdsp $0\n\t"
"shll.ph %0, %2, 0x0F\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt, dsp;
int result, resultdsp;
rt = 0x87654321;
result = 0x87654321;
resultdsp = 0x00;
__asm
("wrdsp $0\n\t"
"shll.qb %0, %2, 0x00\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rt = 0x87654321;
result = 0x38281808;
resultdsp = 0x01;
__asm
("wrdsp $0\n\t"
"shll.qb %0, %2, 0x03\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rt = 0x00000001;
result = 0x00000080;
resultdsp = 0x00;
__asm
("wrdsp $0\n\t"
"shll.qb %0, %2, 0x07\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,24 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt, dsp;
int result, resultdsp;
rt = 0x12345678;
result = 0x7FFF7FFF;
resultdsp = 0x01;
__asm
("shll_s.ph %0, %2, 0x0B\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,52 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt, dsp;
int result, resultdsp;
rt = 0x82345678;
result = 0x82345678;
resultdsp = 0x00;
__asm
("shll_s.w %0, %2, 0x0\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rt = 0x82345678;
result = 0x80000000;
resultdsp = 0x01;
__asm
("shll_s.w %0, %2, 0x0B\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rt = 0x12345678;
result = 0x7FFFFFFF;
resultdsp = 0x01;
__asm
("shll_s.w %0, %2, 0x0B\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,40 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x0;
rt = 0x12345678;
result = 0x12345678;
resultdsp = 0;
__asm
("shllv.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rs = 0x0B;
rt = 0x12345678;
result = 0xA000C000;
resultdsp = 1;
__asm
("shllv.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,38 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x03;
rt = 0x87654321;
result = 0x38281808;
resultdsp = 0x01;
__asm
("shllv.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(rd == result);
rs = 0x00;
rt = 0x87654321;
result = 0x87654321;
resultdsp = 0x01;
__asm
("shllv.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,40 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x0;
rt = 0x12345678;
result = 0x12345678;
resultdsp = 0x0;
__asm
("shllv_s.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rs = 0x0B;
rt = 0x12345678;
result = 0x7FFF7FFF;
resultdsp = 0x01;
__asm
("shllv_s.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,40 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt, dsp;
int result, resultdsp;
rs = 0x0B;
rt = 0x12345678;
result = 0x7FFFFFFF;
resultdsp = 0x01;
__asm
("shllv_s.w %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
rs = 0x0;
rt = 0x12345678;
result = 0x12345678;
resultdsp = 0x01;
__asm
("shllv_s.w %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rt), "r"(rs)
);
dsp = (dsp >> 22) & 0x01;
assert(dsp == resultdsp);
assert(rd == result);
return 0;
}

View file

@ -0,0 +1,30 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x87654321;
result = 0xF0EC0864;
__asm
("shra.ph %0, %1, 0x03\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
rt = 0x87654321;
result = 0x87654321;
__asm
("shra.ph %0, %1, 0x00\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}

Some files were not shown because too many files have changed in this diff Show more