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

VxWorks

开发平台:

C/C++

  1. /* pow32.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 _exlog
  43. .global _exmul
  44. .global _exexp
  45. .global _exdiv
  46. .text
  47. .align 4
  48. .global _dppow
  49. _dppow:
  50. .global _pow
  51. _pow:
  52. save %sp,-96,%sp
  53. /* Test for positive or negative zero */
  54. set 0x7FF00000,%l4 /* exponent (30-20) */
  55. andcc %l4,%i0,%g0
  56. bne powNonZero
  57. andcc %l4,%i2,%g0
  58. bne powNonZero
  59. nop
  60. set 0x3FF00000,%i0 /* return 1.0 */
  61. set 0,%i1
  62. ret
  63. restore
  64. powNonZero:
  65. sll     %i0,1,%l4
  66. srl     %l4,21,%l4
  67. sll     %i0,11,%l2
  68. srl     %i1,21,%g1
  69. or      %l2,%g1,%l2
  70. sll     %i1,11,%l3
  71. sethi   %hi(0x80000000),%l0
  72. or      %l2,%l0,%l2
  73. sll     %i2,1,%l7
  74. srl     %l7,21,%l7
  75. sll     %i2,11,%l5
  76. srl     %i3,21,%g1
  77. or      %l5,%g1,%l5
  78. sll     %i3,11,%l6
  79. or      %l5,%l0,%l5
  80. and     %l0,%i0,%l0
  81. sub     %l4,1,%g1
  82. subcc   %g1,0x7fe,%g0
  83. bcc     AspecA         
  84. Alab1: sub     %l7,1,%g1
  85. subcc   %g1,0x7fe,%g0
  86. bcc     AspecB   
  87. NOP
  88. Alab2: sub     %l7,0x3fe,%i4
  89. subcc   %l0,0,%l0
  90. be      i1             
  91. subcc   %i4,0,%i4
  92. ble     Anan           
  93. subcc   %i4,0x40,%g0
  94. ble     i2       
  95. NOP
  96. or      %g0,0,%i5
  97. ba      e2       
  98. or      %g0,%i5,%l1
  99. i2: subcc   %i4,0x20,%g0
  100. ble     i3       
  101. NOP
  102. sub     %i4,0x21,%g1
  103. sll     %l6,%g1,%i5
  104. ba      e2       
  105. sll     %i5,1,%l1
  106. i3: sub     %i4,1,%g1
  107. sll     %l5,%g1,%i5
  108. sll     %i5,1,%l1
  109. or      %l1,%l6,%l1
  110. e2: subcc   %l1,0,%l1
  111. bne     Anan           
  112. subcc   %i5,0,%i5
  113. bpos,a i1              
  114. or      %g0,0,%l0
  115. i1: subcc   %i4,0xf,%g0
  116. bcc     i5             
  117. sll     %l5,%i4,%g1
  118. orcc    %g1,%l6,%g1
  119. be      Apow20   
  120. NOP
  121. i5: sethi   %hi(0x80000000),%g1
  122. and     %g1,%i2,%i4
  123. subcc   %l4,0x3ff,%g0
  124. bge     i6       
  125. NOP
  126. sethi   %hi(0x80000000),%g1
  127. xor     %i4,%g1,%i4
  128. i6: or      %g0,%l2,%o0
  129. or      %g0,%l3,%o1
  130. call    _exlog
  131. or      %g0,%l4,%o2
  132. or      %g0,%l5,%o3
  133. or      %g0,%l6,%o4
  134. call    _exmul
  135. or      %g0,%l7,%o5
  136. call    _exexp
  137. or      %g0,%i4,%o3
  138. or      %g0,%o0,%l2
  139. or      %g0,%o1,%l3
  140. or      %g0,%o2,%l4
  141. Aret2: sub     %l4,1,%g1
  142. subcc   %g1,0x7fe,%g0
  143. bcc     Aundove  
  144. NOP
  145. srl     %l3,11,%i1
  146. sll     %l2,21,%g1
  147. or      %i1,%g1,%i1
  148. srl     %l2,11,%i0
  149. sethi   %hi(0xfffff),%g1
  150. or      %g1,0x3ff,%g1
  151. and     %i0,%g1,%i0
  152. sll     %l4,20,%g1
  153. or      %i0,%g1,%i0
  154. Aret: or      %i0,%l0,%i0
  155. Aret3:
  156. A999: jmpl %i7+8,%g0
  157. restore %g0,0,%g0
  158. Apow20: or      %g0,0x20,%g1
  159. sub     %g1,%i4,%g1
  160. srl     %l5,%g1,%l1
  161. or      %g0,%l2,%l5
  162. or      %g0,%l3,%l6
  163. or      %g0,%l4,%l7
  164. andcc   %l1,1,%g1
  165. bne     i7       
  166. NOP
  167. sethi   %hi(0x80000000),%l2
  168. or      %g0,0,%l3
  169. or      %g0,0x3ff,%l4
  170. i7: srl     %l1,1,%l1
  171. b8: subcc   %l1,0,%l1
  172. be      i8             
  173. or      %g0,%l5,%o0
  174. or      %g0,%l6,%o1
  175. or      %g0,%l7,%o2
  176. or      %g0,%l5,%o3
  177. or      %g0,%l6,%o4
  178. call    _exmul
  179. or      %g0,%l7,%o5
  180. or      %g0,%o0,%l5
  181. or      %g0,%o1,%l6
  182. or      %g0,%o2,%l7
  183. andcc   %l1,1,%g1
  184. be      i9             
  185. or      %g0,%l2,%o0
  186. or      %g0,%l3,%o1
  187. or      %g0,%l4,%o2
  188. or      %g0,%l5,%o3
  189. or      %g0,%l6,%o4
  190. call    _exmul
  191. or      %g0,%l7,%o5
  192. or      %g0,%o0,%l2
  193. or      %g0,%o1,%l3
  194. or      %g0,%o2,%l4
  195. i9: ba      b8       
  196. srl     %l1,1,%l1
  197. i8: subcc   %i2,0,%i2
  198. bpos    Aret2          
  199. sethi   %hi(0x80000000),%o0
  200. or      %g0,0,%o1
  201. or      %g0,0x3ff,%o2
  202. or      %g0,%l2,%o3
  203. or      %g0,%l3,%o4
  204. call    _exdiv
  205. or      %g0,%l4,%o5
  206. or      %g0,%o0,%l2
  207. or      %g0,%o1,%l3
  208. ba      Aret2    
  209. or      %g0,%o2,%l4
  210. AspecA: subcc   %l4,0,%l4
  211. bne     i11      
  212. NOP
  213. addcc   %l3,%l3,%l3
  214. addx    %l2,%l2,%l2
  215. orcc    %l2,%l3,%g1
  216. be      i11      
  217. NOP
  218. /* scan %l2,0,%i4 */
  219. SCAN | (lo2 << 14) | 0 | (in4 << 25)
  220. subcc %i4,63,%g0
  221. bne L1             
  222. NOP
  223. or %l3,0,%l2
  224. or %g0,0,%l3
  225. sub %l4,32,%l4
  226. /* scan %l2,0,%i4 */
  227. SCAN | (lo2 << 14) | 0 | (in4 << 25)
  228. subcc %i4,63,%g0
  229. be,a L1             
  230. or %i4,0,%l4
  231. L1: subcc %g0,%i4,%i5
  232. be Alab1          
  233. sub %l4,%i4,%l4
  234. sll %l2,%i4,%l2
  235. srl %l3,%i5,%i5
  236. or %i5,%l2,%l2
  237. sll %l3,%i4,%l3
  238. ba,a    Alab1    
  239. i11: sll     %i2,1,%g1
  240. orcc    %g1,%i3,%g1
  241. be      Anan           
  242. subcc   %l4,0,%l4
  243. bne     i13            
  244. subcc   %l7,0x7ff,%g0
  245. be      Anan           
  246. subcc   %i2,0,%i2
  247. bneg    Ainf     
  248. NOP
  249. ba,a    Azer     
  250. i13: sll     %l2,1,%g1
  251. orcc    %g1,%l3,%g1
  252. bne     Anan           
  253. subcc   %l7,0x3ff,%g0
  254. bcc     Alab1    
  255. NOP
  256. or      %g0,0x3ff,%l7
  257. ba      Alab1    
  258. or      %g0,-1,%l5
  259. AspecB: subcc   %l7,0,%l7
  260. bne     i15            
  261. sll     %l5,1,%g1
  262. orcc    %g1,%l6,%g1
  263. be      Aone           
  264. subcc   %l0,0,%l0
  265. be      Aone           
  266. i15: sll     %l5,1,%g1
  267. orcc    %g1,%l6,%g1
  268. bne     Anan     
  269. NOP
  270. ba,a    Aovr     
  271. Ainf: sethi   %hi(0x7ff00000),%i0
  272. ba      Aret     
  273. or      %g0,0,%i1
  274. Anan: sethi   %hi(0xfff80000),%i0
  275. ba      Aret3    
  276. or      %g0,0,%i1
  277. Azer: or      %g0,0,%i0
  278. ba      Aret     
  279. or      %g0,0,%i1
  280. Aone: sethi   %hi(0x3ff00000),%i0
  281. ba      Aret3    
  282. or      %g0,0,%i1
  283. Aovr: subcc   %l0,0,%l0
  284. bne     Anan           
  285. subcc   %i2,0,%i2
  286. bpos    i16            
  287. subcc   %l4,0x3ff,%g0
  288. bge     Azer     
  289. NOP
  290. ba,a    Ainf     
  291. i16: subcc   %l4,0x3ff,%g0
  292. bge     Ainf     
  293. NOP
  294. ba,a    Azer     
  295. Aundove:
  296. subcc   %l4,0,%l4
  297. bg      Ainf     
  298. NOP
  299. or      %g0,0xc,%i4
  300. sub     %i4,%l4,%i4
  301. L3: subcc %i4,32,%g0
  302. bcs L4             
  303. subcc %g0,%i4,%i5
  304. sub %i4,32,%i4
  305. orcc %l2,0,%l3
  306. bne L3             
  307. or %g0,0,%l2
  308. L4: be L5             
  309. sll %l2,%i5,%i5
  310. srl %l3,%i4,%l3
  311. srl %l2,%i4,%l2
  312. or %l3,%i5,%l3
  313. L5: or      %g0,%l2,%i0
  314. ba      Aret     
  315. or      %g0,%l3,%i1
  316. ! .end