| # sh testcase for mulu.w $rm, $rn -*- Asm -*- |
| # mach: all |
| # as: -isa=shcompact |
| # ld: -m shelf32 |
| |
| .include "compact/testutils.inc" |
| |
| start |
| |
| sts mach, r7 |
| |
| .global mulsw |
| zero: |
| mov #0, r0 |
| mov #1, r1 |
| mulu.w r0, r1 |
| |
| # Check the result. |
| sts macl, r1 |
| mov #0, r0 |
| cmp/eq r0, r1 |
| bf wrong |
| |
| sxs: |
| # Small * small. |
| mov #1, r0 |
| mov #2, r1 |
| mulu.w r0, r1 |
| |
| # Check the result. |
| sts macl, r1 |
| mov #2, r0 |
| cmp/eq r0, r1 |
| bf wrong |
| |
| sxl: |
| # Small * large. |
| mov #1, r1 |
| mov #0, r0 |
| or #255, r0 |
| shll8 r0 |
| mulu.w r1, r0 |
| |
| # Check the result. |
| sts macl, r1 |
| mov #0, r0 |
| or #255, r0 |
| shll8 r0 |
| cmp/eq r0, r1 |
| bf wrong |
| |
| lxs: |
| # Large * small. |
| mov #0, r0 |
| or #255, r0 |
| shll8 r0 |
| mov #1, r1 |
| mulu.w r0, r1 |
| |
| # Check the result. |
| sts macl, r1 |
| mov #0, r0 |
| or #255, r0 |
| shll8 r0 |
| cmp/eq r0, r1 |
| bf wrong |
| |
| lxl: |
| # Large * large. |
| mov #0, r0 |
| or #255, r0 |
| shll8 r0 |
| mov r0, r1 |
| mulu.w r0, r1 |
| |
| # Check the result. |
| sts macl, r1 |
| mov #0, r0 |
| or #254, r0 |
| shll8 r0 |
| or #1, r0 |
| shll16 r0 |
| cmp/eq r0, r1 |
| bf wrong |
| |
| invariant: |
| # Ensure MACH is invariant. |
| sts mach, r8 |
| cmp/eq r7, r8 |
| bf wrong |
| |
| okay: |
| pass |
| |
| wrong: |
| fail |