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

VxWorks

开发平台:

C/C++

  1. /* fp32.s - VxWorks conversion from Microtek tools to Sun native */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01a,06aug92,jwt  converted.
  7. */
  8. /*
  9. ! ! ! ! !
  10. ! SPARClite Floating Point Library
  11. !
  12. ! Copyright (C) 1992 By
  13. ! United States Software Corporation
  14. ! 14215 N.W. Science Park Drive
  15. ! Portland, Oregon 97229
  16. !
  17. ! This software is furnished under a license and may be used
  18. ! and copied only in accordance with the terms of such license
  19. ! and with the inclusion of the above copyright notice.
  20. ! This software or any other copies thereof may not be provided
  21. ! or otherwise made available to any other person.  No title to
  22. ! and ownership of the software is hereby transferred.
  23. !
  24. ! The information in this software is subject to change without 
  25. ! notice and should not be construed as a commitment by United
  26. ! States Software Corporation.
  27. !
  28. ! First Release: V1.02 March 26 1992
  29. ! ! ! ! !
  30. .macro scan,p1,p2,p3
  31. .word 0x81602000 | (&p3<<25) | (&p1<<14) | p2
  32. .endm
  33. .macro umul,p1,p2,p3
  34. .word 0x80500000 | (&p3<<25) | (&p1<<14) | &p2
  35. .endm
  36. .macro divscc,p1,p2,p3
  37. .word 0x80e80000 | (&p3<<25) | (&p1<<14) | &p2
  38. .endm
  39. */
  40. #include "arch/sparc/ussSun4.h"
  41. .text
  42. .align 4
  43. .global __finc
  44. ! ! ! ! !
  45. !  Routine: __finc sp increment
  46. !  On entry: o0 = argument A
  47. !  On exit: o0 = A + 1
  48. !  Notes: Uses _fpadd after setting second argument
  49. ! ! ! ! !
  50. __finc:
  51. ba _fpadd ! j/ add
  52.  sethi %hi(0x3f800000),%o1 ! o1 = 1
  53. .global __fdec
  54. ! ! ! ! !
  55. !  Routine: __fdec sp decrement
  56. !  On entry: o0 = argument A
  57. !  On exit: o0 = A - 1
  58. !  Notes: Uses _fpadd after setting second argument
  59. ! ! ! ! !
  60. __fdec:
  61. ba _fpadd ! j/ add
  62.  sethi %hi(0xbf800000),%o1 ! o1 = -1
  63. .global _fpsub
  64. _fpsub:
  65. .global __fsub
  66. __fsub:
  67. sethi   %hi(0x80000000),%g1
  68. xor     %o1,%g1,%o1
  69. .global _fpadd
  70. _fpadd:
  71. .global __fadd
  72. __fadd:
  73. save %sp,-96,%sp
  74. sra     %i0,23,%i5
  75. and     %i5,0xff,%i5
  76. sra     %i1,23,%l1
  77. and     %l1,0xff,%l1
  78. sethi   %hi(0x80000000),%i3
  79. sll     %i0,8,%i4
  80. or      %i4,%i3,%i4
  81. sll     %i1,8,%l0
  82. or      %l0,%i3,%l0
  83. sub     %i5,1,%l3
  84. subcc   %l3,0xfe,%g0
  85. bcc     BspecA         
  86. Blab1: sub     %l1,1,%l3
  87. subcc   %l3,0xfe,%g0
  88. bcc     BspecB   
  89. Blab2: subcc   %i5,%l1,%l2
  90. bneg    i1             
  91. subcc   %l2,0x20,%g0
  92. bl      i2       
  93. NOP
  94. ba      e1       
  95. or      %g0,2,%l0
  96. i2: or      %g0,%l0,%i2
  97. srl     %l0,%l2,%l0
  98. sll     %l0,%l2,%l3
  99. subcc   %l3,%i2,%g0
  100. bne,a e1               
  101. or      %l0,2,%l0
  102. ba,a    e1       
  103. i1: or      %g0,%l1,%i5
  104. sub     %g0,%l2,%l2
  105. subcc   %l2,0x20,%g0
  106. bl      i4       
  107. NOP
  108. ba      e1       
  109. or      %g0,2,%i4
  110. i4: or      %g0,%i4,%i2
  111. srl     %i4,%l2,%i4
  112. sll     %i4,%l2,%l3
  113. subcc   %l3,%i2,%g0
  114. bne,a e1               
  115. or      %i4,2,%i4
  116. e1: and     %i0,%i3,%l2
  117. xorcc   %l2,%i1,%l3
  118. bneg    Bsub1    
  119. NOP
  120. addcc   %i4,%l0,%i4
  121. bcc     Bres           
  122. andcc   %i4,1,%l3
  123. bne,a i7               
  124. or      %i4,2,%i4
  125. i7: srl     %i4,1,%i4
  126. add     %i5,1,%i5
  127. subcc   %i5,0xff,%g0
  128. be,a Bres              
  129. or      %g0,0,%i4
  130. ba,a    Bres     
  131. Bsub1: subcc   %i4,%l0,%i4
  132. be      Bzer     
  133. NOP
  134. bcc     i9       
  135. NOP
  136. sub     %g0,%i4,%i4
  137. xor     %l2,%i3,%l2
  138. i9:
  139. /* scan %i4,0,%i2 */
  140. SCAN | (in4 << 14) | 0 | (in2 << 25)
  141. sll %i4,%i2,%i4
  142. subcc %i5,%i2,%i5
  143. Bres: subcc   %i5,0,%i5
  144. ble     Bund     
  145. NOP
  146. Blab12: addcc   %i4,0x80,%i4
  147. addx    %i5,0,%i5
  148. srl     %i4,8,%l3
  149. and     %l3,1,%l3
  150. sub     %i4,%l3,%i4
  151. sll     %i4,1,%i4
  152. srl     %i4,9,%i4
  153. sll     %i5,23,%l3
  154. or      %i4,%l3,%i4
  155. or      %i4,%l2,%i0
  156. B999: jmpl %i7+8,%g0
  157. restore %g0,0,%g0
  158. Bund: or      %g0,1,%i2
  159. sub     %i2,%i5,%i2
  160. subcc   %i2,0x20,%g0
  161. bcc     Bzer     
  162. sethi   %hi(0x80000000),%l3
  163. or      %i4,%l3,%i4
  164. or      %g0,0x20,%l3
  165. sub     %l3,%i2,%l3
  166. sll     %i4,%l3,%i5
  167. srl     %i4,%i2,%i4
  168. subcc   %i5,0,%i5
  169. bne,a i10              
  170. or      %i4,1,%i4
  171. i10: ba      Blab12   
  172. or      %g0,0,%i5
  173. BspecA: subcc   %i5,0,%i5
  174. bne     i11      
  175. NOP
  176. addcc   %i4,%i4,%i4
  177. be      i12      
  178. NOP
  179. /* scan %i4,0,%l2 */
  180. SCAN | (in4 << 14) | 0 | (lo2 << 25)
  181. sll %i4,%l2,%i4
  182. subcc %i5,%l2,%i5
  183. ba,a    Blab1    
  184. i12: subcc   %l1,0xff,%g0
  185. be      BspecB   
  186. NOP
  187. ba,a    BretB    
  188. i11: addcc   %i4,%i4,%l3
  189. bne     Bnan           
  190. subcc   %l1,0xff,%g0
  191. bne     BretA          
  192. xorcc   %i0,%i1,%l3
  193. bneg    Bnan     
  194. NOP
  195. ba,a    BretB    
  196. BspecB: subcc   %l1,0,%l1
  197. bne     i14      
  198. NOP
  199. addcc   %l0,%l0,%l0
  200. be      BretA    
  201. NOP
  202. /* scan %l0,0,%l2 */
  203. SCAN | (lo0 << 14) | 0 | (lo2 << 25)
  204. sll %l0,%l2,%l0
  205. subcc %l1,%l2,%l1
  206. ba,a    Blab2    
  207. i14: addcc   %l0,%l0,%l3
  208. bne     Bnan     
  209. NOP
  210. BretB: ba      B999     
  211. or      %g0,%i1,%i0
  212. BretA:
  213. ba,a    B999     
  214. Bzer: ba      B999     
  215. or      %g0,0,%i0
  216. Bnan: ba      B999     
  217. sethi   %hi(0xffc00000),%i0
  218. .global _fpmul
  219. _fpmul:
  220. .global __fmul
  221. __fmul:
  222. save %sp,-96,%sp
  223. sra     %i0,23,%i3
  224. and     %i3,0xff,%i3
  225. sra     %i1,23,%i5
  226. and     %i5,0xff,%i5
  227. sethi   %hi(0x80000000),%l0
  228. sll     %i0,8,%i2
  229. or      %i2,%l0,%i2
  230. sll     %i1,8,%i4
  231. or      %i4,%l0,%i4
  232. xor     %i0,%i1,%l2
  233. and     %l0,%l2,%l0
  234. sub     %i3,1,%l2
  235. subcc   %l2,0xfe,%g0
  236. bcc     CspecA         
  237. Clab1: sub     %i5,1,%l2
  238. subcc   %l2,0xfe,%g0
  239. bcc     CspecB   
  240. Clab2:
  241. umul %i2,%i4,%l1
  242. rd %y,%i2
  243. subcc   %l1,0,%l1
  244. bne,a i16              
  245. or      %i2,1,%i2
  246. i16: subcc   %i2,0,%i2
  247. bneg    i17      
  248. NOP
  249. sll     %i2,1,%i2
  250. sub     %i3,1,%i3
  251. i17: sub     %i5,0x7e,%l2
  252. add     %i3,%l2,%i3
  253. sub     %i3,1,%l2
  254. subcc   %l2,0xfe,%g0
  255. bcc     Coveund  
  256. NOP
  257. Clab8: addcc   %i2,0x80,%i2
  258. addx    %i3,0,%i3
  259. srl     %i2,8,%l2
  260. and     %l2,1,%l2
  261. sub     %i2,%l2,%i2
  262. sll     %i2,1,%i2
  263. srl     %i2,9,%i2
  264. sll     %i3,23,%l2
  265. or      %i2,%l2,%i2
  266. or      %i2,%l0,%i0
  267. C999: jmpl %i7+8,%g0
  268. restore %g0,0,%g0
  269. CspecA: subcc   %i3,0,%i3
  270. bne     i18      
  271. NOP
  272. addcc   %i2,%i2,%i2
  273. be      i18      
  274. NOP
  275. /* scan %i2,0,%l1 */
  276. SCAN | (in2 << 14) | 0 | (lo1 << 25)
  277. sll %i2,%l1,%i2
  278. subcc %i3,%l1,%i3
  279. ba,a    Clab1    
  280. i18: add     %i3,%i5,%l2
  281. subcc   %l2,0xff,%g0
  282. be      Cnan           
  283. subcc   %i3,0,%i3
  284. be      Czer           
  285. addcc   %i2,%i2,%l2
  286. bne     Cnan           
  287. subcc   %i5,0xff,%g0
  288. bne     Cinf           
  289. CspecB: subcc   %i5,0,%i5
  290. bne     i20      
  291. NOP
  292. addcc   %i4,%i4,%i4
  293. be      Czer     
  294. NOP
  295. /* scan %i4,0,%l1 */
  296. SCAN | (in4 << 14) | 0 | (lo1 << 25)
  297. sll %i4,%l1,%i4
  298. subcc %i5,%l1,%i5
  299. ba,a    Clab2    
  300. Czer: ba      C999     
  301. or      %g0,%l0,%i0
  302. i20: addcc   %i4,%i4,%l2
  303. bne     Cnan     
  304. NOP
  305. Cinf: sethi   %hi(0x7f800000),%l2
  306. ba      C999     
  307. or      %l2,%l0,%i0
  308. Cnan: ba      C999     
  309. sethi   %hi(0xffc00000),%i0
  310. Coveund:
  311. subcc   %i3,0,%i3
  312. bg      Cinf     
  313. NOP
  314. or      %g0,1,%l1
  315. sub     %l1,%i3,%l1
  316. subcc   %l1,0x20,%g0
  317. bcc     Czer     
  318. NOP
  319. or      %g0,0x20,%l2
  320. sub     %l2,%l1,%l2
  321. sll     %i2,%l2,%i3
  322. srl     %i2,%l1,%i2
  323. subcc   %i3,0,%i3
  324. bne,a i23              
  325. or      %i2,2,%i2
  326. i23: ba      Clab8    
  327. or      %g0,0,%i3
  328. .global _fpdiv
  329. _fpdiv:
  330. .global __fdiv
  331. __fdiv:
  332. save %sp,-96,%sp
  333. sethi   %hi(0x80000000),%l1
  334. sra     %i0,23,%i4
  335. and     %i4,0xff,%i4
  336. sra     %i1,23,%l0
  337. and     %l0,0xff,%l0
  338. sll     %i0,8,%i3
  339. or      %i3,%l1,%i3
  340. sll     %i1,8,%i5
  341. or      %i5,%l1,%i5
  342. xor     %i0,%i1,%l6
  343. and     %l1,%l6,%l1
  344. sub     %i4,1,%l6
  345. subcc   %l6,0xfe,%g0
  346. bcc     DspecA         
  347. Dlab1: sub     %l0,1,%l6
  348. subcc   %l6,0xfe,%g0
  349. bcc     DspecB         
  350. Dlab2: subcc   %i3,%i5,%g0
  351. bcs     i24      
  352. NOP
  353. srl     %i3,1,%i3
  354. add     %i4,1,%i4
  355. i24: wr %i3,0,%y
  356. or %g0,0x0,%i3
  357. orcc %g0,0,%g0
  358. #if 0
  359. divscc %i3,%i5,%i3
  360. divscc %i3,%i5,%i3
  361. divscc %i3,%i5,%i3
  362. divscc %i3,%i5,%i3
  363. divscc %i3,%i5,%i3
  364. divscc %i3,%i5,%i3
  365. divscc %i3,%i5,%i3
  366. divscc %i3,%i5,%i3
  367. divscc %i3,%i5,%i3
  368. divscc %i3,%i5,%i3
  369. divscc %i3,%i5,%i3
  370. divscc %i3,%i5,%i3
  371. divscc %i3,%i5,%i3
  372. divscc %i3,%i5,%i3
  373. divscc %i3,%i5,%i3
  374. divscc %i3,%i5,%i3
  375. divscc %i3,%i5,%i3
  376. divscc %i3,%i5,%i3
  377. divscc %i3,%i5,%i3
  378. divscc %i3,%i5,%i3
  379. divscc %i3,%i5,%i3
  380. divscc %i3,%i5,%i3
  381. divscc %i3,%i5,%i3
  382. divscc %i3,%i5,%i3
  383. divscc %i3,%i5,%i3
  384. divscc %i3,%i5,%i3
  385. divscc %i3,%i5,%i3
  386. divscc %i3,%i5,%i3
  387. divscc %i3,%i5,%i3
  388. divscc %i3,%i5,%i3
  389. divscc %i3,%i5,%i3
  390. divscc %i3,%i5,%i3
  391. #else
  392. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  393. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  394. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  395. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  396. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  397. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  398. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  399. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  400. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  401. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  402. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  403. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  404. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  405. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  406. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  407. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  408. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  409. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  410. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  411. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  412. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  413. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  414. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  415. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  416. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  417. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  418. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  419. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  420. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  421. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  422. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  423. DIVSCC | (in3 << 14) | in5 | (in3 << 25)
  424. #endif
  425. bge L1       
  426.  rd %y,%i2
  427. addcc %i5,%i2,%i2
  428. L1: subcc   %i2,0,%i2
  429. bne,a i25              
  430. or      %i3,1,%i3
  431. i25: or      %g0,0x7e,%l6
  432. sub     %l6,%l0,%l6
  433. add     %i4,%l6,%i4
  434. sub     %i4,1,%l6
  435. subcc   %l6,0xfe,%g0
  436. bcc     Doveund  
  437. NOP
  438. Dlab8: addcc   %i3,0x80,%i3
  439. addx    %i4,0,%i4
  440. srl     %i3,8,%l6
  441. and     %l6,1,%l6
  442. sub     %i3,%l6,%i3
  443. sll     %i3,1,%i3
  444. srl     %i3,9,%i3
  445. sll     %i4,23,%l6
  446. or      %i3,%l6,%i3
  447. or      %i3,%l1,%i0
  448. D999: jmpl %i7+8,%g0
  449. restore %g0,0,%g0
  450. DspecA: subcc   %i4,0,%i4
  451. bne     i26      
  452. NOP
  453. addcc   %i3,%i3,%i3
  454. be      i26      
  455. NOP
  456. /* scan %i3,0,%l2 */
  457. SCAN | (in3 << 14) | 0 | (lo2 << 25)
  458. sll %i3,%l2,%i3
  459. subcc %i4,%l2,%i4
  460. ba,a    Dlab1    
  461. i26: subcc   %l0,%i4,%g0
  462. be      Dnan           
  463. subcc   %l0,0xff,%g0
  464. be      DspecB         
  465. subcc   %i4,0,%i4
  466. be      Dzer           
  467. addcc   %i3,%i3,%l6
  468. bne     Dnan     
  469. NOP
  470. ba,a    Dinf     
  471. DspecB: subcc   %l0,0,%l0
  472. bne     i28      
  473. NOP
  474. addcc   %i5,%i5,%i5
  475. be      Dinf     
  476. NOP
  477. /* scan %i5,0,%l2 */
  478. SCAN | (in5 << 14) | 0 | (lo2 << 25)
  479. sll %i5,%l2,%i5
  480. subcc %l0,%l2,%l0
  481. ba,a    Dlab2    
  482. i28: addcc   %i5,%i5,%l6
  483. bne     Dnan     
  484. NOP
  485. Dzer: ba      D999     
  486. or      %g0,%l1,%i0
  487. Doveund:
  488. subcc   %i4,0,%i4
  489. bg      Dinf     
  490. NOP
  491. or      %g0,1,%l2
  492. sub     %l2,%i4,%l2
  493. subcc   %l2,0x20,%g0
  494. bcc     Dzer     
  495. NOP
  496. or      %g0,0x20,%l6
  497. sub     %l6,%l2,%l6
  498. sll     %i3,%l6,%i4
  499. srl     %i3,%l2,%i3
  500. subcc   %i4,0,%i4
  501. bne,a i31              
  502. or      %i3,2,%i3
  503. i31: ba      Dlab8    
  504. or      %g0,0,%i4
  505. Dinf: sethi   %hi(0x7f800000),%l6
  506. ba      D999     
  507. or      %l6,%l1,%i0
  508. Dnan: ba      D999     
  509. sethi   %hi(0xffc00000),%i0
  510. .global __ltof
  511. .global _sitofp
  512. ! ! ! ! !
  513. !  _sitofp: signed int to sp floating point
  514. !  On entry: o0 = argument A
  515. !  On exit: o0 = sp floating point
  516. ! ! ! ! !
  517. __ltof: ! C ifc
  518. _sitofp: ! USSW ifc
  519. sethi %hi(0x80000000),%o3
  520. subcc %o0,0x0,%g0
  521. be j22      
  522.  andcc %o3,%o0,%o2
  523. bl,a j23
  524.  subcc %g0,%o0,%o0
  525. j23: or %g0,0x9e,%o1
  526. b24: sub %o1,0x1,%o1
  527. subcc %o0,0x0,%g0
  528. bg b24      
  529.  sll %o0,0x1,%o0
  530. add %o1,0x1,%o1
  531. addcc %o0,0x100,%o0
  532. addxcc %o1,0x0,%o1
  533. andcc %o0,0x1ff,%o3
  534. be,a j24
  535.  andcc %o0,0xfffffdff,%o0
  536. j24: srl %o0,0x9,%o0
  537. sll %o1,0x17,%o3
  538. orcc %o0,%o3,%o0
  539. j22: orcc %o0,%o2,%o0
  540. E999: jmpl %o7+8,%g0
  541.  NOP
  542. .global __ultof
  543. .global _uitofp
  544. ! ! ! ! !
  545. !  _uitofp: unsigned int to sp floating point
  546. !  On entry: o0 = argument A
  547. !  On exit: o0 = sp floating point
  548. ! ! ! ! !
  549. __ultof: ! C ifc
  550. _uitofp: ! USSW ifc
  551. subcc %o0,0x0,%g0
  552. be F999     
  553.  or %g0,0x9e,%o1
  554. b26: sub %o1,0x1,%o1
  555. subcc %o0,0x0,%g0
  556. bg b26      
  557.  sll %o0,0x1,%o0
  558. add %o1,0x1,%o1
  559. addcc %o0,0x100,%o0
  560. addxcc %o1,0x0,%o1
  561. andcc %o0,0x1ff,%o3
  562. be,a j26
  563.  andcc %o0,0xfffffdff,%o0
  564. j26: srl %o0,0x9,%o0
  565. sll %o1,0x17,%o2
  566. orcc %o0,%o2,%o0
  567. F999: jmpl %o7+8,%g0
  568.  NOP
  569. .global __ftol
  570. .global _fptosi
  571. ! ! ! ! !
  572. !  _fptosi: sp floating point to int
  573. !  On entry: o0 = argument A
  574. !  On exit: o0 = int
  575. ! ! ! ! !
  576. __ftol: ! C ifc
  577. _fptosi: ! USSW ifc
  578. srl %o0,0x17,%o2
  579. andcc %o2,0xff,%o2
  580. sll %o0,0x8,%o1
  581. sethi %hi(0x80000000),%o3
  582. orcc %o1,%o3,%o1
  583. subcc %o2,0x9e,%g0
  584. bge,a G999
  585.  sethi %hi(0x80000000),%o0
  586. j27: or %g0,0x9e,%o3
  587. subcc %o3,%o2,%o2
  588. subcc %o2,0x20,%g0
  589. bge,a e28
  590.  or %g0,0,%o1
  591. j28: srl %o1,%o2,%o1
  592. e28: subcc %o0,0x0,%g0
  593. bl,a j29
  594.  subcc %g0,%o1,%o1
  595. j29: or %g0,%o1,%o0
  596. G999: jmpl %o7+8,%g0
  597.  NOP
  598. .global _fptoui
  599. ! ! ! ! !
  600. !  _fptoui: sp floating point to unsigned int
  601. !  On entry: o0 = argument A
  602. !  On exit: o0 = unsigned int
  603. ! ! ! ! !
  604. _fptoui:
  605. srl %o0,0x17,%o2
  606. andcc %o2,0xff,%o2
  607. sll %o0,0x8,%o1
  608. sethi %hi(0x80000000),%o3
  609. orcc %o1,%o3,%o1
  610. subcc %o2,0x9f,%g0
  611. bge,a I999
  612.  sethi %hi(0x80000000),%o0
  613. i30: or %g0,0x9e,%o3
  614. subcc %o3,%o2,%o2
  615. subcc %o2,0x20,%g0
  616. bge,a e31
  617.  or %g0,0,%o1
  618. srl %o1,%o2,%o1
  619. e31: subcc %o0,0x0,%g0
  620. bl,a i32
  621.  subcc %g0,%o1,%o1
  622. i32: or %g0,%o1,%o0
  623. I999: jmpl %o7+8,%g0
  624.  NOP
  625. .global __fcmp
  626. .global _fpcmp
  627. ! ! ! ! !
  628. !  _fpcmp: sp floating point compare
  629. !  On entry: o0 = argument A
  630. ! o1 = argument B
  631. !  On exit: condition codes set
  632. ! o0 = -1  A < B
  633. !  0  A == B
  634. !  1  A > B
  635. ! ! ! ! !
  636. __fcmp: ! C ifc
  637. _fpcmp: ! USSW ifc
  638. orcc %o0,%o1,%o3
  639. addcc %o3,%o3,%o3
  640. be Jequ
  641.  sra %o0,0x1f,%o2
  642. sethi %hi(0x80000000),%o3
  643. andncc %o0,%o3,%o0
  644. xorcc %o0,%o2,%o0
  645. subcc %o0,%o2,%o0
  646. sra %o1,0x1f,%o2
  647. sethi %hi(0x80000000),%o3
  648. andncc %o1,%o3,%o1
  649. xorcc %o1,%o2,%o1
  650. subcc %o1,%o2,%o1
  651. subcc %o0,%o1,%g0
  652. bl,a J999
  653.  or %g0,0xffffffff,%o0
  654. i33: subcc %o0,%o1,%g0
  655. bg,a J999
  656.  or %g0,0x1,%o0
  657. Jequ: or %g0,0,%o0
  658. J999: jmpl %o7+8,%g0
  659.  orcc %o0,%g0,%o0
  660. .global _fabsf
  661. .global _fpfabs
  662. ! ! ! ! !
  663. !  _fpabs: sp floating point absolute
  664. !  On entry: o0 = argument A
  665. !  On exit: o0 = absolute value
  666. ! ! ! ! !
  667. _fabsf: ! C ifc
  668. _fpfabs: ! USSW ifc
  669. sethi %hi(0x80000000),%o1
  670. K999: jmpl %o7+8,%g0
  671.  andncc %o0,%o1,%o0
  672. ! .end