| # v850 sar |
| # mach: all |
| |
| .include "testutils.inc" |
| |
| # CY is set to 1 if the bit shifted out last is 1, else 0 |
| # OV is set to zero. |
| # Z is set if the result is 0, else 0 |
| |
| noflags |
| seti 4, r1 |
| seti 0x00000000, r2 |
| sar r1, r2 |
| |
| flags z |
| reg r2, 0 |
| |
| noflags |
| seti 4, r1 |
| seti 0x00000001, r2 |
| sar r1, r2 |
| |
| flags z |
| reg r2, 0 |
| |
| noflags |
| seti 4, r1 |
| seti 0x00000008, r2 |
| sar r1, r2 |
| |
| flags c + z |
| reg r2, 0 |
| |
| noflags |
| seti 0x00000000, r2 |
| sar 4, r2 |
| |
| flags z |
| reg r2, 0 |
| |
| noflags |
| seti 0x00000001, r2 |
| sar 4, r2 |
| |
| flags z |
| reg r2, 0 |
| |
| noflags |
| seti 0x00000008, r2 |
| sar 4, r2 |
| |
| flags c + z |
| reg r2, 0 |
| |
| # However, if the number of shifts is 0, CY is 0. |
| |
| noflags |
| seti 0, r1 |
| seti 0xffffffff, r2 |
| sar r1, r2 |
| |
| flags s |
| reg r2, 0xffffffff |
| |
| noflags |
| seti 0xffffffff, r2 |
| sar 0, r2 |
| |
| flags s |
| reg r2, 0xffffffff |
| |
| # Old MSB is copied as new MSB after shift |
| # S is 1 if the result is negative, else 0 |
| |
| noflags |
| seti 1, r1 |
| seti 0x80000000, r2 |
| sar r1, r2 |
| |
| flags s |
| reg r2, 0xc0000000 |
| |
| noflags |
| seti 1, r1 |
| seti 0x40000000, r2 |
| sar r1, r2 |
| |
| flags 0 |
| reg r2, 0x20000000 |
| |
| pass |