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

VxWorks

开发平台:

C/C++

  1. /* fpmod32.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. .text
  42. .align 4
  43. .global _fpfmod
  44. _fpfmod:
  45. .global _fmodf
  46. _fmodf:
  47. save %sp,-96,%sp
  48. srl     %i0,23,%i3
  49. and     %i3,0xff,%i3
  50. srl     %i1,23,%l0
  51. and     %l0,0xff,%l0
  52. sethi   %hi(0x80000000),%l2
  53. sll     %i0,8,%i2
  54. or      %i2,%l2,%i2
  55. sll     %i1,8,%i5
  56. or      %i5,%l2,%i5
  57. and     %i0,%l2,%i4
  58. sub     %i3,1,%l3
  59. subcc   %l3,0xfe,%g0
  60. bcc     AspecA         
  61. Alab1: sub     %l0,1,%l3
  62. subcc   %l3,0xfe,%g0
  63. bcc     AspecB   
  64. NOP
  65. Alab2: subcc   %i3,%l0,%l2
  66. bpos    i1       
  67. NOP
  68. ba,a    A999     
  69. i1: srl     %i2,1,%i2
  70. srl     %i5,1,%i5
  71. b2: subcc   %i2,%i5,%i2
  72. bcs,a i3               
  73. addcc   %i2,%i5,%i2
  74. i3: addcc   %i2,%i2,%i2
  75. subcc   %l2,0,%l2
  76. bne     b2       
  77. sub     %l2,1,%l2
  78. subcc   %i2,0,%i2
  79. be      Azer     
  80. NOP
  81. /* scan %i2,0,%l2 */
  82. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  83. sll %i2,%l2,%i2
  84. subcc %l0,%l2,%l0
  85. subcc   %l0,0,%l0
  86. bg      i4       
  87. NOP
  88. or      %g0,9,%l2
  89. sub     %l2,%l0,%l2
  90. subcc %l2,32,%g0
  91. bcc,a L1             
  92. or %g0,0,%i2
  93. L1: srl %i2,%l2,%i2
  94. ba,a    Aret     
  95. i4: sll     %i2,1,%i2
  96. srl     %i2,9,%i2
  97. sll     %l0,23,%l3
  98. or      %i2,%l3,%i2
  99. Aret: or      %i2,%i4,%i0
  100. A999: jmpl %i7+8,%g0
  101. restore %g0,0,%g0
  102. AspecA: subcc   %i3,0,%i3
  103. bne     Anan     
  104. NOP
  105. addcc   %i2,%i2,%i2
  106. be      Alab1    
  107. NOP
  108. /* scan %i2,0,%l2 */
  109. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  110. sll %i2,%l2,%i2
  111. subcc %i3,%l2,%i3
  112. ba,a    Alab1    
  113. AspecB: add     %i5,%i5,%i5
  114. subcc   %l0,0,%l0
  115. bne     i6             
  116. subcc   %i5,0,%i5
  117. be      Anan     
  118. NOP
  119. /* scan %i5,0,%l2 */
  120. SCAN | (in5 << 14) | 0 | (lo2 << 25)
  121. sll %i5,%l2,%i5
  122. subcc %l0,%l2,%l0
  123. ba,a    Alab2    
  124. i6: subcc   %i5,0,%i5
  125. bne     Anan     
  126. NOP
  127. ba,a    A999     
  128. Anan: ba      A999     
  129. sethi   %hi(0xffc00000),%i0
  130. Azer: ba      A999     
  131. or      %g0,%i4,%i0
  132. .global _fpfrexp
  133. _fpfrexp:
  134. .global _frexpf
  135. _frexpf:
  136. save %sp,-96,%sp
  137. srl     %i0,23,%i2
  138. and     %i2,0xff,%i2
  139. sub     %i2,1,%i5
  140. subcc   %i5,0xfe,%g0
  141. bcc     Bspec    
  142. NOP
  143. Blab1: sub     %i2,0x7e,%i2
  144. sethi   %hi(0x807fffff),%i5
  145. or      %i5,0x3ff,%i5
  146. and     %i0,%i5,%i0
  147. sethi   %hi(0x3f000000),%i5
  148. or      %i0,%i5,%i0
  149. Bret: st      %i2,[%i1]
  150. B999: jmpl %i7+8,%g0
  151. restore %g0,0,%g0
  152. Bspec: subcc   %i2,0,%i2
  153. bne     i8             
  154. addcc   %i0,%i0,%i5
  155. be      Bret     
  156. NOP
  157. sll     %i0,9,%i3
  158. /* scan %i3,0,%i4 */
  159. SCAN | (in3 << 14) | 0 | (in4 << 25)
  160. sll %i3,%i4,%i3
  161. subcc %i2,%i4,%i2
  162. sethi   %hi(0x80000000),%i5
  163. and     %i5,%i0,%i0
  164. srl     %i3,8,%i5
  165. ba      Blab1    
  166. or      %i0,%i5,%i0
  167. i8: sethi   %hi(0xffc00000),%i0
  168. ba      Bret     
  169. or      %g0,0,%i2
  170. .global _fpldexp
  171. _fpldexp:
  172. .global _ldexpf
  173. _ldexpf:
  174. save %sp,-96,%sp
  175. srl     %i0,23,%l0
  176. and     %l0,0xff,%l0
  177. sub     %l0,1,%l2
  178. subcc   %l2,0xfe,%g0
  179. bcc     Cspec    
  180. NOP
  181. add     %l0,%i1,%l0
  182. sub     %l0,1,%l2
  183. subcc   %l2,0xfe,%g0
  184. bcc     Cspec2   
  185. NOP
  186. sethi   %hi(0x807fffff),%l2
  187. or      %l2,0x3ff,%l2
  188. and     %i0,%l2,%i0
  189. sll     %l0,23,%l2
  190. or      %i0,%l2,%i0
  191. C999: jmpl %i7+8,%g0
  192. restore %g0,0,%g0
  193. Cspec: subcc   %l0,0xff,%g0
  194. bne     Cspec2         
  195. sethi   %hi(0xff800000),%l3
  196. andncc  %i0,%l3,%l2
  197. bne,a i10              
  198. sethi   %hi(0xffc00000),%i0
  199. i10:
  200. ba,a    C999     
  201. Cspec2: srl     %i0,23,%i3
  202. andcc   %i3,0xff,%i3
  203. sethi   %hi(0x80000000),%i4
  204. sll     %i0,8,%i2
  205. or      %i2,%i4,%i2
  206. bne     i11      
  207. and     %i4,%i0,%i4
  208. addcc   %i2,%i2,%i2
  209. be      i12      
  210. NOP
  211. /* scan %i2,0,%l1 */
  212. SCAN | (in2 << 14) | 0 | (lo1 << 25)
  213. sll %i2,%l1,%i2
  214. subcc %i3,%l1,%i3
  215. ba,a    i11      
  216. i12:
  217. ba,a    C999     
  218. i11: add     %i3,%i1,%i3
  219. sub     %i3,1,%l2
  220. subcc   %l2,0xfe,%g0
  221. bcs     Cret2          
  222. subcc   %i3,0,%i3
  223. ble     i13      
  224. NOP
  225. ba      Cret1    
  226. sethi   %hi(0x7f800000),%i0
  227. i13: or      %g0,1,%l1
  228. sub     %l1,%i3,%l1
  229. subcc   %l1,0x20,%g0
  230. bcs     i14      
  231. NOP
  232. ba      e14      
  233. or      %g0,2,%i2
  234. i14: or      %g0,%i2,%l0
  235. srl     %i2,%l1,%i2
  236. sll     %i2,%l1,%l2
  237. subcc   %l2,%l0,%g0
  238. bne,a e14              
  239. or      %i2,2,%i2
  240. e14: addcc   %i2,0x80,%i2
  241. addx    %i3,0,%i3
  242. srl     %i2,8,%l2
  243. and     %l2,1,%l2
  244. sub     %i2,%l2,%i2
  245. or      %g0,0,%i3
  246. Cret2: sll     %i2,1,%i0
  247. srl     %i0,9,%i0
  248. sll     %i3,23,%l2
  249. or      %i0,%l2,%i0
  250. Cret1: ba      C999     
  251. or      %i0,%i4,%i0
  252. .global _fpmodf
  253. _fpmodf:
  254. .global _modff
  255. _modff:
  256. save %sp,-96,%sp
  257. srl     %i0,23,%i3
  258. and     %i3,0xff,%i3
  259. sethi   %hi(0x80000000),%i4
  260. sll     %i0,8,%i2
  261. or      %i2,%i4,%i2
  262. and     %i4,%i0,%i4
  263. subcc   %i3,0xff,%g0
  264. be      Dinfnan  
  265. NOP
  266. or      %g0,%i2,%i5
  267. or      %g0,%i3,%l0
  268. or      %g0,%i4,%l1
  269. or      %g0,0x9e,%l2
  270. sub     %l2,%i3,%l2
  271. subcc   %l2,0,%l2
  272. ble     Dlab3          
  273. subcc   %l2,0x20,%g0
  274. bge     Dzer     
  275. NOP
  276. srl     %i5,%l2,%i5
  277. sll     %i5,%l2,%i5
  278. Dlab3: sll     %i5,1,%l2
  279. srl     %l2,9,%l2
  280. sll     %l0,23,%l3
  281. or      %l2,%l3,%l2
  282. or      %l2,%l1,%l3
  283. st      %l3,[%i1]
  284. sub     %i3,%l0,%l2
  285. subcc %l2,32,%g0
  286. bcc,a L2             
  287. or %g0,0,%i5
  288. L2: srl %i5,%l2,%i5
  289. subcc   %i2,%i5,%i2
  290. be      Dret2    
  291. NOP
  292. /* scan %i2,0,%l2 */
  293. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  294. sll %i2,%l2,%i2
  295. subcc %i3,%l2,%i3
  296. Dret: sll     %i2,1,%i2
  297. srl     %i2,9,%i2
  298. sll     %i3,23,%l3
  299. or      %i2,%l3,%i2
  300. Dret2: or      %i2,%i4,%i0
  301. D999: jmpl %i7+8,%g0
  302. restore %g0,0,%g0
  303. Dzer: ba      Dret     
  304. st      %i4,[%i1]
  305. Dinfnan:
  306. sethi   %hi(0xffc00000),%i0
  307. ba      D999     
  308. st      %i0,[%i1]
  309. ! .end