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:
parent
af13ae03f8
commit
d70080c4e3
136
tests/tcg/mips/mips32-dsp/Makefile
Normal file
136
tests/tcg/mips/mips32-dsp/Makefile
Normal 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
tests/tcg/mips/mips32-dsp/absq_s_ph.c
Normal file
31
tests/tcg/mips/mips32-dsp/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/mips32-dsp/absq_s_w.c
Normal file
37
tests/tcg/mips/mips32-dsp/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/mips32-dsp/addq_ph.c
Normal file
46
tests/tcg/mips/mips32-dsp/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/mips32-dsp/addq_s_ph.c
Normal file
69
tests/tcg/mips/mips32-dsp/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/mips32-dsp/addq_s_w.c
Normal file
44
tests/tcg/mips/mips32-dsp/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/mips32-dsp/addsc.c
Normal file
33
tests/tcg/mips/mips32-dsp/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/mips32-dsp/addu_qb.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/addu_s_qb.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/addwc.c
Normal file
49
tests/tcg/mips/mips32-dsp/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/mips32-dsp/bitrev.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/bposge32.c
Normal file
44
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmp_eq_ph.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmp_le_ph.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmp_lt_ph.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmpgu_eq_qb.c
Normal file
31
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmpgu_le_qb.c
Normal file
31
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmpgu_lt_qb.c
Normal file
31
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmpu_eq_qb.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmpu_le_qb.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/cmpu_lt_qb.c
Normal file
35
tests/tcg/mips/mips32-dsp/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/mips32-dsp/dpaq_s_w_ph.c
Normal file
31
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
77
tests/tcg/mips/mips32-dsp/dpaq_sa_l_w.c
Normal file
77
tests/tcg/mips/mips32-dsp/dpaq_sa_l_w.c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#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 %0, $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 = 0x12;
|
||||||
|
acl = 0x48;
|
||||||
|
rs = 0x80000000;
|
||||||
|
rt = 0x80000000;
|
||||||
|
|
||||||
|
resulth = 0x7FFFFFFF;
|
||||||
|
resultl = 0xFFFFFFFF;
|
||||||
|
resultdsp = 0x01;
|
||||||
|
__asm
|
||||||
|
("mthi %0, $ac1\n\t"
|
||||||
|
"mtlo %0, $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 %0, $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/mips32-dsp/dpau_h_qbl.c
Normal file
27
tests/tcg/mips/mips32-dsp/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/mips32-dsp/dpau_h_qbr.c
Normal file
27
tests/tcg/mips/mips32-dsp/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/mips32-dsp/dpsq_s_w_ph.c
Normal file
45
tests/tcg/mips/mips32-dsp/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 = 0x04;
|
||||||
|
resultl = 0xEE9794A3;
|
||||||
|
__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 = 0x577ed901;
|
||||||
|
__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/mips32-dsp/dpsq_sa_l_w.c
Normal file
55
tests/tcg/mips/mips32-dsp/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 = 0xfdf4cbe0;
|
||||||
|
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/mips32-dsp/dpsu_h_qbl.c
Normal file
27
tests/tcg/mips/mips32-dsp/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/mips32-dsp/dpsu_h_qbr.c
Normal file
27
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
44
tests/tcg/mips/mips32-dsp/extp.c
Normal file
44
tests/tcg/mips/mips32-dsp/extp.c
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
46
tests/tcg/mips/mips32-dsp/extpdp.c
Normal file
46
tests/tcg/mips/mips32-dsp/extpdp.c
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
47
tests/tcg/mips/mips32-dsp/extpdpv.c
Normal file
47
tests/tcg/mips/mips32-dsp/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/mips32-dsp/extpv.c
Normal file
45
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
48
tests/tcg/mips/mips32-dsp/extr_r_w.c
Normal file
48
tests/tcg/mips/mips32-dsp/extr_r_w.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
48
tests/tcg/mips/mips32-dsp/extr_rs_w.c
Normal file
48
tests/tcg/mips/mips32-dsp/extr_rs_w.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
63
tests/tcg/mips/mips32-dsp/extr_s_h.c
Normal file
63
tests/tcg/mips/mips32-dsp/extr_s_h.c
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
48
tests/tcg/mips/mips32-dsp/extr_w.c
Normal file
48
tests/tcg/mips/mips32-dsp/extr_w.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
54
tests/tcg/mips/mips32-dsp/extrv_r_w.c
Normal file
54
tests/tcg/mips/mips32-dsp/extrv_r_w.c
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
52
tests/tcg/mips/mips32-dsp/extrv_rs_w.c
Normal file
52
tests/tcg/mips/mips32-dsp/extrv_rs_w.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
71
tests/tcg/mips/mips32-dsp/extrv_s_h.c
Normal file
71
tests/tcg/mips/mips32-dsp/extrv_s_h.c
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
54
tests/tcg/mips/mips32-dsp/extrv_w.c
Normal file
54
tests/tcg/mips/mips32-dsp/extrv_w.c
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
23
tests/tcg/mips/mips32-dsp/insv.c
Normal file
23
tests/tcg/mips/mips32-dsp/insv.c
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#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 = 0x12345338;
|
||||||
|
__asm
|
||||||
|
("wrdsp %2, 0x03\n\t"
|
||||||
|
"insv %0, %1\n\t"
|
||||||
|
: "+r"(rt)
|
||||||
|
: "r"(rs), "r"(dsp)
|
||||||
|
);
|
||||||
|
assert(rt == result);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
25
tests/tcg/mips/mips32-dsp/lbux.c
Normal file
25
tests/tcg/mips/mips32-dsp/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/mips32-dsp/lhx.c
Normal file
25
tests/tcg/mips/mips32-dsp/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/mips32-dsp/lwx.c
Normal file
25
tests/tcg/mips/mips32-dsp/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/mips32-dsp/madd.c
Normal file
31
tests/tcg/mips/mips32-dsp/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/mips32-dsp/maddu.c
Normal file
31
tests/tcg/mips/mips32-dsp/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/mips32-dsp/main.c
Normal file
6
tests/tcg/mips/mips32-dsp/main.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
printf("hello world\n");
|
||||||
|
}
|
55
tests/tcg/mips/mips32-dsp/maq_s_w_phl.c
Normal file
55
tests/tcg/mips/mips32-dsp/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 = 0x05;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
rs = 0xFF060000;
|
||||||
|
rt = 0xCB000000;
|
||||||
|
resulth = 0x04;
|
||||||
|
resultl = 0x947438CB;
|
||||||
|
|
||||||
|
__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 = 0x06;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
rs = 0x80000000;
|
||||||
|
rt = 0x80000000;
|
||||||
|
resulth = 0x6;
|
||||||
|
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/mips32-dsp/maq_s_w_phr.c
Normal file
55
tests/tcg/mips/mips32-dsp/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 = 0x05;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
rs = 0xFF06;
|
||||||
|
rt = 0xCB00;
|
||||||
|
resulth = 0x04;
|
||||||
|
resultl = 0x947438CB;
|
||||||
|
|
||||||
|
__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 = 0x06;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
rs = 0x8000;
|
||||||
|
rt = 0x8000;
|
||||||
|
resulth = 0x6;
|
||||||
|
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/mips32-dsp/maq_sa_w_phl.c
Normal file
55
tests/tcg/mips/mips32-dsp/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 = 0x05;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
rs = 0xFF060000;
|
||||||
|
rt = 0xCB000000;
|
||||||
|
resulth = 0x00;
|
||||||
|
resultl = 0x7FFFFFFF;
|
||||||
|
|
||||||
|
__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 = 0x06;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
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/mips32-dsp/maq_sa_w_phr.c
Normal file
55
tests/tcg/mips/mips32-dsp/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 = 0x05;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
rs = 0xFF06;
|
||||||
|
rt = 0xCB00;
|
||||||
|
resulth = 0x00;
|
||||||
|
resultl = 0x7FFFFFFF;
|
||||||
|
|
||||||
|
__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 = 0x06;
|
||||||
|
acli = 0xB4CB;
|
||||||
|
rs = 0x8000;
|
||||||
|
rt = 0x8000;
|
||||||
|
resulth = 0x00;
|
||||||
|
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/mips32-dsp/mfhi.c
Normal file
21
tests/tcg/mips/mips32-dsp/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/mips32-dsp/mflo.c
Normal file
21
tests/tcg/mips/mips32-dsp/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/mips32-dsp/modsub.c
Normal file
30
tests/tcg/mips/mips32-dsp/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/mips32-dsp/msub.c
Normal file
30
tests/tcg/mips/mips32-dsp/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/mips32-dsp/msubu.c
Normal file
30
tests/tcg/mips/mips32-dsp/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/mips32-dsp/mthi.c
Normal file
21
tests/tcg/mips/mips32-dsp/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/mips32-dsp/mthlip.c
Normal file
58
tests/tcg/mips/mips32-dsp/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 = 0x3f;
|
||||||
|
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/mips32-dsp/mtlo.c
Normal file
21
tests/tcg/mips/mips32-dsp/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/mips32-dsp/muleq_s_w_phl.c
Normal file
41
tests/tcg/mips/mips32-dsp/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/mips32-dsp/muleq_s_w_phr.c
Normal file
40
tests/tcg/mips/mips32-dsp/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/mips32-dsp/muleu_s_ph_qbl.c
Normal file
25
tests/tcg/mips/mips32-dsp/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/mips32-dsp/muleu_s_ph_qbr.c
Normal file
25
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
25
tests/tcg/mips/mips32-dsp/mulq_rs_ph.c
Normal file
25
tests/tcg/mips/mips32-dsp/mulq_rs_ph.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 = 0x7FFF098C;
|
||||||
|
resultdsp = 1;
|
||||||
|
|
||||||
|
__asm
|
||||||
|
("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/mips32-dsp/mult.c
Normal file
24
tests/tcg/mips/mips32-dsp/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/mips32-dsp/multu.c
Normal file
24
tests/tcg/mips/mips32-dsp/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/mips32-dsp/packrl_ph.c
Normal file
21
tests/tcg/mips/mips32-dsp/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/mips32-dsp/pick_ph.c
Normal file
49
tests/tcg/mips/mips32-dsp/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/mips32-dsp/pick_qb.c
Normal file
36
tests/tcg/mips/mips32-dsp/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/mips32-dsp/preceq_w_phl.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/preceq_w_phr.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/precequ_ph_qbl.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/precequ_ph_qbla.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/precequ_ph_qbr.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/precequ_ph_qbra.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/preceu_ph_qbl.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/preceu_ph_qbla.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/preceu_ph_qbr.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/preceu_ph_qbra.c
Normal file
20
tests/tcg/mips/mips32-dsp/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/mips32-dsp/precrq_ph_w.c
Normal file
21
tests/tcg/mips/mips32-dsp/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/mips32-dsp/precrq_qb_ph.c
Normal file
21
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
35
tests/tcg/mips/mips32-dsp/precrq_rs_ph_w.c
Normal file
35
tests/tcg/mips/mips32-dsp/precrq_rs_ph_w.c
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<assert.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int rd, rs, rt;
|
||||||
|
int dsp;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
rs = 0x12345678;
|
||||||
|
rt = 0x87654321;
|
||||||
|
result = 0x12348765;
|
||||||
|
|
||||||
|
__asm
|
||||||
|
("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
|
||||||
|
("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/mips32-dsp/precrqu_s_qb_ph.c
Normal file
24
tests/tcg/mips/mips32-dsp/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/mips32-dsp/raddu_w_qb.c
Normal file
20
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
54
tests/tcg/mips/mips32-dsp/rddsp.c
Normal file
54
tests/tcg/mips/mips32-dsp/rddsp.c
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#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;
|
||||||
|
int ccond_r, outflag_r, efi_r, c_r, scount_r, pos_r;
|
||||||
|
|
||||||
|
ccond_i = 0x000000BC;/* 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;
|
||||||
|
|
||||||
|
ccond_r = ccond_i;
|
||||||
|
outflag_r = outflag_i;
|
||||||
|
efi_r = efi_i;
|
||||||
|
c_r = c_i;
|
||||||
|
scount_r = scount_i;
|
||||||
|
pos_r = 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_r);
|
||||||
|
assert(outflag_o == outflag_r);
|
||||||
|
assert(efi_o == efi_r);
|
||||||
|
assert(c_o == c_r);
|
||||||
|
assert(scount_o == scount_r);
|
||||||
|
assert(pos_o == pos_r);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
23
tests/tcg/mips/mips32-dsp/repl_ph.c
Normal file
23
tests/tcg/mips/mips32-dsp/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/mips32-dsp/repl_qb.c
Normal file
16
tests/tcg/mips/mips32-dsp/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/mips32-dsp/replv_ph.c
Normal file
19
tests/tcg/mips/mips32-dsp/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/mips32-dsp/replv_qb.c
Normal file
19
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
27
tests/tcg/mips/mips32-dsp/shilo.c
Normal file
27
tests/tcg/mips/mips32-dsp/shilo.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
29
tests/tcg/mips/mips32-dsp/shilov.c
Normal file
29
tests/tcg/mips/mips32-dsp/shilov.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
24
tests/tcg/mips/mips32-dsp/shll_ph.c
Normal file
24
tests/tcg/mips/mips32-dsp/shll_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 = 0xA000C000;
|
||||||
|
resultdsp = 1;
|
||||||
|
|
||||||
|
__asm
|
||||||
|
("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);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
36
tests/tcg/mips/mips32-dsp/shll_qb.c
Normal file
36
tests/tcg/mips/mips32-dsp/shll_qb.c
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<assert.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int rd, rt, dsp;
|
||||||
|
int result, resultdsp;
|
||||||
|
|
||||||
|
rt = 0x87654321;
|
||||||
|
result = 0x87654321;
|
||||||
|
resultdsp = 0x00;
|
||||||
|
|
||||||
|
__asm
|
||||||
|
("shll.qb %0, %2, 0x00\n\t"
|
||||||
|
"rddsp %1\n\t"
|
||||||
|
: "=r"(rd), "=r"(dsp)
|
||||||
|
: "r"(rt)
|
||||||
|
);
|
||||||
|
dsp = (dsp >> 22) & 0x01;
|
||||||
|
assert(rd == result);
|
||||||
|
|
||||||
|
rt = 0x87654321;
|
||||||
|
result = 0x38281808;
|
||||||
|
resultdsp = 0x01;
|
||||||
|
|
||||||
|
__asm
|
||||||
|
("shll.qb %0, %2, 0x03\n\t"
|
||||||
|
"rddsp %1\n\t"
|
||||||
|
: "=r"(rd), "=r"(dsp)
|
||||||
|
: "r"(rt)
|
||||||
|
);
|
||||||
|
dsp = (dsp >> 22) & 0x01;
|
||||||
|
assert(rd == result);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
24
tests/tcg/mips/mips32-dsp/shll_s_ph.c
Normal file
24
tests/tcg/mips/mips32-dsp/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/mips32-dsp/shll_s_w.c
Normal file
52
tests/tcg/mips/mips32-dsp/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/mips32-dsp/shllv_ph.c
Normal file
40
tests/tcg/mips/mips32-dsp/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/mips32-dsp/shllv_qb.c
Normal file
38
tests/tcg/mips/mips32-dsp/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/mips32-dsp/shllv_s_ph.c
Normal file
40
tests/tcg/mips/mips32-dsp/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/mips32-dsp/shllv_s_w.c
Normal file
40
tests/tcg/mips/mips32-dsp/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;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user