Advertisement
Zeda

div32_32

Dec 11th, 2018
567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  1. #define var_x fpOP2 ;output
  2. #define var_b fpOP2 ; 4 bytes, result gets copied to bottom anyways
  3. div32_32:
  4. ;3114.134cc
  5. ;HLIX/(var_x+4)
  6. ld bc,(var_x+6)
  7. call divide32_16
  8. ld a,e \ cpl \ ld e,a
  9. ld a,d \ cpl \ ld d,a
  10. ld (var_b+2),de ;top 16-bit digit
  11. ;Need to adjust the remainder
  12. ;(HL:(00-DE*(var_x+4))
  13. push hl
  14. ld bc,(var_x+4)
  15. call mul16
  16.  
  17. ;DEHL
  18. ld b,d
  19. ld c,e
  20. ex de,hl
  21. pop hl
  22. ;BCDE
  23. xor a
  24. sub e
  25. ld e,a
  26. ld a,0
  27. sbc a,d
  28. ld d,a
  29. sbc hl,bc
  30. jr nc,+_
  31. ld bc,(var_b+2)
  32. dec bc
  33. ld (var_b+2),bc
  34. ld bc,(var_x+4)
  35. ex de,hl
  36. add hl,bc
  37. ld bc,(var_x+4)
  38. ex de,hl
  39. adc hl,bc
  40. _:
  41. ;HLDE is the new remainder
  42. push de
  43. pop ix
  44. ld bc,(var_x+6)
  45. call divide32_16
  46. ld a,e \ cpl \ ld l,a
  47. ld a,d \ cpl \ ld h,a
  48. ld (var_b),hl ;low 16-bits
  49. ret
  50. divide32_16:
  51. ;HLIX/BC -> DE, BC>=HL
  52. ;max: 1262cc
  53. ;min: 967cc
  54. ;avg: 1087.25cc
  55. xor a
  56. add ix,ix \ adc hl,hl \ jp c,div1632_0_2
  57. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_1_2
  58. div1632_1_1:
  59. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_2_2
  60. div1632_2_1:
  61. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_3_2
  62. div1632_3_1:
  63. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_4_2
  64. div1632_4_1:
  65. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_5_2
  66. div1632_5_1:
  67. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_6_2
  68. div1632_6_1:
  69. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_7_2
  70. div1632_7_1:
  71. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_8_2
  72. div1632_8_1:
  73. ld d,a
  74. xor a
  75. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_9_2
  76. div1632_9_1:
  77. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_10_2
  78. div1632_10_1:
  79. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_11_2
  80. div1632_11_1:
  81. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_12_2
  82. div1632_12_1:
  83. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_13_2
  84. div1632_13_1:
  85. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_14_2
  86. div1632_14_1:
  87. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_15_2
  88. div1632_15_1:
  89. add a,a
  90. ld e,a
  91. sbc hl,bc \ ret nc \ add hl,bc \ inc e \ ret
  92.  
  93.  
  94. div1632_0_2:
  95. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_1_1
  96. div1632_1_2:
  97. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_2_1
  98. div1632_2_2:
  99. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_3_1
  100. div1632_3_2:
  101. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_4_1
  102. div1632_4_2:
  103. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_5_1
  104. div1632_5_2:
  105. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_6_1
  106. div1632_6_2:
  107. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_7_1
  108. div1632_7_2:
  109. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_8_1
  110. div1632_8_2:
  111.  
  112. ld d,a
  113. xor a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_9_1
  114. div1632_9_2:
  115. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_10_1
  116. div1632_10_2:
  117. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_11_1
  118. div1632_11_2:
  119. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_12_1
  120. div1632_12_2:
  121. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_13_1
  122. div1632_13_2:
  123. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_14_1
  124. div1632_14_2:
  125. add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_15_1
  126. div1632_15_2:
  127. add a,a \ ld e,a \ sbc hl,bc \ ret
  128.  
  129. divide16:
  130. ;max: 958cc
  131. ;min: 663cc
  132. ;avg: 783.25cc
  133. xor a
  134. add hl,hl \ jp c,div16_0_2
  135. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_1_2
  136. div16_1_1:
  137. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_2_2
  138. div16_2_1:
  139. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_3_2
  140. div16_3_1:
  141. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_4_2
  142. div16_4_1:
  143. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_5_2
  144. div16_5_1:
  145. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_6_2
  146. div16_6_1:
  147. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_7_2
  148. div16_7_1:
  149. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_8_2
  150. div16_8_1:
  151. ld d,a
  152. xor a
  153. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_9_2
  154. div16_9_1:
  155. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_10_2
  156. div16_10_1:
  157. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_11_2
  158. div16_11_1:
  159. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_12_2
  160. div16_12_1:
  161. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_13_2
  162. div16_13_1:
  163. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_14_2
  164. div16_14_1:
  165. sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_15_2
  166. div16_15_1:
  167. add a,a
  168. ld e,a
  169. sbc hl,bc \ ret nc \ add hl,bc \ inc e \ ret
  170.  
  171.  
  172. div16_0_2:
  173. add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_1_1
  174. div16_1_2:
  175. add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_2_1
  176. div16_2_2:
  177. add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_3_1
  178. div16_3_2:
  179. add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_4_1
  180. div16_4_2:
  181. add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_5_1
  182. div16_5_2:
  183. add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_6_1
  184. div16_6_2:
  185. add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_7_1
  186. div16_7_2:
  187. add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_8_1
  188. div16_8_2:
  189.  
  190. ld d,a
  191. xor a \ sbc hl,bc \ add hl,hl \ jr nc,div16_9_1
  192. div16_9_2:
  193. add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_10_1
  194. div16_10_2:
  195. add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_11_1
  196. div16_11_2:
  197. add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_12_1
  198. div16_12_2:
  199. add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_13_1
  200. div16_13_2:
  201. add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_14_1
  202. div16_14_2:
  203. add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_15_1
  204. div16_15_2:
  205. add a,a \ ld e,a \ sbc hl,bc \ ret
  206. #undefine var_x
  207. #undefine var_b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement