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:
Michael Snyder 2004-01-09 19:47:36 +00:00
parent 86bc60ebf4
commit 4321271fd4
16 changed files with 2462 additions and 1 deletions

View File

@ -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>
* macl.s: New file.

View File

@ -4,6 +4,7 @@ set all "sh shdsp"
if [istarget sh-*elf] {
run_sim_test add.s $all
run_sim_test dmxy.s shdsp
run_sim_test fabs.s sh
run_sim_test fadd.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 fcnvsd.s sh
run_sim_test fdiv.s sh
run_sim_test fipr.s sh
run_sim_test fldi0.s sh
run_sim_test fldi1.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 fmul.s sh
run_sim_test fneg.s sh
run_sim_test fpchg.s sh
run_sim_test frchg.s sh
run_sim_test fschg.s sh
run_sim_test fsqrt.s sh
run_sim_test fsub.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 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 padd.s shdsp
run_sim_test pand.s shdsp
run_sim_test pclr.s shdsp
run_sim_test pdec.s shdsp
run_sim_test pdmsb.s shdsp
run_sim_test pinc.s shdsp
run_sim_test pmuls.s shdsp
run_sim_test prnd.s shdsp
run_sim_test pshai.s shdsp
run_sim_test pshar.s shdsp
run_sim_test pshli.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 shll2.s $all
run_sim_test shll8.s $all

View File

@ -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

137
sim/testsuite/sim/sh/fipr.s Normal file
View File

@ -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

View File

@ -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

118
sim/testsuite/sim/sh/ldrc.s Normal file
View File

@ -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

311
sim/testsuite/sim/sh/loop.s Normal file
View File

@ -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

View File

@ -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

View File

@ -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

1186
sim/testsuite/sim/sh/movxy.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -473,7 +473,7 @@ set_greg\@:
pop r0
.endm
.macro set_sr_bit
.macro set_sr_bit val
push r0
push r1
get_sr r0
@ -532,6 +532,7 @@ set_greg\@:
pop r0
bra .Lssr\@
nop
.align 2
.Lssrval\@:
.long \val
.Lssr\@:
@ -550,6 +551,7 @@ set_greg\@:
pop r0
bra .Lssr2_\@
nop
.align 2
.Lssr2val\@:
.long \val
.Lssr2_\@:
@ -564,6 +566,7 @@ set_greg\@:
pop r0
bra .Lscr\@
nop
.align 2
.Lscrval\@:
.long \val
.Lscr\@: