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

VxWorks

开发平台:

C/C++

  1. /* fplog32.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. .data
  42. .align 4
  43. logtaf: .word 0xb17217f8,0x7e
  44. .word 0x934b108a,0x7e
  45. .word 0xf0a450d1,0x7d
  46. .word 0xbfd7d1df,0x7d
  47. .word 0x934b108a,0x7d
  48. .word 0xd49f69e4,0x7c
  49. .word 0x88bc7411,0x7c
  50. .word 0x842cc5ad,0x7b
  51. .word 0x0,0x0
  52. .word 0xf1383b71,0x7b
  53. .word 0xe47fbe3d,0x7c
  54. .word 0xa30c5e11,0x7d
  55. .word 0xcf991f66,0x7d
  56. .word 0xf8947afd,0x7d
  57. .word 0x8f42faf4,0x7e
  58. .word 0xa0ec7f42,0x7e
  59. .text
  60. .align 4
  61. .global _fpexlog
  62. _fpexlog:
  63. save %sp,-96,%sp
  64. srl     %i0,27,%i4
  65. and     %i4,0x1e,%i4
  66. sethi   %hi(0xf0000000),%l6
  67. and     %l6,%i0,%i5
  68. subcc   %i1,0x7f,%g0
  69. bl      i1       
  70. NOP
  71. or      %g0,0,%i2
  72. sub     %i1,0x7f,%i3
  73. add     %i5,%i0,%l3
  74. sethi   %hi(0xfffffff),%l6
  75. or      %l6,0x3ff,%l6
  76. ba      e1       
  77. and     %i0,%l6,%i0
  78. i1: sethi   %hi(0x80000000),%i2
  79. or      %g0,0x7e,%i3
  80. sub     %i3,%i1,%i3
  81. sub     %i4,0xe,%i4
  82. sethi   %hi(0x10000000),%l6
  83. add     %i5,%l6,%i5
  84. add     %i5,%i0,%l3
  85. sub     %i5,%i0,%i0
  86. e1: srl     %l3,1,%l3
  87. sethi   %hi(0x80000000),%l6
  88. or      %l3,%l6,%l3
  89. or      %g0,0x7f,%i1
  90. /* scan %i0,0,%i5 */
  91. SCAN | (in0 << 14) | 0 | (in5 << 25)
  92. sll %i0,%i5,%i0
  93. subcc %i1,%i5,%i1
  94. subcc   %i0,%l3,%g0
  95. bcs     i2       
  96. NOP
  97. srl     %i0,1,%i0
  98. add     %i1,1,%i1
  99. i2: srl     %l3,1,%i5
  100. wr %i0,0,%y
  101. or %g0,%i5,%i0
  102. orcc %g0,0,%g0
  103. #if 0
  104. divscc %i0,%l3,%i0
  105. divscc %i0,%l3,%i0
  106. divscc %i0,%l3,%i0
  107. divscc %i0,%l3,%i0
  108. divscc %i0,%l3,%i0
  109. divscc %i0,%l3,%i0
  110. divscc %i0,%l3,%i0
  111. divscc %i0,%l3,%i0
  112. divscc %i0,%l3,%i0
  113. divscc %i0,%l3,%i0
  114. divscc %i0,%l3,%i0
  115. divscc %i0,%l3,%i0
  116. divscc %i0,%l3,%i0
  117. divscc %i0,%l3,%i0
  118. divscc %i0,%l3,%i0
  119. divscc %i0,%l3,%i0
  120. divscc %i0,%l3,%i0
  121. divscc %i0,%l3,%i0
  122. divscc %i0,%l3,%i0
  123. divscc %i0,%l3,%i0
  124. divscc %i0,%l3,%i0
  125. divscc %i0,%l3,%i0
  126. divscc %i0,%l3,%i0
  127. divscc %i0,%l3,%i0
  128. divscc %i0,%l3,%i0
  129. divscc %i0,%l3,%i0
  130. divscc %i0,%l3,%i0
  131. divscc %i0,%l3,%i0
  132. divscc %i0,%l3,%i0
  133. divscc %i0,%l3,%i0
  134. divscc %i0,%l3,%i0
  135. divscc %i0,%l3,%i0
  136. #else
  137. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  138. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  139. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  140. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  141. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  142. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  143. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  144. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  145. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  146. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  147. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  148. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  149. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  150. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  151. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  152. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  153. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  154. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  155. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  156. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  157. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  158. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  159. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  160. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  161. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  162. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  163. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  164. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  165. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  166. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  167. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  168. DIVSCC | (in0 << 14) | lo3 | (in0 << 25)
  169. #endif
  170. umul %i0,%i0,%l3
  171. rd %y,%l3
  172. or      %g0,0x80,%i5
  173. sub     %i5,%i1,%i5
  174. sll     %i5,1,%i5
  175. subcc %i5,32,%g0
  176. bcc,a L1             
  177. or %g0,0,%l3
  178. L1: srl %l3,%i5,%l3
  179. sethi   %hi(0x12492492),%l1
  180. or      %l1,0x92,%l1
  181. umul %l3,%l1,%l1
  182. rd %y,%l1
  183. sethi   %hi(0x1999999a),%l6
  184. or      %l6,0x19a,%l6
  185. add     %l1,%l6,%l1
  186. umul %l3,%l1,%l1
  187. rd %y,%l1
  188. sethi   %hi(0x2aaaaaab),%l6
  189. or      %l6,0x2ab,%l6
  190. add     %l1,%l6,%l1
  191. umul %l3,%l1,%l1
  192. rd %y,%l1
  193. sethi   %hi(0x80000000),%l6
  194. add     %l1,%l6,%l1
  195. umul %i0,%l1,%i5
  196. rd %y,%i0
  197. subcc   %i0,0,%i0
  198. ble     i3       
  199. NOP
  200. addcc   %i5,%i5,%i5
  201. addx    %i0,%i0,%i0
  202. sub     %i1,1,%i1
  203. i3: sethi   %hi(logtaf),%l6
  204. or %l6,%lo(logtaf),%l6
  205. add     %i4,1,%l7
  206. sll     %l7,2,%l7
  207. ld      [%l6+%l7],%i5
  208. subcc   %i5,0,%i5
  209. be      i4       
  210. NOP
  211. sub     %i5,%i1,%l0
  212. subcc %l0,32,%g0
  213. bcc,a L2             
  214. or %g0,0,%i0
  215. L2: srl %i0,%l0,%i0
  216. or      %g0,%i5,%i1
  217. sethi   %hi(logtaf),%l6
  218. or %l6,%lo(logtaf),%l6
  219. sll     %i4,2,%l7
  220. ld      [%l6+%l7],%i5
  221. addcc   %i0,%i5,%i0
  222. bcc     i4       
  223. NOP
  224. srl     %i0,1,%i0
  225. sethi   %hi(0x80000000),%l6
  226. or      %i0,%l6,%i0
  227. add     %i1,1,%i1
  228. i4: subcc   %i3,0,%i3
  229. be      i6       
  230. NOP
  231. or      %g0,0x9e,%l4
  232. /* scan %i3,0,%i5 */
  233. SCAN | (in3 << 14) | 0 | (in5 << 25)
  234. sll %i3,%i5,%i3
  235. subcc %l4,%i5,%l4
  236. sethi   %hi(0xb17217f8),%i5
  237. or      %i5,0x3f8,%i5
  238. umul %i3,%i5,%i5
  239. rd %y,%l3
  240. subcc   %l3,0,%l3
  241. ble     i7       
  242. NOP
  243. addcc   %i5,%i5,%i5
  244. addx    %l3,%l3,%l3
  245. sub     %l4,1,%l4
  246. i7: sub     %l4,%i1,%i5
  247. subcc %i5,32,%g0
  248. bcc,a L3             
  249. or %g0,0,%i0
  250. L3: srl %i0,%i5,%i0
  251. addcc   %i0,%l3,%i0
  252. bcc     i8       
  253. NOP
  254. srl     %i0,1,%i0
  255. sethi   %hi(0x80000000),%l6
  256. or      %i0,%l6,%i0
  257. add     %l4,1,%l4
  258. i8: or      %g0,%l4,%i1
  259. i6: subcc   %i0,0,%i0
  260. be,a i9                
  261. or      %g0,0,%i1
  262. i9:
  263. A999: jmpl %i7+8,%g0
  264. restore %g0,0,%g0
  265. .global _fplog
  266. _fplog:
  267. .global _logf
  268. _logf:
  269. save %sp,-96,%sp
  270. srl     %i0,23,%i2
  271. sll     %i0,8,%i1
  272. sethi   %hi(0x80000000),%i5
  273. or      %i1,%i5,%i1
  274. sub     %i2,1,%i5
  275. subcc   %i5,0xfe,%g0
  276. bcc     Bspec          
  277. Blog5: or      %g0,%i1,%o0
  278. or      %g0,%i2,%o1
  279. call    _fpexlog
  280. or      %g0,%i3,%o2
  281. or      %g0,%o0,%i1
  282. or      %g0,%o1,%i2
  283. or      %g0,%o2,%i3
  284. sll     %i1,1,%i1
  285. srl     %i1,9,%i1
  286. sll     %i2,23,%i5
  287. or      %i1,%i5,%i1
  288. or      %i1,%i3,%i0
  289. B999: jmpl %i7+8,%g0
  290. restore %g0,0,%g0
  291. Bspec: subcc   %i0,0,%i0
  292. bneg    Bnan           
  293. subcc   %i2,0,%i2
  294. bne     i10      
  295. NOP
  296. addcc   %i1,%i1,%i1
  297. bne     i11      
  298. NOP
  299. ba      B999     
  300. sethi   %hi(0xff800000),%i0
  301. i11:
  302. /* scan %i1,0,%i4 */
  303. SCAN | (in1 << 14) | 0 | (in4 << 25)
  304. sll %i1,%i4,%i1
  305. subcc %i2,%i4,%i2
  306. ba,a    Blog5    
  307. i10: addcc   %i1,%i1,%i5
  308. bne     Bnan     
  309. NOP
  310. ba      B999     
  311. sethi   %hi(0x7f800000),%i0
  312. Bnan: ba      B999     
  313. sethi   %hi(0xffc00000),%i0
  314. .global _fplog10
  315. _fplog10:
  316. .global _log10f
  317. _log10f:
  318. save %sp,-96,%sp
  319. srl     %i0,23,%i2
  320. sll     %i0,8,%i1
  321. sethi   %hi(0x80000000),%i5
  322. or      %i1,%i5,%i1
  323. sub     %i2,1,%i5
  324. subcc   %i5,0xfe,%g0
  325. bcc     Cspec          
  326. Clog5: or      %g0,%i1,%o0
  327. or      %g0,%i2,%o1
  328. call    _fpexlog
  329. or      %g0,%i3,%o2
  330. or      %g0,%o0,%i1
  331. or      %g0,%o1,%i2
  332. or      %g0,%o2,%i3
  333. sub     %i2,1,%i2
  334. sethi   %hi(0xde5bd8a9),%i4
  335. or      %i4,0xa9,%i4
  336. umul %i1,%i4,%i1
  337. rd %y,%i1
  338. subcc   %i1,0,%i1
  339. ble     i13      
  340. NOP
  341. sll     %i1,1,%i1
  342. sub     %i2,1,%i2
  343. i13: sll     %i1,1,%i1
  344. srl     %i1,9,%i1
  345. sll     %i2,23,%i5
  346. or      %i1,%i5,%i1
  347. or      %i1,%i3,%i0
  348. C999: jmpl %i7+8,%g0
  349. restore %g0,0,%g0
  350. Cspec: subcc   %i0,0,%i0
  351. bneg    Cnan           
  352. subcc   %i2,0,%i2
  353. bne     i14      
  354. NOP
  355. addcc   %i1,%i1,%i1
  356. bne     i15      
  357. NOP
  358. ba      C999     
  359. sethi   %hi(0xff800000),%i0
  360. i15:
  361. /* scan %i1,0,%i4 */
  362. SCAN | (in1 << 14) | 0 | (in4 << 25)
  363. sll %i1,%i4,%i1
  364. subcc %i2,%i4,%i2
  365. ba,a    Clog5    
  366. i14: addcc   %i1,%i1,%i5
  367. bne     Cnan     
  368. NOP
  369. ba      C999     
  370. sethi   %hi(0x7f800000),%i0
  371. Cnan: ba      C999     
  372. sethi   %hi(0xffc00000),%i0
  373. ! .end