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

VxWorks

开发平台:

C/C++

  1. /* log32.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 _exadd
  42. .global _exmul
  43. .global _exdiv
  44. .global _sigmax
  45. .data
  46. .align 4
  47. logcon: .word 0x88888889,0x8888888
  48. .word 0xd89d89d9,0x9d89d89
  49. .word 0x2e8ba2e9,0xba2e8ba
  50. .word 0x38e38e39,0xe38e38e
  51. .word 0x49249249,0x12492492
  52. .word 0x9999999a,0x19999999
  53. .word 0xaaaaaaab,0x2aaaaaaa
  54. .word 0x0,0x80000000
  55. bastab: .word 0xb17217f7,0xd1cf79ac,0x3fe
  56. .word 0x934b1089,0xa6dc93c2,0x3fe
  57. .word 0xf0a450d1,0x39366ca7,0x3fd
  58. .word 0xbfd7d1de,0xc0a8df6f,0x3fd
  59. .word 0x934b1089,0xa6dc93c2,0x3fd
  60. .word 0xd49f69e4,0x56cf1b7a,0x3fc
  61. .word 0x88bc7411,0x3f23def2,0x3fc
  62. .word 0x842cc5ac,0xf1d03445,0x3fb
  63. .word 0x0,0x0,0x0
  64. .word 0xf1383b71,0x57972f50,0x3fb
  65. .word 0xe47fbe3c,0xd4d10d61,0x3fc
  66. .word 0xa30c5e10,0xe2f613e8,0x3fd
  67. .word 0xcf991f65,0xfcc25f96,0x3fd
  68. .word 0xf8947afd,0x7837659b,0x3fd
  69. .word 0x8f42faf3,0x820681f0,0x3fe
  70. .word 0xa0ec7f42,0x33957323,0x3fe
  71. .text
  72. .align 4
  73. .global _exlog
  74. _exlog:
  75. save %sp,-96,%sp
  76. sethi   %hi(0xf0000000),%l7
  77. and     %l7,%i0,%i5
  78. or      %g0,%i1,%l2
  79. or      %g0,%l2,%l5
  80. srl     %i0,28,%i4
  81. subcc   %i2,0x3ff,%g0
  82. bl      i1       
  83. NOP
  84. or      %g0,0x3ff,%l3
  85. sub     %i2,%l3,%i3
  86. add     %i0,%i5,%l4
  87. srl     %l5,1,%l5
  88. sll     %l4,31,%l7
  89. srl     %l4,1,%l4
  90. or      %l5,%l7,%l5
  91. sethi   %hi(0x80000000),%l7
  92. or      %l4,%l7,%l4
  93. or      %g0,0x400,%l6
  94. ba      e1       
  95. sub     %i0,%i5,%l1
  96. i1: or      %g0,0x3fe,%l3
  97. sub     %l3,%i2,%i3
  98. sub     %i4,7,%i4
  99. sethi   %hi(0x10000000),%l7
  100. add     %i5,%l7,%i5
  101. add     %i0,%i5,%l4
  102. srl     %l5,1,%l5
  103. sll     %l4,31,%l7
  104. srl     %l4,1,%l4
  105. or      %l5,%l7,%l5
  106. sethi   %hi(0x80000000),%l7
  107. or      %l4,%l7,%l4
  108. or      %g0,0x3ff,%l6
  109. sub     %i0,%i5,%l1
  110. subcc   %g0,%l2,%l2
  111. subx    %g0,%l1,%l1
  112. e1:
  113. /* scan %l1,0,%i5 */
  114. SCAN | (lo1 << 14) | 0 | (in5 << 25)
  115. subcc %i5,63,%g0
  116. bne L1             
  117. NOP
  118. or %l2,0,%l1
  119. or %g0,0,%l2
  120. sub %l3,32,%l3
  121. /* scan %l1,0,%i5 */
  122. SCAN | (lo1 << 14) | 0 | (in5 << 25)
  123. subcc %i5,63,%g0
  124. be,a L1             
  125. or %i5,0,%l3
  126. L1: subcc %g0,%i5,%l0
  127. be L2             
  128. sub %l3,%i5,%l3
  129. sll %l1,%i5,%l1
  130. srl %l2,%l0,%l0
  131. or %l0,%l1,%l1
  132. sll %l2,%i5,%l2
  133. L2: or      %g0,%l1,%o0
  134. or      %g0,%l2,%o1
  135. or      %g0,%l3,%o2
  136. or      %g0,%l4,%o3
  137. or      %g0,%l5,%o4
  138. call    _exdiv
  139. or      %g0,%l6,%o5
  140. or      %g0,%o0,%l1
  141. or      %g0,%o1,%l2
  142. or      %g0,%o2,%l3
  143. or      %g0,%o0,%o3
  144. or      %g0,%o1,%o4
  145. call    _exmul
  146. or      %g0,%o2,%o5
  147. or      %g0,0,%o3
  148. sethi   %hi(logcon),%o4
  149. call    _sigmax
  150. or %o4,%lo(logcon),%o4
  151. or      %g0,%o0,%l4
  152. or      %g0,%o1,%l5
  153. or      %g0,%o2,%l6
  154. add     %l6,1,%l6
  155. or      %g0,%l1,%o0
  156. or      %g0,%l2,%o1
  157. or      %g0,%l3,%o2
  158. or      %g0,%l4,%o3
  159. or      %g0,%l5,%o4
  160. call    _exmul
  161. or      %g0,%l6,%o5
  162. sethi   %hi(bastab),%g1
  163. or %g1,%lo(bastab),%g1
  164. sll     %i4,2,%l7
  165. add     %g1,%l7,%g1
  166. add     %g1,%l7,%g1
  167. add     %g1,%l7,%g1
  168. ld      [%g1],%o3
  169. ld      [%g1+4],%o4
  170. call    _exadd
  171. ld      [%g1+8],%o5
  172. or      %g0,%o0,%l1
  173. or      %g0,%o1,%l2
  174. or      %g0,%o2,%l3
  175. subcc   %i3,0,%i3
  176. be      Aret     
  177. NOP
  178. or      %g0,0x41e,%l6
  179. /* scan %i3,0,%i5 */
  180. SCAN | (in3 << 14) | 0 | (in5 << 25)
  181. sll %i3,%i5,%i3
  182. subcc %l6,%i5,%l6
  183. sethi   %hi(0xb17217f7),%i5
  184. or      %i5,0x3f7,%i5
  185. umul %i3,%i5,%l5
  186. rd %y,%l4
  187. sethi   %hi(0xd1cf79ac),%i5
  188. or      %i5,0x1ac,%i5
  189. umul %i3,%i5,%l0
  190. rd %y,%i5
  191. addcc   %l5,%i5,%l5
  192. addxcc  %l4,0,%l4
  193. bneg    i2       
  194. NOP
  195. addcc   %l0,%l0,%l0
  196. addxcc  %l5,%l5,%l5
  197. addx    %l4,%l4,%l4
  198. sub     %l6,1,%l6
  199. i2: addcc   %l0,%l0,%l0
  200. addxcc  %l5,0,%l5
  201. addx    %l4,0,%l4
  202. or      %g0,%l1,%o0
  203. or      %g0,%l2,%o1
  204. or      %g0,%l3,%o2
  205. or      %g0,%l4,%o3
  206. or      %g0,%l5,%o4
  207. call    _exadd
  208. or      %g0,%l6,%o5
  209. or      %g0,%o0,%l1
  210. or      %g0,%o1,%l2
  211. or      %g0,%o2,%l3
  212. Aret: or      %g0,%l1,%i0
  213. or      %g0,%l2,%i1
  214. or      %g0,%l3,%i2
  215. A999: jmpl %i7+8,%g0
  216. restore %g0,0,%g0
  217. .global _dplog
  218. _dplog:
  219. .global _log
  220. _log:
  221. save %sp,-96,%sp
  222. srl     %i0,20,%i4
  223. sll     %i0,11,%i2
  224. srl     %i1,21,%l4
  225. or      %i2,%l4,%i2
  226. sll     %i1,11,%i3
  227. sethi   %hi(0x80000000),%l4
  228. or      %i2,%l4,%i2
  229. sub     %i4,1,%l4
  230. subcc   %l4,0x7fe,%g0
  231. bcc     Bspec          
  232. Blog5: or      %g0,%i2,%o0
  233. or      %g0,%i3,%o1
  234. call    _exlog
  235. or      %g0,%i4,%o2
  236. or      %g0,%o0,%i5
  237. or      %g0,%o1,%l0
  238. or      %g0,%o2,%l1
  239. srl     %l0,11,%i1
  240. sll     %i5,21,%l4
  241. or      %i1,%l4,%i1
  242. srl     %i5,11,%i0
  243. sethi   %hi(0xfffff),%l4
  244. or      %l4,0x3ff,%l4
  245. and     %i0,%l4,%i0
  246. sll     %l1,20,%l4
  247. or      %i0,%l4,%i0
  248. Bret2: subcc   %i4,0x3ff,%g0
  249. bge     Bret     
  250. NOP
  251. sethi   %hi(0x80000000),%l4
  252. or      %i0,%l4,%i0
  253. Bret:
  254. B999: jmpl %i7+8,%g0
  255. restore %g0,0,%g0
  256. Bspec: subcc   %i0,0,%i0
  257. bneg    Bnan           
  258. subcc   %i4,0,%i4
  259. bne     i4       
  260. NOP
  261. addcc   %i3,%i3,%i3
  262. addx    %i2,%i2,%i2
  263. orcc    %i2,%i3,%l4
  264. be      e4       
  265. NOP
  266. /* scan %i2,0,%l2 */
  267. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  268. subcc %l2,63,%g0
  269. bne L3             
  270. NOP
  271. or %i3,0,%i2
  272. or %g0,0,%i3
  273. sub %i4,32,%i4
  274. /* scan %i2,0,%l2 */
  275. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  276. subcc %l2,63,%g0
  277. be,a L3             
  278. or %l2,0,%i4
  279. L3: subcc %g0,%l2,%l3
  280. be Blog5          
  281. sub %i4,%l2,%i4
  282. sll %i2,%l2,%i2
  283. srl %i3,%l3,%l3
  284. or %l3,%i2,%i2
  285. sll %i3,%l2,%i3
  286. ba,a    Blog5    
  287. i4: sll     %i2,1,%l4
  288. orcc    %l4,%i3,%l4
  289. bne     Bnan     
  290. NOP
  291. e4: sethi   %hi(0x7ff00000),%i0
  292. ba      Bret2    
  293. or      %g0,0,%i1
  294. Bnan: sethi   %hi(0xfff80000),%i0
  295. ba      Bret     
  296. or      %g0,0,%i1
  297. .global _dplog10
  298. _dplog10:
  299. .global _log10
  300. _log10:
  301. save %sp,-96,%sp
  302. srl     %i0,20,%i4
  303. sll     %i0,11,%i2
  304. srl     %i1,21,%l4
  305. or      %i2,%l4,%i2
  306. sll     %i1,11,%i3
  307. sethi   %hi(0x80000000),%l4
  308. or      %i2,%l4,%i2
  309. sub     %i4,1,%l4
  310. subcc   %l4,0x7fe,%g0
  311. bcc     Cspec          
  312. Clog5: or      %g0,%i2,%o0
  313. or      %g0,%i3,%o1
  314. call    _exlog
  315. or      %g0,%i4,%o2
  316. sethi   %hi(0xde5bd8a9),%o3
  317. or      %o3,0xa9,%o3
  318. sethi   %hi(0x37287195),%o4
  319. or      %o4,0x195,%o4
  320. call    _exmul
  321. or      %g0,0x3fd,%o5
  322. or      %g0,%o0,%i5
  323. or      %g0,%o1,%l0
  324. or      %g0,%o2,%l1
  325. srl     %l0,11,%i1
  326. sll     %i5,21,%l4
  327. or      %i1,%l4,%i1
  328. srl     %i5,11,%i0
  329. sethi   %hi(0xfffff),%l4
  330. or      %l4,0x3ff,%l4
  331. and     %i0,%l4,%i0
  332. sll     %l1,20,%l4
  333. or      %i0,%l4,%i0
  334. Cret2: subcc   %i4,0x3ff,%g0
  335. bge     Cret     
  336. NOP
  337. sethi   %hi(0x80000000),%l4
  338. or      %i0,%l4,%i0
  339. Cret:
  340. C999: jmpl %i7+8,%g0
  341. restore %g0,0,%g0
  342. Cspec: subcc   %i0,0,%i0
  343. bneg    Cnan           
  344. subcc   %i4,0,%i4
  345. bne     i7       
  346. NOP
  347. addcc   %i3,%i3,%i3
  348. addx    %i2,%i2,%i2
  349. orcc    %i2,%i3,%l4
  350. be      e7       
  351. NOP
  352. /* scan %i2,0,%l2 */
  353. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  354. subcc %l2,63,%g0
  355. bne L5             
  356. NOP
  357. or %i3,0,%i2
  358. or %g0,0,%i3
  359. sub %i4,32,%i4
  360. /* scan %i2,0,%l2 */
  361. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  362. subcc %l2,63,%g0
  363. be,a L5             
  364. or %l2,0,%i4
  365. L5: subcc %g0,%l2,%l3
  366. be Clog5          
  367. sub %i4,%l2,%i4
  368. sll %i2,%l2,%i2
  369. srl %i3,%l3,%l3
  370. or %l3,%i2,%i2
  371. sll %i3,%l2,%i3
  372. ba,a    Clog5    
  373. i7: sll     %i2,1,%l4
  374. orcc    %l4,%i3,%l4
  375. bne     Cnan     
  376. NOP
  377. e7: sethi   %hi(0x7ff00000),%i0
  378. ba      Cret2    
  379. or      %g0,0,%i1
  380. Cnan: sethi   %hi(0xfff80000),%i0
  381. ba      Cret     
  382. or      %g0,0,%i1
  383. ! .end