mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 11:04:58 -06:00
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:
parent
b304981f52
commit
073d9f2ce0
168 changed files with 0 additions and 0 deletions
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_absq_s_ph.c
Normal file
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_absq_s_ph.c
Normal 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;
|
||||
}
|
37
tests/tcg/mips/user/ase/dsp/test_dsp_r1_absq_s_w.c
Normal file
37
tests/tcg/mips/user/ase/dsp/test_dsp_r1_absq_s_w.c
Normal 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;
|
||||
}
|
46
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addq_ph.c
Normal file
46
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addq_ph.c
Normal 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;
|
||||
}
|
69
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addq_s_ph.c
Normal file
69
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addq_s_ph.c
Normal 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;
|
||||
}
|
44
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addq_s_w.c
Normal file
44
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addq_s_w.c
Normal 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;
|
||||
}
|
33
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addsc.c
Normal file
33
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addsc.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addu_qb.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addu_qb.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addu_s_qb.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addu_s_qb.c
Normal 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;
|
||||
}
|
49
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addwc.c
Normal file
49
tests/tcg/mips/user/ase/dsp/test_dsp_r1_addwc.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_bitrev.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_bitrev.c
Normal 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;
|
||||
}
|
44
tests/tcg/mips/user/ase/dsp/test_dsp_r1_bposge32.c
Normal file
44
tests/tcg/mips/user/ase/dsp/test_dsp_r1_bposge32.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmp_eq_ph.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmp_eq_ph.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmp_le_ph.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmp_le_ph.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmp_lt_ph.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmp_lt_ph.c
Normal 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;
|
||||
}
|
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpgu_eq_qb.c
Normal file
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpgu_eq_qb.c
Normal 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;
|
||||
}
|
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpgu_le_qb.c
Normal file
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpgu_le_qb.c
Normal 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;
|
||||
}
|
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpgu_lt_qb.c
Normal file
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpgu_lt_qb.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpu_eq_qb.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpu_eq_qb.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpu_le_qb.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpu_le_qb.c
Normal 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;
|
||||
}
|
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpu_lt_qb.c
Normal file
35
tests/tcg/mips/user/ase/dsp/test_dsp_r1_cmpu_lt_qb.c
Normal 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;
|
||||
}
|
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpaq_s_w_ph.c
Normal file
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpaq_s_w_ph.c
Normal 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;
|
||||
}
|
125
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpaq_sa_l_w.c
Normal file
125
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpaq_sa_l_w.c
Normal 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;
|
||||
}
|
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpau_h_qbl.c
Normal file
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpau_h_qbl.c
Normal 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;
|
||||
}
|
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpau_h_qbr.c
Normal file
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpau_h_qbr.c
Normal 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;
|
||||
}
|
45
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsq_s_w_ph.c
Normal file
45
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsq_s_w_ph.c
Normal 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;
|
||||
}
|
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsq_sa_l_w.c
Normal file
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsq_sa_l_w.c
Normal 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;
|
||||
}
|
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsu_h_qbl.c
Normal file
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsu_h_qbl.c
Normal 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;
|
||||
}
|
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsu_h_qbr.c
Normal file
27
tests/tcg/mips/user/ase/dsp/test_dsp_r1_dpsu_h_qbr.c
Normal 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;
|
||||
}
|
62
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extp.c
Normal file
62
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extp.c
Normal 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;
|
||||
}
|
64
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extpdp.c
Normal file
64
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extpdp.c
Normal 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;
|
||||
}
|
47
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extpdpv.c
Normal file
47
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extpdpv.c
Normal 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;
|
||||
}
|
45
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extpv.c
Normal file
45
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extpv.c
Normal 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;
|
||||
}
|
94
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_r_w.c
Normal file
94
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_r_w.c
Normal 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;
|
||||
}
|
117
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_rs_w.c
Normal file
117
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_rs_w.c
Normal 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;
|
||||
}
|
86
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_s_h.c
Normal file
86
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_s_h.c
Normal 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;
|
||||
}
|
94
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_w.c
Normal file
94
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extr_w.c
Normal 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;
|
||||
}
|
79
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_r_w.c
Normal file
79
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_r_w.c
Normal 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;
|
||||
}
|
77
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_rs_w.c
Normal file
77
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_rs_w.c
Normal 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;
|
||||
}
|
88
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_s_h.c
Normal file
88
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_s_h.c
Normal 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;
|
||||
}
|
80
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_w.c
Normal file
80
tests/tcg/mips/user/ase/dsp/test_dsp_r1_extrv_w.c
Normal 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;
|
||||
}
|
36
tests/tcg/mips/user/ase/dsp/test_dsp_r1_insv.c
Normal file
36
tests/tcg/mips/user/ase/dsp/test_dsp_r1_insv.c
Normal 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;
|
||||
}
|
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_lbux.c
Normal file
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_lbux.c
Normal 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;
|
||||
}
|
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_lhx.c
Normal file
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_lhx.c
Normal 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;
|
||||
}
|
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_lwx.c
Normal file
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_lwx.c
Normal 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;
|
||||
}
|
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_madd.c
Normal file
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_madd.c
Normal 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;
|
||||
}
|
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maddu.c
Normal file
31
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maddu.c
Normal 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;
|
||||
}
|
6
tests/tcg/mips/user/ase/dsp/test_dsp_r1_main.c
Normal file
6
tests/tcg/mips/user/ase/dsp/test_dsp_r1_main.c
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include<stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("hello world\n");
|
||||
}
|
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_s_w_phl.c
Normal file
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_s_w_phl.c
Normal 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;
|
||||
}
|
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_s_w_phr.c
Normal file
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_s_w_phr.c
Normal 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;
|
||||
}
|
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_sa_w_phl.c
Normal file
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_sa_w_phl.c
Normal 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;
|
||||
}
|
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_sa_w_phr.c
Normal file
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_maq_sa_w_phr.c
Normal 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;
|
||||
}
|
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mfhi.c
Normal file
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mfhi.c
Normal 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;
|
||||
}
|
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mflo.c
Normal file
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mflo.c
Normal 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;
|
||||
}
|
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_modsub.c
Normal file
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_modsub.c
Normal 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;
|
||||
}
|
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_msub.c
Normal file
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_msub.c
Normal 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;
|
||||
}
|
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_msubu.c
Normal file
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_msubu.c
Normal 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;
|
||||
}
|
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mthi.c
Normal file
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mthi.c
Normal 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;
|
||||
}
|
58
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mthlip.c
Normal file
58
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mthlip.c
Normal 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;
|
||||
}
|
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mtlo.c
Normal file
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mtlo.c
Normal 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;
|
||||
}
|
41
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleq_s_w_phl.c
Normal file
41
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleq_s_w_phl.c
Normal 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;
|
||||
}
|
||||
|
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleq_s_w_phr.c
Normal file
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleq_s_w_phr.c
Normal 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;
|
||||
}
|
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleu_s_ph_qbl.c
Normal file
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleu_s_ph_qbl.c
Normal 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;
|
||||
}
|
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleu_s_ph_qbr.c
Normal file
25
tests/tcg/mips/user/ase/dsp/test_dsp_r1_muleu_s_ph_qbr.c
Normal 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;
|
||||
}
|
42
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mulq_rs_ph.c
Normal file
42
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mulq_rs_ph.c
Normal 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;
|
||||
}
|
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mult.c
Normal file
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_mult.c
Normal 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;
|
||||
}
|
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_multu.c
Normal file
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_multu.c
Normal 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;
|
||||
}
|
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_packrl_ph.c
Normal file
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_packrl_ph.c
Normal 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;
|
||||
}
|
49
tests/tcg/mips/user/ase/dsp/test_dsp_r1_pick_ph.c
Normal file
49
tests/tcg/mips/user/ase/dsp/test_dsp_r1_pick_ph.c
Normal 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;
|
||||
}
|
36
tests/tcg/mips/user/ase/dsp/test_dsp_r1_pick_qb.c
Normal file
36
tests/tcg/mips/user/ase/dsp/test_dsp_r1_pick_qb.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceq_w_phl.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceq_w_phl.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceq_w_phr.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceq_w_phr.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbl.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbl.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbla.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbla.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbr.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbr.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbra.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precequ_ph_qbra.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbl.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbl.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbla.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbla.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbr.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbr.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbra.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_preceu_ph_qbra.c
Normal 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;
|
||||
}
|
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrq_ph_w.c
Normal file
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrq_ph_w.c
Normal 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;
|
||||
}
|
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrq_qb_ph.c
Normal file
21
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrq_qb_ph.c
Normal 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;
|
||||
}
|
51
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrq_rs_ph_w.c
Normal file
51
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrq_rs_ph_w.c
Normal 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;
|
||||
}
|
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrqu_s_qb_ph.c
Normal file
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_precrqu_s_qb_ph.c
Normal 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;
|
||||
}
|
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_raddu_w_qb.c
Normal file
20
tests/tcg/mips/user/ase/dsp/test_dsp_r1_raddu_w_qb.c
Normal 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;
|
||||
}
|
46
tests/tcg/mips/user/ase/dsp/test_dsp_r1_rddsp.c
Normal file
46
tests/tcg/mips/user/ase/dsp/test_dsp_r1_rddsp.c
Normal 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;
|
||||
}
|
23
tests/tcg/mips/user/ase/dsp/test_dsp_r1_repl_ph.c
Normal file
23
tests/tcg/mips/user/ase/dsp/test_dsp_r1_repl_ph.c
Normal 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;
|
||||
}
|
16
tests/tcg/mips/user/ase/dsp/test_dsp_r1_repl_qb.c
Normal file
16
tests/tcg/mips/user/ase/dsp/test_dsp_r1_repl_qb.c
Normal 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;
|
||||
}
|
19
tests/tcg/mips/user/ase/dsp/test_dsp_r1_replv_ph.c
Normal file
19
tests/tcg/mips/user/ase/dsp/test_dsp_r1_replv_ph.c
Normal 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;
|
||||
}
|
19
tests/tcg/mips/user/ase/dsp/test_dsp_r1_replv_qb.c
Normal file
19
tests/tcg/mips/user/ase/dsp/test_dsp_r1_replv_qb.c
Normal 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;
|
||||
}
|
45
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shilo.c
Normal file
45
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shilo.c
Normal 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;
|
||||
}
|
49
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shilov.c
Normal file
49
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shilov.c
Normal 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;
|
||||
}
|
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_ph.c
Normal file
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_ph.c
Normal 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;
|
||||
}
|
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_qb.c
Normal file
55
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_qb.c
Normal 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;
|
||||
}
|
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_s_ph.c
Normal file
24
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_s_ph.c
Normal 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;
|
||||
}
|
52
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_s_w.c
Normal file
52
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shll_s_w.c
Normal 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;
|
||||
}
|
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_ph.c
Normal file
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_ph.c
Normal 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;
|
||||
}
|
38
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_qb.c
Normal file
38
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_qb.c
Normal 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;
|
||||
}
|
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_s_ph.c
Normal file
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_s_ph.c
Normal 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;
|
||||
}
|
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_s_w.c
Normal file
40
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shllv_s_w.c
Normal 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;
|
||||
}
|
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shra_ph.c
Normal file
30
tests/tcg/mips/user/ase/dsp/test_dsp_r1_shra_ph.c
Normal 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
Loading…
Add table
Add a link
Reference in a new issue