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

VxWorks

开发平台:

C/C++

  1. /* arc32.s - VxWorks conversion from Microtek tools to Sun native */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01a,05aug92,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. .global _exadd
  42. .global _exsub
  43. .global _exmul
  44. .global _exdiv
  45. .global _exsqrt
  46. .global _sigmax
  47. .data
  48. .align 4
  49. atncon: .word 0x38e38e39,0xe38e38e
  50. .word 0xb6db6db7,0xedb6db6d
  51. .word 0x9999999a,0x19999999
  52. .word 0x55555555,0xd5555555
  53. .word 0x0,0x80000000
  54. atntab: .word 0x0,0x0,0x0
  55. .word 0xffeaaddd,0x4bb12542,0x3f9
  56. .word 0xffaaddb9,0x67ef4e37,0x3fa
  57. .word 0xbf70c130,0x17887460,0x3fb
  58. .word 0xfeadd4d5,0x617b6e33,0x3fb
  59. .word 0x9eb77746,0x331362c3,0x3fc
  60. .word 0xbdcbda5e,0x72d81134,0x3fc
  61. .word 0xdc86ba94,0x93051023,0x3fc
  62. .word 0xfadbafc9,0x6406eb15,0x3fc
  63. .word 0x8c5fad18,0x5f8bc131,0x3fd
  64. .word 0x9b13b9b8,0x3f5e5e6a,0x3fd
  65. .word 0xa9856cca,0x8e6a4eda,0x3fd
  66. .word 0xb7b0ca0f,0x26f78474,0x3fd
  67. .word 0xc59269ca,0x50d92b6e,0x3fd
  68. .word 0xd327761e,0x611fe5b6,0x3fd
  69. .word 0xe06da64a,0x764f7c68,0x3fd
  70. .word 0xed63382b,0xdda7b46,0x3fd
  71. .word 0xfa06e85a,0xa0a0be5c,0x3fd
  72. .word 0x832bf4a6,0xd9867e2a,0x3fe
  73. .word 0x892aecdf,0xde9547b5,0x3fe
  74. .word 0x8f005d5e,0xf7f59f9b,0x3fe
  75. .word 0x94ac72c9,0x847186f6,0x3fe
  76. .word 0x9a2f80e6,0x71bdda20,0x3fe
  77. .word 0x9f89fdc4,0xf4b7a1ed,0x3fe
  78. .word 0xa4bc7d19,0x34f70924,0x3fe
  79. .word 0xa9c7abdc,0x4830f5c8,0x3fe
  80. .word 0xaeac4c38,0xb4d8c080,0x3fe
  81. .word 0xb36b31c9,0x1f043691,0x3fe
  82. .word 0xb8053e2b,0xc2319e74,0x3fe
  83. .word 0xbc7b5dea,0xe98af281,0x3fe
  84. .word 0xc0ce85b8,0xac526640,0x3fe
  85. .word 0xc4ffaffa,0xbf8fbd54,0x3fe
  86. .text
  87. .align 4
  88. .global _exatan
  89. _exatan:
  90. save %sp,-96,%sp
  91. or      %g0,0,%i3
  92. subcc   %i2,0x3ff,%g0
  93. bl      i1             
  94. sethi   %hi(0x80000000),%o0
  95. or      %g0,0,%o1
  96. or      %g0,0x3ff,%o2
  97. or      %g0,%i0,%o3
  98. or      %g0,%i1,%o4
  99. call    _exdiv
  100. or      %g0,%i2,%o5
  101. or      %g0,%o0,%i0
  102. or      %g0,%o1,%i1
  103. or      %g0,%o2,%i2
  104. or      %g0,1,%i3
  105. subcc   %i2,0x3ff,%g0
  106. bne     i1       
  107. NOP
  108. or      %g0,0x3fe,%i2
  109. or      %g0,-1,%i0
  110. or      %g0,%i0,%i1
  111. i1: or      %g0,%i0,%l2
  112. or      %g0,%i1,%l3
  113. or      %g0,%i2,%l4
  114. or      %g0,0x401,%l0
  115. sub     %l0,%i2,%l0
  116. subcc   %l0,8,%g0
  117. bcc,a i3               
  118. or      %g0,8,%l0
  119. i3: srl     %i0,24,%l1
  120. srl     %l1,%l0,%l1
  121. sll     %l1,27,%i4
  122. or      %g0,8,%l6
  123. sub     %l6,%l0,%l6
  124. or      %g0,-1,%l5
  125. srl     %l5,%l6,%l5
  126. and     %i0,%l5,%i0
  127. /* scan %i0,0,%i5 */
  128. SCAN | (in0 << 14) | 0 | (in5 << 25)
  129. subcc %i5,63,%g0
  130. bne L1             
  131. NOP
  132. or %i1,0,%i0
  133. or %g0,0,%i1
  134. sub %i2,32,%i2
  135. /* scan %i0,0,%i5 */
  136. SCAN | (in0 << 14) | 0 | (in5 << 25)
  137. subcc %i5,63,%g0
  138. be,a L1             
  139. or %i5,0,%i2
  140. L1: subcc %g0,%i5,%l0
  141. be L2             
  142. sub %i2,%i5,%i2
  143. sll %i0,%i5,%i0
  144. srl %i1,%l0,%l0
  145. or %l0,%i0,%i0
  146. sll %i1,%i5,%i1
  147. L2: umul %i4,%l3,%i5
  148. rd %y,%i5
  149. umul %i4,%l2,%l3
  150. rd %y,%l2
  151. addcc   %l3,%i5,%l3
  152. addx    %l2,0,%l2
  153. or      %g0,0x3ff,%i4
  154. sub     %i4,%l4,%i4
  155. L3: subcc %i4,32,%g0
  156. bcs L4             
  157. subcc %g0,%i4,%i5
  158. sub %i4,32,%i4
  159. orcc %l2,0,%l3
  160. bne L3             
  161. or %g0,0,%l2
  162. L4: be L5             
  163. sll %l2,%i5,%i5
  164. srl %l3,%i4,%l3
  165. srl %l2,%i4,%l2
  166. or %l3,%i5,%l3
  167. L5: or      %g0,0x3ff,%l4
  168. sethi   %hi(0x80000000),%l5
  169. or      %l2,%l5,%l2
  170. or      %g0,%i0,%o0
  171. or      %g0,%i1,%o1
  172. or      %g0,%i2,%o2
  173. or      %g0,%l2,%o3
  174. or      %g0,%l3,%o4
  175. call    _exdiv
  176. or      %g0,%l4,%o5
  177. or      %g0,%o0,%i0
  178. or      %g0,%o1,%i1
  179. or      %g0,%o2,%i2
  180. or      %g0,%o0,%o3
  181. or      %g0,%o1,%o4
  182. call    _exmul
  183. or      %g0,%o2,%o5
  184. or      %g0,0,%o3
  185. sethi   %hi(atncon),%o4
  186. call    _sigmax
  187. or %o4,%lo(atncon),%o4
  188. or      %g0,%o0,%l2
  189. or      %g0,%o1,%l3
  190. or      %g0,%o2,%l4
  191. or      %g0,%i0,%o0
  192. or      %g0,%i1,%o1
  193. or      %g0,%i2,%o2
  194. or      %g0,%l2,%o3
  195. or      %g0,%l3,%o4
  196. call    _exmul
  197. or      %g0,%l4,%o5
  198. sethi   %hi(atntab),%l6
  199. or %l6,%lo(atntab),%l6
  200. sll     %l1,2,%l5
  201. add     %l6,%l5,%l6
  202. add     %l6,%l5,%l6
  203. add     %l6,%l5,%l6
  204. ld      [%l6],%o3
  205. ld      [%l6+4],%o4
  206. call    _exadd
  207. ld      [%l6+8],%o5
  208. or      %g0,%o0,%i0
  209. or      %g0,%o1,%i1
  210. or      %g0,%o2,%i2
  211. subcc   %i3,0,%i3
  212. be      i4             
  213. sethi   %hi(0xc90fdaa2),%o0
  214. or      %o0,0x2a2,%o0
  215. sethi   %hi(0x2168c235),%o1
  216. or      %o1,0x235,%o1
  217. or      %g0,0x3ff,%o2
  218. or      %g0,%i0,%o3
  219. or      %g0,%i1,%o4
  220. call    _exsub
  221. or      %g0,%i2,%o5
  222. or      %g0,%o0,%i0
  223. or      %g0,%o1,%i1
  224. or      %g0,%o2,%i2
  225. i4:
  226. A999: jmpl %i7+8,%g0
  227. restore %g0,0,%g0
  228. .global _dpatan
  229. _dpatan:
  230. .global _atan
  231. _atan:
  232. save %sp,-96,%sp
  233. sll     %i0,1,%i4
  234. srl     %i4,21,%i4
  235. sll     %i0,11,%i2
  236. srl     %i1,21,%l0
  237. or      %i2,%l0,%i2
  238. sll     %i1,11,%i3
  239. sethi   %hi(0x80000000),%i5
  240. or      %i2,%i5,%i2
  241. and     %i5,%i0,%i5
  242. subcc   %i4,0x7ff,%g0
  243. bne     i5             
  244. sll     %i2,1,%l0
  245. orcc    %l0,%i3,%l0
  246. bne     Bnan           
  247. i5: subcc   %i4,0,%i4
  248. be      Bret           
  249. or      %g0,%i2,%o0
  250. or      %g0,%i3,%o1
  251. call    _exatan
  252. or      %g0,%i4,%o2
  253. or      %g0,%o0,%i2
  254. or      %g0,%o1,%i3
  255. or      %g0,%o2,%i4
  256. srl     %i3,11,%i1
  257. sll     %i2,21,%l0
  258. or      %i1,%l0,%i1
  259. srl     %i2,11,%i0
  260. sethi   %hi(0xfffff),%l0
  261. or      %l0,0x3ff,%l0
  262. and     %i0,%l0,%i0
  263. sll     %i4,20,%l0
  264. or      %i0,%l0,%i0
  265. or      %i0,%i5,%i0
  266. Bret:
  267. B999: jmpl %i7+8,%g0
  268. restore %g0,0,%g0
  269. Bnan: sethi   %hi(0xfff80000),%i0
  270. ba      Bret     
  271. or      %g0,0,%i1
  272. .global _dpatan2
  273. _dpatan2:
  274. .global _atan2
  275. _atan2:
  276. save %sp,-96,%sp
  277. sll     %i0,1,%l0
  278. srl     %l0,21,%l0
  279. sll     %i0,11,%i4
  280. srl     %i1,21,%l7
  281. or      %i4,%l7,%i4
  282. sll     %i1,11,%i5
  283. sethi   %hi(0x80000000),%l4
  284. or      %i4,%l4,%i4
  285. sll     %i2,1,%l3
  286. srl     %l3,21,%l3
  287. sll     %i2,11,%l1
  288. srl     %i3,21,%l7
  289. or      %l1,%l7,%l1
  290. sll     %i3,11,%l2
  291. or      %l1,%l4,%l1
  292. and     %l4,%i0,%l4
  293. sub     %l0,1,%l7
  294. subcc   %l7,0x7fe,%g0
  295. bcc     CspecA         
  296. Clab1: sub     %l3,1,%l7
  297. subcc   %l7,0x7fe,%g0
  298. bcc     CspecB         
  299. Clab2: or      %g0,%i4,%o0
  300. or      %g0,%i5,%o1
  301. or      %g0,%l0,%o2
  302. or      %g0,%l1,%o3
  303. or      %g0,%l2,%o4
  304. call    _exdiv
  305. or      %g0,%l3,%o5
  306. call    _exatan
  307. NOP
  308. or      %g0,%o0,%i4
  309. or      %g0,%o1,%i5
  310. or      %g0,%o2,%l0
  311. subcc   %i2,0,%i2
  312. bpos    i6             
  313. sethi   %hi(0xc90fdaa2),%o0
  314. or      %o0,0x2a2,%o0
  315. sethi   %hi(0x2168c235),%o1
  316. or      %o1,0x235,%o1
  317. or      %g0,0x400,%o2
  318. or      %g0,%i4,%o3
  319. or      %g0,%i5,%o4
  320. call    _exsub
  321. or      %g0,%l0,%o5
  322. or      %g0,%o0,%i4
  323. or      %g0,%o1,%i5
  324. or      %g0,%o2,%l0
  325. i6: subcc   %l0,0,%l0
  326. bg      i7       
  327. NOP
  328. or      %g0,1,%l5
  329. sub     %l5,%l0,%l5
  330. L6: subcc %l5,32,%g0
  331. bcs L7             
  332. subcc %g0,%l5,%l0
  333. sub %l5,32,%l5
  334. orcc %i4,0,%i5
  335. bne L6             
  336. or %g0,0,%i4
  337. L7: be L8             
  338. sll %i4,%l0,%l0
  339. srl %i5,%l5,%i5
  340. srl %i4,%l5,%i4
  341. or %i5,%l0,%i5
  342. L8: or      %g0,0,%l0
  343. i7: srl     %i5,11,%i1
  344. sll     %i4,21,%l7
  345. or      %i1,%l7,%i1
  346. srl     %i4,11,%i0
  347. sethi   %hi(0xfffff),%l7
  348. or      %l7,0x3ff,%l7
  349. and     %i0,%l7,%i0
  350. sll     %l0,20,%l7
  351. or      %i0,%l7,%i0
  352. or      %i0,%l4,%i0
  353. Cret:
  354. C999: jmpl %i7+8,%g0
  355. restore %g0,0,%g0
  356. CspecA: subcc   %l0,0,%l0
  357. be      i8             
  358. sll     %i4,1,%l7
  359. orcc    %l7,%i5,%l7
  360. bne     Cnan     
  361. NOP
  362. ba      Clab1    
  363. sethi   %hi(0x1000),%l0
  364. i8: addcc   %i5,%i5,%i5
  365. addx    %i4,%i4,%i4
  366. /* scan %i4,0,%l5 */
  367. SCAN | (in4 << 14) | 0 | (lo5 << 25)
  368. subcc %l5,63,%g0
  369. bne L9             
  370. NOP
  371. or %i5,0,%i4
  372. or %g0,0,%i5
  373. sub %l0,32,%l0
  374. /* scan %i4,0,%l5 */
  375. SCAN | (in4 << 14) | 0 | (lo5 << 25)
  376. subcc %l5,63,%g0
  377. be,a L9             
  378. or %l5,0,%l0
  379. L9: subcc %g0,%l5,%l6
  380. be Clab1           
  381. sub %l0,%l5,%l0
  382. sll %i4,%l5,%i4
  383. srl %i5,%l6,%l6
  384. or %l6,%i4,%i4
  385. ba      Clab1    
  386. sll %i5,%l5,%i5
  387. CspecB: subcc   %l3,0,%l3
  388. be      i9             
  389. sll     %l1,1,%l7
  390. orcc    %l7,%l2,%l7
  391. bne     Cnan     
  392. NOP
  393. sethi   %hi(0x1000),%l3
  394. subcc   %l0,%l3,%g0
  395. be      Cnan     
  396. NOP
  397. ba,a    Clab2    
  398. i9: addcc   %l2,%l2,%l2
  399. addx    %l1,%l1,%l1
  400. /* scan %l1,0,%l5 */
  401. SCAN | (lo1 << 14) | 0 | (lo5 << 25)
  402. subcc %l5,63,%g0
  403. bne L11             
  404. NOP
  405. or %l2,0,%l1
  406. or %g0,0,%l2
  407. sub %l3,32,%l3
  408. /* scan %l1,0,%l5 */
  409. SCAN | (lo1 << 14) | 0 | (lo5 << 25)
  410. subcc %l5,63,%g0
  411. be,a L11             
  412. or %l5,0,%l3
  413. L11: subcc %g0,%l5,%l6
  414. be Clab2           
  415. sub %l3,%l5,%l3
  416. sll %l1,%l5,%l1
  417. srl %l2,%l6,%l6
  418. or %l6,%l1,%l1
  419. ba      Clab2    
  420. sll %l2,%l5,%l2
  421. Cnan: sethi   %hi(0xfff80000),%i0
  422. ba      Cret     
  423. or      %g0,0,%i1
  424. .global _dpasin
  425. _dpasin:
  426. .global _asin
  427. _asin:
  428. save %sp,-96,%sp
  429. sll     %i0,1,%i4
  430. srl     %i4,21,%i4
  431. sll     %i0,11,%i2
  432. srl     %i1,21,%l3
  433. or      %i2,%l3,%i2
  434. sll     %i1,11,%i3
  435. sethi   %hi(0x80000000),%l2
  436. or      %i2,%l2,%i2
  437. and     %l2,%i0,%l2
  438. subcc   %i4,0x3ff,%g0
  439. bcs     i10            
  440. sll     %i2,1,%l3
  441. orcc    %l3,%i3,%l3
  442. bne     Dnan           
  443. subcc   %i4,0x3ff,%g0
  444. bgu     Dnan           
  445. i10: subcc   %i4,0,%i4
  446. be      Dret           
  447. or      %g0,%i2,%o0
  448. or      %g0,%i3,%o1
  449. or      %g0,%i4,%o2
  450. or      %g0,%i2,%o3
  451. or      %g0,%i3,%o4
  452. call    _exmul
  453. or      %g0,%i4,%o5
  454. or      %g0,%o0,%i5
  455. or      %g0,%o1,%l0
  456. or      %g0,%o2,%l1
  457. sethi   %hi(0x80000000),%o0
  458. or      %g0,0,%o1
  459. or      %g0,0x3ff,%o2
  460. or      %g0,%i5,%o3
  461. or      %g0,%l0,%o4
  462. call    _exsub
  463. or      %g0,%l1,%o5
  464. call    _exsqrt
  465. NOP
  466. or      %g0,%o0,%i5
  467. or      %g0,%o1,%l0
  468. or      %g0,%o2,%l1
  469. or      %g0,%i2,%o0
  470. or      %g0,%i3,%o1
  471. or      %g0,%i4,%o2
  472. or      %g0,%i5,%o3
  473. or      %g0,%l0,%o4
  474. call    _exdiv
  475. or      %g0,%l1,%o5
  476. call    _exatan
  477. NOP
  478. or      %g0,%o0,%i2
  479. or      %g0,%o1,%i3
  480. or      %g0,%o2,%i4
  481. srl     %i3,11,%i1
  482. sll     %i2,21,%l3
  483. or      %i1,%l3,%i1
  484. srl     %i2,11,%i0
  485. sethi   %hi(0xfffff),%l3
  486. or      %l3,0x3ff,%l3
  487. and     %i0,%l3,%i0
  488. sll     %i4,20,%l3
  489. or      %i0,%l3,%i0
  490. or      %i0,%l2,%i0
  491. Dret:
  492. D999: jmpl %i7+8,%g0
  493. restore %g0,0,%g0
  494. Dnan: sethi   %hi(0xfff80000),%i0
  495. ba      Dret     
  496. or      %g0,0,%i1
  497. .global _dpacos
  498. _dpacos:
  499. .global _acos
  500. _acos:
  501. save %sp,-96,%sp
  502. sll     %i0,1,%i4
  503. srl     %i4,21,%i4
  504. sll     %i0,11,%i2
  505. srl     %i1,21,%l2
  506. or      %i2,%l2,%i2
  507. sll     %i1,11,%i3
  508. sethi   %hi(0x80000000),%l2
  509. or      %i2,%l2,%i2
  510. subcc   %i4,0x3ff,%g0
  511. bcs     i11            
  512. sll     %i2,1,%l2
  513. orcc    %l2,%i3,%l2
  514. bne     Enan           
  515. subcc   %i4,0x3ff,%g0
  516. bgu     Enan           
  517. i11: or      %g0,%i2,%o0
  518. or      %g0,%i3,%o1
  519. or      %g0,%i4,%o2
  520. or      %g0,%i2,%o3
  521. or      %g0,%i3,%o4
  522. call    _exmul
  523. or      %g0,%i4,%o5
  524. or      %g0,%o0,%i5
  525. or      %g0,%o1,%l0
  526. or      %g0,%o2,%l1
  527. sethi   %hi(0x80000000),%o0
  528. or      %g0,0,%o1
  529. or      %g0,0x3ff,%o2
  530. or      %g0,%i5,%o3
  531. or      %g0,%l0,%o4
  532. call    _exsub
  533. or      %g0,%l1,%o5
  534. call    _exsqrt
  535. NOP
  536. or      %g0,%o0,%i5
  537. or      %g0,%o1,%l0
  538. or      %g0,%o2,%l1
  539. or      %g0,%i2,%o3
  540. or      %g0,%i3,%o4
  541. call    _exdiv
  542. or      %g0,%i4,%o5
  543. call    _exatan
  544. NOP
  545. or      %g0,%o0,%i2
  546. or      %g0,%o1,%i3
  547. or      %g0,%o2,%i4
  548. subcc   %i0,0,%i0
  549. bpos    i12            
  550. sethi   %hi(0xc90fdaa2),%o0
  551. or      %o0,0x2a2,%o0
  552. sethi   %hi(0x2168c235),%o1
  553. or      %o1,0x235,%o1
  554. or      %g0,0x400,%o2
  555. or      %g0,%i2,%o3
  556. or      %g0,%i3,%o4
  557. call    _exsub
  558. or      %g0,%i4,%o5
  559. or      %g0,%o0,%i2
  560. or      %g0,%o1,%i3
  561. or      %g0,%o2,%i4
  562. i12: srl     %i3,11,%i1
  563. sll     %i2,21,%l2
  564. or      %i1,%l2,%i1
  565. srl     %i2,11,%i0
  566. sethi   %hi(0xfffff),%l2
  567. or      %l2,0x3ff,%l2
  568. and     %i0,%l2,%i0
  569. sll     %i4,20,%l2
  570. or      %i0,%l2,%i0
  571. Eret:
  572. E999: jmpl %i7+8,%g0
  573. restore %g0,0,%g0
  574. Enan: sethi   %hi(0xfff80000),%i0
  575. ba      Eret     
  576. or      %g0,0,%i1
  577. ! .end