l_entry.s
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:148k
源码类别:

VxWorks

开发平台:

C/C++

  1. |    registers.
  2. | 3. Delete handling of the fpsr if you only care about
  3. |    the result.
  4. | 4. Some (most?) C compilers convert all float arguments
  5. |    to double, and provide no support at all for extended
  6. |    precision so remove the __l_fgetmans and __l_fgetmanx entry points.
  7. | 5. Move the result to d0/d1 if the compiler is that old.
  8. | Copyright (C) Motorola, Inc. 1991
  9. | All Rights Reserved
  10. |
  11. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  12. | The copyright notice above does not evidence any
  13. | actual or intended publication of such source code.
  14. | xref __l_tag
  15. | xref __l_sgetman
  16. | xref __l_szero
  17. | xref __l_t_operr
  18. | xref __l_mon_nan
  19. | xref __l_sgetmand
  20. .globl __l_fgetmans
  21. __l_fgetmans:
  22. link a6,#-LOCAL_SIZE
  23. moveml d0-d1/a0-a1,a6@(USER_DA)
  24. fmovemx fp0-fp3,a6@(USER_FP0)
  25. fmovel fpsr,a6@(USER_FPSR)
  26. fmovel fpcr,a6@(USER_FPCR)
  27. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  28. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  29. |
  30. | copy, convert and tag input argument
  31. |
  32. fmoves a6@(8),fp0
  33. fmovex fp0,a6@(ETEMP)
  34. lea a6@(ETEMP),a0
  35. bsrl __l_tag
  36. moveb d0,a6@(STAG)
  37. tstb d0
  38. jne  L_1162
  39. bsrl __l_sgetman |  normalized (regular) number
  40. jra  L_1166
  41. L_1162:
  42. cmpb #0x20,d0 |  zero?
  43. jne  L_1163
  44. bsrl __l_szero
  45. jra  L_1166
  46. L_1163:
  47. cmpb #0x40,d0 |  infinity?
  48. jne  L_1164
  49. bsrl __l_t_operr
  50. jra  L_1166
  51. L_1164:
  52. cmpb #0x60,d0 |  NaN?
  53. jne  L_1165
  54. bsrl __l_mon_nan
  55. jra  L_1166
  56. L_1165:
  57. bsrl __l_sgetmand |  assuming a denorm...
  58. L_1166:
  59. fmovel fpsr,d0 |  update status register
  60. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  61. fmovel d0,fpsr
  62. |
  63. | Result is now in FP0
  64. |
  65. moveml a6@(USER_DA),d0-d1/a0-a1
  66. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  67. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  68. unlk a6
  69. rts
  70. .globl __l_fgetmand
  71. __l_fgetmand:
  72. link a6,#-LOCAL_SIZE
  73. moveml d0-d1/a0-a1,a6@(USER_DA)
  74. fmovemx fp0-fp3,a6@(USER_FP0)
  75. fmovel fpsr,a6@(USER_FPSR)
  76. fmovel fpcr,a6@(USER_FPCR)
  77. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  78. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  79. |
  80. | copy, convert and tag input argument
  81. |
  82. fmoved a6@(8),fp0
  83. fmovex fp0,a6@(ETEMP)
  84. lea a6@(ETEMP),a0
  85. bsrl __l_tag
  86. moveb d0,a6@(STAG)
  87. tstb d0
  88. jne  L_1167
  89. bsrl __l_sgetman |  normalized (regular) number
  90. jra  L_116B
  91. L_1167:
  92. cmpb #0x20,d0 |  zero?
  93. jne  L_1168
  94. bsrl __l_szero
  95. jra  L_116B
  96. L_1168:
  97. cmpb #0x40,d0 |  infinity?
  98. jne  L_1169
  99. bsrl __l_t_operr
  100. jra  L_116B
  101. L_1169:
  102. cmpb #0x60,d0 |  NaN?
  103. jne  L_116A
  104. bsrl __l_mon_nan
  105. jra  L_116B
  106. L_116A:
  107. bsrl __l_sgetmand |  assuming a denorm...
  108. L_116B:
  109. fmovel fpsr,d0 |  update status register
  110. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  111. fmovel d0,fpsr
  112. |
  113. | Result is now in FP0
  114. |
  115. moveml a6@(USER_DA),d0-d1/a0-a1
  116. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  117. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  118. unlk a6
  119. rts
  120. .globl __l_fgetmanx
  121. __l_fgetmanx:
  122. link a6,#-LOCAL_SIZE
  123. moveml d0-d1/a0-a1,a6@(USER_DA)
  124. fmovemx fp0-fp3,a6@(USER_FP0)
  125. fmovel fpsr,a6@(USER_FPSR)
  126. fmovel fpcr,a6@(USER_FPCR)
  127. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  128. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  129. |
  130. | copy, convert and tag input argument
  131. |
  132. fmovex a6@(8),fp0
  133. fmovex fp0,a6@(ETEMP)
  134. lea a6@(ETEMP),a0
  135. bsrl __l_tag
  136. moveb d0,a6@(STAG)
  137. tstb d0
  138. jne  L_116C
  139. bsrl __l_sgetman |  normalized (regular) number
  140. jra  L_116G
  141. L_116C:
  142. cmpb #0x20,d0 |  zero?
  143. jne  L_116D
  144. bsrl __l_szero
  145. jra  L_116G
  146. L_116D:
  147. cmpb #0x40,d0 |  infinity?
  148. jne  L_116E
  149. bsrl __l_t_operr
  150. jra  L_116G
  151. L_116E:
  152. cmpb #0x60,d0 |  NaN?
  153. jne  L_116F
  154. bsrl __l_mon_nan
  155. jra  L_116G
  156. L_116F:
  157. bsrl __l_sgetmand |  assuming a denorm...
  158. L_116G:
  159. fmovel fpsr,d0 |  update status register
  160. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  161. fmovel d0,fpsr
  162. |
  163. | Result is now in FP0
  164. |
  165. moveml a6@(USER_DA),d0-d1/a0-a1
  166. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  167. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  168. unlk a6
  169. rts
  170. |
  171. | MONADIC.GEN 1.3 4/30/91
  172. |
  173. | MONADIC.GEN --- generic MONADIC template
  174. |
  175. | This version saves all registers that will be used by the emulation
  176. | routines and restores all but FP0 on exit.  The FPSR is
  177. | updated to reflect the result of the operation.  Return value
  178. | is placed in FP0 for single, double and extended results.
  179. |
  180. | The package subroutines expect the incoming fpcr to be zeroed
  181. | since they need extended precision to work properly.  The
  182. /* | 'final' fpcr is expected in d1 so that the calculated result */
  183. | can be properly sized and rounded.  Also, if the incoming fpcr
  184. | has enabled any exceptions, the exception will be taken on the
  185. | final fmovem in this template.
  186. |
  187. | Customizations:
  188. | 1. Remove the moveml at the entry and exit of
  189. |    each routine if your compiler treats those
  190. |    registers as scratch.
  191. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  192. |    registers.
  193. | 3. Delete handling of the fpsr if you only care about
  194. |    the result.
  195. | 4. Some (most?) C compilers convert all float arguments
  196. |    to double, and provide no support at all for extended
  197. |    precision so remove the __l_flogns and __l_flognx entry points.
  198. | 5. Move the result to d0/d1 if the compiler is that old.
  199. | Copyright (C) Motorola, Inc. 1991
  200. | All Rights Reserved
  201. |
  202. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  203. | The copyright notice above does not evidence any
  204. | actual or intended publication of such source code.
  205. | xref __l_tag
  206. | xref __l_sslogn
  207. | xref __l_t_dz2
  208. | xref __l_sopr_inf
  209. | xref __l_mon_nan
  210. | xref __l_sslognd
  211. .globl __l_flogns
  212. __l_flogns:
  213. link a6,#-LOCAL_SIZE
  214. moveml d0-d1/a0-a1,a6@(USER_DA)
  215. fmovemx fp0-fp3,a6@(USER_FP0)
  216. fmovel fpsr,a6@(USER_FPSR)
  217. fmovel fpcr,a6@(USER_FPCR)
  218. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  219. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  220. |
  221. | copy, convert and tag input argument
  222. |
  223. fmoves a6@(8),fp0
  224. fmovex fp0,a6@(ETEMP)
  225. lea a6@(ETEMP),a0
  226. bsrl __l_tag
  227. moveb d0,a6@(STAG)
  228. tstb d0
  229. jne  L_1172
  230. bsrl __l_sslogn |  normalized (regular) number
  231. jra  L_1176
  232. L_1172:
  233. cmpb #0x20,d0 |  zero?
  234. jne  L_1173
  235. bsrl __l_t_dz2
  236. jra  L_1176
  237. L_1173:
  238. cmpb #0x40,d0 |  infinity?
  239. jne  L_1174
  240. bsrl __l_sopr_inf
  241. jra  L_1176
  242. L_1174:
  243. cmpb #0x60,d0 |  NaN?
  244. jne  L_1175
  245. bsrl __l_mon_nan
  246. jra  L_1176
  247. L_1175:
  248. bsrl __l_sslognd |  assuming a denorm...
  249. L_1176:
  250. fmovel fpsr,d0 |  update status register
  251. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  252. fmovel d0,fpsr
  253. |
  254. | Result is now in FP0
  255. |
  256. moveml a6@(USER_DA),d0-d1/a0-a1
  257. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  258. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  259. unlk a6
  260. rts
  261. .globl __l_flognd
  262. __l_flognd:
  263. link a6,#-LOCAL_SIZE
  264. moveml d0-d1/a0-a1,a6@(USER_DA)
  265. fmovemx fp0-fp3,a6@(USER_FP0)
  266. fmovel fpsr,a6@(USER_FPSR)
  267. fmovel fpcr,a6@(USER_FPCR)
  268. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  269. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  270. |
  271. | copy, convert and tag input argument
  272. |
  273. fmoved a6@(8),fp0
  274. fmovex fp0,a6@(ETEMP)
  275. lea a6@(ETEMP),a0
  276. bsrl __l_tag
  277. moveb d0,a6@(STAG)
  278. tstb d0
  279. jne  L_1177
  280. bsrl __l_sslogn |  normalized (regular) number
  281. jra  L_117B
  282. L_1177:
  283. cmpb #0x20,d0 |  zero?
  284. jne  L_1178
  285. bsrl __l_t_dz2
  286. jra  L_117B
  287. L_1178:
  288. cmpb #0x40,d0 |  infinity?
  289. jne  L_1179
  290. bsrl __l_sopr_inf
  291. jra  L_117B
  292. L_1179:
  293. cmpb #0x60,d0 |  NaN?
  294. jne  L_117A
  295. bsrl __l_mon_nan
  296. jra  L_117B
  297. L_117A:
  298. bsrl __l_sslognd |  assuming a denorm...
  299. L_117B:
  300. fmovel fpsr,d0 |  update status register
  301. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  302. fmovel d0,fpsr
  303. |
  304. | Result is now in FP0
  305. |
  306. moveml a6@(USER_DA),d0-d1/a0-a1
  307. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  308. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  309. unlk a6
  310. rts
  311. .globl __l_flognx
  312. __l_flognx:
  313. link a6,#-LOCAL_SIZE
  314. moveml d0-d1/a0-a1,a6@(USER_DA)
  315. fmovemx fp0-fp3,a6@(USER_FP0)
  316. fmovel fpsr,a6@(USER_FPSR)
  317. fmovel fpcr,a6@(USER_FPCR)
  318. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  319. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  320. |
  321. | copy, convert and tag input argument
  322. |
  323. fmovex a6@(8),fp0
  324. fmovex fp0,a6@(ETEMP)
  325. lea a6@(ETEMP),a0
  326. bsrl __l_tag
  327. moveb d0,a6@(STAG)
  328. tstb d0
  329. jne  L_117C
  330. bsrl __l_sslogn |  normalized (regular) number
  331. jra  L_117G
  332. L_117C:
  333. cmpb #0x20,d0 |  zero?
  334. jne  L_117D
  335. bsrl __l_t_dz2
  336. jra  L_117G
  337. L_117D:
  338. cmpb #0x40,d0 |  infinity?
  339. jne  L_117E
  340. bsrl __l_sopr_inf
  341. jra  L_117G
  342. L_117E:
  343. cmpb #0x60,d0 |  NaN?
  344. jne  L_117F
  345. bsrl __l_mon_nan
  346. jra  L_117G
  347. L_117F:
  348. bsrl __l_sslognd |  assuming a denorm...
  349. L_117G:
  350. fmovel fpsr,d0 |  update status register
  351. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  352. fmovel d0,fpsr
  353. |
  354. | Result is now in FP0
  355. |
  356. moveml a6@(USER_DA),d0-d1/a0-a1
  357. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  358. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  359. unlk a6
  360. rts
  361. |
  362. | MONADIC.GEN 1.3 4/30/91
  363. |
  364. | MONADIC.GEN --- generic MONADIC template
  365. |
  366. | This version saves all registers that will be used by the emulation
  367. | routines and restores all but FP0 on exit.  The FPSR is
  368. | updated to reflect the result of the operation.  Return value
  369. | is placed in FP0 for single, double and extended results.
  370. |
  371. | The package subroutines expect the incoming fpcr to be zeroed
  372. | since they need extended precision to work properly.  The
  373. /* | 'final' fpcr is expected in d1 so that the calculated result */
  374. | can be properly sized and rounded.  Also, if the incoming fpcr
  375. | has enabled any exceptions, the exception will be taken on the
  376. | final fmovem in this template.
  377. |
  378. | Customizations:
  379. | 1. Remove the moveml at the entry and exit of
  380. |    each routine if your compiler treats those
  381. |    registers as scratch.
  382. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  383. |    registers.
  384. | 3. Delete handling of the fpsr if you only care about
  385. |    the result.
  386. | 4. Some (most?) C compilers convert all float arguments
  387. |    to double, and provide no support at all for extended
  388. |    precision so remove the __l_flog2s and __l_flog2x entry points.
  389. | 5. Move the result to d0/d1 if the compiler is that old.
  390. | Copyright (C) Motorola, Inc. 1991
  391. | All Rights Reserved
  392. |
  393. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  394. | The copyright notice above does not evidence any
  395. | actual or intended publication of such source code.
  396. | xref __l_tag
  397. | xref __l_sslog2
  398. | xref __l_t_dz2
  399. | xref __l_sopr_inf
  400. | xref __l_mon_nan
  401. | xref __l_sslog2d
  402. .globl __l_flog2s
  403. __l_flog2s:
  404. link a6,#-LOCAL_SIZE
  405. moveml d0-d1/a0-a1,a6@(USER_DA)
  406. fmovemx fp0-fp3,a6@(USER_FP0)
  407. fmovel fpsr,a6@(USER_FPSR)
  408. fmovel fpcr,a6@(USER_FPCR)
  409. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  410. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  411. |
  412. | copy, convert and tag input argument
  413. |
  414. fmoves a6@(8),fp0
  415. fmovex fp0,a6@(ETEMP)
  416. lea a6@(ETEMP),a0
  417. bsrl __l_tag
  418. moveb d0,a6@(STAG)
  419. tstb d0
  420. jne  L_1182
  421. bsrl __l_sslog2 |  normalized (regular) number
  422. jra  L_1186
  423. L_1182:
  424. cmpb #0x20,d0 |  zero?
  425. jne  L_1183
  426. bsrl __l_t_dz2
  427. jra  L_1186
  428. L_1183:
  429. cmpb #0x40,d0 |  infinity?
  430. jne  L_1184
  431. bsrl __l_sopr_inf
  432. jra  L_1186
  433. L_1184:
  434. cmpb #0x60,d0 |  NaN?
  435. jne  L_1185
  436. bsrl __l_mon_nan
  437. jra  L_1186
  438. L_1185:
  439. bsrl __l_sslog2d |  assuming a denorm...
  440. L_1186:
  441. fmovel fpsr,d0 |  update status register
  442. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  443. fmovel d0,fpsr
  444. |
  445. | Result is now in FP0
  446. |
  447. moveml a6@(USER_DA),d0-d1/a0-a1
  448. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  449. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  450. unlk a6
  451. rts
  452. .globl __l_flog2d
  453. __l_flog2d:
  454. link a6,#-LOCAL_SIZE
  455. moveml d0-d1/a0-a1,a6@(USER_DA)
  456. fmovemx fp0-fp3,a6@(USER_FP0)
  457. fmovel fpsr,a6@(USER_FPSR)
  458. fmovel fpcr,a6@(USER_FPCR)
  459. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  460. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  461. |
  462. | copy, convert and tag input argument
  463. |
  464. fmoved a6@(8),fp0
  465. fmovex fp0,a6@(ETEMP)
  466. lea a6@(ETEMP),a0
  467. bsrl __l_tag
  468. moveb d0,a6@(STAG)
  469. tstb d0
  470. jne  L_1187
  471. bsrl __l_sslog2 |  normalized (regular) number
  472. jra  L_118B
  473. L_1187:
  474. cmpb #0x20,d0 |  zero?
  475. jne  L_1188
  476. bsrl __l_t_dz2
  477. jra  L_118B
  478. L_1188:
  479. cmpb #0x40,d0 |  infinity?
  480. jne  L_1189
  481. bsrl __l_sopr_inf
  482. jra  L_118B
  483. L_1189:
  484. cmpb #0x60,d0 |  NaN?
  485. jne  L_118A
  486. bsrl __l_mon_nan
  487. jra  L_118B
  488. L_118A:
  489. bsrl __l_sslog2d |  assuming a denorm...
  490. L_118B:
  491. fmovel fpsr,d0 |  update status register
  492. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  493. fmovel d0,fpsr
  494. |
  495. | Result is now in FP0
  496. |
  497. moveml a6@(USER_DA),d0-d1/a0-a1
  498. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  499. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  500. unlk a6
  501. rts
  502. .globl __l_flog2x
  503. __l_flog2x:
  504. link a6,#-LOCAL_SIZE
  505. moveml d0-d1/a0-a1,a6@(USER_DA)
  506. fmovemx fp0-fp3,a6@(USER_FP0)
  507. fmovel fpsr,a6@(USER_FPSR)
  508. fmovel fpcr,a6@(USER_FPCR)
  509. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  510. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  511. |
  512. | copy, convert and tag input argument
  513. |
  514. fmovex a6@(8),fp0
  515. fmovex fp0,a6@(ETEMP)
  516. lea a6@(ETEMP),a0
  517. bsrl __l_tag
  518. moveb d0,a6@(STAG)
  519. tstb d0
  520. jne  L_118C
  521. bsrl __l_sslog2 |  normalized (regular) number
  522. jra  L_118G
  523. L_118C:
  524. cmpb #0x20,d0 |  zero?
  525. jne  L_118D
  526. bsrl __l_t_dz2
  527. jra  L_118G
  528. L_118D:
  529. cmpb #0x40,d0 |  infinity?
  530. jne  L_118E
  531. bsrl __l_sopr_inf
  532. jra  L_118G
  533. L_118E:
  534. cmpb #0x60,d0 |  NaN?
  535. jne  L_118F
  536. bsrl __l_mon_nan
  537. jra  L_118G
  538. L_118F:
  539. bsrl __l_sslog2d |  assuming a denorm...
  540. L_118G:
  541. fmovel fpsr,d0 |  update status register
  542. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  543. fmovel d0,fpsr
  544. |
  545. | Result is now in FP0
  546. |
  547. moveml a6@(USER_DA),d0-d1/a0-a1
  548. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  549. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  550. unlk a6
  551. rts
  552. |
  553. | MONADIC.GEN 1.3 4/30/91
  554. |
  555. | MONADIC.GEN --- generic MONADIC template
  556. |
  557. | This version saves all registers that will be used by the emulation
  558. | routines and restores all but FP0 on exit.  The FPSR is
  559. | updated to reflect the result of the operation.  Return value
  560. | is placed in FP0 for single, double and extended results.
  561. |
  562. | The package subroutines expect the incoming fpcr to be zeroed
  563. | since they need extended precision to work properly.  The
  564. /* | 'final' fpcr is expected in d1 so that the calculated result */
  565. | can be properly sized and rounded.  Also, if the incoming fpcr
  566. | has enabled any exceptions, the exception will be taken on the
  567. | final fmovem in this template.
  568. |
  569. | Customizations:
  570. | 1. Remove the moveml at the entry and exit of
  571. |    each routine if your compiler treats those
  572. |    registers as scratch.
  573. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  574. |    registers.
  575. | 3. Delete handling of the fpsr if you only care about
  576. |    the result.
  577. | 4. Some (most?) C compilers convert all float arguments
  578. |    to double, and provide no support at all for extended
  579. |    precision so remove the __l_flog10s and __l_flog10x entry points.
  580. | 5. Move the result to d0/d1 if the compiler is that old.
  581. | Copyright (C) Motorola, Inc. 1991
  582. | All Rights Reserved
  583. |
  584. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  585. | The copyright notice above does not evidence any
  586. | actual or intended publication of such source code.
  587. | xref __l_tag
  588. | xref __l_sslog10
  589. | xref __l_t_dz2
  590. | xref __l_sopr_inf
  591. | xref __l_mon_nan
  592. | xref __l_sslog10d
  593. .globl __l_flog10s
  594. __l_flog10s:
  595. link a6,#-LOCAL_SIZE
  596. moveml d0-d1/a0-a1,a6@(USER_DA)
  597. fmovemx fp0-fp3,a6@(USER_FP0)
  598. fmovel fpsr,a6@(USER_FPSR)
  599. fmovel fpcr,a6@(USER_FPCR)
  600. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  601. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  602. |
  603. | copy, convert and tag input argument
  604. |
  605. fmoves a6@(8),fp0
  606. fmovex fp0,a6@(ETEMP)
  607. lea a6@(ETEMP),a0
  608. bsrl __l_tag
  609. moveb d0,a6@(STAG)
  610. tstb d0
  611. jne  L_1192
  612. bsrl __l_sslog10 |  normalized (regular) number
  613. jra  L_1196
  614. L_1192:
  615. cmpb #0x20,d0 |  zero?
  616. jne  L_1193
  617. bsrl __l_t_dz2
  618. jra  L_1196
  619. L_1193:
  620. cmpb #0x40,d0 |  infinity?
  621. jne  L_1194
  622. bsrl __l_sopr_inf
  623. jra  L_1196
  624. L_1194:
  625. cmpb #0x60,d0 |  NaN?
  626. jne  L_1195
  627. bsrl __l_mon_nan
  628. jra  L_1196
  629. L_1195:
  630. bsrl __l_sslog10d |  assuming a denorm...
  631. L_1196:
  632. fmovel fpsr,d0 |  update status register
  633. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  634. fmovel d0,fpsr
  635. |
  636. | Result is now in FP0
  637. |
  638. moveml a6@(USER_DA),d0-d1/a0-a1
  639. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  640. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  641. unlk a6
  642. rts
  643. .globl __l_flog10d
  644. __l_flog10d:
  645. link a6,#-LOCAL_SIZE
  646. moveml d0-d1/a0-a1,a6@(USER_DA)
  647. fmovemx fp0-fp3,a6@(USER_FP0)
  648. fmovel fpsr,a6@(USER_FPSR)
  649. fmovel fpcr,a6@(USER_FPCR)
  650. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  651. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  652. |
  653. | copy, convert and tag input argument
  654. |
  655. fmoved a6@(8),fp0
  656. fmovex fp0,a6@(ETEMP)
  657. lea a6@(ETEMP),a0
  658. bsrl __l_tag
  659. moveb d0,a6@(STAG)
  660. tstb d0
  661. jne  L_1197
  662. bsrl __l_sslog10 |  normalized (regular) number
  663. jra  L_119B
  664. L_1197:
  665. cmpb #0x20,d0 |  zero?
  666. jne  L_1198
  667. bsrl __l_t_dz2
  668. jra  L_119B
  669. L_1198:
  670. cmpb #0x40,d0 |  infinity?
  671. jne  L_1199
  672. bsrl __l_sopr_inf
  673. jra  L_119B
  674. L_1199:
  675. cmpb #0x60,d0 |  NaN?
  676. jne  L_119A
  677. bsrl __l_mon_nan
  678. jra  L_119B
  679. L_119A:
  680. bsrl __l_sslog10d |  assuming a denorm...
  681. L_119B:
  682. fmovel fpsr,d0 |  update status register
  683. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  684. fmovel d0,fpsr
  685. |
  686. | Result is now in FP0
  687. |
  688. moveml a6@(USER_DA),d0-d1/a0-a1
  689. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  690. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  691. unlk a6
  692. rts
  693. .globl __l_flog10x
  694. __l_flog10x:
  695. link a6,#-LOCAL_SIZE
  696. moveml d0-d1/a0-a1,a6@(USER_DA)
  697. fmovemx fp0-fp3,a6@(USER_FP0)
  698. fmovel fpsr,a6@(USER_FPSR)
  699. fmovel fpcr,a6@(USER_FPCR)
  700. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  701. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  702. |
  703. | copy, convert and tag input argument
  704. |
  705. fmovex a6@(8),fp0
  706. fmovex fp0,a6@(ETEMP)
  707. lea a6@(ETEMP),a0
  708. bsrl __l_tag
  709. moveb d0,a6@(STAG)
  710. tstb d0
  711. jne  L_119C
  712. bsrl __l_sslog10 |  normalized (regular) number
  713. jra  L_119G
  714. L_119C:
  715. cmpb #0x20,d0 |  zero?
  716. jne  L_119D
  717. bsrl __l_t_dz2
  718. jra  L_119G
  719. L_119D:
  720. cmpb #0x40,d0 |  infinity?
  721. jne  L_119E
  722. bsrl __l_sopr_inf
  723. jra  L_119G
  724. L_119E:
  725. cmpb #0x60,d0 |  NaN?
  726. jne  L_119F
  727. bsrl __l_mon_nan
  728. jra  L_119G
  729. L_119F:
  730. bsrl __l_sslog10d |  assuming a denorm...
  731. L_119G:
  732. fmovel fpsr,d0 |  update status register
  733. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  734. fmovel d0,fpsr
  735. |
  736. | Result is now in FP0
  737. |
  738. moveml a6@(USER_DA),d0-d1/a0-a1
  739. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  740. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  741. unlk a6
  742. rts
  743. |
  744. | MONADIC.GEN 1.3 4/30/91
  745. |
  746. | MONADIC.GEN --- generic MONADIC template
  747. |
  748. | This version saves all registers that will be used by the emulation
  749. | routines and restores all but FP0 on exit.  The FPSR is
  750. | updated to reflect the result of the operation.  Return value
  751. | is placed in FP0 for single, double and extended results.
  752. |
  753. | The package subroutines expect the incoming fpcr to be zeroed
  754. | since they need extended precision to work properly.  The
  755. /* | 'final' fpcr is expected in d1 so that the calculated result */
  756. | can be properly sized and rounded.  Also, if the incoming fpcr
  757. | has enabled any exceptions, the exception will be taken on the
  758. | final fmovem in this template.
  759. |
  760. | Customizations:
  761. | 1. Remove the moveml at the entry and exit of
  762. |    each routine if your compiler treats those
  763. |    registers as scratch.
  764. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  765. |    registers.
  766. | 3. Delete handling of the fpsr if you only care about
  767. |    the result.
  768. | 4. Some (most?) C compilers convert all float arguments
  769. |    to double, and provide no support at all for extended
  770. |    precision so remove the __l_flognp1s and __l_flognp1x entry points.
  771. | 5. Move the result to d0/d1 if the compiler is that old.
  772. | Copyright (C) Motorola, Inc. 1991
  773. | All Rights Reserved
  774. |
  775. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  776. | The copyright notice above does not evidence any
  777. | actual or intended publication of such source code.
  778. | xref __l_tag
  779. | xref __l_sslognp1
  780. | xref __l_szero
  781. | xref __l_sopr_inf
  782. | xref __l_mon_nan
  783. | xref __l_slognp1d
  784. .globl __l_flognp1s
  785. __l_flognp1s:
  786. link a6,#-LOCAL_SIZE
  787. moveml d0-d1/a0-a1,a6@(USER_DA)
  788. fmovemx fp0-fp3,a6@(USER_FP0)
  789. fmovel fpsr,a6@(USER_FPSR)
  790. fmovel fpcr,a6@(USER_FPCR)
  791. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  792. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  793. |
  794. | copy, convert and tag input argument
  795. |
  796. fmoves a6@(8),fp0
  797. fmovex fp0,a6@(ETEMP)
  798. lea a6@(ETEMP),a0
  799. bsrl __l_tag
  800. moveb d0,a6@(STAG)
  801. tstb d0
  802. jne  L_1202
  803. bsrl __l_sslognp1 |  normalized (regular) number
  804. jra  L_1206
  805. L_1202:
  806. cmpb #0x20,d0 |  zero?
  807. jne  L_1203
  808. bsrl __l_szero
  809. jra  L_1206
  810. L_1203:
  811. cmpb #0x40,d0 |  infinity?
  812. jne  L_1204
  813. bsrl __l_sopr_inf
  814. jra  L_1206
  815. L_1204:
  816. cmpb #0x60,d0 |  NaN?
  817. jne  L_1205
  818. bsrl __l_mon_nan
  819. jra  L_1206
  820. L_1205:
  821. bsrl __l_slognp1d |  assuming a denorm...
  822. L_1206:
  823. fmovel fpsr,d0 |  update status register
  824. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  825. fmovel d0,fpsr
  826. |
  827. | Result is now in FP0
  828. |
  829. moveml a6@(USER_DA),d0-d1/a0-a1
  830. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  831. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  832. unlk a6
  833. rts
  834. .globl __l_flognp1d
  835. __l_flognp1d:
  836. link a6,#-LOCAL_SIZE
  837. moveml d0-d1/a0-a1,a6@(USER_DA)
  838. fmovemx fp0-fp3,a6@(USER_FP0)
  839. fmovel fpsr,a6@(USER_FPSR)
  840. fmovel fpcr,a6@(USER_FPCR)
  841. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  842. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  843. |
  844. | copy, convert and tag input argument
  845. |
  846. fmoved a6@(8),fp0
  847. fmovex fp0,a6@(ETEMP)
  848. lea a6@(ETEMP),a0
  849. bsrl __l_tag
  850. moveb d0,a6@(STAG)
  851. tstb d0
  852. jne  L_1207
  853. bsrl __l_sslognp1 |  normalized (regular) number
  854. jra  L_120B
  855. L_1207:
  856. cmpb #0x20,d0 |  zero?
  857. jne  L_1208
  858. bsrl __l_szero
  859. jra  L_120B
  860. L_1208:
  861. cmpb #0x40,d0 |  infinity?
  862. jne  L_1209
  863. bsrl __l_sopr_inf
  864. jra  L_120B
  865. L_1209:
  866. cmpb #0x60,d0 |  NaN?
  867. jne  L_120A
  868. bsrl __l_mon_nan
  869. jra  L_120B
  870. L_120A:
  871. bsrl __l_slognp1d |  assuming a denorm...
  872. L_120B:
  873. fmovel fpsr,d0 |  update status register
  874. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  875. fmovel d0,fpsr
  876. |
  877. | Result is now in FP0
  878. |
  879. moveml a6@(USER_DA),d0-d1/a0-a1
  880. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  881. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  882. unlk a6
  883. rts
  884. .globl __l_flognp1x
  885. __l_flognp1x:
  886. link a6,#-LOCAL_SIZE
  887. moveml d0-d1/a0-a1,a6@(USER_DA)
  888. fmovemx fp0-fp3,a6@(USER_FP0)
  889. fmovel fpsr,a6@(USER_FPSR)
  890. fmovel fpcr,a6@(USER_FPCR)
  891. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  892. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  893. |
  894. | copy, convert and tag input argument
  895. |
  896. fmovex a6@(8),fp0
  897. fmovex fp0,a6@(ETEMP)
  898. lea a6@(ETEMP),a0
  899. bsrl __l_tag
  900. moveb d0,a6@(STAG)
  901. tstb d0
  902. jne  L_120C
  903. bsrl __l_sslognp1 |  normalized (regular) number
  904. jra  L_120G
  905. L_120C:
  906. cmpb #0x20,d0 |  zero?
  907. jne  L_120D
  908. bsrl __l_szero
  909. jra  L_120G
  910. L_120D:
  911. cmpb #0x40,d0 |  infinity?
  912. jne  L_120E
  913. bsrl __l_sopr_inf
  914. jra  L_120G
  915. L_120E:
  916. cmpb #0x60,d0 |  NaN?
  917. jne  L_120F
  918. bsrl __l_mon_nan
  919. jra  L_120G
  920. L_120F:
  921. bsrl __l_slognp1d |  assuming a denorm...
  922. L_120G:
  923. fmovel fpsr,d0 |  update status register
  924. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  925. fmovel d0,fpsr
  926. |
  927. | Result is now in FP0
  928. |
  929. moveml a6@(USER_DA),d0-d1/a0-a1
  930. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  931. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  932. unlk a6
  933. rts
  934. |
  935. | MONADIC.GEN 1.3 4/30/91
  936. |
  937. | MONADIC.GEN --- generic MONADIC template
  938. |
  939. | This version saves all registers that will be used by the emulation
  940. | routines and restores all but FP0 on exit.  The FPSR is
  941. | updated to reflect the result of the operation.  Return value
  942. | is placed in FP0 for single, double and extended results.
  943. |
  944. | The package subroutines expect the incoming fpcr to be zeroed
  945. | since they need extended precision to work properly.  The
  946. /* | 'final' fpcr is expected in d1 so that the calculated result */
  947. | can be properly sized and rounded.  Also, if the incoming fpcr
  948. | has enabled any exceptions, the exception will be taken on the
  949. | final fmovem in this template.
  950. |
  951. | Customizations:
  952. | 1. Remove the moveml at the entry and exit of
  953. |    each routine if your compiler treats those
  954. |    registers as scratch.
  955. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  956. |    registers.
  957. | 3. Delete handling of the fpsr if you only care about
  958. |    the result.
  959. | 4. Some (most?) C compilers convert all float arguments
  960. |    to double, and provide no support at all for extended
  961. |    precision so remove the __l_fints and __l_fintx entry points.
  962. | 5. Move the result to d0/d1 if the compiler is that old.
  963. | Copyright (C) Motorola, Inc. 1991
  964. | All Rights Reserved
  965. |
  966. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  967. | The copyright notice above does not evidence any
  968. | actual or intended publication of such source code.
  969. | xref __l_tag
  970. | xref __l_l_sint
  971. | xref __l_szero
  972. | xref __l_sinf
  973. | xref __l_mon_nan
  974. | xref __l_l_sintd
  975. .globl __l_fints
  976. __l_fints:
  977. link a6,#-LOCAL_SIZE
  978. moveml d0-d1/a0-a1,a6@(USER_DA)
  979. fmovemx fp0-fp3,a6@(USER_FP0)
  980. fmovel fpsr,a6@(USER_FPSR)
  981. fmovel fpcr,a6@(USER_FPCR)
  982. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  983. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  984. |
  985. | copy, convert and tag input argument
  986. |
  987. fmoves a6@(8),fp0
  988. fmovex fp0,a6@(ETEMP)
  989. lea a6@(ETEMP),a0
  990. bsrl __l_tag
  991. moveb d0,a6@(STAG)
  992. tstb d0
  993. jne  L_1212
  994. bsrl __l_l_sint |  normalized (regular) number
  995. jra  L_1216
  996. L_1212:
  997. cmpb #0x20,d0 |  zero?
  998. jne  L_1213
  999. bsrl __l_szero
  1000. jra  L_1216
  1001. L_1213:
  1002. cmpb #0x40,d0 |  infinity?
  1003. jne  L_1214
  1004. bsrl __l_sinf
  1005. jra  L_1216
  1006. L_1214:
  1007. cmpb #0x60,d0 |  NaN?
  1008. jne  L_1215
  1009. bsrl __l_mon_nan
  1010. jra  L_1216
  1011. L_1215:
  1012. bsrl __l_l_sintd |  assuming a denorm...
  1013. L_1216:
  1014. fmovel fpsr,d0 |  update status register
  1015. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1016. fmovel d0,fpsr
  1017. |
  1018. | Result is now in FP0
  1019. |
  1020. moveml a6@(USER_DA),d0-d1/a0-a1
  1021. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1022. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1023. unlk a6
  1024. rts
  1025. .globl __l_fintd
  1026. __l_fintd:
  1027. link a6,#-LOCAL_SIZE
  1028. moveml d0-d1/a0-a1,a6@(USER_DA)
  1029. fmovemx fp0-fp3,a6@(USER_FP0)
  1030. fmovel fpsr,a6@(USER_FPSR)
  1031. fmovel fpcr,a6@(USER_FPCR)
  1032. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1033. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1034. |
  1035. | copy, convert and tag input argument
  1036. |
  1037. fmoved a6@(8),fp0
  1038. fmovex fp0,a6@(ETEMP)
  1039. lea a6@(ETEMP),a0
  1040. bsrl __l_tag
  1041. moveb d0,a6@(STAG)
  1042. tstb d0
  1043. jne  L_1217
  1044. bsrl __l_l_sint |  normalized (regular) number
  1045. jra  L_121B
  1046. L_1217:
  1047. cmpb #0x20,d0 |  zero?
  1048. jne  L_1218
  1049. bsrl __l_szero
  1050. jra  L_121B
  1051. L_1218:
  1052. cmpb #0x40,d0 |  infinity?
  1053. jne  L_1219
  1054. bsrl __l_sinf
  1055. jra  L_121B
  1056. L_1219:
  1057. cmpb #0x60,d0 |  NaN?
  1058. jne  L_121A
  1059. bsrl __l_mon_nan
  1060. jra  L_121B
  1061. L_121A:
  1062. bsrl __l_l_sintd |  assuming a denorm...
  1063. L_121B:
  1064. fmovel fpsr,d0 |  update status register
  1065. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1066. fmovel d0,fpsr
  1067. |
  1068. | Result is now in FP0
  1069. |
  1070. moveml a6@(USER_DA),d0-d1/a0-a1
  1071. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1072. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1073. unlk a6
  1074. rts
  1075. .globl __l_fintx
  1076. __l_fintx:
  1077. link a6,#-LOCAL_SIZE
  1078. moveml d0-d1/a0-a1,a6@(USER_DA)
  1079. fmovemx fp0-fp3,a6@(USER_FP0)
  1080. fmovel fpsr,a6@(USER_FPSR)
  1081. fmovel fpcr,a6@(USER_FPCR)
  1082. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1083. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1084. |
  1085. | copy, convert and tag input argument
  1086. |
  1087. fmovex a6@(8),fp0
  1088. fmovex fp0,a6@(ETEMP)
  1089. lea a6@(ETEMP),a0
  1090. bsrl __l_tag
  1091. moveb d0,a6@(STAG)
  1092. tstb d0
  1093. jne  L_121C
  1094. bsrl __l_l_sint |  normalized (regular) number
  1095. jra  L_121G
  1096. L_121C:
  1097. cmpb #0x20,d0 |  zero?
  1098. jne  L_121D
  1099. bsrl __l_szero
  1100. jra  L_121G
  1101. L_121D:
  1102. cmpb #0x40,d0 |  infinity?
  1103. jne  L_121E
  1104. bsrl __l_sinf
  1105. jra  L_121G
  1106. L_121E:
  1107. cmpb #0x60,d0 |  NaN?
  1108. jne  L_121F
  1109. bsrl __l_mon_nan
  1110. jra  L_121G
  1111. L_121F:
  1112. bsrl __l_l_sintd |  assuming a denorm...
  1113. L_121G:
  1114. fmovel fpsr,d0 |  update status register
  1115. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1116. fmovel d0,fpsr
  1117. |
  1118. | Result is now in FP0
  1119. |
  1120. moveml a6@(USER_DA),d0-d1/a0-a1
  1121. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1122. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1123. unlk a6
  1124. rts
  1125. |
  1126. | MONADIC.GEN 1.3 4/30/91
  1127. |
  1128. | MONADIC.GEN --- generic MONADIC template
  1129. |
  1130. | This version saves all registers that will be used by the emulation
  1131. | routines and restores all but FP0 on exit.  The FPSR is
  1132. | updated to reflect the result of the operation.  Return value
  1133. | is placed in FP0 for single, double and extended results.
  1134. |
  1135. | The package subroutines expect the incoming fpcr to be zeroed
  1136. | since they need extended precision to work properly.  The
  1137. /* | 'final' fpcr is expected in d1 so that the calculated result */
  1138. | can be properly sized and rounded.  Also, if the incoming fpcr
  1139. | has enabled any exceptions, the exception will be taken on the
  1140. | final fmovem in this template.
  1141. |
  1142. | Customizations:
  1143. | 1. Remove the moveml at the entry and exit of
  1144. |    each routine if your compiler treats those
  1145. |    registers as scratch.
  1146. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  1147. |    registers.
  1148. | 3. Delete handling of the fpsr if you only care about
  1149. |    the result.
  1150. | 4. Some (most?) C compilers convert all float arguments
  1151. |    to double, and provide no support at all for extended
  1152. |    precision so remove the __l_fintrzs and __l_fintrzx entry points.
  1153. | 5. Move the result to d0/d1 if the compiler is that old.
  1154. | Copyright (C) Motorola, Inc. 1991
  1155. | All Rights Reserved
  1156. |
  1157. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  1158. | The copyright notice above does not evidence any
  1159. | actual or intended publication of such source code.
  1160. | xref __l_tag
  1161. | xref __l_l_sintrz
  1162. | xref __l_szero
  1163. | xref __l_sinf
  1164. | xref __l_mon_nan
  1165. | xref __l_snzrinx
  1166. .globl __l_fintrzs
  1167. __l_fintrzs:
  1168. link a6,#-LOCAL_SIZE
  1169. moveml d0-d1/a0-a1,a6@(USER_DA)
  1170. fmovemx fp0-fp3,a6@(USER_FP0)
  1171. fmovel fpsr,a6@(USER_FPSR)
  1172. fmovel fpcr,a6@(USER_FPCR)
  1173. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1174. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1175. |
  1176. | copy, convert and tag input argument
  1177. |
  1178. fmoves a6@(8),fp0
  1179. fmovex fp0,a6@(ETEMP)
  1180. lea a6@(ETEMP),a0
  1181. bsrl __l_tag
  1182. moveb d0,a6@(STAG)
  1183. tstb d0
  1184. jne  L_1222
  1185. bsrl __l_l_sintrz |  normalized (regular) number
  1186. jra  L_1226
  1187. L_1222:
  1188. cmpb #0x20,d0 |  zero?
  1189. jne  L_1223
  1190. bsrl __l_szero
  1191. jra  L_1226
  1192. L_1223:
  1193. cmpb #0x40,d0 |  infinity?
  1194. jne  L_1224
  1195. bsrl __l_sinf
  1196. jra  L_1226
  1197. L_1224:
  1198. cmpb #0x60,d0 |  NaN?
  1199. jne  L_1225
  1200. bsrl __l_mon_nan
  1201. jra  L_1226
  1202. L_1225:
  1203. bsrl __l_snzrinx |  assuming a denorm...
  1204. L_1226:
  1205. fmovel fpsr,d0 |  update status register
  1206. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1207. fmovel d0,fpsr
  1208. |
  1209. | Result is now in FP0
  1210. |
  1211. moveml a6@(USER_DA),d0-d1/a0-a1
  1212. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1213. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1214. unlk a6
  1215. rts
  1216. .globl __l_fintrzd
  1217. __l_fintrzd:
  1218. link a6,#-LOCAL_SIZE
  1219. moveml d0-d1/a0-a1,a6@(USER_DA)
  1220. fmovemx fp0-fp3,a6@(USER_FP0)
  1221. fmovel fpsr,a6@(USER_FPSR)
  1222. fmovel fpcr,a6@(USER_FPCR)
  1223. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1224. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1225. |
  1226. | copy, convert and tag input argument
  1227. |
  1228. fmoved a6@(8),fp0
  1229. fmovex fp0,a6@(ETEMP)
  1230. lea a6@(ETEMP),a0
  1231. bsrl __l_tag
  1232. moveb d0,a6@(STAG)
  1233. tstb d0
  1234. jne  L_1227
  1235. bsrl __l_l_sintrz |  normalized (regular) number
  1236. jra  L_122B
  1237. L_1227:
  1238. cmpb #0x20,d0 |  zero?
  1239. jne  L_1228
  1240. bsrl __l_szero
  1241. jra  L_122B
  1242. L_1228:
  1243. cmpb #0x40,d0 |  infinity?
  1244. jne  L_1229
  1245. bsrl __l_sinf
  1246. jra  L_122B
  1247. L_1229:
  1248. cmpb #0x60,d0 |  NaN?
  1249. jne  L_122A
  1250. bsrl __l_mon_nan
  1251. jra  L_122B
  1252. L_122A:
  1253. bsrl __l_snzrinx |  assuming a denorm...
  1254. L_122B:
  1255. fmovel fpsr,d0 |  update status register
  1256. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1257. fmovel d0,fpsr
  1258. |
  1259. | Result is now in FP0
  1260. |
  1261. moveml a6@(USER_DA),d0-d1/a0-a1
  1262. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1263. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1264. unlk a6
  1265. rts
  1266. .globl __l_fintrzx
  1267. __l_fintrzx:
  1268. link a6,#-LOCAL_SIZE
  1269. moveml d0-d1/a0-a1,a6@(USER_DA)
  1270. fmovemx fp0-fp3,a6@(USER_FP0)
  1271. fmovel fpsr,a6@(USER_FPSR)
  1272. fmovel fpcr,a6@(USER_FPCR)
  1273. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1274. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1275. |
  1276. | copy, convert and tag input argument
  1277. |
  1278. fmovex a6@(8),fp0
  1279. fmovex fp0,a6@(ETEMP)
  1280. lea a6@(ETEMP),a0
  1281. bsrl __l_tag
  1282. moveb d0,a6@(STAG)
  1283. tstb d0
  1284. jne  L_122C
  1285. bsrl __l_l_sintrz |  normalized (regular) number
  1286. jra  L_122G
  1287. L_122C:
  1288. cmpb #0x20,d0 |  zero?
  1289. jne  L_122D
  1290. bsrl __l_szero
  1291. jra  L_122G
  1292. L_122D:
  1293. cmpb #0x40,d0 |  infinity?
  1294. jne  L_122E
  1295. bsrl __l_sinf
  1296. jra  L_122G
  1297. L_122E:
  1298. cmpb #0x60,d0 |  NaN?
  1299. jne  L_122F
  1300. bsrl __l_mon_nan
  1301. jra  L_122G
  1302. L_122F:
  1303. bsrl __l_snzrinx |  assuming a denorm...
  1304. L_122G:
  1305. fmovel fpsr,d0 |  update status register
  1306. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1307. fmovel d0,fpsr
  1308. |
  1309. | Result is now in FP0
  1310. |
  1311. moveml a6@(USER_DA),d0-d1/a0-a1
  1312. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1313. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1314. unlk a6
  1315. rts
  1316. |
  1317. | DYADIC.GEN 1.2 4/30/91
  1318. |
  1319. | DYADIC.GEN --- generic DYADIC template
  1320. |
  1321. | This version saves all registers that will be used by the emulation
  1322. | routines and restores all but FP0 on exit.  The FPSR is
  1323. | updated to reflect the result of the operation.  Return value
  1324. | is placed in FP0 for single, double and extended results.
  1325. |
  1326. | The package subroutines expect the incoming fpcr to be zeroed
  1327. | since they need extended precision to work properly.  The
  1328. /* | 'final' fpcr is expected in a6@(USER_FPCR) so that the calculated result */
  1329. | can be properly sized and rounded.  Also, if the incoming fpcr
  1330. | has enabled any exceptions, the exception will be taken on the
  1331. | final fmovem in this template.
  1332. |
  1333. | Customizations:
  1334. | 1. Remove the moveml at the entry and exit of
  1335. |    each routine if your compiler treats those
  1336. |    registers as scratch.
  1337. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  1338. |    registers.
  1339. | 3. Delete updating of the fpsr if you only care about
  1340. |    the result.
  1341. | 4. Remove the __l_frems and __l_fremx entry points if your compiler
  1342. |    treats everything as doubles.
  1343. | 5. Move the result to d0/d1 if the compiler is that old.
  1344. |
  1345. | Copyright (C) Motorola, Inc. 1991
  1346. | All Rights Reserved
  1347. |
  1348. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  1349. | The copyright notice above does not evidence any
  1350. | actual or intended publication of such source code.
  1351. | xref __l_prem
  1352. | xref __l_tag
  1353. .globl __l_frems
  1354. __l_frems:
  1355. link a6,#-LOCAL_SIZE
  1356. moveml d0-d1/a0-a1,a6@(USER_DA)
  1357. fmovemx fp0-fp3,a6@(USER_FP0)
  1358. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1359. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1360. |
  1361. | copy, convert and tag input arguments
  1362. |
  1363. fmoves a6@(8),fp0
  1364. fmovex fp0,a6@(FPTEMP)
  1365. lea a6@(FPTEMP),a0
  1366. bsrl __l_tag
  1367. moveb d0,a6@(DTAG)
  1368. fmoves a6@(12),fp0
  1369. fmovex fp0,a6@(ETEMP)
  1370. lea a6@(ETEMP),a0
  1371. bsrl __l_tag
  1372. moveb d0,a6@(STAG)
  1373. bsrl __l_prem
  1374. fmovel fpsr,d0 |  update status register
  1375. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1376. swap d0
  1377. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1378. swap d0
  1379. fmovel d0,fpsr
  1380. |
  1381. | Result is now in FP0
  1382. |
  1383. moveml a6@(USER_DA),d0-d1/a0-a1
  1384. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1385. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1386. unlk a6
  1387. rts
  1388. .globl __l_fremd
  1389. __l_fremd:
  1390. link a6,#-LOCAL_SIZE
  1391. moveml d0-d1/a0-a1,a6@(USER_DA)
  1392. fmovemx fp0-fp3,a6@(USER_FP0)
  1393. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1394. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1395. |
  1396. | copy, convert and tag input arguments
  1397. |
  1398. fmoved a6@(8),fp0
  1399. fmovex fp0,a6@(FPTEMP)
  1400. lea a6@(FPTEMP),a0
  1401. bsrl __l_tag
  1402. moveb d0,a6@(DTAG)
  1403. fmoved a6@(16),fp0
  1404. fmovex fp0,a6@(ETEMP)
  1405. lea a6@(ETEMP),a0
  1406. bsrl __l_tag
  1407. moveb d0,a6@(STAG)
  1408. bsrl __l_prem
  1409. fmovel fpsr,d0 |  update status register
  1410. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1411. swap d0
  1412. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1413. swap d0
  1414. fmovel d0,fpsr
  1415. |
  1416. | Result is now in FP0
  1417. |
  1418. moveml a6@(USER_DA),d0-d1/a0-a1
  1419. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1420. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1421. unlk a6
  1422. rts
  1423. .globl __l_fremx
  1424. __l_fremx:
  1425. link a6,#-LOCAL_SIZE
  1426. moveml d0-d1/a0-a1,a6@(USER_DA)
  1427. fmovemx fp0-fp3,a6@(USER_FP0)
  1428. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1429. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1430. |
  1431. | copy, convert and tag input arguments
  1432. |
  1433. fmovex a6@(8),fp0
  1434. fmovex fp0,a6@(FPTEMP)
  1435. lea a6@(FPTEMP),a0
  1436. bsrl __l_tag
  1437. moveb d0,a6@(DTAG)
  1438. fmovex a6@(20),fp0
  1439. fmovex fp0,a6@(ETEMP)
  1440. lea a6@(ETEMP),a0
  1441. bsrl __l_tag
  1442. moveb d0,a6@(STAG)
  1443. bsrl __l_prem
  1444. fmovel fpsr,d0 |  update status register
  1445. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1446. swap d0
  1447. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1448. swap d0
  1449. fmovel d0,fpsr
  1450. |
  1451. | Result is now in FP0
  1452. |
  1453. moveml a6@(USER_DA),d0-d1/a0-a1
  1454. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1455. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1456. unlk a6
  1457. rts
  1458. |
  1459. | DYADIC.GEN 1.2 4/30/91
  1460. |
  1461. | DYADIC.GEN --- generic DYADIC template
  1462. |
  1463. | This version saves all registers that will be used by the emulation
  1464. | routines and restores all but FP0 on exit.  The FPSR is
  1465. | updated to reflect the result of the operation.  Return value
  1466. | is placed in FP0 for single, double and extended results.
  1467. |
  1468. | The package subroutines expect the incoming fpcr to be zeroed
  1469. | since they need extended precision to work properly.  The
  1470. /* | 'final' fpcr is expected in a6@(USER_FPCR) so that the calculated result */
  1471. | can be properly sized and rounded.  Also, if the incoming fpcr
  1472. | has enabled any exceptions, the exception will be taken on the
  1473. | final fmovem in this template.
  1474. |
  1475. | Customizations:
  1476. | 1. Remove the moveml at the entry and exit of
  1477. |    each routine if your compiler treats those
  1478. |    registers as scratch.
  1479. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  1480. |    registers.
  1481. | 3. Delete updating of the fpsr if you only care about
  1482. |    the result.
  1483. | 4. Remove the __l_fmods and __l_fmodx entry points if your compiler
  1484. |    treats everything as doubles.
  1485. | 5. Move the result to d0/d1 if the compiler is that old.
  1486. |
  1487. | Copyright (C) Motorola, Inc. 1991
  1488. | All Rights Reserved
  1489. |
  1490. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  1491. | The copyright notice above does not evidence any
  1492. | actual or intended publication of such source code.
  1493. | xref __l_pmod
  1494. | xref __l_tag
  1495. .globl __l_fmods
  1496. __l_fmods:
  1497. link a6,#-LOCAL_SIZE
  1498. moveml d0-d1/a0-a1,a6@(USER_DA)
  1499. fmovemx fp0-fp3,a6@(USER_FP0)
  1500. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1501. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1502. |
  1503. | copy, convert and tag input arguments
  1504. |
  1505. fmoves a6@(8),fp0
  1506. fmovex fp0,a6@(FPTEMP)
  1507. lea a6@(FPTEMP),a0
  1508. bsrl __l_tag
  1509. moveb d0,a6@(DTAG)
  1510. fmoves a6@(12),fp0
  1511. fmovex fp0,a6@(ETEMP)
  1512. lea a6@(ETEMP),a0
  1513. bsrl __l_tag
  1514. moveb d0,a6@(STAG)
  1515. bsrl __l_pmod
  1516. fmovel fpsr,d0 |  update status register
  1517. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1518. swap d0
  1519. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1520. swap d0
  1521. fmovel d0,fpsr
  1522. |
  1523. | Result is now in FP0
  1524. |
  1525. moveml a6@(USER_DA),d0-d1/a0-a1
  1526. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1527. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1528. unlk a6
  1529. rts
  1530. .globl __l_fmodd
  1531. __l_fmodd:
  1532. link a6,#-LOCAL_SIZE
  1533. moveml d0-d1/a0-a1,a6@(USER_DA)
  1534. fmovemx fp0-fp3,a6@(USER_FP0)
  1535. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1536. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1537. |
  1538. | copy, convert and tag input arguments
  1539. |
  1540. fmoved a6@(8),fp0
  1541. fmovex fp0,a6@(FPTEMP)
  1542. lea a6@(FPTEMP),a0
  1543. bsrl __l_tag
  1544. moveb d0,a6@(DTAG)
  1545. fmoved a6@(16),fp0
  1546. fmovex fp0,a6@(ETEMP)
  1547. lea a6@(ETEMP),a0
  1548. bsrl __l_tag
  1549. moveb d0,a6@(STAG)
  1550. bsrl __l_pmod
  1551. fmovel fpsr,d0 |  update status register
  1552. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1553. swap d0
  1554. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1555. swap d0
  1556. fmovel d0,fpsr
  1557. |
  1558. | Result is now in FP0
  1559. |
  1560. moveml a6@(USER_DA),d0-d1/a0-a1
  1561. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1562. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1563. unlk a6
  1564. rts
  1565. .globl __l_fmodx
  1566. __l_fmodx:
  1567. link a6,#-LOCAL_SIZE
  1568. moveml d0-d1/a0-a1,a6@(USER_DA)
  1569. fmovemx fp0-fp3,a6@(USER_FP0)
  1570. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1571. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1572. |
  1573. | copy, convert and tag input arguments
  1574. |
  1575. fmovex a6@(8),fp0
  1576. fmovex fp0,a6@(FPTEMP)
  1577. lea a6@(FPTEMP),a0
  1578. bsrl __l_tag
  1579. moveb d0,a6@(DTAG)
  1580. fmovex a6@(20),fp0
  1581. fmovex fp0,a6@(ETEMP)
  1582. lea a6@(ETEMP),a0
  1583. bsrl __l_tag
  1584. moveb d0,a6@(STAG)
  1585. bsrl __l_pmod
  1586. fmovel fpsr,d0 |  update status register
  1587. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1588. swap d0
  1589. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1590. swap d0
  1591. fmovel d0,fpsr
  1592. |
  1593. | Result is now in FP0
  1594. |
  1595. moveml a6@(USER_DA),d0-d1/a0-a1
  1596. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1597. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1598. unlk a6
  1599. rts
  1600. |
  1601. | DYADIC.GEN 1.2 4/30/91
  1602. |
  1603. | DYADIC.GEN --- generic DYADIC template
  1604. |
  1605. | This version saves all registers that will be used by the emulation
  1606. | routines and restores all but FP0 on exit.  The FPSR is
  1607. | updated to reflect the result of the operation.  Return value
  1608. | is placed in FP0 for single, double and extended results.
  1609. |
  1610. | The package subroutines expect the incoming fpcr to be zeroed
  1611. | since they need extended precision to work properly.  The
  1612. /* | 'final' fpcr is expected in a6@(USER_FPCR) so that the calculated result */
  1613. | can be properly sized and rounded.  Also, if the incoming fpcr
  1614. | has enabled any exceptions, the exception will be taken on the
  1615. | final fmovem in this template.
  1616. |
  1617. | Customizations:
  1618. | 1. Remove the moveml at the entry and exit of
  1619. |    each routine if your compiler treats those
  1620. |    registers as scratch.
  1621. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  1622. |    registers.
  1623. | 3. Delete updating of the fpsr if you only care about
  1624. |    the result.
  1625. | 4. Remove the __l_fscales and __l_fscalex entry points if your compiler
  1626. |    treats everything as doubles.
  1627. | 5. Move the result to d0/d1 if the compiler is that old.
  1628. |
  1629. | Copyright (C) Motorola, Inc. 1991
  1630. | All Rights Reserved
  1631. |
  1632. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  1633. | The copyright notice above does not evidence any
  1634. | actual or intended publication of such source code.
  1635. | xref __l_pscale
  1636. | xref __l_tag
  1637. .globl __l_fscales
  1638. __l_fscales:
  1639. link a6,#-LOCAL_SIZE
  1640. moveml d0-d1/a0-a1,a6@(USER_DA)
  1641. fmovemx fp0-fp3,a6@(USER_FP0)
  1642. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1643. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1644. |
  1645. | copy, convert and tag input arguments
  1646. |
  1647. fmoves a6@(8),fp0
  1648. fmovex fp0,a6@(FPTEMP)
  1649. lea a6@(FPTEMP),a0
  1650. bsrl __l_tag
  1651. moveb d0,a6@(DTAG)
  1652. fmoves a6@(12),fp0
  1653. fmovex fp0,a6@(ETEMP)
  1654. lea a6@(ETEMP),a0
  1655. bsrl __l_tag
  1656. moveb d0,a6@(STAG)
  1657. bsrl __l_pscale
  1658. fmovel fpsr,d0 |  update status register
  1659. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1660. swap d0
  1661. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1662. swap d0
  1663. fmovel d0,fpsr
  1664. |
  1665. | Result is now in FP0
  1666. |
  1667. moveml a6@(USER_DA),d0-d1/a0-a1
  1668. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1669. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1670. unlk a6
  1671. rts
  1672. .globl __l_fscaled
  1673. __l_fscaled:
  1674. link a6,#-LOCAL_SIZE
  1675. moveml d0-d1/a0-a1,a6@(USER_DA)
  1676. fmovemx fp0-fp3,a6@(USER_FP0)
  1677. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1678. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1679. |
  1680. | copy, convert and tag input arguments
  1681. |
  1682. fmoved a6@(8),fp0
  1683. fmovex fp0,a6@(FPTEMP)
  1684. lea a6@(FPTEMP),a0
  1685. bsrl __l_tag
  1686. moveb d0,a6@(DTAG)
  1687. fmoved a6@(16),fp0
  1688. fmovex fp0,a6@(ETEMP)
  1689. lea a6@(ETEMP),a0
  1690. bsrl __l_tag
  1691. moveb d0,a6@(STAG)
  1692. bsrl __l_pscale
  1693. fmovel fpsr,d0 |  update status register
  1694. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1695. swap d0
  1696. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1697. swap d0
  1698. fmovel d0,fpsr
  1699. |
  1700. | Result is now in FP0
  1701. |
  1702. moveml a6@(USER_DA),d0-d1/a0-a1
  1703. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1704. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1705. unlk a6
  1706. rts
  1707. .globl __l_fscalex
  1708. __l_fscalex:
  1709. link a6,#-LOCAL_SIZE
  1710. moveml d0-d1/a0-a1,a6@(USER_DA)
  1711. fmovemx fp0-fp3,a6@(USER_FP0)
  1712. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  1713. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1714. |
  1715. | copy, convert and tag input arguments
  1716. |
  1717. fmovex a6@(8),fp0
  1718. fmovex fp0,a6@(FPTEMP)
  1719. lea a6@(FPTEMP),a0
  1720. bsrl __l_tag
  1721. moveb d0,a6@(DTAG)
  1722. fmovex a6@(20),fp0
  1723. fmovex fp0,a6@(ETEMP)
  1724. lea a6@(ETEMP),a0
  1725. bsrl __l_tag
  1726. moveb d0,a6@(STAG)
  1727. bsrl __l_pscale
  1728. fmovel fpsr,d0 |  update status register
  1729. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  1730. swap d0
  1731. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  1732. swap d0
  1733. fmovel d0,fpsr
  1734. |
  1735. | Result is now in FP0
  1736. |
  1737. moveml a6@(USER_DA),d0-d1/a0-a1
  1738. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1739. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1740. unlk a6
  1741. rts
  1742. |
  1743. | MONADIC.GEN 1.3 4/30/91
  1744. |
  1745. | MONADIC.GEN --- generic MONADIC template
  1746. |
  1747. | This version saves all registers that will be used by the emulation
  1748. | routines and restores all but FP0 on exit.  The FPSR is
  1749. | updated to reflect the result of the operation.  Return value
  1750. | is placed in FP0 for single, double and extended results.
  1751. |
  1752. | The package subroutines expect the incoming fpcr to be zeroed
  1753. | since they need extended precision to work properly.  The
  1754. /* | 'final' fpcr is expected in d1 so that the calculated result */
  1755. | can be properly sized and rounded.  Also, if the incoming fpcr
  1756. | has enabled any exceptions, the exception will be taken on the
  1757. | final fmovem in this template.
  1758. |
  1759. | Customizations:
  1760. | 1. Remove the moveml at the entry and exit of
  1761. |    each routine if your compiler treats those
  1762. |    registers as scratch.
  1763. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  1764. |    registers.
  1765. | 3. Delete handling of the fpsr if you only care about
  1766. |    the result.
  1767. | 4. Some (most?) C compilers convert all float arguments
  1768. |    to double, and provide no support at all for extended
  1769. |    precision so remove the __l_fabss and __l_fabsx entry points.
  1770. | 5. Move the result to d0/d1 if the compiler is that old.
  1771. | Copyright (C) Motorola, Inc. 1991
  1772. | All Rights Reserved
  1773. |
  1774. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  1775. | The copyright notice above does not evidence any
  1776. | actual or intended publication of such source code.
  1777. | xref __l_tag
  1778. | xref __l_sabs
  1779. | xref __l_sabs
  1780. | xref __l_sabs
  1781. | xref __l_sabs
  1782. | xref __l_sabs
  1783. .globl __l_fabss
  1784. __l_fabss:
  1785. link a6,#-LOCAL_SIZE
  1786. moveml d0-d1/a0-a1,a6@(USER_DA)
  1787. fmovemx fp0-fp3,a6@(USER_FP0)
  1788. fmovel fpsr,a6@(USER_FPSR)
  1789. fmovel fpcr,a6@(USER_FPCR)
  1790. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1791. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1792. |
  1793. | copy, convert and tag input argument
  1794. |
  1795. fmoves a6@(8),fp0
  1796. fmovex fp0,a6@(ETEMP)
  1797. lea a6@(ETEMP),a0
  1798. bsrl __l_tag
  1799. moveb d0,a6@(STAG)
  1800. tstb d0
  1801. jne  L_1262
  1802. bsrl __l_sabs |  normalized (regular) number
  1803. jra  L_1266
  1804. L_1262:
  1805. cmpb #0x20,d0 |  zero?
  1806. jne  L_1263
  1807. bsrl __l_sabs
  1808. jra  L_1266
  1809. L_1263:
  1810. cmpb #0x40,d0 |  infinity?
  1811. jne  L_1264
  1812. bsrl __l_sabs
  1813. jra  L_1266
  1814. L_1264:
  1815. cmpb #0x60,d0 |  NaN?
  1816. jne  L_1265
  1817. bsrl __l_sabs
  1818. jra  L_1266
  1819. L_1265:
  1820. bsrl __l_sabs |  assuming a denorm...
  1821. L_1266:
  1822. fmovel fpsr,d0 |  update status register
  1823. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1824. fmovel d0,fpsr
  1825. |
  1826. | Result is now in FP0
  1827. |
  1828. moveml a6@(USER_DA),d0-d1/a0-a1
  1829. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1830. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1831. unlk a6
  1832. rts
  1833. .globl __l_fabsd
  1834. __l_fabsd:
  1835. link a6,#-LOCAL_SIZE
  1836. moveml d0-d1/a0-a1,a6@(USER_DA)
  1837. fmovemx fp0-fp3,a6@(USER_FP0)
  1838. fmovel fpsr,a6@(USER_FPSR)
  1839. fmovel fpcr,a6@(USER_FPCR)
  1840. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1841. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1842. |
  1843. | copy, convert and tag input argument
  1844. |
  1845. fmoved a6@(8),fp0
  1846. fmovex fp0,a6@(ETEMP)
  1847. lea a6@(ETEMP),a0
  1848. bsrl __l_tag
  1849. moveb d0,a6@(STAG)
  1850. tstb d0
  1851. jne  L_1267
  1852. bsrl __l_sabs |  normalized (regular) number
  1853. jra  L_126B
  1854. L_1267:
  1855. cmpb #0x20,d0 |  zero?
  1856. jne  L_1268
  1857. bsrl __l_sabs
  1858. jra  L_126B
  1859. L_1268:
  1860. cmpb #0x40,d0 |  infinity?
  1861. jne  L_1269
  1862. bsrl __l_sabs
  1863. jra  L_126B
  1864. L_1269:
  1865. cmpb #0x60,d0 |  NaN?
  1866. jne  L_126A
  1867. bsrl __l_sabs
  1868. jra  L_126B
  1869. L_126A:
  1870. bsrl __l_sabs |  assuming a denorm...
  1871. L_126B:
  1872. fmovel fpsr,d0 |  update status register
  1873. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1874. fmovel d0,fpsr
  1875. |
  1876. | Result is now in FP0
  1877. |
  1878. moveml a6@(USER_DA),d0-d1/a0-a1
  1879. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1880. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1881. unlk a6
  1882. rts
  1883. .globl __l_fabsx
  1884. __l_fabsx:
  1885. link a6,#-LOCAL_SIZE
  1886. moveml d0-d1/a0-a1,a6@(USER_DA)
  1887. fmovemx fp0-fp3,a6@(USER_FP0)
  1888. fmovel fpsr,a6@(USER_FPSR)
  1889. fmovel fpcr,a6@(USER_FPCR)
  1890. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1891. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1892. |
  1893. | copy, convert and tag input argument
  1894. |
  1895. fmovex a6@(8),fp0
  1896. fmovex fp0,a6@(ETEMP)
  1897. lea a6@(ETEMP),a0
  1898. bsrl __l_tag
  1899. moveb d0,a6@(STAG)
  1900. tstb d0
  1901. jne  L_126C
  1902. bsrl __l_sabs |  normalized (regular) number
  1903. jra  L_126G
  1904. L_126C:
  1905. cmpb #0x20,d0 |  zero?
  1906. jne  L_126D
  1907. bsrl __l_sabs
  1908. jra  L_126G
  1909. L_126D:
  1910. cmpb #0x40,d0 |  infinity?
  1911. jne  L_126E
  1912. bsrl __l_sabs
  1913. jra  L_126G
  1914. L_126E:
  1915. cmpb #0x60,d0 |  NaN?
  1916. jne  L_126F
  1917. bsrl __l_sabs
  1918. jra  L_126G
  1919. L_126F:
  1920. bsrl __l_sabs |  assuming a denorm...
  1921. L_126G:
  1922. fmovel fpsr,d0 |  update status register
  1923. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  1924. fmovel d0,fpsr
  1925. |
  1926. | Result is now in FP0
  1927. |
  1928. moveml a6@(USER_DA),d0-d1/a0-a1
  1929. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  1930. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  1931. unlk a6
  1932. rts
  1933. |
  1934. | MONADIC.GEN 1.3 4/30/91
  1935. |
  1936. | MONADIC.GEN --- generic MONADIC template
  1937. |
  1938. | This version saves all registers that will be used by the emulation
  1939. | routines and restores all but FP0 on exit.  The FPSR is
  1940. | updated to reflect the result of the operation.  Return value
  1941. | is placed in FP0 for single, double and extended results.
  1942. |
  1943. | The package subroutines expect the incoming fpcr to be zeroed
  1944. | since they need extended precision to work properly.  The
  1945. /* | 'final' fpcr is expected in d1 so that the calculated result */
  1946. | can be properly sized and rounded.  Also, if the incoming fpcr
  1947. | has enabled any exceptions, the exception will be taken on the
  1948. | final fmovem in this template.
  1949. |
  1950. | Customizations:
  1951. | 1. Remove the moveml at the entry and exit of
  1952. |    each routine if your compiler treats those
  1953. |    registers as scratch.
  1954. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  1955. |    registers.
  1956. | 3. Delete handling of the fpsr if you only care about
  1957. |    the result.
  1958. | 4. Some (most?) C compilers convert all float arguments
  1959. |    to double, and provide no support at all for extended
  1960. |    precision so remove the __l_fnegs and __l_fnegx entry points.
  1961. | 5. Move the result to d0/d1 if the compiler is that old.
  1962. | Copyright (C) Motorola, Inc. 1991
  1963. | All Rights Reserved
  1964. |
  1965. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  1966. | The copyright notice above does not evidence any
  1967. | actual or intended publication of such source code.
  1968. | xref __l_tag
  1969. | xref __l_sneg
  1970. | xref __l_sneg
  1971. | xref __l_sneg
  1972. | xref __l_sneg
  1973. | xref __l_sneg
  1974. .globl __l_fnegs
  1975. __l_fnegs:
  1976. link a6,#-LOCAL_SIZE
  1977. moveml d0-d1/a0-a1,a6@(USER_DA)
  1978. fmovemx fp0-fp3,a6@(USER_FP0)
  1979. fmovel fpsr,a6@(USER_FPSR)
  1980. fmovel fpcr,a6@(USER_FPCR)
  1981. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  1982. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  1983. |
  1984. | copy, convert and tag input argument
  1985. |
  1986. fmoves a6@(8),fp0
  1987. fmovex fp0,a6@(ETEMP)
  1988. lea a6@(ETEMP),a0
  1989. bsrl __l_tag
  1990. moveb d0,a6@(STAG)
  1991. tstb d0
  1992. jne  L_1272
  1993. bsrl __l_sneg |  normalized (regular) number
  1994. jra  L_1276
  1995. L_1272:
  1996. cmpb #0x20,d0 |  zero?
  1997. jne  L_1273
  1998. bsrl __l_sneg
  1999. jra  L_1276
  2000. L_1273:
  2001. cmpb #0x40,d0 |  infinity?
  2002. jne  L_1274
  2003. bsrl __l_sneg
  2004. jra  L_1276
  2005. L_1274:
  2006. cmpb #0x60,d0 |  NaN?
  2007. jne  L_1275
  2008. bsrl __l_sneg
  2009. jra  L_1276
  2010. L_1275:
  2011. bsrl __l_sneg |  assuming a denorm...
  2012. L_1276:
  2013. fmovel fpsr,d0 |  update status register
  2014. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  2015. fmovel d0,fpsr
  2016. |
  2017. | Result is now in FP0
  2018. |
  2019. moveml a6@(USER_DA),d0-d1/a0-a1
  2020. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2021. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2022. unlk a6
  2023. rts
  2024. .globl __l_fnegd
  2025. __l_fnegd:
  2026. link a6,#-LOCAL_SIZE
  2027. moveml d0-d1/a0-a1,a6@(USER_DA)
  2028. fmovemx fp0-fp3,a6@(USER_FP0)
  2029. fmovel fpsr,a6@(USER_FPSR)
  2030. fmovel fpcr,a6@(USER_FPCR)
  2031. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  2032. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2033. |
  2034. | copy, convert and tag input argument
  2035. |
  2036. fmoved a6@(8),fp0
  2037. fmovex fp0,a6@(ETEMP)
  2038. lea a6@(ETEMP),a0
  2039. bsrl __l_tag
  2040. moveb d0,a6@(STAG)
  2041. tstb d0
  2042. jne  L_1277
  2043. bsrl __l_sneg |  normalized (regular) number
  2044. jra  L_127B
  2045. L_1277:
  2046. cmpb #0x20,d0 |  zero?
  2047. jne  L_1278
  2048. bsrl __l_sneg
  2049. jra  L_127B
  2050. L_1278:
  2051. cmpb #0x40,d0 |  infinity?
  2052. jne  L_1279
  2053. bsrl __l_sneg
  2054. jra  L_127B
  2055. L_1279:
  2056. cmpb #0x60,d0 |  NaN?
  2057. jne  L_127A
  2058. bsrl __l_sneg
  2059. jra  L_127B
  2060. L_127A:
  2061. bsrl __l_sneg |  assuming a denorm...
  2062. L_127B:
  2063. fmovel fpsr,d0 |  update status register
  2064. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  2065. fmovel d0,fpsr
  2066. |
  2067. | Result is now in FP0
  2068. |
  2069. moveml a6@(USER_DA),d0-d1/a0-a1
  2070. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2071. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2072. unlk a6
  2073. rts
  2074. .globl __l_fnegx
  2075. __l_fnegx:
  2076. link a6,#-LOCAL_SIZE
  2077. moveml d0-d1/a0-a1,a6@(USER_DA)
  2078. fmovemx fp0-fp3,a6@(USER_FP0)
  2079. fmovel fpsr,a6@(USER_FPSR)
  2080. fmovel fpcr,a6@(USER_FPCR)
  2081. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  2082. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2083. |
  2084. | copy, convert and tag input argument
  2085. |
  2086. fmovex a6@(8),fp0
  2087. fmovex fp0,a6@(ETEMP)
  2088. lea a6@(ETEMP),a0
  2089. bsrl __l_tag
  2090. moveb d0,a6@(STAG)
  2091. tstb d0
  2092. jne  L_127C
  2093. bsrl __l_sneg |  normalized (regular) number
  2094. jra  L_127G
  2095. L_127C:
  2096. cmpb #0x20,d0 |  zero?
  2097. jne  L_127D
  2098. bsrl __l_sneg
  2099. jra  L_127G
  2100. L_127D:
  2101. cmpb #0x40,d0 |  infinity?
  2102. jne  L_127E
  2103. bsrl __l_sneg
  2104. jra  L_127G
  2105. L_127E:
  2106. cmpb #0x60,d0 |  NaN?
  2107. jne  L_127F
  2108. bsrl __l_sneg
  2109. jra  L_127G
  2110. L_127F:
  2111. bsrl __l_sneg |  assuming a denorm...
  2112. L_127G:
  2113. fmovel fpsr,d0 |  update status register
  2114. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  2115. fmovel d0,fpsr
  2116. |
  2117. | Result is now in FP0
  2118. |
  2119. moveml a6@(USER_DA),d0-d1/a0-a1
  2120. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2121. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2122. unlk a6
  2123. rts
  2124. |
  2125. | MONADIC.GEN 1.3 4/30/91
  2126. |
  2127. | MONADIC.GEN --- generic MONADIC template
  2128. |
  2129. | This version saves all registers that will be used by the emulation
  2130. | routines and restores all but FP0 on exit.  The FPSR is
  2131. | updated to reflect the result of the operation.  Return value
  2132. | is placed in FP0 for single, double and extended results.
  2133. |
  2134. | The package subroutines expect the incoming fpcr to be zeroed
  2135. | since they need extended precision to work properly.  The
  2136. /* | 'final' fpcr is expected in d1 so that the calculated result */
  2137. | can be properly sized and rounded.  Also, if the incoming fpcr
  2138. | has enabled any exceptions, the exception will be taken on the
  2139. | final fmovem in this template.
  2140. |
  2141. | Customizations:
  2142. | 1. Remove the moveml at the entry and exit of
  2143. |    each routine if your compiler treats those
  2144. |    registers as scratch.
  2145. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  2146. |    registers.
  2147. | 3. Delete handling of the fpsr if you only care about
  2148. |    the result.
  2149. | 4. Some (most?) C compilers convert all float arguments
  2150. |    to double, and provide no support at all for extended
  2151. |    precision so remove the __l_fsqrts and __l_fsqrtx entry points.
  2152. | 5. Move the result to d0/d1 if the compiler is that old.
  2153. | Copyright (C) Motorola, Inc. 1991
  2154. | All Rights Reserved
  2155. |
  2156. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  2157. | The copyright notice above does not evidence any
  2158. | actual or intended publication of such source code.
  2159. | xref __l_tag
  2160. | xref __l_ssqrt
  2161. | xref __l_ssqrt
  2162. | xref __l_ssqrt
  2163. | xref __l_ssqrt
  2164. | xref __l_ssqrt
  2165. .globl __l_fsqrts
  2166. __l_fsqrts:
  2167. link a6,#-LOCAL_SIZE
  2168. moveml d0-d1/a0-a1,a6@(USER_DA)
  2169. fmovemx fp0-fp3,a6@(USER_FP0)
  2170. fmovel fpsr,a6@(USER_FPSR)
  2171. fmovel fpcr,a6@(USER_FPCR)
  2172. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  2173. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2174. |
  2175. | copy, convert and tag input argument
  2176. |
  2177. fmoves a6@(8),fp0
  2178. fmovex fp0,a6@(ETEMP)
  2179. lea a6@(ETEMP),a0
  2180. bsrl __l_tag
  2181. moveb d0,a6@(STAG)
  2182. tstb d0
  2183. jne  L_1282
  2184. bsrl __l_ssqrt |  normalized (regular) number
  2185. jra  L_1286
  2186. L_1282:
  2187. cmpb #0x20,d0 |  zero?
  2188. jne  L_1283
  2189. bsrl __l_ssqrt
  2190. jra  L_1286
  2191. L_1283:
  2192. cmpb #0x40,d0 |  infinity?
  2193. jne  L_1284
  2194. bsrl __l_ssqrt
  2195. jra  L_1286
  2196. L_1284:
  2197. cmpb #0x60,d0 |  NaN?
  2198. jne  L_1285
  2199. bsrl __l_ssqrt
  2200. jra  L_1286
  2201. L_1285:
  2202. bsrl __l_ssqrt |  assuming a denorm...
  2203. L_1286:
  2204. fmovel fpsr,d0 |  update status register
  2205. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  2206. fmovel d0,fpsr
  2207. |
  2208. | Result is now in FP0
  2209. |
  2210. moveml a6@(USER_DA),d0-d1/a0-a1
  2211. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2212. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2213. unlk a6
  2214. rts
  2215. .globl __l_fsqrtd
  2216. __l_fsqrtd:
  2217. link a6,#-LOCAL_SIZE
  2218. moveml d0-d1/a0-a1,a6@(USER_DA)
  2219. fmovemx fp0-fp3,a6@(USER_FP0)
  2220. fmovel fpsr,a6@(USER_FPSR)
  2221. fmovel fpcr,a6@(USER_FPCR)
  2222. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  2223. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2224. |
  2225. | copy, convert and tag input argument
  2226. |
  2227. fmoved a6@(8),fp0
  2228. fmovex fp0,a6@(ETEMP)
  2229. lea a6@(ETEMP),a0
  2230. bsrl __l_tag
  2231. moveb d0,a6@(STAG)
  2232. tstb d0
  2233. jne  L_1287
  2234. bsrl __l_ssqrt |  normalized (regular) number
  2235. jra  L_128B
  2236. L_1287:
  2237. cmpb #0x20,d0 |  zero?
  2238. jne  L_1288
  2239. bsrl __l_ssqrt
  2240. jra  L_128B
  2241. L_1288:
  2242. cmpb #0x40,d0 |  infinity?
  2243. jne  L_1289
  2244. bsrl __l_ssqrt
  2245. jra  L_128B
  2246. L_1289:
  2247. cmpb #0x60,d0 |  NaN?
  2248. jne  L_128A
  2249. bsrl __l_ssqrt
  2250. jra  L_128B
  2251. L_128A:
  2252. bsrl __l_ssqrt |  assuming a denorm...
  2253. L_128B:
  2254. fmovel fpsr,d0 |  update status register
  2255. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  2256. fmovel d0,fpsr
  2257. |
  2258. | Result is now in FP0
  2259. |
  2260. moveml a6@(USER_DA),d0-d1/a0-a1
  2261. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2262. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2263. unlk a6
  2264. rts
  2265. .globl __l_fsqrtx
  2266. __l_fsqrtx:
  2267. link a6,#-LOCAL_SIZE
  2268. moveml d0-d1/a0-a1,a6@(USER_DA)
  2269. fmovemx fp0-fp3,a6@(USER_FP0)
  2270. fmovel fpsr,a6@(USER_FPSR)
  2271. fmovel fpcr,a6@(USER_FPCR)
  2272. fmovel fpcr,d1 /* |  user's rounding mode/precision */
  2273. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2274. |
  2275. | copy, convert and tag input argument
  2276. |
  2277. fmovex a6@(8),fp0
  2278. fmovex fp0,a6@(ETEMP)
  2279. lea a6@(ETEMP),a0
  2280. bsrl __l_tag
  2281. moveb d0,a6@(STAG)
  2282. tstb d0
  2283. jne  L_128C
  2284. bsrl __l_ssqrt |  normalized (regular) number
  2285. jra  L_128G
  2286. L_128C:
  2287. cmpb #0x20,d0 |  zero?
  2288. jne  L_128D
  2289. bsrl __l_ssqrt
  2290. jra  L_128G
  2291. L_128D:
  2292. cmpb #0x40,d0 |  infinity?
  2293. jne  L_128E
  2294. bsrl __l_ssqrt
  2295. jra  L_128G
  2296. L_128E:
  2297. cmpb #0x60,d0 |  NaN?
  2298. jne  L_128F
  2299. bsrl __l_ssqrt
  2300. jra  L_128G
  2301. L_128F:
  2302. bsrl __l_ssqrt |  assuming a denorm...
  2303. L_128G:
  2304. fmovel fpsr,d0 |  update status register
  2305. orb a6@(USER_FPSR+3),d0 | add previously accrued exceptions
  2306. fmovel d0,fpsr
  2307. |
  2308. | Result is now in FP0
  2309. |
  2310. moveml a6@(USER_DA),d0-d1/a0-a1
  2311. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2312. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2313. unlk a6
  2314. rts
  2315. |
  2316. | DYADIC.GEN 1.2 4/30/91
  2317. |
  2318. | DYADIC.GEN --- generic DYADIC template
  2319. |
  2320. | This version saves all registers that will be used by the emulation
  2321. | routines and restores all but FP0 on exit.  The FPSR is
  2322. | updated to reflect the result of the operation.  Return value
  2323. | is placed in FP0 for single, double and extended results.
  2324. |
  2325. | The package subroutines expect the incoming fpcr to be zeroed
  2326. | since they need extended precision to work properly.  The
  2327. /* | 'final' fpcr is expected in a6@(USER_FPCR) so that the calculated result */
  2328. | can be properly sized and rounded.  Also, if the incoming fpcr
  2329. | has enabled any exceptions, the exception will be taken on the
  2330. | final fmovem in this template.
  2331. |
  2332. | Customizations:
  2333. | 1. Remove the moveml at the entry and exit of
  2334. |    each routine if your compiler treats those
  2335. |    registers as scratch.
  2336. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  2337. |    registers.
  2338. | 3. Delete updating of the fpsr if you only care about
  2339. |    the result.
  2340. | 4. Remove the __l_fadds and __l_faddx entry points if your compiler
  2341. |    treats everything as doubles.
  2342. | 5. Move the result to d0/d1 if the compiler is that old.
  2343. |
  2344. | Copyright (C) Motorola, Inc. 1991
  2345. | All Rights Reserved
  2346. |
  2347. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  2348. | The copyright notice above does not evidence any
  2349. | actual or intended publication of such source code.
  2350. | xref __l_sadd
  2351. | xref __l_tag
  2352. .globl __l_fadds
  2353. __l_fadds:
  2354. link a6,#-LOCAL_SIZE
  2355. moveml d0-d1/a0-a1,a6@(USER_DA)
  2356. fmovemx fp0-fp3,a6@(USER_FP0)
  2357. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2358. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2359. |
  2360. | copy, convert and tag input arguments
  2361. |
  2362. fmoves a6@(8),fp0
  2363. fmovex fp0,a6@(FPTEMP)
  2364. lea a6@(FPTEMP),a0
  2365. bsrl __l_tag
  2366. moveb d0,a6@(DTAG)
  2367. fmoves a6@(12),fp0
  2368. fmovex fp0,a6@(ETEMP)
  2369. lea a6@(ETEMP),a0
  2370. bsrl __l_tag
  2371. moveb d0,a6@(STAG)
  2372. bsrl __l_sadd
  2373. fmovel fpsr,d0 |  update status register
  2374. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2375. swap d0
  2376. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2377. swap d0
  2378. fmovel d0,fpsr
  2379. |
  2380. | Result is now in FP0
  2381. |
  2382. moveml a6@(USER_DA),d0-d1/a0-a1
  2383. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2384. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2385. unlk a6
  2386. rts
  2387. .globl __l_faddd
  2388. __l_faddd:
  2389. link a6,#-LOCAL_SIZE
  2390. moveml d0-d1/a0-a1,a6@(USER_DA)
  2391. fmovemx fp0-fp3,a6@(USER_FP0)
  2392. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2393. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2394. |
  2395. | copy, convert and tag input arguments
  2396. |
  2397. fmoved a6@(8),fp0
  2398. fmovex fp0,a6@(FPTEMP)
  2399. lea a6@(FPTEMP),a0
  2400. bsrl __l_tag
  2401. moveb d0,a6@(DTAG)
  2402. fmoved a6@(16),fp0
  2403. fmovex fp0,a6@(ETEMP)
  2404. lea a6@(ETEMP),a0
  2405. bsrl __l_tag
  2406. moveb d0,a6@(STAG)
  2407. bsrl __l_sadd
  2408. fmovel fpsr,d0 |  update status register
  2409. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2410. swap d0
  2411. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2412. swap d0
  2413. fmovel d0,fpsr
  2414. |
  2415. | Result is now in FP0
  2416. |
  2417. moveml a6@(USER_DA),d0-d1/a0-a1
  2418. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2419. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2420. unlk a6
  2421. rts
  2422. .globl __l_faddx
  2423. __l_faddx:
  2424. link a6,#-LOCAL_SIZE
  2425. moveml d0-d1/a0-a1,a6@(USER_DA)
  2426. fmovemx fp0-fp3,a6@(USER_FP0)
  2427. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2428. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2429. |
  2430. | copy, convert and tag input arguments
  2431. |
  2432. fmovex a6@(8),fp0
  2433. fmovex fp0,a6@(FPTEMP)
  2434. lea a6@(FPTEMP),a0
  2435. bsrl __l_tag
  2436. moveb d0,a6@(DTAG)
  2437. fmovex a6@(20),fp0
  2438. fmovex fp0,a6@(ETEMP)
  2439. lea a6@(ETEMP),a0
  2440. bsrl __l_tag
  2441. moveb d0,a6@(STAG)
  2442. bsrl __l_sadd
  2443. fmovel fpsr,d0 |  update status register
  2444. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2445. swap d0
  2446. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2447. swap d0
  2448. fmovel d0,fpsr
  2449. |
  2450. | Result is now in FP0
  2451. |
  2452. moveml a6@(USER_DA),d0-d1/a0-a1
  2453. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2454. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2455. unlk a6
  2456. rts
  2457. |
  2458. | DYADIC.GEN 1.2 4/30/91
  2459. |
  2460. | DYADIC.GEN --- generic DYADIC template
  2461. |
  2462. | This version saves all registers that will be used by the emulation
  2463. | routines and restores all but FP0 on exit.  The FPSR is
  2464. | updated to reflect the result of the operation.  Return value
  2465. | is placed in FP0 for single, double and extended results.
  2466. |
  2467. | The package subroutines expect the incoming fpcr to be zeroed
  2468. | since they need extended precision to work properly.  The
  2469. /* | 'final' fpcr is expected in a6@(USER_FPCR) so that the calculated result */
  2470. | can be properly sized and rounded.  Also, if the incoming fpcr
  2471. | has enabled any exceptions, the exception will be taken on the
  2472. | final fmovem in this template.
  2473. |
  2474. | Customizations:
  2475. | 1. Remove the moveml at the entry and exit of
  2476. |    each routine if your compiler treats those
  2477. |    registers as scratch.
  2478. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  2479. |    registers.
  2480. | 3. Delete updating of the fpsr if you only care about
  2481. |    the result.
  2482. | 4. Remove the __l_fsubs and __l_fsubx entry points if your compiler
  2483. |    treats everything as doubles.
  2484. | 5. Move the result to d0/d1 if the compiler is that old.
  2485. |
  2486. | Copyright (C) Motorola, Inc. 1991
  2487. | All Rights Reserved
  2488. |
  2489. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  2490. | The copyright notice above does not evidence any
  2491. | actual or intended publication of such source code.
  2492. | xref __l_ssub
  2493. | xref __l_tag
  2494. .globl __l_fsubs
  2495. __l_fsubs:
  2496. link a6,#-LOCAL_SIZE
  2497. moveml d0-d1/a0-a1,a6@(USER_DA)
  2498. fmovemx fp0-fp3,a6@(USER_FP0)
  2499. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2500. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2501. |
  2502. | copy, convert and tag input arguments
  2503. |
  2504. fmoves a6@(8),fp0
  2505. fmovex fp0,a6@(FPTEMP)
  2506. lea a6@(FPTEMP),a0
  2507. bsrl __l_tag
  2508. moveb d0,a6@(DTAG)
  2509. fmoves a6@(12),fp0
  2510. fmovex fp0,a6@(ETEMP)
  2511. lea a6@(ETEMP),a0
  2512. bsrl __l_tag
  2513. moveb d0,a6@(STAG)
  2514. bsrl __l_ssub
  2515. fmovel fpsr,d0 |  update status register
  2516. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2517. swap d0
  2518. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2519. swap d0
  2520. fmovel d0,fpsr
  2521. |
  2522. | Result is now in FP0
  2523. |
  2524. moveml a6@(USER_DA),d0-d1/a0-a1
  2525. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2526. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2527. unlk a6
  2528. rts
  2529. .globl __l_fsubd
  2530. __l_fsubd:
  2531. link a6,#-LOCAL_SIZE
  2532. moveml d0-d1/a0-a1,a6@(USER_DA)
  2533. fmovemx fp0-fp3,a6@(USER_FP0)
  2534. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2535. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2536. |
  2537. | copy, convert and tag input arguments
  2538. |
  2539. fmoved a6@(8),fp0
  2540. fmovex fp0,a6@(FPTEMP)
  2541. lea a6@(FPTEMP),a0
  2542. bsrl __l_tag
  2543. moveb d0,a6@(DTAG)
  2544. fmoved a6@(16),fp0
  2545. fmovex fp0,a6@(ETEMP)
  2546. lea a6@(ETEMP),a0
  2547. bsrl __l_tag
  2548. moveb d0,a6@(STAG)
  2549. bsrl __l_ssub
  2550. fmovel fpsr,d0 |  update status register
  2551. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2552. swap d0
  2553. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2554. swap d0
  2555. fmovel d0,fpsr
  2556. |
  2557. | Result is now in FP0
  2558. |
  2559. moveml a6@(USER_DA),d0-d1/a0-a1
  2560. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2561. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2562. unlk a6
  2563. rts
  2564. .globl __l_fsubx
  2565. __l_fsubx:
  2566. link a6,#-LOCAL_SIZE
  2567. moveml d0-d1/a0-a1,a6@(USER_DA)
  2568. fmovemx fp0-fp3,a6@(USER_FP0)
  2569. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2570. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2571. |
  2572. | copy, convert and tag input arguments
  2573. |
  2574. fmovex a6@(8),fp0
  2575. fmovex fp0,a6@(FPTEMP)
  2576. lea a6@(FPTEMP),a0
  2577. bsrl __l_tag
  2578. moveb d0,a6@(DTAG)
  2579. fmovex a6@(20),fp0
  2580. fmovex fp0,a6@(ETEMP)
  2581. lea a6@(ETEMP),a0
  2582. bsrl __l_tag
  2583. moveb d0,a6@(STAG)
  2584. bsrl __l_ssub
  2585. fmovel fpsr,d0 |  update status register
  2586. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2587. swap d0
  2588. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2589. swap d0
  2590. fmovel d0,fpsr
  2591. |
  2592. | Result is now in FP0
  2593. |
  2594. moveml a6@(USER_DA),d0-d1/a0-a1
  2595. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2596. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2597. unlk a6
  2598. rts
  2599. |
  2600. | DYADIC.GEN 1.2 4/30/91
  2601. |
  2602. | DYADIC.GEN --- generic DYADIC template
  2603. |
  2604. | This version saves all registers that will be used by the emulation
  2605. | routines and restores all but FP0 on exit.  The FPSR is
  2606. | updated to reflect the result of the operation.  Return value
  2607. | is placed in FP0 for single, double and extended results.
  2608. |
  2609. | The package subroutines expect the incoming fpcr to be zeroed
  2610. | since they need extended precision to work properly.  The
  2611. /* | 'final' fpcr is expected in a6@(USER_FPCR) so that the calculated result */
  2612. | can be properly sized and rounded.  Also, if the incoming fpcr
  2613. | has enabled any exceptions, the exception will be taken on the
  2614. | final fmovem in this template.
  2615. |
  2616. | Customizations:
  2617. | 1. Remove the moveml at the entry and exit of
  2618. |    each routine if your compiler treats those
  2619. |    registers as scratch.
  2620. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  2621. |    registers.
  2622. | 3. Delete updating of the fpsr if you only care about
  2623. |    the result.
  2624. | 4. Remove the __l_fmuls and __l_fmulx entry points if your compiler
  2625. |    treats everything as doubles.
  2626. | 5. Move the result to d0/d1 if the compiler is that old.
  2627. |
  2628. | Copyright (C) Motorola, Inc. 1991
  2629. | All Rights Reserved
  2630. |
  2631. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  2632. | The copyright notice above does not evidence any
  2633. | actual or intended publication of such source code.
  2634. | xref __l_smul
  2635. | xref __l_tag
  2636. .globl __l_fmuls
  2637. __l_fmuls:
  2638. link a6,#-LOCAL_SIZE
  2639. moveml d0-d1/a0-a1,a6@(USER_DA)
  2640. fmovemx fp0-fp3,a6@(USER_FP0)
  2641. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2642. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2643. |
  2644. | copy, convert and tag input arguments
  2645. |
  2646. fmoves a6@(8),fp0
  2647. fmovex fp0,a6@(FPTEMP)
  2648. lea a6@(FPTEMP),a0
  2649. bsrl __l_tag
  2650. moveb d0,a6@(DTAG)
  2651. fmoves a6@(12),fp0
  2652. fmovex fp0,a6@(ETEMP)
  2653. lea a6@(ETEMP),a0
  2654. bsrl __l_tag
  2655. moveb d0,a6@(STAG)
  2656. bsrl __l_smul
  2657. fmovel fpsr,d0 |  update status register
  2658. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2659. swap d0
  2660. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2661. swap d0
  2662. fmovel d0,fpsr
  2663. |
  2664. | Result is now in FP0
  2665. |
  2666. moveml a6@(USER_DA),d0-d1/a0-a1
  2667. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2668. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2669. unlk a6
  2670. rts
  2671. .globl __l_fmuld
  2672. __l_fmuld:
  2673. link a6,#-LOCAL_SIZE
  2674. moveml d0-d1/a0-a1,a6@(USER_DA)
  2675. fmovemx fp0-fp3,a6@(USER_FP0)
  2676. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2677. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2678. |
  2679. | copy, convert and tag input arguments
  2680. |
  2681. fmoved a6@(8),fp0
  2682. fmovex fp0,a6@(FPTEMP)
  2683. lea a6@(FPTEMP),a0
  2684. bsrl __l_tag
  2685. moveb d0,a6@(DTAG)
  2686. fmoved a6@(16),fp0
  2687. fmovex fp0,a6@(ETEMP)
  2688. lea a6@(ETEMP),a0
  2689. bsrl __l_tag
  2690. moveb d0,a6@(STAG)
  2691. bsrl __l_smul
  2692. fmovel fpsr,d0 |  update status register
  2693. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2694. swap d0
  2695. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2696. swap d0
  2697. fmovel d0,fpsr
  2698. |
  2699. | Result is now in FP0
  2700. |
  2701. moveml a6@(USER_DA),d0-d1/a0-a1
  2702. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2703. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2704. unlk a6
  2705. rts
  2706. .globl __l_fmulx
  2707. __l_fmulx:
  2708. link a6,#-LOCAL_SIZE
  2709. moveml d0-d1/a0-a1,a6@(USER_DA)
  2710. fmovemx fp0-fp3,a6@(USER_FP0)
  2711. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2712. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2713. |
  2714. | copy, convert and tag input arguments
  2715. |
  2716. fmovex a6@(8),fp0
  2717. fmovex fp0,a6@(FPTEMP)
  2718. lea a6@(FPTEMP),a0
  2719. bsrl __l_tag
  2720. moveb d0,a6@(DTAG)
  2721. fmovex a6@(20),fp0
  2722. fmovex fp0,a6@(ETEMP)
  2723. lea a6@(ETEMP),a0
  2724. bsrl __l_tag
  2725. moveb d0,a6@(STAG)
  2726. bsrl __l_smul
  2727. fmovel fpsr,d0 |  update status register
  2728. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2729. swap d0
  2730. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2731. swap d0
  2732. fmovel d0,fpsr
  2733. |
  2734. | Result is now in FP0
  2735. |
  2736. moveml a6@(USER_DA),d0-d1/a0-a1
  2737. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2738. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2739. unlk a6
  2740. rts
  2741. |
  2742. | DYADIC.GEN 1.2 4/30/91
  2743. |
  2744. | DYADIC.GEN --- generic DYADIC template
  2745. |
  2746. | This version saves all registers that will be used by the emulation
  2747. | routines and restores all but FP0 on exit.  The FPSR is
  2748. | updated to reflect the result of the operation.  Return value
  2749. | is placed in FP0 for single, double and extended results.
  2750. |
  2751. | The package subroutines expect the incoming fpcr to be zeroed
  2752. | since they need extended precision to work properly.  The
  2753. /* | 'final' fpcr is expected in a6@(USER_FPCR) so that the calculated result */
  2754. | can be properly sized and rounded.  Also, if the incoming fpcr
  2755. | has enabled any exceptions, the exception will be taken on the
  2756. | final fmovem in this template.
  2757. |
  2758. | Customizations:
  2759. | 1. Remove the moveml at the entry and exit of
  2760. |    each routine if your compiler treats those
  2761. |    registers as scratch.
  2762. /* | 2. Likewise, don't save FP0/FP1 if they are scratch */
  2763. |    registers.
  2764. | 3. Delete updating of the fpsr if you only care about
  2765. |    the result.
  2766. | 4. Remove the __l_fdivs and __l_fdivx entry points if your compiler
  2767. |    treats everything as doubles.
  2768. | 5. Move the result to d0/d1 if the compiler is that old.
  2769. |
  2770. | Copyright (C) Motorola, Inc. 1991
  2771. | All Rights Reserved
  2772. |
  2773. | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  2774. | The copyright notice above does not evidence any
  2775. | actual or intended publication of such source code.
  2776. | xref __l_sdiv
  2777. | xref __l_tag
  2778. .globl __l_fdivs
  2779. __l_fdivs:
  2780. link a6,#-LOCAL_SIZE
  2781. moveml d0-d1/a0-a1,a6@(USER_DA)
  2782. fmovemx fp0-fp3,a6@(USER_FP0)
  2783. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2784. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2785. |
  2786. | copy, convert and tag input arguments
  2787. |
  2788. fmoves a6@(8),fp0
  2789. fmovex fp0,a6@(FPTEMP)
  2790. lea a6@(FPTEMP),a0
  2791. bsrl __l_tag
  2792. moveb d0,a6@(DTAG)
  2793. fmoves a6@(12),fp0
  2794. fmovex fp0,a6@(ETEMP)
  2795. lea a6@(ETEMP),a0
  2796. bsrl __l_tag
  2797. moveb d0,a6@(STAG)
  2798. bsrl __l_sdiv
  2799. fmovel fpsr,d0 |  update status register
  2800. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2801. swap d0
  2802. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2803. swap d0
  2804. fmovel d0,fpsr
  2805. |
  2806. | Result is now in FP0
  2807. |
  2808. moveml a6@(USER_DA),d0-d1/a0-a1
  2809. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2810. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2811. unlk a6
  2812. rts
  2813. .globl __l_fdivd
  2814. __l_fdivd:
  2815. link a6,#-LOCAL_SIZE
  2816. moveml d0-d1/a0-a1,a6@(USER_DA)
  2817. fmovemx fp0-fp3,a6@(USER_FP0)
  2818. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2819. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2820. |
  2821. | copy, convert and tag input arguments
  2822. |
  2823. fmoved a6@(8),fp0
  2824. fmovex fp0,a6@(FPTEMP)
  2825. lea a6@(FPTEMP),a0
  2826. bsrl __l_tag
  2827. moveb d0,a6@(DTAG)
  2828. fmoved a6@(16),fp0
  2829. fmovex fp0,a6@(ETEMP)
  2830. lea a6@(ETEMP),a0
  2831. bsrl __l_tag
  2832. moveb d0,a6@(STAG)
  2833. bsrl __l_sdiv
  2834. fmovel fpsr,d0 |  update status register
  2835. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2836. swap d0
  2837. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2838. swap d0
  2839. fmovel d0,fpsr
  2840. |
  2841. | Result is now in FP0
  2842. |
  2843. moveml a6@(USER_DA),d0-d1/a0-a1
  2844. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2845. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2846. unlk a6
  2847. rts
  2848. .globl __l_fdivx
  2849. __l_fdivx:
  2850. link a6,#-LOCAL_SIZE
  2851. moveml d0-d1/a0-a1,a6@(USER_DA)
  2852. fmovemx fp0-fp3,a6@(USER_FP0)
  2853. fmoveml fpsr/fpcr,a6@(USER_FPCR) /* |  user's rounding mode/precision */
  2854. fmovel #0,fpcr |  force rounding mode/prec to extended,rn
  2855. |
  2856. | copy, convert and tag input arguments
  2857. |
  2858. fmovex a6@(8),fp0
  2859. fmovex fp0,a6@(FPTEMP)
  2860. lea a6@(FPTEMP),a0
  2861. bsrl __l_tag
  2862. moveb d0,a6@(DTAG)
  2863. fmovex a6@(20),fp0
  2864. fmovex fp0,a6@(ETEMP)
  2865. lea a6@(ETEMP),a0
  2866. bsrl __l_tag
  2867. moveb d0,a6@(STAG)
  2868. bsrl __l_sdiv
  2869. fmovel fpsr,d0 |  update status register
  2870. orb a6@(FPSR_AEXCEPT),d0 | add previously accrued exceptions
  2871. swap d0
  2872. orb a6@(FPSR_QBYTE),d0 |  pickup sign of quotient byte
  2873. swap d0
  2874. fmovel d0,fpsr
  2875. |
  2876. | Result is now in FP0
  2877. |
  2878. moveml a6@(USER_DA),d0-d1/a0-a1
  2879. fmovemx a6@(USER_FP1),fp1-fp3 |  note: fp0 not restored
  2880. fmovel a6@(USER_FPCR),fpcr | fpcr restored
  2881. unlk a6
  2882. rts
  2883. | end