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

VxWorks

开发平台:

C/C++

  1. /* func32.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  added two missing DIVSCC instructions in exdiv().
  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. .text
  43. .align 4
  44. .global _sigmax
  45. _sigmax:
  46. save %sp,-96,%sp
  47. or      %g0,0x3fe,%l4
  48. sub     %l4,%i2,%l4
  49. L1: subcc %l4,32,%g0
  50. bcs L2             
  51. subcc %g0,%l4,%l5
  52. sub %l4,32,%l4
  53. orcc %i0,0,%i1
  54. bne L1             
  55. or %g0,0,%i0
  56. L2: be L3             
  57. sll %i0,%l5,%l5
  58. srl %i1,%l4,%i1
  59. srl %i0,%l4,%i0
  60. or %i1,%l5,%i1
  61. L3: ld      [%i4],%l3
  62. add     %i4,4,%i4
  63. ld      [%i4],%l2
  64. add     %i4,4,%i4
  65. b1: xor     %l2,%i3,%l6
  66. subcc   %l2,0,%l2
  67. bpos    i2       
  68. NOP
  69. subcc   %g0,%l3,%l3
  70. subx    %g0,%l2,%l2
  71. i2:
  72. umul %i0,%l3,%l3
  73. rd %y,%l3
  74. umul %i0,%l2,%l5
  75. rd %y,%l0
  76. addcc   %l3,%l5,%l3
  77. addx    %l0,0,%l0
  78. umul %i1,%l2,%l4
  79. rd %y,%l4
  80. addcc   %l3,%l4,%l3
  81. addx    %l0,0,%l0
  82. or      %g0,%l0,%l2
  83. subcc   %l6,0,%l6
  84. bpos    i3       
  85. NOP
  86. subcc   %g0,%l3,%l3
  87. subx    %g0,%l2,%l2
  88. i3: ld      [%i4],%l1
  89. add     %i4,4,%i4
  90. ld      [%i4],%l0
  91. add     %i4,4,%i4
  92. addcc   %l3,%l1,%l3
  93. addx    %l2,%l0,%l2
  94. sethi   %hi(0x80000000),%l7
  95. subcc   %l0,%l7,%g0
  96. bne     b1       
  97. NOP
  98. or      %g0,0x3ff,%i2
  99. subcc   %l2,0,%l2
  100. bneg    i4       
  101. NOP
  102. addcc   %l3,%l3,%l3
  103. addx    %l2,%l2,%l2
  104. sub     %i2,1,%i2
  105. i4: or      %g0,%l3,%i1
  106. or      %g0,%l2,%i0
  107. A999: jmpl %i7+8,%g0
  108. restore %g0,0,%g0
  109. .global _exmul
  110. _exmul:
  111. save %sp,-96,%sp
  112. umul %i0,%i3,%l1
  113. rd %y,%l0
  114. umul %i0,%i4,%l3
  115. rd %y,%l2
  116. addcc   %l1,%l2,%l1
  117. addx    %l0,0,%l0
  118. umul %i1,%i3,%l4
  119. rd %y,%l2
  120. addcc   %l4,%l3,%l4
  121. addxcc  %l1,%l2,%l1
  122. addxcc  %l0,0,%l0
  123. bneg    i5       
  124. NOP
  125. be      Bzer     
  126. NOP
  127. addcc   %l4,%l4,%l4
  128. addxcc  %l1,%l1,%l1
  129. addx    %l0,%l0,%l0
  130. sub     %i2,1,%i2
  131. i5: addcc   %l4,%l4,%l4
  132. addxcc  %l1,0,%l1
  133. addx    %l0,0,%l0
  134. add     %i2,%i5,%i2
  135. sub     %i2,0x3fe,%i2
  136. or      %g0,%l1,%i1
  137. or      %g0,%l0,%i0
  138. Bret:
  139. B999: jmpl %i7+8,%g0
  140. restore %g0,0,%g0
  141. Bzer: or      %g0,0,%i2
  142. or      %g0,%i2,%i0
  143. ba      Bret     
  144. or      %g0,%i2,%i1
  145. .global _exadd
  146. _exadd:
  147. save %sp,-96,%sp
  148. sub     %i2,%i5,%l0
  149. subcc   %l0,0,%l0
  150. bneg    i6       
  151. NOP
  152. L4: subcc %l0,32,%g0
  153. bcs L5             
  154. subcc %g0,%l0,%l1
  155. sub %l0,32,%l0
  156. orcc %i3,0,%i4
  157. bne L4             
  158. or %g0,0,%i3
  159. L5: be e6             
  160. sll %i3,%l1,%l1
  161. srl %i4,%l0,%i4
  162. srl %i3,%l0,%i3
  163. or %i4,%l1,%i4
  164. ba,a    e6       
  165. i6: or      %g0,%i5,%i2
  166. sub     %g0,%l0,%l0
  167. L7: subcc %l0,32,%g0
  168. bcs L8             
  169. subcc %g0,%l0,%l1
  170. sub %l0,32,%l0
  171. orcc %i0,0,%i1
  172. bne L7             
  173. or %g0,0,%i0
  174. L8: be e6             
  175. sll %i0,%l1,%l1
  176. srl %i1,%l0,%i1
  177. srl %i0,%l0,%i0
  178. or %i1,%l1,%i1
  179. e6: addcc   %i1,%i4,%i1
  180. addxcc  %i0,%i3,%i0
  181. bcc     i7       
  182. NOP
  183. srl     %i1,1,%i1
  184. sll     %i0,31,%l2
  185. srl     %i0,1,%i0
  186. or      %i1,%l2,%i1
  187. sethi   %hi(0x80000000),%l2
  188. or      %i0,%l2,%i0
  189. add     %i2,1,%i2
  190. i7:
  191. C999: jmpl %i7+8,%g0
  192. restore %g0,0,%g0
  193. .global _exsub
  194. _exsub:
  195. save %sp,-96,%sp
  196. sub     %i2,%i5,%l0
  197. L10: subcc %l0,32,%g0
  198. bcs L11             
  199. subcc %g0,%l0,%l1
  200. sub %l0,32,%l0
  201. orcc %i3,0,%i4
  202. bne L10             
  203. or %g0,0,%i3
  204. L11: be L12             
  205. sll %i3,%l1,%l1
  206. srl %i4,%l0,%i4
  207. srl %i3,%l0,%i3
  208. or %i4,%l1,%i4
  209. L12: subcc   %i1,%i4,%i1
  210. subx    %i0,%i3,%i0
  211. /* scan %i0,0,%l0 */
  212. SCAN | (in0 << 14) | 0 | (lo0 << 25)
  213. subcc %l0,63,%g0
  214. bne L13             
  215. NOP
  216. or %i1,0,%i0
  217. or %g0,0,%i1
  218. sub %i2,32,%i2
  219. /* scan %i0,0,%l0 */
  220. SCAN | (in0 << 14) | 0 | (lo0 << 25)
  221. subcc %l0,63,%g0
  222. be,a L13             
  223. or %l0,0,%i2
  224. L13: subcc %g0,%l0,%l1
  225. be L14             
  226. sub %i2,%l0,%i2
  227. sll %i0,%l0,%i0
  228. srl %i1,%l1,%l1
  229. or %l1,%i0,%i0
  230. sll %i1,%l0,%i1
  231. L14:
  232. D999: jmpl %i7+8,%g0
  233. restore %g0,0,%g0
  234. .global _exdiv
  235. _exdiv:
  236. save %sp,-96,%sp
  237. subcc   %i3,0,%i3
  238. be      Einf     
  239. NOP
  240. srl     %i1,1,%i1
  241. sll     %i0,31,%l5
  242. srl     %i0,1,%i0
  243. or      %i1,%l5,%i1
  244. wr %i0,0,%y
  245. or %g0,%i1,%l0
  246. orcc %g0,0,%g0
  247. #if 0
  248. divscc %l0,%i3,%l0
  249. divscc %l0,%i3,%l0
  250. divscc %l0,%i3,%l0
  251. divscc %l0,%i3,%l0
  252. divscc %l0,%i3,%l0
  253. divscc %l0,%i3,%l0
  254. divscc %l0,%i3,%l0
  255. divscc %l0,%i3,%l0
  256. divscc %l0,%i3,%l0
  257. divscc %l0,%i3,%l0
  258. divscc %l0,%i3,%l0
  259. divscc %l0,%i3,%l0
  260. divscc %l0,%i3,%l0
  261. divscc %l0,%i3,%l0
  262. divscc %l0,%i3,%l0
  263. divscc %l0,%i3,%l0
  264. divscc %l0,%i3,%l0
  265. divscc %l0,%i3,%l0
  266. divscc %l0,%i3,%l0
  267. divscc %l0,%i3,%l0
  268. divscc %l0,%i3,%l0
  269. divscc %l0,%i3,%l0
  270. divscc %l0,%i3,%l0
  271. divscc %l0,%i3,%l0
  272. divscc %l0,%i3,%l0
  273. divscc %l0,%i3,%l0
  274. divscc %l0,%i3,%l0
  275. divscc %l0,%i3,%l0
  276. divscc %l0,%i3,%l0
  277. divscc %l0,%i3,%l0
  278. divscc %l0,%i3,%l0
  279. divscc %l0,%i3,%l0
  280. #else
  281. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  282. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  283. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  284. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  285. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  286. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  287. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  288. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  289. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  290. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  291. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  292. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  293. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  294. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  295. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  296. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  297. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  298. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  299. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  300. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  301. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  302. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  303. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  304. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  305. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  306. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  307. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  308. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  309. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  310. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  311. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  312. DIVSCC | (lo0 << 14) | in3 | (lo0 << 25)
  313. #endif
  314. bge L15       
  315.  rd %y,%i0
  316. addcc %i3,%i0,%i0
  317. L15:
  318. umul %l0,%i4,%l3
  319. rd %y,%l2
  320. or      %g0,0,%i1
  321. subcc   %i1,%l3,%i1
  322. subxcc  %i0,%l2,%i0
  323. bcc     i8       
  324. NOP
  325. Elab3: sub     %l0,1,%l0
  326. addcc   %i1,%i4,%i1
  327. addxcc  %i0,%i3,%i0
  328. bcc     Elab3          
  329. i8: subcc   %i0,%i3,%g0
  330. bne     i9       
  331. NOP
  332. or      %g0,%i4,%l2
  333. or      %g0,%i1,%i0
  334. or      %g0,0,%l1
  335. ba      e9       
  336. or      %g0,%l1,%l3
  337. i9: wr %i0,0,%y
  338. or %g0,%i1,%l1
  339. orcc %g0,0,%g0
  340. #if 0
  341. divscc %l1,%i3,%l1
  342. divscc %l1,%i3,%l1
  343. divscc %l1,%i3,%l1
  344. divscc %l1,%i3,%l1
  345. divscc %l1,%i3,%l1
  346. divscc %l1,%i3,%l1
  347. divscc %l1,%i3,%l1
  348. divscc %l1,%i3,%l1
  349. divscc %l1,%i3,%l1
  350. divscc %l1,%i3,%l1
  351. divscc %l1,%i3,%l1
  352. divscc %l1,%i3,%l1
  353. divscc %l1,%i3,%l1
  354. divscc %l1,%i3,%l1
  355. divscc %l1,%i3,%l1
  356. divscc %l1,%i3,%l1
  357. divscc %l1,%i3,%l1
  358. divscc %l1,%i3,%l1
  359. divscc %l1,%i3,%l1
  360. divscc %l1,%i3,%l1
  361. divscc %l1,%i3,%l1
  362. divscc %l1,%i3,%l1
  363. divscc %l1,%i3,%l1
  364. divscc %l1,%i3,%l1
  365. divscc %l1,%i3,%l1
  366. divscc %l1,%i3,%l1
  367. divscc %l1,%i3,%l1
  368. divscc %l1,%i3,%l1
  369. divscc %l1,%i3,%l1
  370. divscc %l1,%i3,%l1
  371. divscc %l1,%i3,%l1
  372. divscc %l1,%i3,%l1
  373. #else
  374. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  375. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  376. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  377. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  378. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  379. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  380. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  381. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  382. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  383. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  384. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  385. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  386. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  387. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  388. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  389. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  390. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  391. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  392. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  393. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  394. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  395. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  396. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  397. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  398. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  399. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  400. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  401. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  402. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  403. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  404. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  405. DIVSCC | (lo1 << 14) | in3 | (lo1 << 25)
  406. #endif
  407. bge L16       
  408.  rd %y,%i0
  409. addcc %i3,%i0,%i0
  410. L16:
  411. umul %l1,%i4,%l3
  412. rd %y,%l2
  413. e9: or      %g0,0,%i1
  414. subcc   %i1,%l3,%i1
  415. subxcc  %i0,%l2,%i0
  416. bcc     i10      
  417. NOP
  418. Elab4: sub     %l1,1,%l1
  419. addcc   %i1,%i4,%i1
  420. addxcc  %i0,%i3,%i0
  421. bcc     Elab4    
  422. NOP
  423. i10: sub     %i2,%i5,%i2
  424. add     %i2,0x3ff,%i2
  425. subcc   %l0,0,%l0
  426. bneg    i11      
  427. NOP
  428. addcc   %l1,%l1,%l1
  429. addx    %l0,%l0,%l0
  430. sub     %i2,1,%i2
  431. i11: or      %g0,%l0,%i0
  432. or      %g0,%l1,%i1
  433. Eret:
  434. E999: jmpl %i7+8,%g0
  435. restore %g0,0,%g0
  436. Einf: or      %g0,0x7ff,%i2
  437. sethi   %hi(0x80000000),%i0
  438. ba      Eret     
  439. or      %g0,0,%i1
  440. ! .end