2004-01-07 Michael Snyder <msnyder@redhat.com>
* dmxy.s, fipr.s, fpchg.s, ldrc.s, loop.s, movli.s, movua.s, movxy.s, pabs.s, pclr.s, prnd.s, psub.s, pswap.s: New files. * allinsn.exp: Add new tests. * testutils.inc (set_sr_bit): Add argument. (set_greg): Add .align directives.
This commit is contained in:
parent
86bc60ebf4
commit
4321271fd4
|
@ -1,3 +1,11 @@
|
||||||
|
2004-01-07 Michael Snyder <msnyder@redhat.com>
|
||||||
|
|
||||||
|
* dmxy.s, fipr.s, fpchg.s, ldrc.s, loop.s, movli.s, movua.s,
|
||||||
|
movxy.s, pabs.s, pclr.s, prnd.s, psub.s, pswap.s: New files.
|
||||||
|
* allinsn.exp: Add new tests.
|
||||||
|
* testutils.inc (set_sr_bit): Add argument.
|
||||||
|
(set_greg): Add .align directives.
|
||||||
|
|
||||||
2003-08-11 Michael Snyder <msnyder@redhat.com>
|
2003-08-11 Michael Snyder <msnyder@redhat.com>
|
||||||
|
|
||||||
* macl.s: New file.
|
* macl.s: New file.
|
||||||
|
|
|
@ -4,6 +4,7 @@ set all "sh shdsp"
|
||||||
|
|
||||||
if [istarget sh-*elf] {
|
if [istarget sh-*elf] {
|
||||||
run_sim_test add.s $all
|
run_sim_test add.s $all
|
||||||
|
run_sim_test dmxy.s shdsp
|
||||||
run_sim_test fabs.s sh
|
run_sim_test fabs.s sh
|
||||||
run_sim_test fadd.s sh
|
run_sim_test fadd.s sh
|
||||||
run_sim_test fcmpeq.s sh
|
run_sim_test fcmpeq.s sh
|
||||||
|
@ -11,6 +12,7 @@ if [istarget sh-*elf] {
|
||||||
run_sim_test fcnvds.s sh
|
run_sim_test fcnvds.s sh
|
||||||
run_sim_test fcnvsd.s sh
|
run_sim_test fcnvsd.s sh
|
||||||
run_sim_test fdiv.s sh
|
run_sim_test fdiv.s sh
|
||||||
|
run_sim_test fipr.s sh
|
||||||
run_sim_test fldi0.s sh
|
run_sim_test fldi0.s sh
|
||||||
run_sim_test fldi1.s sh
|
run_sim_test fldi1.s sh
|
||||||
run_sim_test flds.s sh
|
run_sim_test flds.s sh
|
||||||
|
@ -19,24 +21,35 @@ if [istarget sh-*elf] {
|
||||||
run_sim_test fmov.s sh
|
run_sim_test fmov.s sh
|
||||||
run_sim_test fmul.s sh
|
run_sim_test fmul.s sh
|
||||||
run_sim_test fneg.s sh
|
run_sim_test fneg.s sh
|
||||||
|
run_sim_test fpchg.s sh
|
||||||
run_sim_test frchg.s sh
|
run_sim_test frchg.s sh
|
||||||
run_sim_test fschg.s sh
|
run_sim_test fschg.s sh
|
||||||
run_sim_test fsqrt.s sh
|
run_sim_test fsqrt.s sh
|
||||||
run_sim_test fsub.s sh
|
run_sim_test fsub.s sh
|
||||||
run_sim_test ftrc.s sh
|
run_sim_test ftrc.s sh
|
||||||
|
run_sim_test ldrc.s shdsp
|
||||||
|
run_sim_test loop.s shdsp
|
||||||
run_sim_test macl.s sh
|
run_sim_test macl.s sh
|
||||||
run_sim_test macw.s sh
|
run_sim_test macw.s sh
|
||||||
|
run_sim_test movli.s $all
|
||||||
|
run_sim_test movua.s $all
|
||||||
|
run_sim_test movxy.s shdsp
|
||||||
|
run_sim_test pabs.s shdsp
|
||||||
run_sim_test paddc.s shdsp
|
run_sim_test paddc.s shdsp
|
||||||
run_sim_test padd.s shdsp
|
run_sim_test padd.s shdsp
|
||||||
run_sim_test pand.s shdsp
|
run_sim_test pand.s shdsp
|
||||||
|
run_sim_test pclr.s shdsp
|
||||||
run_sim_test pdec.s shdsp
|
run_sim_test pdec.s shdsp
|
||||||
run_sim_test pdmsb.s shdsp
|
run_sim_test pdmsb.s shdsp
|
||||||
run_sim_test pinc.s shdsp
|
run_sim_test pinc.s shdsp
|
||||||
run_sim_test pmuls.s shdsp
|
run_sim_test pmuls.s shdsp
|
||||||
|
run_sim_test prnd.s shdsp
|
||||||
run_sim_test pshai.s shdsp
|
run_sim_test pshai.s shdsp
|
||||||
run_sim_test pshar.s shdsp
|
run_sim_test pshar.s shdsp
|
||||||
run_sim_test pshli.s shdsp
|
run_sim_test pshli.s shdsp
|
||||||
run_sim_test pshlr.s shdsp
|
run_sim_test pshlr.s shdsp
|
||||||
|
run_sim_test psub.s shdsp
|
||||||
|
run_sim_test pswap.s shdsp
|
||||||
run_sim_test shll.s $all
|
run_sim_test shll.s $all
|
||||||
run_sim_test shll2.s $all
|
run_sim_test shll2.s $all
|
||||||
run_sim_test shll8.s $all
|
run_sim_test shll8.s $all
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# sh testcase for setdmx, setdmy, clrdmxy
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
set_grs_a5a5
|
||||||
|
setdmx
|
||||||
|
test_sr_bit_set 0x400
|
||||||
|
test_sr_bit_clear 0x800
|
||||||
|
setdmy
|
||||||
|
test_sr_bit_clear 0x400
|
||||||
|
test_sr_bit_set 0x800
|
||||||
|
clrdmxy
|
||||||
|
test_sr_bit_clear 0x400
|
||||||
|
test_sr_bit_clear 0x800
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
pass
|
||||||
|
exit 0
|
|
@ -0,0 +1,137 @@
|
||||||
|
# sh testcase for fipr $fvm, $fvn
|
||||||
|
# mach: sh
|
||||||
|
# as(sh): -defsym sim_cpu=0
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
initv0:
|
||||||
|
set_grs_a5a5
|
||||||
|
set_fprs_a5a5
|
||||||
|
# Load 1 into fr0.
|
||||||
|
fldi1 fr0
|
||||||
|
# Load 2 into fr1.
|
||||||
|
fldi1 fr1
|
||||||
|
fadd fr1, fr1
|
||||||
|
# Load 4 into fr2.
|
||||||
|
fldi1 fr2
|
||||||
|
fadd fr2, fr2
|
||||||
|
fadd fr2, fr2
|
||||||
|
# Load 8 into fr3.
|
||||||
|
fmov fr2, fr3
|
||||||
|
fadd fr2, fr3
|
||||||
|
|
||||||
|
initv8:
|
||||||
|
fldi1 fr8
|
||||||
|
fldi0 fr9
|
||||||
|
fldi1 fr10
|
||||||
|
fldi0 fr11
|
||||||
|
|
||||||
|
fipr fv0, fv8
|
||||||
|
test1:
|
||||||
|
# Result will be in fr11.
|
||||||
|
assert_fpreg_i 1, fr0
|
||||||
|
assert_fpreg_i 2, fr1
|
||||||
|
assert_fpreg_i 4, fr2
|
||||||
|
assert_fpreg_i 8, fr3
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr4
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr5
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr6
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr7
|
||||||
|
assert_fpreg_i 1, fr8
|
||||||
|
assert_fpreg_i 0, fr9
|
||||||
|
assert_fpreg_i 1, fr10
|
||||||
|
assert_fpreg_i 5, fr11
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr12
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr13
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr14
|
||||||
|
assert_fpreg_x 0xa5a5a5a5, fr15
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
test_infp:
|
||||||
|
# Test positive infinity
|
||||||
|
fldi0 fr11
|
||||||
|
mov.l infp, r0
|
||||||
|
lds r0, fpul
|
||||||
|
fsts fpul, fr0
|
||||||
|
fipr fv0, fv8
|
||||||
|
# fr11 should be plus infinity
|
||||||
|
assert_fpreg_x 0x7f800000, fr11
|
||||||
|
test_infm:
|
||||||
|
# Test negitive infinity
|
||||||
|
fldi0 fr11
|
||||||
|
mov.l infm, r0
|
||||||
|
lds r0, fpul
|
||||||
|
fsts fpul, fr0
|
||||||
|
fipr fv0, fv8
|
||||||
|
# fr11 should be plus infinity
|
||||||
|
assert_fpreg_x 0xff800000, fr11
|
||||||
|
test_qnanp:
|
||||||
|
# Test positive qnan
|
||||||
|
fldi0 fr11
|
||||||
|
mov.l qnanp, r0
|
||||||
|
lds r0, fpul
|
||||||
|
fsts fpul, fr0
|
||||||
|
fipr fv0, fv8
|
||||||
|
# fr11 should be plus qnan (or greater)
|
||||||
|
flds fr11, fpul
|
||||||
|
sts fpul, r1
|
||||||
|
cmp/ge r0, r1
|
||||||
|
bt .L0
|
||||||
|
fail
|
||||||
|
.L0:
|
||||||
|
test_snanp:
|
||||||
|
# Test positive snan
|
||||||
|
fldi0 fr11
|
||||||
|
mov.l snanp, r0
|
||||||
|
lds r0, fpul
|
||||||
|
fsts fpul, fr0
|
||||||
|
fipr fv0, fv8
|
||||||
|
# fr11 should be plus snan (or greater)
|
||||||
|
flds fr11, fpul
|
||||||
|
sts fpul, r1
|
||||||
|
cmp/ge r0, r1
|
||||||
|
bt .L1
|
||||||
|
fail
|
||||||
|
.L1:
|
||||||
|
.if 0
|
||||||
|
# Handling of nan and inf not implemented yet.
|
||||||
|
test_qnanm:
|
||||||
|
# Test negantive qnan
|
||||||
|
fldi0 fr11
|
||||||
|
mov.l qnanm, r0
|
||||||
|
lds r0, fpul
|
||||||
|
fsts fpul, fr0
|
||||||
|
fipr fv0, fv8
|
||||||
|
# fr11 should be minus qnan (or less)
|
||||||
|
flds fr11, fpul
|
||||||
|
sts fpul, r1
|
||||||
|
cmp/ge r1, r0
|
||||||
|
bt .L2
|
||||||
|
fail
|
||||||
|
.L2:
|
||||||
|
test_snanm:
|
||||||
|
# Test negative snan
|
||||||
|
fldi0 fr11
|
||||||
|
mov.l snanm, r0
|
||||||
|
lds r0, fpul
|
||||||
|
fsts fpul, fr0
|
||||||
|
fipr fv0, fv8
|
||||||
|
# fr11 should be minus snan (or less)
|
||||||
|
flds fr11, fpul
|
||||||
|
sts fpul, r1
|
||||||
|
cmp/ge r1, r0
|
||||||
|
bt .L3
|
||||||
|
fail
|
||||||
|
.L3:
|
||||||
|
.endif
|
||||||
|
pass
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
qnanp: .long 0x7f800001
|
||||||
|
qnanm: .long 0xff800001
|
||||||
|
snanp: .long 0x7fc00000
|
||||||
|
snanm: .long 0xffc00000
|
||||||
|
infp: .long 0x7f800000
|
||||||
|
infm: .long 0xff800000
|
|
@ -0,0 +1,30 @@
|
||||||
|
# sh testcase for fpchg
|
||||||
|
# mach: sh
|
||||||
|
# as(sh): -defsym sim_cpu=0
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
set_grs_a5a5
|
||||||
|
set_fprs_a5a5
|
||||||
|
sts fpscr, r0
|
||||||
|
assertreg0 0
|
||||||
|
fpchg
|
||||||
|
sts fpscr, r0
|
||||||
|
assertreg0 0x80000
|
||||||
|
fpchg
|
||||||
|
sts fpscr, r0
|
||||||
|
assertreg0 0
|
||||||
|
fpchg
|
||||||
|
sts fpscr, r0
|
||||||
|
assertreg0 0x80000
|
||||||
|
fpchg
|
||||||
|
sts fpscr, r0
|
||||||
|
assertreg0 0
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
test_fprs_a5a5
|
||||||
|
|
||||||
|
pass
|
||||||
|
exit 0
|
|
@ -0,0 +1,118 @@
|
||||||
|
# sh testcase for ldrc, strc
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
|
||||||
|
setrc_imm:
|
||||||
|
set_grs_a5a5
|
||||||
|
# Test setrc
|
||||||
|
#
|
||||||
|
ldrs lstart
|
||||||
|
ldre lend
|
||||||
|
setrc #0xff
|
||||||
|
get_sr r1
|
||||||
|
shlr16 r1
|
||||||
|
set_greg 0xfff, r0
|
||||||
|
and r0, r1
|
||||||
|
assertreg 0xff, r1
|
||||||
|
|
||||||
|
stc rs, r0 ! rs unchanged
|
||||||
|
assertreg0 lstart
|
||||||
|
stc re, r0 ! re unchanged
|
||||||
|
assertreg0 lend
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
setrc_reg:
|
||||||
|
set_grs_a5a5
|
||||||
|
# Test setrc
|
||||||
|
#
|
||||||
|
ldrs lstart
|
||||||
|
ldre lend
|
||||||
|
set_greg 0xfff, r0
|
||||||
|
setrc r0
|
||||||
|
get_sr r1
|
||||||
|
shlr16 r1
|
||||||
|
set_greg 0xfff, r0
|
||||||
|
and r0, r1
|
||||||
|
assertreg 0xfff, r1
|
||||||
|
|
||||||
|
stc rs, r0 ! rs unchanged
|
||||||
|
assertreg0 lstart
|
||||||
|
stc re, r0 ! re unchanged
|
||||||
|
assertreg0 lend
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
bra ldrc_imm
|
||||||
|
|
||||||
|
.global lstart
|
||||||
|
.align 2
|
||||||
|
lstart: nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
.global lend
|
||||||
|
.align 2
|
||||||
|
lend: nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
ldrc_imm:
|
||||||
|
set_grs_a5a5
|
||||||
|
# Test ldrc
|
||||||
|
setrc #0x0 ! zero rc
|
||||||
|
ldrc #0xa5
|
||||||
|
get_sr r1
|
||||||
|
shlr16 r1
|
||||||
|
set_greg 0xfff, r0
|
||||||
|
and r0, r1
|
||||||
|
assertreg 0xa5, r1
|
||||||
|
stc rs, r0 ! rs unchanged
|
||||||
|
assertreg0 lstart
|
||||||
|
stc re, r0
|
||||||
|
assertreg0 lend+1 ! bit 0 set in re
|
||||||
|
|
||||||
|
# fix up re for next test
|
||||||
|
dt r0 ! Ugh! No DEC insn!
|
||||||
|
ldc r0, re
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
ldrc_reg:
|
||||||
|
set_grs_a5a5
|
||||||
|
# Test ldrc
|
||||||
|
setrc #0x0 ! zero rc
|
||||||
|
set_greg 0xa5a, r0
|
||||||
|
ldrc r0
|
||||||
|
get_sr r1
|
||||||
|
shlr16 r1
|
||||||
|
set_greg 0xfff, r0
|
||||||
|
and r0, r1
|
||||||
|
assertreg 0xa5a, r1
|
||||||
|
stc rs, r0 ! rs unchanged
|
||||||
|
assertreg0 lstart
|
||||||
|
stc re, r0
|
||||||
|
assertreg0 lend+1 ! bit 0 set in re
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
pass
|
||||||
|
exit 0
|
||||||
|
|
|
@ -0,0 +1,311 @@
|
||||||
|
# sh testcase for loop control
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
loop1:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop1_start0+8
|
||||||
|
ldre Loop1_start0+4
|
||||||
|
setrc #5
|
||||||
|
Loop1_start0:
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute one instruction five times.
|
||||||
|
Loop1_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop1_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 8 (five in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+8, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop2:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop2_start0+6
|
||||||
|
ldre Loop2_start0+4
|
||||||
|
setrc #5
|
||||||
|
Loop2_start0:
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute two instructions five times.
|
||||||
|
Loop2_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop2_end:
|
||||||
|
add #3, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 14 (ten in loop, three after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+14, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop3:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop3_start0+4
|
||||||
|
ldre Loop3_start0+4
|
||||||
|
setrc #5
|
||||||
|
Loop3_start0:
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute three instructions five times.
|
||||||
|
Loop3_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop3_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 18 (fifteen in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+18, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop4:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop4_begin
|
||||||
|
ldre Loop4_last3+4
|
||||||
|
setrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute four instructions five times.
|
||||||
|
Loop4_begin:
|
||||||
|
Loop4_last3:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop4_last2:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop4_last1:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop4_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop4_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 23 (20 in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+23, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop5:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop5_begin
|
||||||
|
ldre Loop5_last3+4
|
||||||
|
setrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute five instructions five times.
|
||||||
|
Loop5_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop5_last3:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop5_last2:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop5_last1:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop5_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop5_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 28 (25 in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+28, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loopn:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loopn_begin
|
||||||
|
ldre Loopn_last3+4
|
||||||
|
setrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute n instructions five times.
|
||||||
|
Loopn_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loopn_last3:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loopn_last2:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loopn_last1:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loopn_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loopn_end:
|
||||||
|
add #3, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 64 (60 in loop, three after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+64, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop1e:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop1e_begin
|
||||||
|
ldre Loop1e_last
|
||||||
|
ldrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute one instruction five times.
|
||||||
|
Loop1e_begin:
|
||||||
|
Loop1e_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop1e_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 8 (five in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+8, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop2e:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop2e_begin
|
||||||
|
ldre Loop2e_last
|
||||||
|
ldrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute two instructions five times.
|
||||||
|
Loop2e_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop2e_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop2e_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 13 (ten in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+13, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop3e:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop3e_begin
|
||||||
|
ldre Loop3e_last
|
||||||
|
ldrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute three instructions five times.
|
||||||
|
Loop3e_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop3e_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop3e_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 18 (fifteen in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+18, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop4e:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop4e_begin
|
||||||
|
ldre Loop4e_last
|
||||||
|
ldrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute four instructions five times.
|
||||||
|
Loop4e_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop4e_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop4e_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 23 (twenty in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+23, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop5e:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop5e_begin
|
||||||
|
ldre Loop5e_last
|
||||||
|
ldrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute five instructions five times.
|
||||||
|
Loop5e_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop5e_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop5e_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 28 (twenty five in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+28, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
loop_n_e:
|
||||||
|
set_grs_a5a5
|
||||||
|
|
||||||
|
ldrs Loop_n_e_begin
|
||||||
|
ldre Loop_n_e_last
|
||||||
|
ldrc #5
|
||||||
|
add #1, r1 ! Before loop
|
||||||
|
# Loop should execute n instructions five times.
|
||||||
|
Loop_n_e_begin:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop_n_e_last:
|
||||||
|
add #1, r1 ! Within loop
|
||||||
|
Loop_n_e_end:
|
||||||
|
add #2, r1 ! After loop
|
||||||
|
|
||||||
|
# r1 = 0xa5a5a5a5 + 48 (forty five in loop, two after, one before)
|
||||||
|
assertreg 0xa5a5a5a5+48, r1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
# sh testcase for movli
|
||||||
|
# mach: all
|
||||||
|
# as(sh): -defsym sim_cpu=0
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
x: .long 1
|
||||||
|
y: .long 2
|
||||||
|
z: .long 3
|
||||||
|
|
||||||
|
start
|
||||||
|
set_grs_a5a5
|
||||||
|
mov.l xptr, r1
|
||||||
|
mov.l yptr, r2
|
||||||
|
# Move linked/conditional, x to y
|
||||||
|
movli.l @r1, r0
|
||||||
|
movco.l r0, @r2
|
||||||
|
|
||||||
|
# Check result.
|
||||||
|
assertreg0 1
|
||||||
|
mov.l yptr, r1
|
||||||
|
mov.l @r1, r2
|
||||||
|
assertreg 1, r2
|
||||||
|
|
||||||
|
# Now attempt an unlinked move of r0 to z
|
||||||
|
mov.l zptr, r1
|
||||||
|
movco.l r0, @r1
|
||||||
|
|
||||||
|
# Check that z is unchanged.
|
||||||
|
mov.l zptr, r1
|
||||||
|
mov.l @r1, r2
|
||||||
|
assertreg 3, r2
|
||||||
|
|
||||||
|
test_gr_a5a5 r3
|
||||||
|
test_gr_a5a5 r4
|
||||||
|
test_gr_a5a5 r5
|
||||||
|
test_gr_a5a5 r6
|
||||||
|
test_gr_a5a5 r7
|
||||||
|
test_gr_a5a5 r8
|
||||||
|
test_gr_a5a5 r9
|
||||||
|
test_gr_a5a5 r10
|
||||||
|
test_gr_a5a5 r11
|
||||||
|
test_gr_a5a5 r12
|
||||||
|
test_gr_a5a5 r13
|
||||||
|
test_gr_a5a5 r14
|
||||||
|
|
||||||
|
pass
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
xptr: .long x
|
||||||
|
yptr: .long y
|
||||||
|
zptr: .long z
|
|
@ -0,0 +1,129 @@
|
||||||
|
# sh testcase for movua
|
||||||
|
# mach: all
|
||||||
|
# as(sh): -defsym sim_cpu=0
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
movua_1:
|
||||||
|
set_grs_a5a5
|
||||||
|
mov.l srcp, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x00010203
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x01020304
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x02030405
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x03040506
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x04050607
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x05060708
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x06070809
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x0708090a
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x08090a0b
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x090a0b0c
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x0a0b0c0d
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x0b0c0d0e
|
||||||
|
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1, r0
|
||||||
|
assertreg0 0x0c0d0e0f
|
||||||
|
|
||||||
|
assertreg src+12, r1
|
||||||
|
test_gr_a5a5 r2
|
||||||
|
test_gr_a5a5 r3
|
||||||
|
test_gr_a5a5 r4
|
||||||
|
test_gr_a5a5 r5
|
||||||
|
test_gr_a5a5 r6
|
||||||
|
test_gr_a5a5 r7
|
||||||
|
test_gr_a5a5 r8
|
||||||
|
test_gr_a5a5 r9
|
||||||
|
test_gr_a5a5 r10
|
||||||
|
test_gr_a5a5 r11
|
||||||
|
test_gr_a5a5 r12
|
||||||
|
test_gr_a5a5 r13
|
||||||
|
test_gr_a5a5 r14
|
||||||
|
|
||||||
|
bra movua_4:
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 0
|
||||||
|
src: .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
|
||||||
|
.align 2
|
||||||
|
srcp: .long src
|
||||||
|
|
||||||
|
movua_4:
|
||||||
|
set_grs_a5a5
|
||||||
|
mov.l srcp2, r1
|
||||||
|
movua.l @r1+, r0
|
||||||
|
assertreg0 0x00010203
|
||||||
|
assertreg src+4, r1
|
||||||
|
|
||||||
|
mov.l srcp2, r1
|
||||||
|
add #1, r1
|
||||||
|
movua.l @r1+, r0
|
||||||
|
assertreg0 0x01020304
|
||||||
|
assertreg src+5, r1
|
||||||
|
|
||||||
|
mov.l srcp2, r1
|
||||||
|
add #2, r1
|
||||||
|
movua.l @r1+, r0
|
||||||
|
assertreg0 0x02030405
|
||||||
|
assertreg src+6, r1
|
||||||
|
|
||||||
|
mov.l srcp2, r1
|
||||||
|
add #3, r1
|
||||||
|
movua.l @r1+, r0
|
||||||
|
assertreg0 0x03040506
|
||||||
|
assertreg src+7, r1
|
||||||
|
|
||||||
|
test_gr_a5a5 r2
|
||||||
|
test_gr_a5a5 r3
|
||||||
|
test_gr_a5a5 r4
|
||||||
|
test_gr_a5a5 r5
|
||||||
|
test_gr_a5a5 r6
|
||||||
|
test_gr_a5a5 r7
|
||||||
|
test_gr_a5a5 r8
|
||||||
|
test_gr_a5a5 r9
|
||||||
|
test_gr_a5a5 r10
|
||||||
|
test_gr_a5a5 r11
|
||||||
|
test_gr_a5a5 r12
|
||||||
|
test_gr_a5a5 r13
|
||||||
|
test_gr_a5a5 r14
|
||||||
|
|
||||||
|
pass
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
srcp2: .long src
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,54 @@
|
||||||
|
# sh testcase for pabs
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
# FIXME: opcode table ambiguity in ignored bits 4-7.
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
pabs x0, x1
|
||||||
|
pabs y0, y1
|
||||||
|
assert_sreg 0x5a5a5a5b, x1
|
||||||
|
assert_sreg 0x5a5a5a5b, y1
|
||||||
|
pabs x1, x0
|
||||||
|
pabs y1, y0
|
||||||
|
assert_sreg 0x5a5a5a5b, x0
|
||||||
|
assert_sreg 0x5a5a5a5b, y0
|
||||||
|
|
||||||
|
set_dcfalse
|
||||||
|
dct pabs a0, a0
|
||||||
|
dct pabs m0, m0
|
||||||
|
assert_sreg 0xa5a5a5a5, a0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
set_dctrue
|
||||||
|
dct pabs a0, a0
|
||||||
|
dct pabs m0, m0
|
||||||
|
assert_sreg 0x5a5a5a5b, a0
|
||||||
|
assert_sreg2 0x5a5a5a5b, m0
|
||||||
|
|
||||||
|
set_dctrue
|
||||||
|
dcf pabs a1, a1
|
||||||
|
dcf pabs m1, m1
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
set_dcfalse
|
||||||
|
dcf pabs a1, a1
|
||||||
|
dcf pabs m1, m1
|
||||||
|
assert_sreg2 0x5a5a5a5b, a1
|
||||||
|
assert_sreg2 0x5a5a5a5b, m1
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
pass
|
||||||
|
exit 0
|
|
@ -0,0 +1,65 @@
|
||||||
|
# sh testcase for pclr
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
# FIXME: opcode table ambiguity in ignored bits 4-7.
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
pclr_cc:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
assert_sreg 0xa5a5a5a5, x0
|
||||||
|
pclr x0
|
||||||
|
assert_sreg 0, x0
|
||||||
|
|
||||||
|
set_dcfalse
|
||||||
|
dct pclr x1
|
||||||
|
assert_sreg 0xa5a5a5a5, x1
|
||||||
|
set_dctrue
|
||||||
|
dct pclr x1
|
||||||
|
assert_sreg 0, x1
|
||||||
|
|
||||||
|
set_dctrue
|
||||||
|
dcf pclr y0
|
||||||
|
assert_sreg 0xa5a5a5a5, y0
|
||||||
|
set_dcfalse
|
||||||
|
dcf pclr y0
|
||||||
|
assert_sreg 0, y0
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a5a5a5, a0
|
||||||
|
assert_sreg 0xa5a5a5a5, y1
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
|
||||||
|
pclr_pmuls:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
pclr x0 pmuls y0, y1, a0
|
||||||
|
|
||||||
|
assert_sreg 0, x0
|
||||||
|
assert_sreg 0x3fc838b2, a0 ! 0xa5a5 x 0xa5a5
|
||||||
|
|
||||||
|
test_grs_a5a5
|
||||||
|
|
||||||
|
pass
|
||||||
|
exit 0
|
|
@ -0,0 +1,90 @@
|
||||||
|
# sh testcase for prnd
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
# FIXME: opcode table ambiguity in ignored bits 4-7.
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
# prnd(0xa5a5a5a5) = 0xa5a60000
|
||||||
|
prnd x0, x0
|
||||||
|
prnd y0, y0
|
||||||
|
assert_sreg 0xa5a60000, x0
|
||||||
|
assert_sreg 0xa5a60000, y0
|
||||||
|
|
||||||
|
# prnd(1) = 1
|
||||||
|
mov #1, r0
|
||||||
|
shll16 r0
|
||||||
|
lds r0, x0
|
||||||
|
pcopy x0, y0
|
||||||
|
prnd x0, x0
|
||||||
|
prnd y0, y0
|
||||||
|
assert_sreg 0x10000, x0
|
||||||
|
assert_sreg 0x10000, y0
|
||||||
|
|
||||||
|
# prnd(1.4999999) = 1
|
||||||
|
mov #1, r0
|
||||||
|
shll8 r0
|
||||||
|
or #0x7f, r0
|
||||||
|
shll8 r0
|
||||||
|
or #0xff, r0
|
||||||
|
lds r0, x0
|
||||||
|
pcopy x0, y0
|
||||||
|
prnd x0, x0
|
||||||
|
prnd y0, y0
|
||||||
|
assert_sreg 0x10000, x0
|
||||||
|
assert_sreg 0x10000, y0
|
||||||
|
|
||||||
|
# prnd(1.5) = 2
|
||||||
|
mov #1, r0
|
||||||
|
shll8 r0
|
||||||
|
or #0x80, r0
|
||||||
|
shll8 r0
|
||||||
|
lds r0, x0
|
||||||
|
pcopy x0, y0
|
||||||
|
prnd x0, x0
|
||||||
|
prnd y0, y0
|
||||||
|
assert_sreg 0x20000, x0
|
||||||
|
assert_sreg 0x20000, y0
|
||||||
|
|
||||||
|
# dct prnd
|
||||||
|
set_dcfalse
|
||||||
|
dct prnd x0, x1
|
||||||
|
dct prnd y0, y1
|
||||||
|
assert_sreg2 0xa5a5a5a5, x1
|
||||||
|
assert_sreg2 0xa5a5a5a5, y1
|
||||||
|
set_dctrue
|
||||||
|
dct prnd x0, x1
|
||||||
|
dct prnd y0, y1
|
||||||
|
assert_sreg2 0x20000, x1
|
||||||
|
assert_sreg2 0x20000, y1
|
||||||
|
|
||||||
|
# dcf prnd
|
||||||
|
set_dctrue
|
||||||
|
dcf prnd x0, m0
|
||||||
|
dcf prnd y0, m1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
set_dcfalse
|
||||||
|
dcf prnd x0, m0
|
||||||
|
dcf prnd y0, m1
|
||||||
|
assert_sreg2 0x20000, m0
|
||||||
|
assert_sreg2 0x20000, m1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a5a5a5, a0
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
pass
|
||||||
|
exit 0
|
|
@ -0,0 +1,64 @@
|
||||||
|
# sh testcase for psub
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
psub_sx_sy:
|
||||||
|
# 0xa5a5a5a5 minus 0xa5a5a5a5 equals zero
|
||||||
|
psub x0, y0, a0
|
||||||
|
assert_sreg 0, a0
|
||||||
|
|
||||||
|
psub_sy_sx:
|
||||||
|
# 100 - 25 = 75
|
||||||
|
mov #100, r0
|
||||||
|
mov #25, r1
|
||||||
|
lds r0, y1
|
||||||
|
lds r1, x1
|
||||||
|
psub y1, x1, a0
|
||||||
|
assert_sreg 75, a0
|
||||||
|
|
||||||
|
dct_psub:
|
||||||
|
# 100 - 25 = 75
|
||||||
|
set_dcfalse
|
||||||
|
dct psub y1, x1, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
set_dctrue
|
||||||
|
dct psub y1, x1, a1
|
||||||
|
assert_sreg2 75, a1
|
||||||
|
|
||||||
|
dcf_psub:
|
||||||
|
# 25 - 100 = -75
|
||||||
|
set_dctrue
|
||||||
|
dcf psub x1, y1, m1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
set_dcfalse
|
||||||
|
dcf psub x1, y1, m1
|
||||||
|
assert_sreg2 -75, m1
|
||||||
|
|
||||||
|
psub_pmuls:
|
||||||
|
# 25 - 100 = -75, and 2 x 2 = 8 (yes, eight, not four)
|
||||||
|
mov #2, r0
|
||||||
|
shll16 r0
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, y0
|
||||||
|
psub x1, y1, a1 pmuls x0, y0, a0
|
||||||
|
assert_sreg 8, a0
|
||||||
|
assert_sreg2 -75, a1
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
set_greg 0xa5a5a5a5, r1
|
||||||
|
test_grs_a5a5
|
||||||
|
pass
|
||||||
|
exit 0
|
|
@ -0,0 +1,177 @@
|
||||||
|
# sh testcase for pswap
|
||||||
|
# mach: shdsp
|
||||||
|
# as(shdsp): -defsym sim_cpu=1 -dsp
|
||||||
|
|
||||||
|
.include "testutils.inc"
|
||||||
|
|
||||||
|
start
|
||||||
|
|
||||||
|
pswapx:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
set_greg 0xa5a57777, r0
|
||||||
|
lds r0, x0
|
||||||
|
pswap x0, y0
|
||||||
|
assert_sreg 0x7777a5a5, y0
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a57777, x0
|
||||||
|
assert_sreg 0xa5a5a5a5, x1
|
||||||
|
assert_sreg 0xa5a5a5a5, y1
|
||||||
|
assert_sreg 0xa5a5a5a5, a0
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
|
||||||
|
pswapy:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
set_greg 0xa5a57777, r0
|
||||||
|
lds r0, y0
|
||||||
|
pswap y0, x0
|
||||||
|
assert_sreg 0x7777a5a5, x0
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a57777, y0
|
||||||
|
assert_sreg 0xa5a5a5a5, x1
|
||||||
|
assert_sreg 0xa5a5a5a5, y1
|
||||||
|
assert_sreg 0xa5a5a5a5, a0
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
|
||||||
|
pswapa:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
set_greg 0xa5a57777, r0
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
pswap a1, y0
|
||||||
|
assert_sreg 0x7777a5a5, y0
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a57777, a0
|
||||||
|
assert_sreg2 0xa5a57777, a1
|
||||||
|
assert_sreg 0xa5a5a5a5, x0
|
||||||
|
assert_sreg 0xa5a5a5a5, x1
|
||||||
|
assert_sreg 0xa5a5a5a5, y1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
|
||||||
|
pswapm:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
set_greg 0xa5a57777, r0
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, m1
|
||||||
|
pswap m1, y0
|
||||||
|
assert_sreg 0x7777a5a5, y0
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a57777, a0
|
||||||
|
assert_sreg2 0xa5a57777, m1
|
||||||
|
assert_sreg 0xa5a5a5a5, x0
|
||||||
|
assert_sreg 0xa5a5a5a5, x1
|
||||||
|
assert_sreg 0xa5a5a5a5, y1
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
|
||||||
|
|
||||||
|
dct_pswapx:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
set_greg 0xa5a57777, r0
|
||||||
|
lds r0, x0
|
||||||
|
set_dcfalse
|
||||||
|
dct pswap x0, y0
|
||||||
|
assert_sreg 0xa5a5a5a5, y0
|
||||||
|
set_dctrue
|
||||||
|
dct pswap x0, y0
|
||||||
|
assert_sreg 0x7777a5a5, y0
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a57777, x0
|
||||||
|
assert_sreg 0xa5a5a5a5, x1
|
||||||
|
assert_sreg 0xa5a5a5a5, y1
|
||||||
|
assert_sreg 0xa5a5a5a5, a0
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
|
||||||
|
dcf_pswapy:
|
||||||
|
set_grs_a5a5
|
||||||
|
lds r0, a0
|
||||||
|
pcopy a0, a1
|
||||||
|
lds r0, x0
|
||||||
|
lds r0, x1
|
||||||
|
lds r0, y0
|
||||||
|
lds r0, y1
|
||||||
|
pcopy x0, m0
|
||||||
|
pcopy y1, m1
|
||||||
|
|
||||||
|
set_greg 0xa5a57777, r0
|
||||||
|
lds r0, x0
|
||||||
|
set_dctrue
|
||||||
|
dcf pswap x0, y0
|
||||||
|
assert_sreg 0xa5a5a5a5, y0
|
||||||
|
set_dcfalse
|
||||||
|
dcf pswap x0, y0
|
||||||
|
assert_sreg 0x7777a5a5, y0
|
||||||
|
|
||||||
|
set_greg 0xa5a5a5a5, r0
|
||||||
|
test_grs_a5a5
|
||||||
|
assert_sreg 0xa5a57777, x0
|
||||||
|
assert_sreg 0xa5a5a5a5, x1
|
||||||
|
assert_sreg 0xa5a5a5a5, y1
|
||||||
|
assert_sreg 0xa5a5a5a5, a0
|
||||||
|
assert_sreg2 0xa5a5a5a5, a1
|
||||||
|
assert_sreg2 0xa5a5a5a5, m0
|
||||||
|
assert_sreg2 0xa5a5a5a5, m1
|
||||||
|
|
||||||
|
pass
|
||||||
|
exit 0
|
|
@ -473,7 +473,7 @@ set_greg\@:
|
||||||
pop r0
|
pop r0
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro set_sr_bit
|
.macro set_sr_bit val
|
||||||
push r0
|
push r0
|
||||||
push r1
|
push r1
|
||||||
get_sr r0
|
get_sr r0
|
||||||
|
@ -532,6 +532,7 @@ set_greg\@:
|
||||||
pop r0
|
pop r0
|
||||||
bra .Lssr\@
|
bra .Lssr\@
|
||||||
nop
|
nop
|
||||||
|
.align 2
|
||||||
.Lssrval\@:
|
.Lssrval\@:
|
||||||
.long \val
|
.long \val
|
||||||
.Lssr\@:
|
.Lssr\@:
|
||||||
|
@ -550,6 +551,7 @@ set_greg\@:
|
||||||
pop r0
|
pop r0
|
||||||
bra .Lssr2_\@
|
bra .Lssr2_\@
|
||||||
nop
|
nop
|
||||||
|
.align 2
|
||||||
.Lssr2val\@:
|
.Lssr2val\@:
|
||||||
.long \val
|
.long \val
|
||||||
.Lssr2_\@:
|
.Lssr2_\@:
|
||||||
|
@ -564,6 +566,7 @@ set_greg\@:
|
||||||
pop r0
|
pop r0
|
||||||
bra .Lscr\@
|
bra .Lscr\@
|
||||||
nop
|
nop
|
||||||
|
.align 2
|
||||||
.Lscrval\@:
|
.Lscrval\@:
|
||||||
.long \val
|
.long \val
|
||||||
.Lscr\@:
|
.Lscr\@:
|
||||||
|
|
Loading…
Reference in New Issue