274 lines
3.4 KiB
Plaintext
274 lines
3.4 KiB
Plaintext
# sh testcase for all fmov instructions
|
|
# mach: all
|
|
# as: -isa=shcompact
|
|
# ld: -m shelf32
|
|
|
|
.include "compact/testutils.inc"
|
|
|
|
.macro init
|
|
fldi0 fr0
|
|
fldi1 fr2
|
|
.endm
|
|
|
|
# Set the SZ (SiZe) bit in the fpscr.
|
|
.macro _setsz
|
|
sts fpscr, r7
|
|
mov #16, r8
|
|
shll16 r8
|
|
or r8, r7
|
|
lds r7, fpscr
|
|
.endm
|
|
|
|
# Clear the SZ bit.
|
|
.macro _clrsz
|
|
sts fpscr, r7
|
|
mov #16, r8
|
|
shll16 r8
|
|
not r8, r8
|
|
and r8, r7
|
|
lds r7, fpscr
|
|
.endm
|
|
start
|
|
|
|
fmov1: # Test fr -> fr.
|
|
init
|
|
_clrpr
|
|
_clrsz
|
|
fmov fr0, fr10
|
|
# Ensure fr0 and fr10 are now equal.
|
|
fcmp/eq fr0, fr10
|
|
bt fmov2
|
|
fail
|
|
|
|
fmov2: # Test dr -> dr.
|
|
init
|
|
_setpr
|
|
_setsz
|
|
fmov dr0, dr2
|
|
# Ensure dr0 and dr2 are now equal.
|
|
fcmp/eq dr0, dr2
|
|
bt fmov3
|
|
fail
|
|
|
|
fmov3: # Test dr -> xd and xd -> dr.
|
|
init
|
|
_setsz
|
|
fmov dr0, xd0
|
|
# Ensure dr0 and xd0 are now equal.
|
|
fmov xd0, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt fmov4
|
|
fail
|
|
|
|
fmov4: # Test xd -> xd.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
fmov dr0, xd0
|
|
fmov xd0, xd2
|
|
fmov xd2, dr2
|
|
# Ensure dr0 and dr2 are now equal.
|
|
fcmp/eq dr0, dr2
|
|
bt fmov5
|
|
fail
|
|
|
|
fmov5: # Test fr -> @rn and @rn -> fr.
|
|
init
|
|
_clrsz
|
|
_clrpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
fmov fr0, @r0
|
|
fmov @r0, fr1
|
|
fcmp/eq fr0, fr1
|
|
bt fmov6
|
|
fail
|
|
|
|
fmov6: # Test dr -> @rn and @rn -> dr.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
fmov dr0, @r0
|
|
fmov @r0, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt fmov7
|
|
fail
|
|
|
|
fmov7: # Test xd -> @rn and @rn -> xd.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
fmov dr0, xd0
|
|
fmov xd0, @r0
|
|
fmov @r0, xd2
|
|
fmov xd2, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt fmov8
|
|
fail
|
|
|
|
fmov8: # Test fr -> @-rn.
|
|
init
|
|
_clrsz
|
|
_clrpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
# Preserve.
|
|
mov r0, r1
|
|
fmov fr0, @-r0
|
|
fmov @r0, fr2
|
|
fcmp/eq fr0, fr2
|
|
bt f8b
|
|
fail
|
|
f8b: # check pre-dec.
|
|
add #4, r0
|
|
cmp/eq r0, r1
|
|
bt fmov9
|
|
fail
|
|
|
|
fmov9: # Test dr -> @-rn.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
# Preserve r0.
|
|
mov r0, r1
|
|
fmov dr0, @-r0
|
|
fmov @r0, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt f9b
|
|
fail
|
|
f9b: # check pre-dec.
|
|
add #8, r0
|
|
cmp/eq r0, r1
|
|
bt fmov10
|
|
fail
|
|
|
|
fmov10: # Test xd -> @-rn.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
# Preserve r0.
|
|
mov r0, r1
|
|
fmov dr0, xd0
|
|
fmov xd0, @-r0
|
|
fmov @r0, xd2
|
|
fmov xd2, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt f10b
|
|
fail
|
|
f10b: # check pre-dec.
|
|
add #8, r0
|
|
cmp/eq r0, r1
|
|
bt fmov11
|
|
fail
|
|
|
|
fmov11: # Test @rn+ -> fr.
|
|
init
|
|
_clrsz
|
|
_clrpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
# Preserve r0.
|
|
mov r0, r1
|
|
fmov fr0, @r0
|
|
fmov @r0+, fr2
|
|
fcmp/eq fr0, fr2
|
|
bt f11b
|
|
fail
|
|
f11b: # check post-inc.
|
|
add #4, r1
|
|
cmp/eq r0, r1
|
|
bt fmov12
|
|
fail
|
|
|
|
fmov12: # Test @rn+ -> dr.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
# preserve r0.
|
|
mov r0, r1
|
|
fmov dr0, @r0
|
|
fmov @r0+, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt f12b
|
|
fail
|
|
f12b: # check post-inc.
|
|
add #8, r1
|
|
cmp/eq r0, r1
|
|
bt fmov13
|
|
fail
|
|
|
|
fmov13: # Test @rn -> xd.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
# Preserve r0.
|
|
mov r0, r1
|
|
fmov dr0, xd0
|
|
fmov xd0, @r0
|
|
fmov @r0+, xd2
|
|
fmov xd2, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt f13b
|
|
fail
|
|
f13b:
|
|
add #8, r1
|
|
cmp/eq r0, r1
|
|
bt fmov14
|
|
fail
|
|
|
|
fmov14: # Test fr -> @(r0,rn), @(r0, rn) -> fr.
|
|
init
|
|
_clrsz
|
|
_clrpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
mov #0, r1
|
|
fmov fr0, @(r0, r1)
|
|
fmov @(r0, r1), fr1
|
|
fcmp/eq fr0, fr1
|
|
bt fmov15
|
|
fail
|
|
|
|
fmov15: # Test dr -> @(r0, rn), @(r0, rn) -> dr.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
mov #0, r1
|
|
fmov dr0, @(r0, r1)
|
|
fmov @(r0, r1), dr2
|
|
fcmp/eq dr0, dr2
|
|
bt fmov16
|
|
fail
|
|
|
|
fmov16: # Test xd -> @(r0, rn), @(r0, rn) -> xd.
|
|
init
|
|
_setsz
|
|
_setpr
|
|
mov #40, r0
|
|
shll8 r0
|
|
mov #0, r1
|
|
fmov dr0, xd0
|
|
fmov xd0, @(r0, r1)
|
|
fmov @(r0, r1), xd2
|
|
fmov xd2, dr2
|
|
fcmp/eq dr0, dr2
|
|
bt okay
|
|
fail
|
|
|
|
okay:
|
|
pass
|