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

VxWorks

开发平台:

C/C++

  1. /* mod32.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. .global _exsub
  42. .text
  43. .align 4
  44. .global _dpfmod
  45. _dpfmod:
  46. .global _fmod
  47. _fmod:
  48. save %sp,-96,%sp
  49. sll     %i0,1,%l0
  50. srl     %l0,21,%l0
  51. sll     %i0,11,%i4
  52. srl     %i1,21,%l7
  53. or      %i4,%l7,%i4
  54. sll     %i1,11,%i5
  55. sethi   %hi(0x80000000),%l4
  56. or      %i4,%l4,%i4
  57. sll     %i2,1,%l3
  58. srl     %l3,21,%l3
  59. sll     %i2,11,%l1
  60. srl     %i3,21,%l7
  61. or      %l1,%l7,%l1
  62. sll     %i3,11,%l2
  63. or      %l1,%l4,%l1
  64. and     %l4,%i0,%l4
  65. sub     %l0,1,%l7
  66. subcc   %l7,0x7fe,%g0
  67. bcc     AspecA         
  68. Alab1: sub     %l3,1,%l7
  69. subcc   %l7,0x7fe,%g0
  70. bcc     AspecB   
  71. NOP
  72. Alab2: subcc   %l0,%l3,%l5
  73. bneg    Aret2    
  74. NOP
  75. srl     %i5,1,%i5
  76. sll     %i4,31,%l7
  77. srl     %i4,1,%i4
  78. or      %i5,%l7,%i5
  79. srl     %l2,1,%l2
  80. sll     %l1,31,%l7
  81. srl     %l1,1,%l1
  82. or      %l2,%l7,%l2
  83. b1: subcc   %i5,%l2,%i5
  84. subxcc  %i4,%l1,%i4
  85. bcc     i2       
  86. NOP
  87. addcc   %i5,%l2,%i5
  88. addx    %i4,%l1,%i4
  89. i2: addcc   %i5,%i5,%i5
  90. addx    %i4,%i4,%i4
  91. subcc   %l5,0,%l5
  92. bne     b1       
  93. sub     %l5,1,%l5
  94. or      %g0,%l3,%l0
  95. /* scan %i4,0,%l5 */
  96. SCAN | (in4 << 14) | 0 | (lo5 << 25)
  97. subcc %l5,63,%g0
  98. bne L1             
  99. NOP
  100. or %i5,0,%i4
  101. or %g0,0,%i5
  102. sub %l0,32,%l0
  103. /* scan %i4,0,%l5 */
  104. SCAN | (in4 << 14) | 0 | (lo5 << 25)
  105. subcc %l5,63,%g0
  106. be,a L1             
  107. or %l5,0,%l0
  108. L1: subcc %g0,%l5,%l6
  109. be L2             
  110. sub %l0,%l5,%l0
  111. sll %i4,%l5,%i4
  112. srl %i5,%l6,%l6
  113. or %l6,%i4,%i4
  114. sll %i5,%l5,%i5
  115. L2: subcc   %l0,0,%l0
  116. bg      i3       
  117. NOP
  118. or      %g0,1,%l5
  119. sub     %l5,%l0,%l5
  120. L3: subcc %l5,32,%g0
  121. bcs L4             
  122. subcc %g0,%l5,%l6
  123. sub %l5,32,%l5
  124. orcc %i4,0,%i5
  125. bne L3             
  126. or %g0,0,%i4
  127. L4: be L5             
  128. sll %i4,%l6,%l6
  129. srl %i5,%l5,%i5
  130. srl %i4,%l5,%i4
  131. or %i5,%l6,%i5
  132. L5: or      %g0,0,%l0
  133. i3: srl     %i5,11,%i1
  134. sll     %i4,21,%l7
  135. or      %i1,%l7,%i1
  136. srl     %i4,11,%i0
  137. sethi   %hi(0xfffff),%l7
  138. or      %l7,0x3ff,%l7
  139. and     %i0,%l7,%i0
  140. sll     %l0,20,%l7
  141. or      %i0,%l7,%i0
  142. or      %i0,%l4,%i0
  143. Aret2:
  144. A999: jmpl %i7+8,%g0
  145. restore %g0,0,%g0
  146. AspecA: subcc   %l0,0,%l0
  147. bne     Anan     
  148. NOP
  149. addcc   %i5,%i5,%i5
  150. addx    %i4,%i4,%i4
  151. orcc    %i4,%i5,%l7
  152. be      Alab1    
  153. NOP
  154. /* scan %i4,0,%l5 */
  155. SCAN | (in4 << 14) | 0 | (lo5 << 25)
  156. subcc %l5,63,%g0
  157. bne L6             
  158. NOP
  159. or %i5,0,%i4
  160. or %g0,0,%i5
  161. sub %l0,32,%l0
  162. /* scan %i4,0,%l5 */
  163. SCAN | (in4 << 14) | 0 | (lo5 << 25)
  164. subcc %l5,63,%g0
  165. be,a L6             
  166. or %l5,0,%l0
  167. L6: subcc %g0,%l5,%l6
  168. be Alab1          
  169. sub %l0,%l5,%l0
  170. sll %i4,%l5,%i4
  171. srl %i5,%l6,%l6
  172. or %l6,%i4,%i4
  173. sll %i5,%l5,%i5
  174. ba,a    Alab1    
  175. AspecB: subcc   %l3,0,%l3
  176. bne     i5       
  177. NOP
  178. addcc   %l2,%l2,%l2
  179. addx    %l1,%l1,%l1
  180. orcc    %l1,%l2,%l7
  181. be      Anan     
  182. NOP
  183. /* scan %l1,0,%l5 */
  184. SCAN | (lo1 << 14) | 0 | (lo5 << 25)
  185. subcc %l5,63,%g0
  186. bne L8             
  187. NOP
  188. or %l2,0,%l1
  189. or %g0,0,%l2
  190. sub %l3,32,%l3
  191. /* scan %l1,0,%l5 */
  192. SCAN | (lo1 << 14) | 0 | (lo5 << 25)
  193. subcc %l5,63,%g0
  194. be,a L8             
  195. or %l5,0,%l3
  196. L8: subcc %g0,%l5,%l6
  197. be Alab2          
  198. sub %l3,%l5,%l3
  199. sll %l1,%l5,%l1
  200. srl %l2,%l6,%l6
  201. or %l6,%l1,%l1
  202. sll %l2,%l5,%l2
  203. ba,a    Alab2    
  204. i5: sll     %l1,1,%l7
  205. orcc    %l7,%l2,%l7
  206. bne     Anan     
  207. NOP
  208. ba,a    Aret2    
  209. Anan: sethi   %hi(0xfff80000),%i0
  210. ba      Aret2    
  211. or      %g0,0,%i1
  212. Azer: or      %g0,%l4,%i0
  213. ba      Aret2    
  214. or      %g0,0,%i1
  215. .global _dpfrexp
  216. _dpfrexp:
  217. .global _frexp
  218. _frexp:
  219. save %sp,-96,%sp
  220. sll     %i0,1,%i3
  221. srl     %i3,21,%i3
  222. sub     %i3,1,%i5
  223. subcc   %i5,0x7fe,%g0
  224. bcc     Bspec    
  225. NOP
  226. Blab1: sub     %i3,0x3fe,%i3
  227. sethi   %hi(0x800fffff),%i5
  228. or      %i5,0x3ff,%i5
  229. and     %i0,%i5,%i0
  230. sethi   %hi(0x3fe00000),%i5
  231. or      %i0,%i5,%i0
  232. Bret: st      %i3,[%i2]
  233. B999: jmpl %i7+8,%g0
  234. restore %g0,0,%g0
  235. Bspec: subcc   %i3,0,%i3
  236. bne     i7       
  237. NOP
  238. sethi   %hi(0x80000000),%i5
  239. and     %i5,%i0,%i4
  240. sll     %i0,1,%i5
  241. orcc    %i5,%i1,%i5
  242. be      Bret     
  243. NOP
  244. add     %i3,1,%i3
  245. Blab6: sub     %i3,1,%i3
  246. addcc   %i1,%i1,%i1
  247. addx    %i0,%i0,%i0
  248. sethi   %hi(0x100000),%i5
  249. subcc   %i0,%i5,%g0
  250. bcs     Blab6    
  251. NOP
  252. ba      Blab1    
  253. or      %i0,%i4,%i0
  254. i7: sethi   %hi(0xfff80000),%i0
  255. or      %g0,0,%i1
  256. ba      Bret     
  257. or      %g0,%i1,%i3
  258. .global _dpldexp
  259. _dpldexp:
  260. .global _ldexp
  261. _ldexp:
  262. save %sp,-96,%sp
  263. sll     %i0,1,%l0
  264. srl     %l0,21,%l0
  265. sub     %l0,1,%l3
  266. subcc   %l3,0x7fe,%g0
  267. bcc     Cspec    
  268. NOP
  269. add     %l0,%i2,%l0
  270. sub     %l0,1,%l3
  271. subcc   %l3,0x7fe,%g0
  272. bcc     Cspec2   
  273. NOP
  274. sethi   %hi(0x800fffff),%l3
  275. or      %l3,0x3ff,%l3
  276. and     %i0,%l3,%i0
  277. sll     %l0,20,%l3
  278. or      %i0,%l3,%i0
  279. C999: jmpl %i7+8,%g0
  280. restore %g0,0,%g0
  281. Cspec: subcc   %l0,0x7ff,%g0
  282. bne     Cspec2         
  283. sethi   %hi(0xfff00000),%l4
  284. andn    %i0,%l4,%l3
  285. orcc    %l3,%i1,%l3
  286. be      Cret     
  287. NOP
  288. sethi   %hi(0xfff80000),%i0
  289. ba      Cret     
  290. or      %g0,0,%i1
  291. Cspec2: sll     %i0,1,%i5
  292. srl     %i5,21,%i5
  293. sll     %i0,11,%i3
  294. srl     %i1,21,%l3
  295. or      %i3,%l3,%i3
  296. sll     %i1,11,%i4
  297. sethi   %hi(0x80000000),%l1
  298. or      %i3,%l1,%i3
  299. and     %l1,%i0,%l1
  300. subcc   %i5,0,%i5
  301. bne     i11      
  302. NOP
  303. addcc   %i4,%i4,%i4
  304. addx    %i3,%i3,%i3
  305. orcc    %i3,%i4,%l3
  306. be      Cret     
  307. NOP
  308. /* scan %i3,0,%l2 */
  309. SCAN | (in3 << 14) | 0 | (lo2 << 25)
  310. subcc %l2,63,%g0
  311. bne L10             
  312. NOP
  313. or %i4,0,%i3
  314. or %g0,0,%i4
  315. sub %i5,32,%i5
  316. /* scan %i3,0,%l2 */
  317. SCAN | (in3 << 14) | 0 | (lo2 << 25)
  318. subcc %l2,63,%g0
  319. be,a L10             
  320. or %l2,0,%i5
  321. L10: subcc %g0,%l2,%l0
  322. be i11             
  323. sub %i5,%l2,%i5
  324. sll %i3,%l2,%i3
  325. srl %i4,%l0,%l0
  326. or %l0,%i3,%i3
  327. sll %i4,%l2,%i4
  328. ba,a    i11      
  329. i11: add     %i5,%i2,%i5
  330. sub     %i5,1,%l3
  331. subcc   %l3,0x7fe,%g0
  332. bcs     Cret2          
  333. subcc   %i5,0,%i5
  334. ble     i13      
  335. NOP
  336. sethi   %hi(0x7ff00000),%i0
  337. ba      Cret1    
  338. or      %g0,0,%i1
  339. i13: or      %g0,1,%l2
  340. sub     %l2,%i5,%l2
  341. L12: subcc %l2,32,%g0
  342. bcs L13             
  343. orcc %i4,0,%g0
  344. sub %l2,32,%l2
  345. or %i3,0,%i4
  346. or %g0,0,%i3
  347. be L14             
  348. orcc %i4,0,%g0
  349. or %i4,2,%i4
  350. L14: bne L12             
  351. NOP
  352. ba,a L15             
  353. L13: subcc %g0,%l2,%i0
  354. be L15             
  355. sll %i4,%i0,%i1
  356. orcc %i1,0,%g0
  357. sll %i3,%i0,%i0
  358. srl %i4,%l2,%i4
  359. srl %i3,%l2,%i3
  360. or %i4,%i0,%i4
  361. bne,a L15             
  362. or %i4,2,%i4
  363. L15: addcc   %i4,0x400,%i4
  364. addxcc  %i3,0,%i3
  365. addx    %i5,0,%i5
  366. srl     %i4,11,%l3
  367. and     %l3,1,%l3
  368. sub     %i4,%l3,%i4
  369. or      %g0,0,%i5
  370. Cret2: srl     %i4,11,%i1
  371. sll     %i3,21,%l3
  372. or      %i1,%l3,%i1
  373. srl     %i3,11,%i0
  374. sethi   %hi(0xfffff),%l3
  375. or      %l3,0x3ff,%l3
  376. and     %i0,%l3,%i0
  377. sll     %i5,20,%l3
  378. or      %i0,%l3,%i0
  379. Cret1: or      %i0,%l1,%i0
  380. Cret:
  381. ba,a    C999     
  382. .global _dpmodf
  383. _dpmodf:
  384. .global _modf
  385. _modf:
  386. save %sp,-96,%sp
  387. sll     %i0,1,%i5
  388. srl     %i5,21,%i5
  389. sll     %i0,11,%i3
  390. srl     %i1,21,%l6
  391. or      %i3,%l6,%i3
  392. sll     %i1,11,%i4
  393. sethi   %hi(0x80000000),%l4
  394. or      %i3,%l4,%i3
  395. and     %l4,%i0,%l4
  396. sub     %i5,1,%l6
  397. subcc   %l6,0x7fe,%g0
  398. bcc     Dspec    
  399. NOP
  400. or      %g0,%i3,%l0
  401. or      %g0,%i4,%l1
  402. or      %g0,%i5,%l2
  403. or      %g0,0x43e,%l3
  404. sub     %l3,%i5,%l3
  405. subcc   %l3,0,%l3
  406. ble     Dlab3          
  407. subcc   %l3,0x40,%g0
  408. bge     Dzer     
  409. NOP
  410. and     %l3,0x1f,%l6
  411. or      %g0,1,%l5
  412. sll     %l5,%l6,%l5
  413. sub     %g0,%l5,%l5
  414. subcc   %l3,0x20,%g0
  415. bl      i14      
  416. NOP
  417. or      %g0,0,%l1
  418. ba      Dlab3    
  419. and     %l0,%l5,%l0
  420. i14: and     %l1,%l5,%l1
  421. Dlab3: srl     %l1,11,%i1
  422. sll     %l0,21,%l6
  423. or      %i1,%l6,%i1
  424. srl     %l0,11,%i0
  425. sethi   %hi(0xfffff),%l6
  426. or      %l6,0x3ff,%l6
  427. and     %i0,%l6,%i0
  428. sll     %l2,20,%l6
  429. or      %i0,%l6,%i0
  430. or      %i0,%l4,%i0
  431. st      %i0,[%i2]
  432. st      %i1,[%i2+4]
  433. or      %g0,%i3,%o0
  434. or      %g0,%i4,%o1
  435. or      %g0,%i5,%o2
  436. or      %g0,%l0,%o3
  437. or      %g0,%l1,%o4
  438. call    _exsub
  439. or      %g0,%l2,%o5
  440. or      %g0,%o0,%i3
  441. or      %g0,%o1,%i4
  442. or      %g0,%o2,%i5
  443. Dret: srl     %i4,11,%i1
  444. sll     %i3,21,%l6
  445. or      %i1,%l6,%i1
  446. srl     %i3,11,%i0
  447. sethi   %hi(0xfffff),%l6
  448. or      %l6,0x3ff,%l6
  449. and     %i0,%l6,%i0
  450. sll     %i5,20,%l6
  451. or      %i0,%l6,%i0
  452. or      %i0,%l4,%i0
  453. Dret2:
  454. D999: jmpl %i7+8,%g0
  455. restore %g0,0,%g0
  456. Dzer: st      %g0,[%i2+4]
  457. ba      Dret2    
  458. st      %l4,[%i2]
  459. Dspec: subcc   %i5,0,%i5
  460. be      Dzer     
  461. NOP
  462. or      %g0,0,%i1
  463. st      %i1,[%i2+4]
  464. sethi   %hi(0xfff80000),%i0
  465. ba      Dret2    
  466. st      %i0,[%i2]
  467. ! .end