target-mips: Add ASE DSP testcases

Add MIPS ASE DSP testcases.

Signed-off-by: Jia Liu <proljc@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
Jia Liu
2012-10-31 21:37:21 +01:00
committed by Aurelien Jarno
parent af13ae03f8
commit d70080c4e3
487 changed files with 19151 additions and 0 deletions
+136
View File
@@ -0,0 +1,136 @@
-include ../../config-host.mak
CROSS=mips64el-unknown-linux-gnu-
SIM=qemu-mipsel
SIM_FLAGS=-cpu 74Kf
CC = $(CROSS)gcc
CFLAGS = -mabi=32 -march=mips32r2 -mgp32 -mdsp -static
TESTCASES = absq_s_ph.tst
TESTCASES += absq_s_w.tst
TESTCASES += addq_ph.tst
TESTCASES += addq_s_ph.tst
TESTCASES += addq_s_w.tst
TESTCASES += addsc.tst
TESTCASES += addu_qb.tst
TESTCASES += addu_s_qb.tst
TESTCASES += addwc.tst
TESTCASES += bitrev.tst
TESTCASES += bposge32.tst
TESTCASES += cmp_eq_ph.tst
TESTCASES += cmpgu_eq_qb.tst
TESTCASES += cmpgu_le_qb.tst
TESTCASES += cmpgu_lt_qb.tst
TESTCASES += cmp_le_ph.tst
TESTCASES += cmp_lt_ph.tst
TESTCASES += cmpu_eq_qb.tst
TESTCASES += cmpu_le_qb.tst
TESTCASES += cmpu_lt_qb.tst
TESTCASES += dpaq_sa_l_w.tst
TESTCASES += dpaq_s_w_ph.tst
TESTCASES += dpau_h_qbl.tst
TESTCASES += dpau_h_qbr.tst
TESTCASES += dpsq_sa_l_w.tst
TESTCASES += dpsq_s_w_ph.tst
TESTCASES += dpsu_h_qbl.tst
TESTCASES += dpsu_h_qbr.tst
TESTCASES += extp.tst
TESTCASES += extpdp.tst
TESTCASES += extpdpv.tst
TESTCASES += extpv.tst
TESTCASES += extr_rs_w.tst
TESTCASES += extr_r_w.tst
TESTCASES += extr_s_h.tst
TESTCASES += extrv_rs_w.tst
TESTCASES += extrv_r_w.tst
TESTCASES += extrv_s_h.tst
TESTCASES += extrv_w.tst
TESTCASES += extr_w.tst
TESTCASES += insv.tst
TESTCASES += lbux.tst
TESTCASES += lhx.tst
TESTCASES += lwx.tst
TESTCASES += madd.tst
TESTCASES += maddu.tst
TESTCASES += maq_sa_w_phl.tst
TESTCASES += maq_sa_w_phr.tst
TESTCASES += maq_s_w_phl.tst
TESTCASES += maq_s_w_phr.tst
TESTCASES += mfhi.tst
TESTCASES += mflo.tst
TESTCASES += modsub.tst
TESTCASES += msub.tst
TESTCASES += msubu.tst
TESTCASES += mthi.tst
TESTCASES += mthlip.tst
TESTCASES += mtlo.tst
TESTCASES += muleq_s_w_phl.tst
TESTCASES += muleq_s_w_phr.tst
TESTCASES += muleu_s_ph_qbl.tst
TESTCASES += muleu_s_ph_qbr.tst
TESTCASES += mulq_rs_ph.tst
TESTCASES += mult.tst
TESTCASES += multu.tst
TESTCASES += packrl_ph.tst
TESTCASES += pick_ph.tst
TESTCASES += pick_qb.tst
TESTCASES += precequ_ph_qbla.tst
TESTCASES += precequ_ph_qbl.tst
TESTCASES += precequ_ph_qbra.tst
TESTCASES += precequ_ph_qbr.tst
TESTCASES += preceq_w_phl.tst
TESTCASES += preceq_w_phr.tst
TESTCASES += preceu_ph_qbla.tst
TESTCASES += preceu_ph_qbl.tst
TESTCASES += preceu_ph_qbra.tst
TESTCASES += preceu_ph_qbr.tst
TESTCASES += precrq_ph_w.tst
TESTCASES += precrq_qb_ph.tst
TESTCASES += precrq_rs_ph_w.tst
TESTCASES += precrqu_s_qb_ph.tst
TESTCASES += raddu_w_qb.tst
TESTCASES += rddsp.tst
TESTCASES += repl_ph.tst
TESTCASES += repl_qb.tst
TESTCASES += replv_ph.tst
TESTCASES += replv_qb.tst
TESTCASES += shilo.tst
TESTCASES += shilov.tst
TESTCASES += shll_ph.tst
TESTCASES += shll_qb.tst
TESTCASES += shll_s_ph.tst
TESTCASES += shll_s_w.tst
TESTCASES += shllv_ph.tst
TESTCASES += shllv_qb.tst
TESTCASES += shllv_s_ph.tst
TESTCASES += shllv_s_w.tst
TESTCASES += shra_ph.tst
TESTCASES += shra_r_ph.tst
TESTCASES += shra_r_w.tst
TESTCASES += shrav_ph.tst
TESTCASES += shrav_r_ph.tst
TESTCASES += shrav_r_w.tst
TESTCASES += shrl_qb.tst
TESTCASES += shrlv_qb.tst
TESTCASES += subq_ph.tst
TESTCASES += subq_s_ph.tst
TESTCASES += subq_s_w.tst
TESTCASES += subu_qb.tst
TESTCASES += subu_s_qb.tst
TESTCASES += wrdsp.tst
all: $(TESTCASES)
%.tst: %.c
$(CC) $(CFLAGS) $< -o $@
check: $(TESTCASES)
@for case in $(TESTCASES); do \
echo $(SIM) $(SIM_FLAGS) ./$$case;\
$(SIM) $(SIM_FLAGS) ./$$case; \
done
clean:
$(RM) -rf $(TESTCASES)
+31
View File
@@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x10017EFD;
result = 0x10017EFD;
__asm
("absq_s.ph %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
rt = 0x8000A536;
result = 0x7FFF5ACA;
__asm
("absq_s.ph %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}
+37
View File
@@ -0,0 +1,37 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x80000000;
result = 0x7FFFFFFF;
__asm
("absq_s.w %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
rt = 0x80030000;
result = 0x7FFD0000;
__asm
("absq_s.w %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
rt = 0x31036080;
result = 0x31036080;
__asm
("absq_s.w %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}
+46
View File
@@ -0,0 +1,46 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0xFFFFFFFF;
rt = 0x10101010;
result = 0x100F100F;
__asm
("addq.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x3712847D;
rt = 0x0031AF2D;
result = 0x374333AA;
__asm
("addq.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x7fff847D;
rt = 0x0031AF2D;
result = 0x803033AA;
__asm
("addq.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
return 0;
}
+69
View File
@@ -0,0 +1,69 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0xFFFFFFFF;
rt = 0x10101010;
result = 0x100F100F;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
rs = 0x3712847D;
rt = 0x0031AF2D;
result = 0x37438000;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm
("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
rs = 0x7fff847D;
rt = 0x0031AF2D;
result = 0x7fff8000;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm
("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
rs = 0x8030847D;
rt = 0x8a00AF2D;
result = 0x80008000;
__asm
("addq_s.ph %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(result == rd);
__asm
("rddsp %0\n\t"
: "=r"(dsp)
);
assert(((dsp >> 20) & 0x01) == 1);
return 0;
}
+44
View File
@@ -0,0 +1,44 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rt = 0x10017EFD;
rs = 0x11111111;
result = 0x2112900e;
__asm
("addq_s.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rt = 0x80017EFD;
rs = 0x81111111;
result = 0x80000000;
__asm
("addq_s.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rt = 0x7fffffff;
rs = 0x01111111;
result = 0x7fffffff;
__asm
("addq_s.w %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}
+33
View File
@@ -0,0 +1,33 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x0000000F;
rt = 0x00000001;
result = 0x00000010;
__asm
("addsc %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0xFFFF0FFF;
rt = 0x00010111;
result = 0x00001110;
__asm
("addsc %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 13) & 0x01) == 1);
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x00FF00FF;
rt = 0x00010001;
result = 0x00000000;
__asm
("addu.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x01) == 1);
rs = 0xFFFF1111;
rt = 0x00020001;
result = 0xFF011112;
__asm
("addu.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x01) == 1);
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dsp;
int result;
rs = 0x10FF01FF;
rt = 0x10010001;
result = 0x20FF01FF;
__asm
("addu_s.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x1) == 1);
rs = 0xFFFF1111;
rt = 0x00020001;
result = 0xFFFF1112;
__asm
("addu_s.qb %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)
);
assert(rd == result);
assert(((dsp >> 20) & 0x1) == 1);
return 0;
}
+49
View File
@@ -0,0 +1,49 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int dspi, dspo;
int result;
rs = 0x10FF01FF;
rt = 0x10010001;
dspi = 0x00002000;
result = 0x21000201;
__asm
("wrdsp %3\n"
"addwc %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dspi)
);
assert(rd == result);
rs = 0xFFFF1111;
rt = 0x00020001;
dspi = 0x00;
result = 0x00011112;
__asm
("wrdsp %3\n"
"addwc %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt), "r"(dspi)
);
assert(rd == result);
rs = 0x8FFF1111;
rt = 0x80020001;
dspi = 0x00;
result = 0x10011112;
__asm
("wrdsp %4\n"
"addwc %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dspo)
: "r"(rs), "r"(rt), "r"(dspi)
);
assert(rd == result);
assert(((dspo >> 20) & 0x01) == 1);
return 0;
}
+20
View File
@@ -0,0 +1,20 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rt;
int result;
rt = 0x12345678;
result = 0x00001E6A;
__asm
("bitrev %0, %1\n\t"
: "=r"(rd)
: "r"(rt)
);
assert(rd == result);
return 0;
}
+44
View File
@@ -0,0 +1,44 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int dsp, sum;
int result;
dsp = 0x20;
sum = 0x01;
result = 0x02;
__asm
("wrdsp %1\n\t"
"bposge32 test1\n\t"
"nop\n\t"
"addi %0, 0xA2\n\t"
"nop\n\t"
"test1:\n\t"
"addi %0, 0x01\n\t"
: "+r"(sum)
: "r"(dsp)
);
assert(sum == result);
dsp = 0x10;
sum = 0x01;
result = 0xA4;
__asm
("wrdsp %1\n\t"
"bposge32 test2\n\t"
"nop\n\t"
"addi %0, 0xA2\n\t"
"nop\n\t"
"test2:\n\t"
"addi %0, 0x01\n\t"
: "+r"(sum)
: "r"(dsp)
);
assert(sum == result);
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA33FF;
result = 0x00;
__asm
("cmp.eq.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x03;
__asm
("cmp.eq.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA33FF;
result = 0x02;
__asm
("cmp.le.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x03;
__asm
("cmp.le.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA33FF;
result = 0x02;
__asm
("cmp.lt.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x00;
__asm
("cmp.lt.ph %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
rd = (rd >> 24) & 0x03;
assert(rd == result);
return 0;
}
+31
View File
@@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x02;
__asm
("cmpgu.eq.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x0F;
__asm
("cmpgu.eq.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}
+31
View File
@@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x0F;
__asm
("cmpgu.le.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0x11777066;
rt = 0x11766066;
result = 0x09;
__asm
("cmpgu.le.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}
+31
View File
@@ -0,0 +1,31 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rd, rs, rt;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x0D;
__asm
("cmpgu.lt.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
rs = 0x11777066;
rt = 0x11766066;
result = 0x00;
__asm
("cmpgu.lt.qb %0, %1, %2\n\t"
: "=r"(rd)
: "r"(rs), "r"(rt)
);
assert(rd == result);
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int dsp;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x02;
__asm
("cmpu.eq.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x0F;
__asm
("cmpu.eq.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int dsp;
int result;
rs = 0x11777066;
rt = 0x55AA70FF;
result = 0x0F;
__asm
("cmpu.le.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
rs = 0x11777066;
rt = 0x11777066;
result = 0x0F;
__asm
("cmpu.le.qb %1, %2\n\t"
"rddsp %0\n\t"
: "=r"(dsp)
: "r"(rs), "r"(rt)
);
dsp = (dsp >> 24) & 0x0F;
assert(dsp == result);
return 0;
}

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