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

VxWorks

开发平台:

C/C++

  1. /* fparc32.s - VxWorks conversion from Microtek tools to Sun native */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,10nov92,jwt  fixed register use error in fpexatan().
  7. 01a,06aug92,jwt  converted.
  8. */
  9. /*
  10. ! ! ! ! !
  11. ! SPARClite Floating Point Library
  12. !
  13. ! Copyright (C) 1992 By
  14. ! United States Software Corporation
  15. ! 14215 N.W. Science Park Drive
  16. ! Portland, Oregon 97229
  17. !
  18. ! This software is furnished under a license and may be used
  19. ! and copied only in accordance with the terms of such license
  20. ! and with the inclusion of the above copyright notice.
  21. ! This software or any other copies thereof may not be provided
  22. ! or otherwise made available to any other person.  No title to
  23. ! and ownership of the software is hereby transferred.
  24. !
  25. ! The information in this software is subject to change without 
  26. ! notice and should not be construed as a commitment by United
  27. ! States Software Corporation.
  28. !
  29. ! First Release: V1.02 March 26 1992
  30. ! ! ! ! !
  31. .macro scan,p1,p2,p3
  32. .word 0x81602000 | (&p3<<25) | (&p1<<14) | p2
  33. .endm
  34. .macro umul,p1,p2,p3
  35. .word 0x80500000 | (&p3<<25) | (&p1<<14) | &p2
  36. .endm
  37. .macro divscc,p1,p2,p3
  38. .word 0x80e80000 | (&p3<<25) | (&p1<<14) | &p2
  39. .endm
  40. */
  41. #include "arch/sparc/ussSun4.h"
  42. .global _fpexsqrt
  43. .data
  44. .align 4
  45. atntaf: .word 0x0,0x0
  46. .word 0xffeaaddd,0x79
  47. .word 0xffaaddb9,0x7a
  48. .word 0xbf70c130,0x7b
  49. .word 0xfeadd4d5,0x7b
  50. .word 0x9eb77746,0x7c
  51. .word 0xbdcbda5e,0x7c
  52. .word 0xdc86ba95,0x7c
  53. .word 0xfadbafc9,0x7c
  54. .word 0x8c5fad18,0x7d
  55. .word 0x9b13b9b8,0x7d
  56. .word 0xa9856ccb,0x7d
  57. .word 0xb7b0ca0f,0x7d
  58. .word 0xc59269ca,0x7d
  59. .word 0xd327761e,0x7d
  60. .word 0xe06da64a,0x7d
  61. .word 0xed63382b,0x7d
  62. .word 0xfa06e85b,0x7d
  63. .word 0x832bf4a7,0x7e
  64. .word 0x892aece0,0x7e
  65. .word 0x8f005d5f,0x7e
  66. .word 0x94ac72c9,0x7e
  67. .word 0x9a2f80e6,0x7e
  68. .word 0x9f89fdc5,0x7e
  69. .word 0xa4bc7d19,0x7e
  70. .word 0xa9c7abdc,0x7e
  71. .word 0xaeac4c39,0x7e
  72. .word 0xb36b31c9,0x7e
  73. .word 0xb8053e2c,0x7e
  74. .word 0xbc7b5deb,0x7e
  75. .word 0xc0ce85b9,0x7e
  76. .word 0xc4ffaffb,0x7e
  77. .text
  78. .align 4
  79. .global _fpexatan
  80. _fpexatan:
  81. save %sp,-96,%sp
  82. subcc   %i1,0x7f,%g0
  83. bl      i1             
  84. subcc   %i1,0,%i1
  85. bneg    Azer     
  86. NOP
  87. sub     %g0,%i1,%i1
  88. add     %i1,0xfd,%i1
  89. sethi   %hi(0x80000000),%l3
  90. subcc   %i0,%l3,%g0
  91. bne     i2             
  92. subcc   %i1,0x7e,%g0
  93. bne     i3       
  94. NOP
  95. ba      e2       
  96. or      %g0,-1,%i0
  97. i3: ba      e2       
  98. add     %i1,1,%i1
  99. i2: or      %g0,%i0,%i3
  100. wr %l3,0,%y
  101. or %g0,0x0,%i0
  102. orcc %g0,0,%g0
  103. #if 0
  104. divscc %i0,%i3,%i0
  105. divscc %i0,%i3,%i0
  106. divscc %i0,%i3,%i0
  107. divscc %i0,%i3,%i0
  108. divscc %i0,%i3,%i0
  109. divscc %i0,%i3,%i0
  110. divscc %i0,%i3,%i0
  111. divscc %i0,%i3,%i0
  112. divscc %i0,%i3,%i0
  113. divscc %i0,%i3,%i0
  114. divscc %i0,%i3,%i0
  115. divscc %i0,%i3,%i0
  116. divscc %i0,%i3,%i0
  117. divscc %i0,%i3,%i0
  118. divscc %i0,%i3,%i0
  119. divscc %i0,%i3,%i0
  120. divscc %i0,%i3,%i0
  121. divscc %i0,%i3,%i0
  122. divscc %i0,%i3,%i0
  123. divscc %i0,%i3,%i0
  124. divscc %i0,%i3,%i0
  125. divscc %i0,%i3,%i0
  126. divscc %i0,%i3,%i0
  127. divscc %i0,%i3,%i0
  128. divscc %i0,%i3,%i0
  129. divscc %i0,%i3,%i0
  130. divscc %i0,%i3,%i0
  131. divscc %i0,%i3,%i0
  132. divscc %i0,%i3,%i0
  133. divscc %i0,%i3,%i0
  134. divscc %i0,%i3,%i0
  135. divscc %i0,%i3,%i0
  136. #else
  137. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  138. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  139. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  140. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  141. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  142. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  143. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  144. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  145. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  146. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  147. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  148. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  149. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  150. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  151. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  152. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  153. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  154. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  155. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  156. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  157. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  158. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  159. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  160. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  161. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  162. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  163. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  164. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  165. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  166. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  167. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  168. DIVSCC | (in0 << 14) | in3 | (in0 << 25)
  169. #endif
  170. e2: or      %i2,1,%i2
  171. i1: or      %g0,0x81,%i3
  172. sub     %i3,%i1,%i3
  173. subcc   %i3,8,%g0
  174. bge,a i4               
  175. or      %g0,8,%i3
  176. i4: srl     %i0,24,%l1
  177. srl     %l1,%i3,%l1
  178. sll     %l1,1,%l1
  179. sll     %l1,26,%l3
  180. umul %l3,%i0,%l3
  181. rd %y,%l3
  182. or      %g0,0x7f,%i5
  183. sub     %i5,%i1,%i5
  184. subcc %i5,32,%g0
  185. bcc,a L1             
  186. or %g0,0,%l3
  187. L1: srl %l3,%i5,%l3
  188. sethi   %hi(0x80000000),%l6
  189. or      %l3,%l6,%l3
  190. or      %g0,8,%l7
  191. sub     %l7,%i3,%l7
  192. or      %g0,-1,%l6
  193. srl     %l6,%l7,%l6
  194. andcc   %i0,%l6,%i0
  195. be      Alab5    
  196. NOP
  197. /* scan %i0,0,%i3 */
  198. SCAN | (in0 << 14) | 0 | (in3 << 25)
  199. sll %i0,%i3,%i0
  200. subcc %i1,%i3,%i1
  201. srl     %i0,1,%i0
  202. wr %i0,0,%y
  203. or %g0,0x0,%i0
  204. orcc %g0,0,%g0
  205. #if 0
  206. divscc %i0,%l3,%i0
  207. divscc %i0,%l3,%i0
  208. divscc %i0,%l3,%i0
  209. divscc %i0,%l3,%i0
  210. divscc %i0,%l3,%i0
  211. divscc %i0,%l3,%i0
  212. divscc %i0,%l3,%i0
  213. divscc %i0,%l3,%i0
  214. divscc %i0,%l3,%i0
  215. divscc %i0,%l3,%i0
  216. divscc %i0,%l3,%i0
  217. divscc %i0,%l3,%i0
  218. divscc %i0,%l3,%i0
  219. divscc %i0,%l3,%i0
  220. divscc %i0,%l3,%i0
  221. divscc %i0,%l3,%i0
  222. divscc %i0,%l3,%i0
  223. divscc %i0,%l3,%i0
  224. divscc %i0,%l3,%i0
  225. divscc %i0,%l3,%i0
  226. divscc %i0,%l3,%i0
  227. divscc %i0,%l3,%i0
  228. divscc %i0,%l3,%i0
  229. divscc %i0,%l3,%i0
  230. divscc %i0,%l3,%i0
  231. divscc %i0,%l3,%i0
  232. divscc %i0,%l3,%i0
  233. divscc %i0,%l3,%i0
  234. divscc %i0,%l3,%i0
  235. divscc %i0,%l3,%i0
  236. divscc %i0,%l3,%i0
  237. divscc %i0,%l3,%i0
  238. #else
  239. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  240. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  241. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  242. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  243. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  244. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  245. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  246. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  247. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  248. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  249. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  250. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  251. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  252. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  253. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  254. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  255. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  256. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  257. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  258. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  259. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  260. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  261. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  262. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  263. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  264. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  265. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  266. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  267. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  268. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  269. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  270. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  271. #endif
  272. subcc   %i0,0,%i0
  273. ble     i5       
  274. NOP
  275. sll     %i0,1,%i0
  276. sub     %i1,1,%i1
  277. i5:
  278. umul %i0,%i0,%l3
  279. rd %y,%l3
  280. or      %g0,0xfc,%i3
  281. sub     %i3,%i1,%i3
  282. sub     %i3,%i1,%i3
  283. subcc %i3,32,%g0
  284. bcc,a L2             
  285. or %g0,0,%l3
  286. L2: srl %l3,%i3,%l3
  287. sethi   %hi(0x1999999a),%i5
  288. or      %i5,0x19a,%i5
  289. umul %l3,%i5,%i5
  290. rd %y,%i5
  291. sethi   %hi(0x2aaaaaab),%l6
  292. or      %l6,0x2ab,%l6
  293. sub     %l6,%i5,%i5
  294. umul %l3,%i5,%i5
  295. rd %y,%i5
  296. sethi   %hi(0x80000000),%l6
  297. subcc   %l6,%i5,%i5
  298. bneg    i6       
  299. NOP
  300. ba      e6       
  301. sll     %i5,1,%i5
  302. i6: add     %i1,1,%i1
  303. e6:
  304. umul %i0,%i5,%i0
  305. rd %y,%i0
  306. subcc   %i0,0,%i0
  307. bneg    i7       
  308. NOP
  309. sll     %i0,1,%i0
  310. sub     %i1,1,%i1
  311. i7: subcc   %l1,0,%l1
  312. be      Alab7    
  313. NOP
  314. Alab5: sethi   %hi(atntaf),%l6
  315. or %l6,%lo(atntaf),%l6
  316. add     %l1,1,%l7
  317. sll     %l7,2,%l7
  318. ld      [%l6+%l7],%i3
  319. sub     %i3,%i1,%i4
  320. subcc %i4,32,%g0
  321. bcc,a L3             
  322. or %g0,0,%i0
  323. L3: srl %i0,%i4,%i0
  324. or      %g0,%i3,%i1
  325. sethi   %hi(atntaf),%l6
  326. or %l6,%lo(atntaf),%l6
  327. sll     %l1,2,%l7
  328. ld      [%l6+%l7],%i3
  329. addcc   %i0,%i3,%i0
  330. bcc     Alab7    
  331. NOP
  332. srl     %i0,1,%i0
  333. sethi   %hi(0x80000000),%l6
  334. or      %i0,%l6,%i0
  335. add     %i1,1,%i1
  336. Alab7: andcc   %i2,1,%l6
  337. be      Alab8    
  338. NOP
  339. and     %i2,0xfffffffe,%i2
  340. or      %g0,0x7f,%i3
  341. sub     %i3,%i1,%i3
  342. subcc %i3,32,%g0
  343. bcc,a L4             
  344. or %g0,0,%i0
  345. L4: srl %i0,%i3,%i0
  346. or      %g0,0x7f,%i1
  347. sethi   %hi(0xc90fdaa2),%l6
  348. or      %l6,0x2a2,%l6
  349. subcc   %l6,%i0,%i0
  350. bneg    Alab8    
  351. NOP
  352. sll     %i0,1,%i0
  353. sub     %i1,1,%i1
  354. Alab8:
  355. A999: jmpl %i7+8,%g0
  356. restore %g0,0,%g0
  357. Azer: or      %g0,0,%i1
  358. ba      Alab8    
  359. or      %g0,%i1,%i0
  360. .global _fpatan
  361. _fpatan:
  362. .global _atanf
  363. _atanf:
  364. save %sp,-96,%sp
  365. srl     %i0,23,%i2
  366. and     %i2,0xff,%i2
  367. sethi   %hi(0x80000000),%i3
  368. sll     %i0,8,%i1
  369. or      %i1,%i3,%i1
  370. and     %i3,%i0,%i3
  371. subcc   %i2,0xff,%g0
  372. bne     i11            
  373. sll     %i1,1,%l1
  374. subcc   %l1,0,%l1
  375. bne     Bnan           
  376. i11: or      %g0,%i1,%o0
  377. or      %g0,%i2,%o1
  378. call    _fpexatan
  379. or      %g0,%i3,%o2
  380. or      %g0,%o0,%i4
  381. or      %g0,%o1,%i5
  382. or      %g0,%o2,%l0
  383. sll     %i4,1,%i1
  384. srl     %i1,9,%i1
  385. sll     %i5,23,%l1
  386. or      %i1,%l1,%i1
  387. or      %i1,%i3,%i0
  388. B999: jmpl %i7+8,%g0
  389. restore %g0,0,%g0
  390. Bnan: ba      B999     
  391. sethi   %hi(0xffc00000),%i0
  392. .global _fpatan2
  393. _fpatan2:
  394. .global _atan2f
  395. _atan2f:
  396. save %sp,-96,%sp
  397. srl     %i0,23,%i3
  398. and     %i3,0xff,%i3
  399. sethi   %hi(0x80000000),%l2
  400. sll     %i0,8,%i2
  401. or      %i2,%l2,%i2
  402. and     %i0,%l2,%i4
  403. srl     %i1,23,%l0
  404. and     %l0,0xff,%l0
  405. sll     %i1,8,%i5
  406. or      %i5,%l2,%i5
  407. sub     %i3,1,%l6
  408. subcc   %l6,0xfe,%g0
  409. bcc     CspecA         
  410. Clab1: sub     %l0,1,%l6
  411. subcc   %l6,0xfe,%g0
  412. bcc     CspecB   
  413. NOP
  414. Clab2: add     %i3,0x7f,%i3
  415. sub     %i3,%l0,%i3
  416. srl     %i2,1,%i2
  417. wr %i2,0,%y
  418. or %g0,0x0,%i2
  419. orcc %g0,0,%g0
  420. #if 0
  421. divscc %i2,%i5,%i2
  422. divscc %i2,%i5,%i2
  423. divscc %i2,%i5,%i2
  424. divscc %i2,%i5,%i2
  425. divscc %i2,%i5,%i2
  426. divscc %i2,%i5,%i2
  427. divscc %i2,%i5,%i2
  428. divscc %i2,%i5,%i2
  429. divscc %i2,%i5,%i2
  430. divscc %i2,%i5,%i2
  431. divscc %i2,%i5,%i2
  432. divscc %i2,%i5,%i2
  433. divscc %i2,%i5,%i2
  434. divscc %i2,%i5,%i2
  435. divscc %i2,%i5,%i2
  436. divscc %i2,%i5,%i2
  437. divscc %i2,%i5,%i2
  438. divscc %i2,%i5,%i2
  439. divscc %i2,%i5,%i2
  440. divscc %i2,%i5,%i2
  441. divscc %i2,%i5,%i2
  442. divscc %i2,%i5,%i2
  443. divscc %i2,%i5,%i2
  444. divscc %i2,%i5,%i2
  445. divscc %i2,%i5,%i2
  446. divscc %i2,%i5,%i2
  447. divscc %i2,%i5,%i2
  448. divscc %i2,%i5,%i2
  449. divscc %i2,%i5,%i2
  450. divscc %i2,%i5,%i2
  451. divscc %i2,%i5,%i2
  452. divscc %i2,%i5,%i2
  453. #else
  454. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  455. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  456. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  457. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  458. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  459. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  460. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  461. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  462. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  463. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  464. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  465. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  466. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  467. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  468. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  469. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  470. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  471. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  472. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  473. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  474. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  475. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  476. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  477. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  478. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  479. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  480. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  481. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  482. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  483. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  484. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  485. DIVSCC | (in2 << 14) | in5 | (in2 << 25)
  486. #endif
  487. subcc   %i2,0,%i2
  488. ble     i12      
  489. NOP
  490. sll     %i2,1,%i2
  491. sub     %i3,1,%i3
  492. i12: or      %g0,%i2,%o0
  493. or      %g0,%i3,%o1
  494. call    _fpexatan
  495. or      %g0,%i4,%o2
  496. or      %g0,%o0,%i5
  497. or      %g0,%o1,%l0
  498. or      %g0,%o2,%l1
  499. subcc   %i1,0,%i1
  500. bpos    i13      
  501. NOP
  502. or      %g0,0x80,%l2
  503. sub     %l2,%l0,%l2
  504. or      %g0,0x80,%l0
  505. subcc %l2,32,%g0
  506. bcc,a L5             
  507. or %g0,0,%i5
  508. L5: srl %i5,%l2,%i5
  509. sethi   %hi(0xc90fdaa2),%l6
  510. or      %l6,0x2a2,%l6
  511. sub     %l6,%i5,%i5
  512. /* scan %i5,0,%l2 */
  513. SCAN | (in5 << 14) | 0 | (lo2 << 25)
  514. sll %i5,%l2,%i5
  515. subcc %l0,%l2,%l0
  516. i13: subcc   %l0,0,%l0
  517. bg      i14      
  518. NOP
  519. or      %g0,1,%l2
  520. sub     %l2,%l0,%l2
  521. subcc %l2,32,%g0
  522. bcc,a L6             
  523. or %g0,0,%i5
  524. L6: srl %i5,%l2,%i5
  525. or      %g0,0,%l0
  526. i14: sll     %i5,1,%i2
  527. srl     %i2,9,%i2
  528. sll     %l0,23,%l6
  529. or      %i2,%l6,%i2
  530. Cret: or      %i2,%i4,%i0
  531. C999: jmpl %i7+8,%g0
  532. restore %g0,0,%g0
  533. CspecA: subcc   %i3,0,%i3
  534. be      i15            
  535. addcc   %i2,%i2,%l6
  536. bne     Cnan     
  537. NOP
  538. ba      Clab1    
  539. or      %g0,0x100,%i3
  540. i15: addcc   %i2,%i2,%i2
  541. be      Clab1    
  542. NOP
  543. /* scan %i2,0,%l2 */
  544. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  545. sll %i2,%l2,%i2
  546. subcc %i3,%l2,%i3
  547. ba,a    Clab1    
  548. CspecB: subcc   %l0,0,%l0
  549. be      i17            
  550. addcc   %i5,%i5,%l6
  551. bne     Cnan     
  552. NOP
  553. or      %g0,0x100,%l0
  554. subcc   %i3,%l0,%g0
  555. be      Cnan     
  556. NOP
  557. ba,a    Clab2    
  558. i17: addcc   %i5,%i5,%i5
  559. be      Clab2    
  560. NOP
  561. /* scan %i5,0,%l2 */
  562. SCAN | (in5 << 14) | 0 | (lo2 << 25)
  563. sll %i5,%l2,%i5
  564. subcc %l0,%l2,%l0
  565. ba,a    Clab2    
  566. Cnan: ba      C999     
  567. sethi   %hi(0xffc00000),%i0
  568. .global _fpasin
  569. _fpasin:
  570. .global _asinf
  571. _asinf:
  572. save %sp,-96,%sp
  573. srl     %i0,23,%l0
  574. and     %l0,0xff,%l0
  575. sethi   %hi(0x80000000),%l1
  576. sll     %i0,8,%i5
  577. or      %i5,%l1,%i5
  578. and     %l1,%i0,%l1
  579. umul %i5,%i5,%l2
  580. rd %y,%l2
  581. add     %l0,%l0,%l3
  582. sub     %l3,0x7e,%l3
  583. subcc   %l2,0,%l2
  584. bneg    i19      
  585. NOP
  586. sll     %l2,1,%l2
  587. sub     %l3,1,%l3
  588. i19: or      %g0,0x7f,%i1
  589. subcc   %i1,%l3,%i1
  590. bneg    Dnan     
  591. NOP
  592. or      %g0,0x7f,%l3
  593. subcc %i1,32,%g0
  594. bcc,a L7             
  595. or %g0,0,%l2
  596. L7: srl %l2,%i1,%l2
  597. sethi   %hi(0x80000000),%i1
  598. subcc   %l2,%i1,%g0
  599. bgu     Dnan     
  600. NOP
  601. subcc   %i1,%l2,%l2
  602. bne     i20      
  603. NOP
  604. ba      Dlab4    
  605. or      %g0,0xff,%l0
  606. i20:
  607. /* scan %l2,0,%i1 */
  608. SCAN | (lo2 << 14) | 0 | (in1 << 25)
  609. sll %l2,%i1,%l2
  610. subcc %l3,%i1,%l3
  611. or      %g0,%l2,%o0
  612. call    _fpexsqrt
  613. or      %g0,%l3,%o1
  614. orcc    %g0,%o0,%l2
  615. or      %g0,%o1,%l3
  616. bne     i21      
  617. or      %g0,%o2,%l4
  618. ba,a    D999     
  619. i21: add     %l0,0x7f,%l0
  620. sub     %l0,%l3,%l0
  621. srl     %i5,1,%i5
  622. wr %i5,0,%y
  623. or %g0,0x0,%i5
  624. orcc %g0,0,%g0
  625. #if 0
  626. divscc %i5,%l2,%i5
  627. divscc %i5,%l2,%i5
  628. divscc %i5,%l2,%i5
  629. divscc %i5,%l2,%i5
  630. divscc %i5,%l2,%i5
  631. divscc %i5,%l2,%i5
  632. divscc %i5,%l2,%i5
  633. divscc %i5,%l2,%i5
  634. divscc %i5,%l2,%i5
  635. divscc %i5,%l2,%i5
  636. divscc %i5,%l2,%i5
  637. divscc %i5,%l2,%i5
  638. divscc %i5,%l2,%i5
  639. divscc %i5,%l2,%i5
  640. divscc %i5,%l2,%i5
  641. divscc %i5,%l2,%i5
  642. divscc %i5,%l2,%i5
  643. divscc %i5,%l2,%i5
  644. divscc %i5,%l2,%i5
  645. divscc %i5,%l2,%i5
  646. divscc %i5,%l2,%i5
  647. divscc %i5,%l2,%i5
  648. divscc %i5,%l2,%i5
  649. divscc %i5,%l2,%i5
  650. divscc %i5,%l2,%i5
  651. divscc %i5,%l2,%i5
  652. divscc %i5,%l2,%i5
  653. divscc %i5,%l2,%i5
  654. divscc %i5,%l2,%i5
  655. divscc %i5,%l2,%i5
  656. divscc %i5,%l2,%i5
  657. divscc %i5,%l2,%i5
  658. #else
  659. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  660. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  661. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  662. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  663. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  664. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  665. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  666. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  667. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  668. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  669. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  670. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  671. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  672. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  673. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  674. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  675. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  676. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  677. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  678. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  679. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  680. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  681. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  682. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  683. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  684. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  685. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  686. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  687. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  688. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  689. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  690. DIVSCC | (in5 << 14) | lo2 | (in5 << 25)
  691. #endif
  692. subcc   %i5,0,%i5
  693. ble     Dlab4    
  694. NOP
  695. sll     %i5,1,%i5
  696. sub     %l0,1,%l0
  697. Dlab4: or      %g0,%i5,%o0
  698. or      %g0,%l0,%o1
  699. call    _fpexatan
  700. or      %g0,%l1,%o2
  701. or      %g0,%o0,%l2
  702. or      %g0,%o1,%l3
  703. or      %g0,%o2,%l4
  704. sll     %l2,1,%i5
  705. srl     %i5,9,%i5
  706. sll     %l3,23,%l5
  707. or      %i5,%l5,%i5
  708. or      %i5,%l1,%i0
  709. D999: jmpl %i7+8,%g0
  710. restore %g0,0,%g0
  711. Dnan: ba      D999     
  712. sethi   %hi(0xffc00000),%i0
  713. .global _fpacos
  714. _fpacos:
  715. .global _acosf
  716. _acosf:
  717. save %sp,-96,%sp
  718. srl     %i0,23,%l0
  719. and     %l0,0xff,%l0
  720. sethi   %hi(0x80000000),%l1
  721. sll     %i0,8,%i5
  722. or      %i5,%l1,%i5
  723. and     %l1,%i0,%l1
  724. umul %i5,%i5,%l2
  725. rd %y,%l2
  726. add     %l0,%l0,%l3
  727. sub     %l3,0x7e,%l3
  728. subcc   %l2,0,%l2
  729. bneg    i23      
  730. NOP
  731. sll     %l2,1,%l2
  732. sub     %l3,1,%l3
  733. i23: or      %g0,0x7f,%i1
  734. subcc   %i1,%l3,%i1
  735. bneg    Enan     
  736. NOP
  737. or      %g0,0x7f,%l3
  738. subcc %i1,32,%g0
  739. bcc,a L8             
  740. or %g0,0,%l2
  741. L8: srl %l2,%i1,%l2
  742. sethi   %hi(0x80000000),%i1
  743. subcc   %l2,%i1,%g0
  744. bgu     Enan     
  745. NOP
  746. sub     %i1,%l2,%l2
  747. /* scan %l2,0,%i1 */
  748. SCAN | (lo2 << 14) | 0 | (in1 << 25)
  749. sll %l2,%i1,%l2
  750. subcc %l3,%i1,%l3
  751. or      %g0,%l2,%o0
  752. call    _fpexsqrt
  753. or      %g0,%l3,%o1
  754. or      %g0,%o0,%l2
  755. or      %g0,%o1,%l3
  756. or      %g0,%o2,%l4
  757. sub     %l3,%l0,%l0
  758. add     %l0,0x7f,%l0
  759. srl     %l2,1,%l2
  760. or      %g0,%i5,%i2
  761. wr %l2,0,%y
  762. or %g0,0x0,%i5
  763. orcc %g0,0,%g0
  764. #if 0
  765. divscc %i5,%i2,%i5
  766. divscc %i5,%i2,%i5
  767. divscc %i5,%i2,%i5
  768. divscc %i5,%i2,%i5
  769. divscc %i5,%i2,%i5
  770. divscc %i5,%i2,%i5
  771. divscc %i5,%i2,%i5
  772. divscc %i5,%i2,%i5
  773. divscc %i5,%i2,%i5
  774. divscc %i5,%i2,%i5
  775. divscc %i5,%i2,%i5
  776. divscc %i5,%i2,%i5
  777. divscc %i5,%i2,%i5
  778. divscc %i5,%i2,%i5
  779. divscc %i5,%i2,%i5
  780. divscc %i5,%i2,%i5
  781. divscc %i5,%i2,%i5
  782. divscc %i5,%i2,%i5
  783. divscc %i5,%i2,%i5
  784. divscc %i5,%i2,%i5
  785. divscc %i5,%i2,%i5
  786. divscc %i5,%i2,%i5
  787. divscc %i5,%i2,%i5
  788. divscc %i5,%i2,%i5
  789. divscc %i5,%i2,%i5
  790. divscc %i5,%i2,%i5
  791. divscc %i5,%i2,%i5
  792. divscc %i5,%i2,%i5
  793. divscc %i5,%i2,%i5
  794. divscc %i5,%i2,%i5
  795. divscc %i5,%i2,%i5
  796. divscc %i5,%i2,%i5
  797. #else
  798. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  799. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  800. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  801. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  802. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  803. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  804. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  805. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  806. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  807. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  808. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  809. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  810. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  811. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  812. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  813. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  814. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  815. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  816. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  817. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  818. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  819. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  820. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  821. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  822. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  823. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  824. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  825. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  826. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  827. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  828. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  829. DIVSCC | (in5 << 14) | in2 | (in5 << 25)
  830. #endif
  831. subcc   %i5,0,%i5
  832. ble     i24      
  833. NOP
  834. sll     %i5,1,%i5
  835. sub     %l0,1,%l0
  836. i24: or      %g0,%i5,%o0
  837. or      %g0,%l0,%o1
  838. call    _fpexatan
  839. or      %g0,%l1,%o2
  840. or      %g0,%o0,%l2
  841. or      %g0,%o1,%l3
  842. or      %g0,%o2,%l4
  843. subcc   %l1,0,%l1
  844. be      i25      
  845. NOP
  846. or      %g0,0x80,%i1
  847. sub     %i1,%l3,%i1
  848. or      %g0,0x80,%l3
  849. subcc %i1,32,%g0
  850. bcc,a L9             
  851. or %g0,0,%l2
  852. L9: srl %l2,%i1,%l2
  853. sethi   %hi(0xc90fdaa2),%l5
  854. or      %l5,0x2a2,%l5
  855. subcc   %l5,%l2,%l2
  856. be,a i26               
  857. or      %g0,0,%l3
  858. i26:
  859. /* scan %l2,0,%i1 */
  860. SCAN | (lo2 << 14) | 0 | (in1 << 25)
  861. sll %l2,%i1,%l2
  862. subcc %l3,%i1,%l3
  863. i25: sll     %l2,1,%i5
  864. srl     %i5,9,%i5
  865. sll     %l3,23,%l5
  866. or      %i5,%l5,%i5
  867. or      %g0,%i5,%i0
  868. E999: jmpl %i7+8,%g0
  869. restore %g0,0,%g0
  870. Enan: ba      E999     
  871. sethi   %hi(0xffc00000),%i0
  872. ! .end