target-mips: Add ASE DSP testcases

Add MIPS ASE DSP testcases.

Signed-off-by: Jia Liu <proljc@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
Jia Liu 2012-10-24 22:17:13 +08:00 committed by Aurelien Jarno
parent af13ae03f8
commit d70080c4e3
487 changed files with 19151 additions and 0 deletions

View File

@ -0,0 +1,136 @@
-include ../../config-host.mak
CROSS=mips64el-unknown-linux-gnu-
SIM=qemu-mipsel
SIM_FLAGS=-cpu 74Kf
CC = $(CROSS)gcc
CFLAGS = -mabi=32 -march=mips32r2 -mgp32 -mdsp -static
TESTCASES = absq_s_ph.tst
TESTCASES += absq_s_w.tst
TESTCASES += addq_ph.tst
TESTCASES += addq_s_ph.tst
TESTCASES += addq_s_w.tst
TESTCASES += addsc.tst
TESTCASES += addu_qb.tst
TESTCASES += addu_s_qb.tst
TESTCASES += addwc.tst
TESTCASES += bitrev.tst
TESTCASES += bposge32.tst
TESTCASES += cmp_eq_ph.tst
TESTCASES += cmpgu_eq_qb.tst
TESTCASES += cmpgu_le_qb.tst
TESTCASES += cmpgu_lt_qb.tst
TESTCASES += cmp_le_ph.tst
TESTCASES += cmp_lt_ph.tst
TESTCASES += cmpu_eq_qb.tst
TESTCASES += cmpu_le_qb.tst
TESTCASES += cmpu_lt_qb.tst
TESTCASES += dpaq_sa_l_w.tst
TESTCASES += dpaq_s_w_ph.tst
TESTCASES += dpau_h_qbl.tst
TESTCASES += dpau_h_qbr.tst
TESTCASES += dpsq_sa_l_w.tst
TESTCASES += dpsq_s_w_ph.tst
TESTCASES += dpsu_h_qbl.tst
TESTCASES += dpsu_h_qbr.tst
TESTCASES += extp.tst
TESTCASES += extpdp.tst
TESTCASES += extpdpv.tst
TESTCASES += extpv.tst
TESTCASES += extr_rs_w.tst
TESTCASES += extr_r_w.tst
TESTCASES += extr_s_h.tst
TESTCASES += extrv_rs_w.tst
TESTCASES += extrv_r_w.tst
TESTCASES += extrv_s_h.tst
TESTCASES += extrv_w.tst
TESTCASES += extr_w.tst
TESTCASES += insv.tst
TESTCASES += lbux.tst
TESTCASES += lhx.tst
TESTCASES += lwx.tst
TESTCASES += madd.tst
TESTCASES += maddu.tst
TESTCASES += maq_sa_w_phl.tst
TESTCASES += maq_sa_w_phr.tst
TESTCASES += maq_s_w_phl.tst
TESTCASES += maq_s_w_phr.tst
TESTCASES += mfhi.tst
TESTCASES += mflo.tst
TESTCASES += modsub.tst
TESTCASES += msub.tst
TESTCASES += msubu.tst
TESTCASES += mthi.tst
TESTCASES += mthlip.tst
TESTCASES += mtlo.tst
TESTCASES += muleq_s_w_phl.tst
TESTCASES += muleq_s_w_phr.tst
TESTCASES += muleu_s_ph_qbl.tst
TESTCASES += muleu_s_ph_qbr.tst
TESTCASES += mulq_rs_ph.tst
TESTCASES += mult.tst
TESTCASES += multu.tst
TESTCASES += packrl_ph.tst
TESTCASES += pick_ph.tst
TESTCASES += pick_qb.tst
TESTCASES += precequ_ph_qbla.tst
TESTCASES += precequ_ph_qbl.tst
TESTCASES += precequ_ph_qbra.tst
TESTCASES += precequ_ph_qbr.tst
TESTCASES += preceq_w_phl.tst
TESTCASES += preceq_w_phr.tst
TESTCASES += preceu_ph_qbla.tst
TESTCASES += preceu_ph_qbl.tst
TESTCASES += preceu_ph_qbra.tst
TESTCASES += preceu_ph_qbr.tst
TESTCASES += precrq_ph_w.tst
TESTCASES += precrq_qb_ph.tst
TESTCASES += precrq_rs_ph_w.tst
TESTCASES += precrqu_s_qb_ph.tst
TESTCASES += raddu_w_qb.tst
TESTCASES += rddsp.tst
TESTCASES += repl_ph.tst
TESTCASES += repl_qb.tst
TESTCASES += replv_ph.tst
TESTCASES += replv_qb.tst
TESTCASES += shilo.tst
TESTCASES += shilov.tst
TESTCASES += shll_ph.tst
TESTCASES += shll_qb.tst
TESTCASES += shll_s_ph.tst
TESTCASES += shll_s_w.tst
TESTCASES += shllv_ph.tst
TESTCASES += shllv_qb.tst
TESTCASES += shllv_s_ph.tst
TESTCASES += shllv_s_w.tst
TESTCASES += shra_ph.tst
TESTCASES += shra_r_ph.tst
TESTCASES += shra_r_w.tst
TESTCASES += shrav_ph.tst
TESTCASES += shrav_r_ph.tst
TESTCASES += shrav_r_w.tst
TESTCASES += shrl_qb.tst
TESTCASES += shrlv_qb.tst
TESTCASES += subq_ph.tst
TESTCASES += subq_s_ph.tst
TESTCASES += subq_s_w.tst
TESTCASES += subu_qb.tst
TESTCASES += subu_s_qb.tst
TESTCASES += wrdsp.tst
all: $(TESTCASES)
%.tst: %.c
$(CC) $(CFLAGS) $< -o $@
check: $(TESTCASES)
@for case in $(TESTCASES); do \
echo $(SIM) $(SIM_FLAGS) ./$$case;\
$(SIM) $(SIM_FLAGS) ./$$case; \
done
clean:
$(RM) -rf $(TESTCASES)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,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;
}

View File

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

View File

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

View File

@ -0,0 +1,45 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt;
int ach = 5, acl = 5;
int resulth, resultl;
rs = 0xBC0123AD;
rt = 0x01643721;
resulth = 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;
}

View File

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rs, rt, dsp;
int ach = 5, acl = 5;
int resulth, resultl, resultdsp;
rs = 0xBC0123AD;
rt = 0x01643721;
resulth = 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;
}

View File

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

View File

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

View File

@ -0,0 +1,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;
}

View 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;
}

View File

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

View File

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

View File

@ -0,0 +1,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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 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;
}

View File

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 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;
}

View File

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 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;
}

View File

@ -0,0 +1,55 @@
#include<stdio.h>
#include<assert.h>
int main()
{
int rt, rs;
int achi, acli;
int dsp;
int acho, aclo;
int resulth, resultl;
int resdsp;
achi = 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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,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;
}

View File

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

View File

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

View File

@ -0,0 +1,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;
}

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,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;
}

View 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;
}

View 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;
}

View 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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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