| # v850 div |
| # mach: v850e |
| # as(v850e): -mv850e |
| |
| .include "testutils.inc" |
| |
| # Regular division - check signs |
| # The S flag is based on the quotient, not the remainder |
| |
| seti 6, r1 |
| seti 45, r2 |
| div r1, r2, r3 |
| |
| flags 0 |
| reg r1, 6 |
| reg r2, 7 |
| reg r3, 3 |
| |
| seti -6, r1 |
| seti 45, r2 |
| div r1, r2, r3 |
| |
| flags s |
| reg r1, -6 |
| reg r2, -7 |
| reg r3, 3 |
| |
| seti 6, r1 |
| seti -45, r2 |
| div r1, r2, r3 |
| |
| flags s |
| reg r1, 6 |
| reg r2, -7 |
| reg r3, -3 |
| |
| seti -6, r1 |
| seti -45, r2 |
| div r1, r2, r3 |
| |
| flags 0 |
| reg r1, -6 |
| reg r2, 7 |
| reg r3, -3 |
| |
| # If the data is divided by zero, OV=1 and the quotient is undefined. |
| # According to NEC, the S and Z flags, and the output registers, are |
| # unchanged. |
| |
| noflags |
| seti 0, r1 |
| seti 45, r2 |
| seti 67, r3 |
| div r1, r2, r3 |
| |
| flags v |
| reg r2, 45 |
| reg r3, 67 |
| |
| allflags |
| seti 0, r1 |
| seti 45, r2 |
| seti 67, r3 |
| div r1, r2, r3 |
| |
| flags sat + c + v + s + z |
| reg r2, 45 |
| reg r3, 67 |
| |
| # Zero / (N!=0) => normal |
| |
| noflags |
| seti 45, r1 |
| seti 0, r2 |
| seti 67, r3 |
| div r1, r2, r3 |
| |
| flags z |
| reg r1, 45 |
| reg r2, 0 |
| reg r3, 0 |
| |
| # Test for regular overflow |
| |
| noflags |
| seti -1, r1 |
| seti 0x80000000, r2 |
| seti 67, r3 |
| div r1, r2, r3 |
| |
| flags v + s |
| reg r1, -1 |
| reg r2, 0x80000000 |
| reg r3, 0 |
| |
| # The Z flag is based on the quotient, not the remainder |
| |
| noflags |
| seti 45, r1 |
| seti 16, r2 |
| div r1, r2, r3 |
| |
| flags z |
| reg r2, 0 |
| reg r3, 16 |
| |
| # If the quot and rem registers are the same, the remainder is stored. |
| |
| seti 6, r1 |
| seti 45, r2 |
| div r1, r2, r2 |
| |
| flags 0 |
| reg r1, 6 |
| reg r2, 3 |
| |
| |
| pass |