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

VxWorks

开发平台:

C/C++

  1. /* sqrt32.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 _exsqrt
  45. _exsqrt:
  46. save %sp,-96,%sp
  47. subcc   %i0,0,%i0
  48. be      Aret           
  49. andcc   %i2,1,%l5
  50. be      i1       
  51. NOP
  52. sethi   %hi(0x67f21800),%l0
  53. umul %i0,%l0,%l0
  54. rd %y,%l0
  55. sethi   %hi(0x4d134800),%l5
  56. add     %l0,%l5,%l0
  57. srl     %i1,1,%i1
  58. sll     %i0,31,%l5
  59. srl     %i0,1,%i0
  60. or      %i1,%l5,%i1
  61. ba      e1       
  62. add     %i2,1,%i2
  63. i1: sethi   %hi(0x93000000),%l0
  64. umul %i0,%l0,%l0
  65. rd %y,%l0
  66. sethi   %hi(0x6cfffc00),%l5
  67. add     %l0,%l5,%l0
  68. e1: sra     %i2,1,%i2
  69. add     %i2,0x1ff,%i2
  70. srl     %i1,1,%i1
  71. sll     %i0,31,%l5
  72. srl     %i0,1,%i0
  73. or      %i1,%l5,%i1
  74. wr %i0,0,%y
  75. or %g0,%i1,%i3
  76. orcc %g0,0,%g0
  77. #if 0
  78. divscc %i3,%l0,%i3
  79. divscc %i3,%l0,%i3
  80. divscc %i3,%l0,%i3
  81. divscc %i3,%l0,%i3
  82. divscc %i3,%l0,%i3
  83. divscc %i3,%l0,%i3
  84. divscc %i3,%l0,%i3
  85. divscc %i3,%l0,%i3
  86. divscc %i3,%l0,%i3
  87. divscc %i3,%l0,%i3
  88. divscc %i3,%l0,%i3
  89. divscc %i3,%l0,%i3
  90. divscc %i3,%l0,%i3
  91. divscc %i3,%l0,%i3
  92. divscc %i3,%l0,%i3
  93. divscc %i3,%l0,%i3
  94. divscc %i3,%l0,%i3
  95. divscc %i3,%l0,%i3
  96. divscc %i3,%l0,%i3
  97. divscc %i3,%l0,%i3
  98. divscc %i3,%l0,%i3
  99. divscc %i3,%l0,%i3
  100. divscc %i3,%l0,%i3
  101. divscc %i3,%l0,%i3
  102. divscc %i3,%l0,%i3
  103. divscc %i3,%l0,%i3
  104. divscc %i3,%l0,%i3
  105. divscc %i3,%l0,%i3
  106. divscc %i3,%l0,%i3
  107. divscc %i3,%l0,%i3
  108. divscc %i3,%l0,%i3
  109. divscc %i3,%l0,%i3
  110. #else
  111. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  112. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  113. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  114. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  115. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  116. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  117. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  118. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  119. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  120. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  121. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  122. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  123. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  124. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  125. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  126. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  127. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  128. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  129. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  130. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  131. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  132. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  133. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  134. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  135. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  136. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  137. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  138. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  139. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  140. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  141. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  142. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  143. #endif
  144. srl     %l0,1,%l0
  145. addcc   %l0,%i3,%l0
  146. subx    %l0,0,%l0
  147. wr %i0,0,%y
  148. or %g0,%i1,%i3
  149. orcc %g0,0,%g0
  150. #if 0
  151. divscc %i3,%l0,%i3
  152. divscc %i3,%l0,%i3
  153. divscc %i3,%l0,%i3
  154. divscc %i3,%l0,%i3
  155. divscc %i3,%l0,%i3
  156. divscc %i3,%l0,%i3
  157. divscc %i3,%l0,%i3
  158. divscc %i3,%l0,%i3
  159. divscc %i3,%l0,%i3
  160. divscc %i3,%l0,%i3
  161. divscc %i3,%l0,%i3
  162. divscc %i3,%l0,%i3
  163. divscc %i3,%l0,%i3
  164. divscc %i3,%l0,%i3
  165. divscc %i3,%l0,%i3
  166. divscc %i3,%l0,%i3
  167. divscc %i3,%l0,%i3
  168. divscc %i3,%l0,%i3
  169. divscc %i3,%l0,%i3
  170. divscc %i3,%l0,%i3
  171. divscc %i3,%l0,%i3
  172. divscc %i3,%l0,%i3
  173. divscc %i3,%l0,%i3
  174. divscc %i3,%l0,%i3
  175. divscc %i3,%l0,%i3
  176. divscc %i3,%l0,%i3
  177. divscc %i3,%l0,%i3
  178. divscc %i3,%l0,%i3
  179. divscc %i3,%l0,%i3
  180. divscc %i3,%l0,%i3
  181. divscc %i3,%l0,%i3
  182. divscc %i3,%l0,%i3
  183. #else
  184. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  185. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  186. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  187. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  188. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  189. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  190. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  191. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  192. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  193. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  194. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  195. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  196. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  197. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  198. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  199. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  200. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  201. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  202. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  203. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  204. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  205. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  206. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  207. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  208. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  209. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  210. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  211. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  212. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  213. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  214. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  215. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  216. #endif
  217. srl     %l0,1,%l0
  218. addcc   %l0,%i3,%l0
  219. subx    %l0,0,%l0
  220. wr %i0,0,%y
  221. or %g0,%i1,%i3
  222. orcc %g0,0,%g0
  223. #if 0
  224. divscc %i3,%l0,%i3
  225. divscc %i3,%l0,%i3
  226. divscc %i3,%l0,%i3
  227. divscc %i3,%l0,%i3
  228. divscc %i3,%l0,%i3
  229. divscc %i3,%l0,%i3
  230. divscc %i3,%l0,%i3
  231. divscc %i3,%l0,%i3
  232. divscc %i3,%l0,%i3
  233. divscc %i3,%l0,%i3
  234. divscc %i3,%l0,%i3
  235. divscc %i3,%l0,%i3
  236. divscc %i3,%l0,%i3
  237. divscc %i3,%l0,%i3
  238. divscc %i3,%l0,%i3
  239. divscc %i3,%l0,%i3
  240. divscc %i3,%l0,%i3
  241. divscc %i3,%l0,%i3
  242. divscc %i3,%l0,%i3
  243. divscc %i3,%l0,%i3
  244. divscc %i3,%l0,%i3
  245. divscc %i3,%l0,%i3
  246. divscc %i3,%l0,%i3
  247. divscc %i3,%l0,%i3
  248. divscc %i3,%l0,%i3
  249. divscc %i3,%l0,%i3
  250. divscc %i3,%l0,%i3
  251. divscc %i3,%l0,%i3
  252. divscc %i3,%l0,%i3
  253. divscc %i3,%l0,%i3
  254. divscc %i3,%l0,%i3
  255. divscc %i3,%l0,%i3
  256. #else
  257. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  258. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  259. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  260. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  261. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  262. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  263. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  264. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  265. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  266. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  267. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  268. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  269. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  270. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  271. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  272. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  273. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  274. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  275. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  276. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  277. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  278. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  279. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  280. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  281. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  282. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  283. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  284. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  285. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  286. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  287. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  288. DIVSCC | (in3 << 14) | lo0 | (in3 << 25)
  289. #endif
  290. bge L1       
  291.  rd %y,%l4
  292. addcc %l0,%l4,%l4
  293. L1: wr %l4,0,%y
  294. or %g0,0x0,%i4
  295. orcc %g0,0,%g0
  296. #if 0
  297. divscc %i4,%l0,%i4
  298. divscc %i4,%l0,%i4
  299. divscc %i4,%l0,%i4
  300. divscc %i4,%l0,%i4
  301. divscc %i4,%l0,%i4
  302. divscc %i4,%l0,%i4
  303. divscc %i4,%l0,%i4
  304. divscc %i4,%l0,%i4
  305. divscc %i4,%l0,%i4
  306. divscc %i4,%l0,%i4
  307. divscc %i4,%l0,%i4
  308. divscc %i4,%l0,%i4
  309. divscc %i4,%l0,%i4
  310. divscc %i4,%l0,%i4
  311. divscc %i4,%l0,%i4
  312. divscc %i4,%l0,%i4
  313. divscc %i4,%l0,%i4
  314. divscc %i4,%l0,%i4
  315. divscc %i4,%l0,%i4
  316. divscc %i4,%l0,%i4
  317. divscc %i4,%l0,%i4
  318. divscc %i4,%l0,%i4
  319. divscc %i4,%l0,%i4
  320. divscc %i4,%l0,%i4
  321. divscc %i4,%l0,%i4
  322. divscc %i4,%l0,%i4
  323. divscc %i4,%l0,%i4
  324. divscc %i4,%l0,%i4
  325. divscc %i4,%l0,%i4
  326. divscc %i4,%l0,%i4
  327. divscc %i4,%l0,%i4
  328. divscc %i4,%l0,%i4
  329. #else
  330. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  331. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  332. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  333. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  334. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  335. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  336. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  337. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  338. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  339. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  340. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  341. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  342. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  343. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  344. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  345. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  346. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  347. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  348. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  349. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  350. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  351. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  352. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  353. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  354. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  355. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  356. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  357. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  358. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  359. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  360. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  361. DIVSCC | (in4 << 14) | lo0 | (in4 << 25)
  362. #endif
  363. sll     %l0,31,%l1
  364. srl     %l0,1,%l0
  365. addcc   %i4,%l1,%i4
  366. addx    %i3,%l0,%i3
  367. or      %g0,%i3,%i0
  368. or      %g0,%i4,%i1
  369. Aret:
  370. A999: jmpl %i7+8,%g0
  371. restore %g0,0,%g0
  372. .global _dpsqrt
  373. _dpsqrt:
  374. .global _sqrt
  375. _sqrt:
  376. save %sp,-96,%sp
  377. /* Test for negative zero */
  378. set 0xFFF00000,%l0 /* sign (31) and exponent (30-20) */
  379. and %l0,%i0,%l0
  380. set 0x80000000,%l1 /* negative zero */
  381. cmp %l0,%l1
  382. bne sqrtNonZero
  383. nop
  384. ret /* return value = -0.0 */
  385. restore
  386. sqrtNonZero:
  387. srl     %i0,20,%i4
  388. sll     %i0,11,%i2
  389. srl     %i1,21,%l6
  390. or      %i2,%l6,%i2
  391. sll     %i1,11,%i3
  392. sethi   %hi(0x80000000),%l6
  393. or      %i2,%l6,%i2
  394. sub     %i4,1,%l6
  395. subcc   %l6,0x7fe,%g0
  396. bcc     Bspec          
  397. Blab1: or      %g0,%i2,%o0
  398. or      %g0,%i3,%o1
  399. call    _exsqrt
  400. or      %g0,%i4,%o2
  401. or      %g0,%o0,%i5
  402. or      %g0,%o1,%l0
  403. or      %g0,%o2,%l1
  404. andcc   %i4,1,%l6
  405. be      i2       
  406. NOP
  407. srl     %i3,1,%i3
  408. sll     %i2,31,%l6
  409. srl     %i2,1,%i2
  410. or      %i3,%l6,%i3
  411. i2:
  412. umul %i5,%l0,%l3
  413. rd %y,%l2
  414. addcc   %l3,%l3,%l3
  415. addx    %l2,%l2,%l2
  416. umul %i5,%i5,%l5
  417. rd %y,%l4
  418. add     %l2,%l5,%l2
  419. umul %l0,%l0,%l4
  420. rd %y,%l5
  421. addcc   %l3,%l5,%l3
  422. addx    %l2,0,%l2
  423. sub     %l2,%i3,%l2
  424. or      %l2,%l3,%l6
  425. orcc    %l6,%l4,%l6
  426. be      Bret           
  427. subcc   %l2,0,%l2
  428. bneg    Bloo1    
  429. NOP
  430. Bloo2: subcc   %l0,1,%l0
  431. subx    %i5,0,%i5
  432. addcc   %l4,1,%l4
  433. addxcc  %l3,0,%l3
  434. addx    %l2,0,%l2
  435. subcc   %l4,%l0,%l4
  436. subxcc  %l3,%i5,%l3
  437. subx    %l2,0,%l2
  438. subcc   %l4,%l0,%l4
  439. subxcc  %l3,%i5,%l3
  440. subxcc  %l2,0,%l2
  441. bpos    Bloo2    
  442. NOP
  443. ba,a    Bret     
  444. Bloo1: addcc   %l0,1,%l0
  445. addxcc  %i5,0,%i5
  446. bcs     Blab3    
  447. NOP
  448. addcc   %l4,%l0,%l4
  449. addxcc  %l3,%i5,%l3
  450. addx    %l2,0,%l2
  451. addcc   %l4,%l0,%l4
  452. addxcc  %l3,%i5,%l3
  453. addx    %l2,0,%l2
  454. addcc   %l4,1,%l4
  455. addxcc  %l3,0,%l3
  456. addxcc  %l2,0,%l2
  457. bneg    Bloo1    
  458. NOP
  459. Blab3: subcc   %l0,1,%l0
  460. subx    %i5,0,%i5
  461. Bret: addcc   %l0,0x400,%l0
  462. addxcc  %i5,0,%i5
  463. addx    %l1,0,%l1
  464. srl     %l0,11,%i1
  465. sll     %i5,21,%l6
  466. or      %i1,%l6,%i1
  467. srl     %i5,11,%i0
  468. sethi   %hi(0xfffff),%l6
  469. or      %l6,0x3ff,%l6
  470. and     %i0,%l6,%i0
  471. sll     %l1,20,%l6
  472. or      %i0,%l6,%i0
  473. B999: jmpl %i7+8,%g0
  474. restore %g0,0,%g0
  475. Bspec: subcc   %i0,0,%i0
  476. bneg    Bnan           
  477. subcc   %i4,0,%i4
  478. bne     i4       
  479. NOP
  480. addcc   %i3,%i3,%i3
  481. addx    %i2,%i2,%i2
  482. orcc    %i2,%i3,%l6
  483. be      Bzer     
  484. NOP
  485. /* scan %i2,0,%l2 */
  486. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  487. subcc %l2,63,%g0
  488. bne L2             
  489. NOP
  490. or %i3,0,%i2
  491. or %g0,0,%i3
  492. sub %i4,32,%i4
  493. /* scan %i2,0,%l2 */
  494. SCAN | (in2 << 14) | 0 | (lo2 << 25)
  495. subcc %l2,63,%g0
  496. be,a L2             
  497. or %l2,0,%i4
  498. L2: subcc %g0,%l2,%l3
  499. be Blab1          
  500. sub %i4,%l2,%i4
  501. sll %i2,%l2,%i2
  502. srl %i3,%l3,%l3
  503. or %l3,%i2,%i2
  504. sll %i3,%l2,%i3
  505. ba,a    Blab1    
  506. i4: sll     %i2,1,%l6
  507. orcc    %l6,%i3,%l6
  508. bne     Bnan     
  509. NOP
  510. ba,a    B999     
  511. Bnan: sethi   %hi(0xfff80000),%i0
  512. ba      B999     
  513. or      %g0,0,%i1
  514. Bzer: or      %g0,0,%i1
  515. ba      B999     
  516. or      %g0,%i1,%i0
  517. ! .end