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

VxWorks

开发平台:

C/C++

  1. /* fppow32.s - VxWorks conversion from Microtek tools to Sun native */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,13nov92,jwt  added temporary (until USS patch) fix for pow(0.0,0.0) = 0.0.
  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. .global _fpexlog
  43. .global _fpexexp
  44. .text
  45. .align 4
  46. .global _fppow
  47. _fppow:
  48. .global _powf
  49. _powf:
  50. save %sp,-96,%sp
  51. /* Test for positive or negative zero */
  52. set 0x7F800000,%l4 /* exponent (30-23) */
  53. andcc %l4,%i0,%g0
  54. bne powNonZero
  55. andcc %l4,%i1,%g0
  56. bne powNonZero
  57. nop
  58. set 0x3F300000,%i0 /* return 1.0 */
  59. ret
  60. restore
  61. powNonZero:
  62. srl     %i0,23,%l2
  63. and     %l2,0xff,%l2
  64. srl     %i1,23,%l5
  65. and     %l5,0xff,%l5
  66. sethi   %hi(0x80000000),%i2
  67. sll     %i0,8,%l1
  68. or      %l1,%i2,%l1
  69. sll     %i1,8,%l4
  70. or      %l4,%i2,%l4
  71. and     %i1,%i2,%l6
  72. and     %i2,%i0,%i2
  73. sub     %l2,1,%l7
  74. subcc   %l7,0xfe,%g0
  75. bcc     AspecA         
  76. Alab1: sub     %l5,1,%l7
  77. subcc   %l7,0xfe,%g0
  78. bcc     AspecB   
  79. NOP
  80. sub     %l5,0x7e,%i4
  81. subcc   %i2,0,%i2
  82. be      i1             
  83. subcc   %i4,0,%i4
  84. ble     Anan           
  85. subcc   %i4,0x20,%g0
  86. bcs     i2       
  87. NOP
  88. ba      i1       
  89. or      %g0,0,%i2
  90. i2: sll     %l4,%i4,%l7
  91. subcc   %l7,0,%l7
  92. bne     Anan           
  93. sub     %i4,1,%g1
  94. sll     %l4,%g1,%l7
  95. subcc   %l7,0,%l7
  96. be,a i1                
  97. or      %g0,0,%i2
  98. i1: subcc   %i4,0xc,%g0
  99. bcc     i4             
  100. sll     %l4,%i4,%l7
  101. subcc   %l7,0,%l7
  102. be      Apow20         
  103. i4: or      %g0,%l1,%o0
  104. or      %g0,%l2,%o1
  105. call    _fpexlog
  106. or      %g0,%l3,%o2
  107. or      %g0,%o0,%l1
  108. or      %g0,%o1,%l2
  109. or      %g0,%o2,%l3
  110. sub     %l2,0x7e,%l7
  111. add     %l5,%l7,%l5
  112. xor     %l6,%l3,%l6
  113. umul %l1,%l4,%i3
  114. rd %y,%l4
  115. subcc   %l4,0,%l4
  116. ble     i5       
  117. NOP
  118. addcc   %i3,%i3,%i3
  119. addx    %l4,%l4,%l4
  120. sub     %l5,1,%l5
  121. i5: addcc   %i3,%i3,%i3
  122. addx    %l4,0,%l4
  123. or      %g0,%l4,%o0
  124. or      %g0,%l5,%o1
  125. call    _fpexexp
  126. or      %g0,%l6,%o2
  127. or      %g0,%o0,%l1
  128. or      %g0,%o1,%l2
  129. or      %g0,%o2,%l3
  130. Aret2: sub     %l2,1,%l7
  131. subcc   %l7,0xfe,%g0
  132. bcs     i6             
  133. subcc   %l2,0,%l2
  134. bg      Ainf     
  135. NOP
  136. or      %g0,9,%i3
  137. sub     %i3,%l2,%i3
  138. subcc %i3,32,%g0
  139. bcc,a L1             
  140. or %g0,0,%l1
  141. L1: srl %l1,%i3,%l1
  142. ba      A999     
  143. or      %l1,%i2,%i0
  144. i6: sll     %l1,1,%l1
  145. srl     %l1,9,%l1
  146. sll     %l2,23,%l7
  147. or      %l1,%l7,%l1
  148. or      %l1,%i2,%i0
  149. A999: jmpl %i7+8,%g0
  150. restore %g0,0,%g0
  151. Apow20: or      %g0,0x20,%l7
  152. sub     %l7,%i4,%l7
  153. srl     %l4,%l7,%l0
  154. or      %g0,%l1,%l4
  155. or      %g0,%l2,%l5
  156. andcc   %l0,1,%l7
  157. bne     i7       
  158. NOP
  159. sethi   %hi(0x80000000),%l1
  160. or      %g0,0x7f,%l2
  161. i7: srl     %l0,1,%l0
  162. b8: subcc   %l0,0,%l0
  163. be      i8       
  164. NOP
  165. sll     %l5,1,%l5
  166. sub     %l5,0x7e,%l5
  167. umul %l4,%l4,%l4
  168. rd %y,%l4
  169. subcc   %l4,0,%l4
  170. ble     i9       
  171. NOP
  172. sll     %l4,1,%l4
  173. sub     %l5,1,%l5
  174. i9: andcc   %l0,1,%l7
  175. be      i10      
  176. NOP
  177. sub     %l5,0x7e,%l7
  178. add     %l2,%l7,%l2
  179. umul %l1,%l4,%l1
  180. rd %y,%l1
  181. subcc   %l1,0,%l1
  182. ble     i10      
  183. NOP
  184. sll     %l1,1,%l1
  185. sub     %l2,1,%l2
  186. i10: ba      b8       
  187. srl     %l0,1,%l0
  188. i8: subcc   %l6,0,%l6
  189. be      Aret2    
  190. NOP
  191. sethi   %hi(0x40000000),%l4
  192. or      %g0,0xfe,%l7
  193. sub     %l7,%l2,%l2
  194. or      %g0,%l1,%i5
  195. wr %l4,0,%y
  196. or %g0,0x0,%l1
  197. orcc %g0,0,%g0
  198. #if 0
  199. divscc %l1,%i5,%l1
  200. divscc %l1,%i5,%l1
  201. divscc %l1,%i5,%l1
  202. divscc %l1,%i5,%l1
  203. divscc %l1,%i5,%l1
  204. divscc %l1,%i5,%l1
  205. divscc %l1,%i5,%l1
  206. divscc %l1,%i5,%l1
  207. divscc %l1,%i5,%l1
  208. divscc %l1,%i5,%l1
  209. divscc %l1,%i5,%l1
  210. divscc %l1,%i5,%l1
  211. divscc %l1,%i5,%l1
  212. divscc %l1,%i5,%l1
  213. divscc %l1,%i5,%l1
  214. divscc %l1,%i5,%l1
  215. divscc %l1,%i5,%l1
  216. divscc %l1,%i5,%l1
  217. divscc %l1,%i5,%l1
  218. divscc %l1,%i5,%l1
  219. divscc %l1,%i5,%l1
  220. divscc %l1,%i5,%l1
  221. divscc %l1,%i5,%l1
  222. divscc %l1,%i5,%l1
  223. divscc %l1,%i5,%l1
  224. divscc %l1,%i5,%l1
  225. divscc %l1,%i5,%l1
  226. divscc %l1,%i5,%l1
  227. divscc %l1,%i5,%l1
  228. divscc %l1,%i5,%l1
  229. divscc %l1,%i5,%l1
  230. divscc %l1,%i5,%l1
  231. #else
  232. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  233. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  234. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  235. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  236. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  237. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  238. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  239. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  240. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  241. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  242. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  243. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  244. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  245. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  246. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  247. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  248. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  249. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  250. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  251. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  252. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  253. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  254. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  255. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  256. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  257. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  258. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  259. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  260. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  261. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  262. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  263. DIVSCC | (lo1 << 14) | in5 | (lo1 << 25)
  264. #endif
  265. subcc   %l1,0,%l1
  266. ble     Aret2    
  267. NOP
  268. sll     %l1,1,%l1
  269. ba      Aret2    
  270. sub     %l2,1,%l2
  271. AspecA: subcc   %l2,0,%l2
  272. bne     i14      
  273. NOP
  274. addcc   %l1,%l1,%l1
  275. be      i14      
  276. NOP
  277. /* scan %l1,0,%i3 */
  278. SCAN | (lo1 << 14) | 0 | (in3 << 25)
  279. sll %l1,%i3,%l1
  280. subcc %l2,%i3,%l2
  281. ba,a    Alab1    
  282. i14: addcc   %i1,%i1,%l7
  283. be      Anan           
  284. subcc   %l2,0,%l2
  285. bne     i16            
  286. subcc   %l5,0xff,%g0
  287. be      Anan           
  288. subcc   %i1,0,%i1
  289. bneg    Ainf     
  290. NOP
  291. ba,a    Azer     
  292. i16: addcc   %l1,%l1,%l7
  293. bne     Anan           
  294. subcc   %l5,0x7f,%g0
  295. bcc     Alab1    
  296. NOP
  297. or      %g0,0x7f,%l5
  298. ba      Alab1    
  299. or      %g0,-1,%l4
  300. AspecB: add     %l4,%l4,%l4
  301. subcc   %l5,0,%l5
  302. bne     i18            
  303. subcc   %l4,0,%l4
  304. be      Aone           
  305. subcc   %i2,0,%i2
  306. be      Aone           
  307. i18: subcc   %l4,0,%l4
  308. bne     Anan     
  309. NOP
  310. ba,a    Aovr     
  311. Ainf: sethi   %hi(0x7f800000),%l7
  312. ba      A999     
  313. or      %l7,%i2,%i0
  314. Anan: ba      A999     
  315. sethi   %hi(0xffc00000),%i0
  316. Azer: ba      A999     
  317. or      %g0,%i2,%i0
  318. Aone: ba      A999     
  319. sethi   %hi(0x3f800000),%i0
  320. Aovr: subcc   %i2,0,%i2
  321. bne     Anan           
  322. subcc   %i1,0,%i1
  323. bpos    i19            
  324. subcc   %l2,0x7f,%g0
  325. bge     Azer     
  326. NOP
  327. ba,a    Ainf     
  328. i19: subcc   %l2,0x7f,%g0
  329. bge     Ainf     
  330. NOP
  331. ba,a    Azer     
  332. ! .end