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