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

VxWorks

开发平台:

C/C++

  1. /* fpsqrt32.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 workaround for sqrt(-0.0) until USS patch.
  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 _fpexsqrt
  45. _fpexsqrt:
  46. save %sp,-96,%sp
  47. subcc   %i0,0,%i0
  48. be      Azer           
  49. andcc   %i1,1,%l3
  50. be      i1       
  51. NOP
  52. sethi   %hi(0x67f21800),%i5
  53. umul %i0,%i5,%i5
  54. rd %y,%i5
  55. sethi   %hi(0x4d134800),%l3
  56. add     %i5,%l3,%i5
  57. srl     %i0,1,%i0
  58. ba      e1       
  59. add     %i1,1,%i1
  60. i1: sethi   %hi(0x93000000),%i5
  61. umul %i0,%i5,%i5
  62. rd %y,%i5
  63. sethi   %hi(0x6cfffc00),%l3
  64. add     %i5,%l3,%i5
  65. e1: sra     %i1,1,%i3
  66. add     %i3,0x3f,%i3
  67. srl     %i0,1,%i0
  68. wr %i0,0,%y
  69. or %g0,0x0,%l0
  70. orcc %g0,0,%g0
  71. #if 0
  72. divscc %l0,%i5,%l0
  73. divscc %l0,%i5,%l0
  74. divscc %l0,%i5,%l0
  75. divscc %l0,%i5,%l0
  76. divscc %l0,%i5,%l0
  77. divscc %l0,%i5,%l0
  78. divscc %l0,%i5,%l0
  79. divscc %l0,%i5,%l0
  80. divscc %l0,%i5,%l0
  81. divscc %l0,%i5,%l0
  82. divscc %l0,%i5,%l0
  83. divscc %l0,%i5,%l0
  84. divscc %l0,%i5,%l0
  85. divscc %l0,%i5,%l0
  86. divscc %l0,%i5,%l0
  87. divscc %l0,%i5,%l0
  88. divscc %l0,%i5,%l0
  89. divscc %l0,%i5,%l0
  90. divscc %l0,%i5,%l0
  91. divscc %l0,%i5,%l0
  92. divscc %l0,%i5,%l0
  93. divscc %l0,%i5,%l0
  94. divscc %l0,%i5,%l0
  95. divscc %l0,%i5,%l0
  96. divscc %l0,%i5,%l0
  97. divscc %l0,%i5,%l0
  98. divscc %l0,%i5,%l0
  99. divscc %l0,%i5,%l0
  100. divscc %l0,%i5,%l0
  101. divscc %l0,%i5,%l0
  102. divscc %l0,%i5,%l0
  103. divscc %l0,%i5,%l0
  104. #else
  105. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  106. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  107. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  108. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  109. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  110. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  111. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  112. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  113. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  114. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  115. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  116. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  117. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  118. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  119. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  120. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  121. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  122. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  123. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  124. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  125. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  126. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  127. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  128. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  129. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  130. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  131. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  132. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  133. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  134. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  135. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  136. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  137. #endif
  138. srl     %i5,1,%i5
  139. addcc   %i5,%l0,%i5
  140. subx    %i5,0,%i5
  141. wr %i0,0,%y
  142. or %g0,0x0,%l0
  143. orcc %g0,0,%g0
  144. #if 0
  145. divscc %l0,%i5,%l0
  146. divscc %l0,%i5,%l0
  147. divscc %l0,%i5,%l0
  148. divscc %l0,%i5,%l0
  149. divscc %l0,%i5,%l0
  150. divscc %l0,%i5,%l0
  151. divscc %l0,%i5,%l0
  152. divscc %l0,%i5,%l0
  153. divscc %l0,%i5,%l0
  154. divscc %l0,%i5,%l0
  155. divscc %l0,%i5,%l0
  156. divscc %l0,%i5,%l0
  157. divscc %l0,%i5,%l0
  158. divscc %l0,%i5,%l0
  159. divscc %l0,%i5,%l0
  160. divscc %l0,%i5,%l0
  161. divscc %l0,%i5,%l0
  162. divscc %l0,%i5,%l0
  163. divscc %l0,%i5,%l0
  164. divscc %l0,%i5,%l0
  165. divscc %l0,%i5,%l0
  166. divscc %l0,%i5,%l0
  167. divscc %l0,%i5,%l0
  168. divscc %l0,%i5,%l0
  169. divscc %l0,%i5,%l0
  170. divscc %l0,%i5,%l0
  171. divscc %l0,%i5,%l0
  172. divscc %l0,%i5,%l0
  173. divscc %l0,%i5,%l0
  174. divscc %l0,%i5,%l0
  175. divscc %l0,%i5,%l0
  176. divscc %l0,%i5,%l0
  177. #else
  178. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  179. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  180. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  181. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  182. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  183. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  184. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  185. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  186. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  187. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  188. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  189. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  190. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  191. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  192. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  193. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  194. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  195. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  196. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  197. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  198. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  199. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  200. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  201. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  202. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  203. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  204. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  205. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  206. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  207. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  208. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  209. DIVSCC | (lo0 << 14) | in5 | (lo0 << 25)
  210. #endif
  211. srl     %i5,1,%i5
  212. addcc   %i5,%l0,%i5
  213. subx    %i5,0,%i5
  214. or      %g0,%i5,%i2
  215. Aret: or      %g0,%i2,%i0
  216. or      %g0,%i3,%i1
  217. or      %g0,%i4,%i2
  218. A999: jmpl %i7+8,%g0
  219. restore %g0,0,%g0
  220. Azer: or      %g0,0,%i3
  221. ba      Aret     
  222. or      %g0,%i3,%i2
  223. .global _fpsqrt
  224. _fpsqrt:
  225. .global _sqrtf
  226. _sqrtf:
  227. save %sp,-96,%sp
  228. /* Test for negative zero */
  229. set 0xFF800000,%l0 /* sign (31) and exponent (30-23) */
  230. and %l0,%i0,%l0
  231. set 0x80000000,%l1 /* negative zero */
  232. cmp %l0,%l1
  233. bne sqrtNonZero
  234. nop
  235. ret /* return value = -0.0 */
  236. restore
  237. sqrtNonZero:
  238. srl     %i0,23,%i4
  239. sll     %i0,8,%i3
  240. sethi   %hi(0x80000000),%l3
  241. or      %i3,%l3,%i3
  242. sub     %i4,1,%l3
  243. subcc   %l3,0xfe,%g0
  244. bcc     Bspec          
  245. Blab1: or      %g0,%i3,%o0
  246. call    _fpexsqrt
  247. or      %g0,%i4,%o1
  248. or      %g0,%o0,%l0
  249. or      %g0,%o1,%l1
  250. or      %g0,%o2,%l2
  251. andcc   %i4,1,%l3
  252. bne,a i2               
  253. srl     %i3,1,%i3
  254. i2:
  255. umul %l0,%l0,%i2
  256. rd %y,%i1
  257. sub     %i1,%i3,%i1
  258. orcc    %i1,%i2,%l3
  259. be      Bret           
  260. subcc   %i1,0,%i1
  261. bneg    Bloo1    
  262. NOP
  263. Bloo2: sub     %l0,1,%l0
  264. addcc   %i2,1,%i2
  265. addx    %i1,0,%i1
  266. subcc   %i2,%l0,%i2
  267. subx    %i1,0,%i1
  268. subcc   %i2,%l0,%i2
  269. subxcc  %i1,0,%i1
  270. bpos    Bloo2    
  271. NOP
  272. ba,a    Bret     
  273. Bloo1: addcc   %l0,1,%l0
  274. bcs     Blab3    
  275. NOP
  276. addcc   %i2,%l0,%i2
  277. addx    %i1,0,%i1
  278. addcc   %i2,%l0,%i2
  279. addx    %i1,0,%i1
  280. addcc   %i2,1,%i2
  281. addxcc  %i1,0,%i1
  282. bneg    Bloo1    
  283. NOP
  284. Blab3: sub     %l0,1,%l0
  285. Bret: addcc   %l0,0x80,%l0
  286. addx    %l1,0,%l1
  287. sll     %l0,1,%i0
  288. srl     %i0,9,%i0
  289. sll     %l1,23,%l3
  290. or      %i0,%l3,%i0
  291. B999: jmpl %i7+8,%g0
  292. restore %g0,0,%g0
  293. Bspec: subcc   %i0,0,%i0
  294. bneg    Bnan           
  295. subcc   %i4,0,%i4
  296. bne     i4       
  297. NOP
  298. addcc   %i3,%i3,%i3
  299. be      i5       
  300. NOP
  301. /* scan %i3,0,%i1 */
  302. SCAN | (in3 << 14) | 0 | (in1 << 25)
  303. sll %i3,%i1,%i3
  304. subcc %i4,%i1,%i4
  305. ba,a    Blab1    
  306. i5: ba      B999     
  307. or      %g0,0,%i0
  308. i4: addcc   %i3,%i3,%l3
  309. bne     Bnan     
  310. NOP
  311. ba,a    B999     
  312. Bnan: ba      B999     
  313. sethi   %hi(0xffc00000),%i0
  314. ! .end