| # mach: aarch64 |
| |
| # Check the multiply highpart instructions: smulh, umulh. |
| |
| # Test -2*2, -1<<32*-1<<32, -2*-2, and 2*2. |
| |
| .include "testutils.inc" |
| |
| start |
| |
| mov x0, #-2 |
| mov x1, #2 |
| smulh x2, x0, x1 |
| cmp x2, #-1 |
| bne .Lfailure |
| umulh x3, x0, x1 |
| cmp x3, #1 |
| bne .Lfailure |
| |
| mov w0, #-1 |
| lsl x0, x0, #32 // 0xffffffff00000000 |
| mov x1, x0 |
| smulh x2, x0, x1 |
| cmp x2, #1 |
| bne .Lfailure |
| umulh x3, x0, x1 |
| mov w4, #-2 |
| lsl x4, x4, #32 |
| add x4, x4, #1 // 0xfffffffe00000001 |
| cmp x3, x4 |
| bne .Lfailure |
| |
| mov x0, #-2 |
| mov x1, #-2 |
| smulh x2, x0, x1 |
| cmp x2, #0 |
| bne .Lfailure |
| umulh x3, x0, x1 |
| cmp x3, #-4 |
| bne .Lfailure |
| |
| mov x0, #2 |
| mov x1, #2 |
| smulh x2, x0, x1 |
| cmp x2, #0 |
| bne .Lfailure |
| umulh x3, x0, x1 |
| cmp x3, #0 |
| bne .Lfailure |
| |
| pass |
| .Lfailure: |
| fail |