fp68881.s 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. .define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8
  2. .define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8
  3. .define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8
  4. .define .cmf4, .cmf8
  5. .sect .text
  6. .sect .rom
  7. .sect .data
  8. .sect .bss
  9. ! $Id$
  10. ! Implement interface to floating point package for M68881
  11. .sect .text
  12. .adf4:
  13. move.l (sp)+,a0
  14. fmove.s (sp),fp0
  15. fadd.s 4(sp),fp0
  16. fmove.s fp0,4(sp)
  17. jmp (a0)
  18. .adf8:
  19. move.l (sp)+,a0
  20. fmove.d (sp),fp0
  21. fadd.d 8(sp),fp0
  22. fmove.d fp0,8(sp)
  23. jmp (a0)
  24. .sbf4:
  25. move.l (sp)+,a0
  26. fmove.s (sp),fp0
  27. fmove.s 4(sp),fp1
  28. fsub fp0,fp1
  29. fmove.s fp1,4(sp)
  30. jmp (a0)
  31. .sbf8:
  32. move.l (sp)+,a0
  33. fmove.d (sp),fp0
  34. fmove.d 8(sp),fp1
  35. fsub fp0,fp1
  36. fmove.d fp1,8(sp)
  37. jmp (a0)
  38. .mlf4:
  39. move.l (sp)+,a0
  40. fmove.s (sp),fp0
  41. fmul.s 4(sp),fp0
  42. fmove.s fp0,4(sp)
  43. jmp (a0)
  44. .mlf8:
  45. move.l (sp)+,a0
  46. fmove.d (sp),fp0
  47. fmul.d 8(sp),fp0
  48. fmove.d fp0,8(sp)
  49. jmp (a0)
  50. .dvf4:
  51. move.l (sp)+,a0
  52. fmove.s (sp),fp0
  53. fmove.s 4(sp),fp1
  54. fdiv fp0,fp1
  55. fmove.s fp1,4(sp)
  56. jmp (a0)
  57. .dvf8:
  58. move.l (sp)+,a0
  59. fmove.d (sp),fp0
  60. fmove.d 8(sp),fp1
  61. fdiv fp0,fp1
  62. fmove.d fp1,8(sp)
  63. jmp (a0)
  64. .ngf4:
  65. fmove.s 4(sp),fp0
  66. fneg fp0
  67. fmove.s fp0,4(sp)
  68. rts
  69. .ngf8:
  70. fmove.d 4(sp),fp0
  71. fneg fp0
  72. fmove.d fp0,4(sp)
  73. rts
  74. .fif4:
  75. move.l (sp)+,a0
  76. move.l (sp),a1
  77. fmove.s 4(sp),fp0
  78. fmove.s 8(sp),fp1
  79. fmul fp0,fp1
  80. fintrz fp1,fp0
  81. fsub fp0,fp1
  82. fmove.s fp1,4(a1)
  83. fmove.s fp0,(a1)
  84. jmp (a0)
  85. .fif8:
  86. move.l (sp)+,a0
  87. move.l (sp),a1
  88. fmove.d 4(sp),fp0
  89. fmove.d 12(sp),fp1
  90. fmul fp0,fp1
  91. fintrz fp1,fp0
  92. fsub fp0,fp1
  93. fmove.d fp1,8(a1)
  94. fmove.d fp0,(a1)
  95. jmp (a0)
  96. .fef4:
  97. move.l (sp)+,a0
  98. move.l (sp),a1
  99. fmove.s 4(sp),fp0
  100. fgetexp fp0,fp1
  101. fmove.l fpsr,d0
  102. and.l #0x2000,d0 ! set if Infinity
  103. beq 1f
  104. move.l #129,(a1)
  105. fmove.s 4(sp),fp0
  106. fblt 2f
  107. move.l #0x3f000000,4(a1)
  108. jmp (a0)
  109. 2:
  110. move.l #0xbf000000,4(a1)
  111. jmp (a0)
  112. 1:
  113. fmove.l fp1,d0
  114. add.l #1,d0
  115. fgetman fp0
  116. fbne 1f
  117. clr.l d0
  118. bra 2f
  119. 1:
  120. fmove.l #2,fp1
  121. fdiv fp1,fp0
  122. 2:
  123. fmove.s fp0,4(a1)
  124. move.l d0,(a1)
  125. jmp (a0)
  126. .fef8:
  127. move.l (sp)+,a0
  128. move.l (sp),a1
  129. fmove.d 4(sp),fp0
  130. fgetexp fp0,fp1
  131. fmove.l fpsr,d0
  132. and.l #0x2000,d0 ! set if Infinity
  133. beq 1f
  134. move.l #1025,(a1)
  135. fmove.d 4(sp),fp0
  136. fblt 2f
  137. move.l #0x3fe00000,4(a1)
  138. clr.l 8(a1)
  139. jmp (a0)
  140. 2:
  141. move.l #0xbfe00000,4(a1)
  142. clr.l 8(a1)
  143. jmp (a0)
  144. 1:
  145. fmove.l fp1,d0
  146. add.l #1,d0
  147. fgetman fp0
  148. fbne 1f
  149. clr.l d0
  150. bra 2f
  151. 1:
  152. fmove.l #2,fp1
  153. fdiv fp1,fp0
  154. 2:
  155. fmove.d fp0,4(a1)
  156. move.l d0,(a1)
  157. jmp (a0)
  158. .cif4:
  159. move.l (sp)+,a0
  160. fmove.l 4(sp),fp0
  161. fmove.s fp0,4(sp)
  162. jmp (a0)
  163. .cif8:
  164. move.l (sp)+,a0
  165. fmove.l 4(sp),fp0
  166. fmove.d fp0,(sp)
  167. jmp (a0)
  168. .cuf4:
  169. move.l (sp)+,a0
  170. fmove.l 4(sp),fp0
  171. tst.l 4(sp)
  172. bge 1f
  173. fsub.l #-2147483648,fp0
  174. fsub.l #-2147483648,fp0
  175. 1:
  176. fmove.s fp0,4(sp)
  177. jmp (a0)
  178. .cuf8:
  179. move.l (sp)+,a0
  180. fmove.l 4(sp),fp0
  181. tst.l 4(sp)
  182. bge 1f
  183. fsub.l #-2147483648,fp0
  184. fsub.l #-2147483648,fp0
  185. 1:
  186. fmove.d fp0,(sp)
  187. jmp (a0)
  188. .cfi:
  189. move.l (sp)+,a0
  190. move.l 4(sp),d0
  191. cmp.l #4,d0
  192. bne 1f
  193. fmove.s 8(sp),fp0
  194. fintrz fp0,fp0
  195. fmove.l fp0,8(sp)
  196. jmp (a0)
  197. 1:
  198. fmove.d 8(sp),fp0
  199. fintrz fp0,fp0
  200. fmove.l fp0,12(sp)
  201. jmp (a0)
  202. .cfu:
  203. move.l (sp)+,a0
  204. move.l 4(sp),d0
  205. cmp.l #4,d0
  206. bne 1f
  207. fmove.s 8(sp),fp0
  208. fabs fp0
  209. cmp.l #0x4f000000,8(sp)
  210. bge 2f
  211. fintrz fp0,fp0
  212. fmove.l fp0,8(sp)
  213. jmp (a0)
  214. 2:
  215. fadd.l #-2147483648,fp0
  216. fintrz fp0,fp0
  217. fmove.l fp0,d0
  218. bchg #31,d0
  219. move.l d0,8(sp)
  220. jmp (a0)
  221. 1:
  222. fmove.d 8(sp),fp0
  223. fabs fp0
  224. cmp.l #0x41e00000,8(sp)
  225. bge 1f
  226. fintrz fp0,fp0
  227. fmove.l fp0,12(sp)
  228. jmp (a0)
  229. 1:
  230. fadd.l #-2147483648,fp0
  231. fintrz fp0,fp0
  232. fmove.l fp0,d0
  233. bchg #31,d0
  234. move.l d0,12(sp)
  235. jmp (a0)
  236. .cff4:
  237. move.l (sp)+,a0
  238. fmove.d (sp),fp0
  239. fmove.s fp0,4(sp)
  240. jmp (a0)
  241. .cff8:
  242. move.l (sp)+,a0
  243. fmove.s (sp),fp0
  244. fmove.d fp0,(sp)
  245. jmp (a0)
  246. .cmf4:
  247. move.l (sp)+,a0
  248. clr.l d0
  249. fmove.s (sp),fp0
  250. fmove.s 4(sp),fp1
  251. fcmp fp0,fp1
  252. fbeq 2f
  253. fblt 1f
  254. add.l #1,d0
  255. jmp (a0)
  256. 1:
  257. sub.l #1,d0
  258. 2:
  259. jmp (a0)
  260. .cmf8:
  261. move.l (sp)+,a0
  262. clr.l d0
  263. fmove.d (sp),fp0
  264. fmove.d 8(sp),fp1
  265. fcmp fp0,fp1
  266. fbeq 2f
  267. fblt 1f
  268. add.l #1,d0
  269. jmp (a0)
  270. 1:
  271. sub.l #1,d0
  272. 2:
  273. jmp (a0)