divh_3.cgs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # v850 divh_3
  2. # mach: v850e
  3. # as(v850e): -mv850e
  4. .include "testutils.inc"
  5. # Regular divhision - check signs
  6. # The S flag is based on the quotient, not the remainder
  7. seti 6, r1
  8. seti 45, r2
  9. divh r1, r2, r3
  10. flags 0
  11. reg r1, 6
  12. reg r2, 7
  13. reg r3, 3
  14. seti -6, r1
  15. seti 45, r2
  16. divh r1, r2, r3
  17. flags s
  18. reg r1, -6
  19. reg r2, -7
  20. reg r3, 3
  21. seti 6, r1
  22. seti -45, r2
  23. divh r1, r2, r3
  24. flags s
  25. reg r1, 6
  26. reg r2, -7
  27. reg r3, -3
  28. seti -6, r1
  29. seti -45, r2
  30. divh r1, r2, r3
  31. flags 0
  32. reg r1, -6
  33. reg r2, 7
  34. reg r3, -3
  35. # Only the lower half of the dividend is used
  36. seti 0x0000fffa, r1
  37. seti -45, r2
  38. divh r1, r2, r3
  39. flags 0
  40. reg r1, 0x0000fffa
  41. reg r2, 7
  42. reg r3, -3
  43. # If the data is divhided by zero, OV=1 and the quotient is undefined.
  44. # According to NEC, the S and Z flags, and the output registers, are
  45. # unchanged.
  46. noflags
  47. seti 0, r1
  48. seti 45, r2
  49. seti 67, r3
  50. divh r1, r2, r3
  51. flags v
  52. reg r2, 45
  53. reg r3, 67
  54. allflags
  55. seti 0, r1
  56. seti 45, r2
  57. seti 67, r3
  58. divh r1, r2, r3
  59. flags sat + c + v + s + z
  60. reg r2, 45
  61. reg r3, 67
  62. # Zero / (N!=0) => normal
  63. noflags
  64. seti 45, r1
  65. seti 0, r2
  66. seti 67, r3
  67. divh r1, r2, r3
  68. flags z
  69. reg r1, 45
  70. reg r2, 0
  71. reg r3, 0
  72. # Test for regular overflow
  73. noflags
  74. seti -1, r1
  75. seti 0x80000000, r2
  76. seti 67, r3
  77. divh r1, r2, r3
  78. flags v + s
  79. reg r1, -1
  80. reg r2, 0x80000000
  81. reg r3, 0
  82. # The Z flag is based on the quotient, not the remainder
  83. noflags
  84. seti 45, r1
  85. seti 16, r2
  86. divh r1, r2, r3
  87. flags z
  88. reg r2, 0
  89. reg r3, 16
  90. # If the quot and rem registers are the same, the remainder is stored.
  91. seti 6, r1
  92. seti 45, r2
  93. divh r1, r2, r2
  94. flags 0
  95. reg r1, 6
  96. reg r2, 3
  97. pass