divhu.cgs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # v850 divu
  2. # mach: v850e
  3. # as(v850e): -mv850e
  4. .include "testutils.inc"
  5. seti 6, r1
  6. seti 45, r2
  7. divu r1, r2, r3
  8. flags 0
  9. reg r1, 6
  10. reg r2, 7
  11. reg r3, 3
  12. seti 4, r1
  13. seti 0x40000000, r2
  14. divu r1, r2, r3
  15. flags 0
  16. reg r1, 4
  17. reg r2, 0x10000000
  18. reg r3, 0
  19. # Only the lower half of the dividend is used
  20. seti 0x00010006, r1
  21. seti 45, r2
  22. divhu r1, r2, r3
  23. flags 0
  24. reg r1, 0x00010006
  25. reg r2, 7
  26. reg r3, 3
  27. # If the data is divided by zero, OV=1 and the quotient is undefined.
  28. # According to NEC, the S and Z flags, and the output registers, are
  29. # unchanged.
  30. noflags
  31. seti 0, r1
  32. seti 45, r2
  33. seti 67, r3
  34. divu r1, r2, r3
  35. flags v
  36. reg r2, 45
  37. reg r3, 67
  38. allflags
  39. seti 0, r1
  40. seti 45, r2
  41. seti 67, r3
  42. divu r1, r2, r3
  43. flags sat + c + v + s + z
  44. reg r2, 45
  45. reg r3, 67
  46. # Zero / (N!=0) => normal
  47. noflags
  48. seti 45, r1
  49. seti 0, r2
  50. seti 67, r3
  51. divu r1, r2, r3
  52. flags z
  53. reg r1, 45
  54. reg r2, 0
  55. reg r3, 0
  56. # The Z flag is based on the quotient, not the remainder
  57. noflags
  58. seti 45, r1
  59. seti 16, r2
  60. divu r1, r2, r3
  61. flags z
  62. reg r2, 0
  63. reg r3, 16
  64. # If the quot and rem registers are the same, the remainder is stored.
  65. seti 6, r1
  66. seti 45, r2
  67. divu r1, r2, r2
  68. flags 0
  69. reg r1, 6
  70. reg r2, 3
  71. pass