/security/nss/lib/freebl/mpi/vis_32.il

http://github.com/zpao/v8monkey · SKILL · 1324 lines · 1299 code · 25 blank · 0 comment · 2 complexity · c447d7e2cbeff723120f3a2ce6993938 MD5 · raw file

  1. !
  2. ! ***** BEGIN LICENSE BLOCK *****
  3. ! Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4. !
  5. ! The contents of this file are subject to the Mozilla Public License Version
  6. ! 1.1 (the "License"); you may not use this file except in compliance with
  7. ! the License. You may obtain a copy of the License at
  8. ! http://www.mozilla.org/MPL/
  9. !
  10. ! Software distributed under the License is distributed on an "AS IS" basis,
  11. ! WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12. ! for the specific language governing rights and limitations under the
  13. ! License.
  14. !
  15. ! The Original Code is vis inline macros (32 bit). (vis_32.il 3.3).
  16. !
  17. ! The Initial Developer of the Original Code is
  18. ! Sun Microsystems Inc.
  19. ! Portions created by the Initial Developer are Copyright (C) 1995-2000
  20. ! the Initial Developer. All Rights Reserved.
  21. !
  22. ! Contributor(s):
  23. !
  24. ! Alternatively, the contents of this file may be used under the terms of
  25. ! either the GNU General Public License Version 2 or later (the "GPL"), or
  26. ! the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27. ! in which case the provisions of the GPL or the LGPL are applicable instead
  28. ! of those above. If you wish to allow use of your version of this file only
  29. ! under the terms of either the GPL or the LGPL, and not to allow others to
  30. ! use your version of this file under the terms of the MPL, indicate your
  31. ! decision by deleting the provisions above and replace them with the notice
  32. ! and other provisions required by the GPL or the LGPL. If you do not delete
  33. ! the provisions above, a recipient may use your version of this file under
  34. ! the terms of any one of the MPL, the GPL or the LGPL.
  35. !
  36. ! ***** END LICENSE BLOCK *****
  37. ! $Id: vis_32.il,v 1.3 2004/04/27 23:04:36 gerv%gerv.net Exp $
  38. ! The interface to the VIS instructions as declared below (and in the VIS
  39. ! User's Manual) will not change, but the macro implementation might change
  40. ! in the future.
  41. !--------------------------------------------------------------------
  42. ! Pure edge handling instructions
  43. !
  44. ! int vis_edge8(void */*frs1*/, void */*frs2*/);
  45. !
  46. .inline vis_edge8,8
  47. edge8 %o0,%o1,%o0
  48. .end
  49. !
  50. ! int vis_edge8l(void */*frs1*/, void */*frs2*/);
  51. !
  52. .inline vis_edge8l,8
  53. edge8l %o0,%o1,%o0
  54. .end
  55. !
  56. ! int vis_edge16(void */*frs1*/, void */*frs2*/);
  57. !
  58. .inline vis_edge16,8
  59. edge16 %o0,%o1,%o0
  60. .end
  61. !
  62. ! int vis_edge16l(void */*frs1*/, void */*frs2*/);
  63. !
  64. .inline vis_edge16l,8
  65. edge16l %o0,%o1,%o0
  66. .end
  67. !
  68. ! int vis_edge32(void */*frs1*/, void */*frs2*/);
  69. !
  70. .inline vis_edge32,8
  71. edge32 %o0,%o1,%o0
  72. .end
  73. !
  74. ! int vis_edge32l(void */*frs1*/, void */*frs2*/);
  75. !
  76. .inline vis_edge32l,8
  77. edge32l %o0,%o1,%o0
  78. .end
  79. !--------------------------------------------------------------------
  80. ! Edge handling instructions with negative return values if cc set
  81. !
  82. ! int vis_edge8cc(void */*frs1*/, void */*frs2*/);
  83. !
  84. .inline vis_edge8cc,8
  85. edge8 %o0,%o1,%o0
  86. mov 0,%o1
  87. movgu %icc,-1024,%o1
  88. or %o1,%o0,%o0
  89. .end
  90. !
  91. ! int vis_edge8lcc(void */*frs1*/, void */*frs2*/);
  92. !
  93. .inline vis_edge8lcc,8
  94. edge8l %o0,%o1,%o0
  95. mov 0,%o1
  96. movgu %icc,-1024,%o1
  97. or %o1,%o0,%o0
  98. .end
  99. !
  100. ! int vis_edge16cc(void */*frs1*/, void */*frs2*/);
  101. !
  102. .inline vis_edge16cc,8
  103. edge16 %o0,%o1,%o0
  104. mov 0,%o1
  105. movgu %icc,-1024,%o1
  106. or %o1,%o0,%o0
  107. .end
  108. !
  109. ! int vis_edge16lcc(void */*frs1*/, void */*frs2*/);
  110. !
  111. .inline vis_edge16lcc,8
  112. edge16l %o0,%o1,%o0
  113. mov 0,%o1
  114. movgu %icc,-1024,%o1
  115. or %o1,%o0,%o0
  116. .end
  117. !
  118. ! int vis_edge32cc(void */*frs1*/, void */*frs2*/);
  119. !
  120. .inline vis_edge32cc,8
  121. edge32 %o0,%o1,%o0
  122. mov 0,%o1
  123. movgu %icc,-1024,%o1
  124. or %o1,%o0,%o0
  125. .end
  126. !
  127. ! int vis_edge32lcc(void */*frs1*/, void */*frs2*/);
  128. !
  129. .inline vis_edge32lcc,8
  130. edge32l %o0,%o1,%o0
  131. mov 0,%o1
  132. movgu %icc,-1024,%o1
  133. or %o1,%o0,%o0
  134. .end
  135. !--------------------------------------------------------------------
  136. ! Alignment instructions
  137. !
  138. ! void *vis_alignaddr(void */*rs1*/, int /*rs2*/);
  139. !
  140. .inline vis_alignaddr,8
  141. alignaddr %o0,%o1,%o0
  142. .end
  143. !
  144. ! void *vis_alignaddrl(void */*rs1*/, int /*rs2*/);
  145. !
  146. .inline vis_alignaddrl,8
  147. alignaddrl %o0,%o1,%o0
  148. .end
  149. !
  150. ! double vis_faligndata(double /*frs1*/, double /*frs2*/);
  151. !
  152. .inline vis_faligndata,16
  153. std %o0,[%sp+0x48]
  154. ldd [%sp+0x48],%f4
  155. std %o2,[%sp+0x48]
  156. ldd [%sp+0x48],%f10
  157. faligndata %f4,%f10,%f0
  158. .end
  159. !--------------------------------------------------------------------
  160. ! Partitioned comparison instructions
  161. !
  162. ! int vis_fcmple16(double /*frs1*/, double /*frs2*/);
  163. !
  164. .inline vis_fcmple16,16
  165. std %o0,[%sp+0x48]
  166. ldd [%sp+0x48],%f4
  167. std %o2,[%sp+0x48]
  168. ldd [%sp+0x48],%f10
  169. fcmple16 %f4,%f10,%o0
  170. .end
  171. !
  172. ! int vis_fcmpne16(double /*frs1*/, double /*frs2*/);
  173. !
  174. .inline vis_fcmpne16,16
  175. std %o0,[%sp+0x48]
  176. ldd [%sp+0x48],%f4
  177. std %o2,[%sp+0x48]
  178. ldd [%sp+0x48],%f10
  179. fcmpne16 %f4,%f10,%o0
  180. .end
  181. !
  182. ! int vis_fcmple32(double /*frs1*/, double /*frs2*/);
  183. !
  184. .inline vis_fcmple32,16
  185. std %o0,[%sp+0x48]
  186. ldd [%sp+0x48],%f4
  187. std %o2,[%sp+0x48]
  188. ldd [%sp+0x48],%f10
  189. fcmple32 %f4,%f10,%o0
  190. .end
  191. !
  192. ! int vis_fcmpne32(double /*frs1*/, double /*frs2*/);
  193. !
  194. .inline vis_fcmpne32,16
  195. std %o0,[%sp+0x48]
  196. ldd [%sp+0x48],%f4
  197. std %o2,[%sp+0x48]
  198. ldd [%sp+0x48],%f10
  199. fcmpne32 %f4,%f10,%o0
  200. .end
  201. !
  202. ! int vis_fcmpgt16(double /*frs1*/, double /*frs2*/);
  203. !
  204. .inline vis_fcmpgt16,16
  205. std %o0,[%sp+0x48]
  206. ldd [%sp+0x48],%f4
  207. std %o2,[%sp+0x48]
  208. ldd [%sp+0x48],%f10
  209. fcmpgt16 %f4,%f10,%o0
  210. .end
  211. !
  212. ! int vis_fcmpeq16(double /*frs1*/, double /*frs2*/);
  213. !
  214. .inline vis_fcmpeq16,16
  215. std %o0,[%sp+0x48]
  216. ldd [%sp+0x48],%f4
  217. std %o2,[%sp+0x48]
  218. ldd [%sp+0x48],%f10
  219. fcmpeq16 %f4,%f10,%o0
  220. .end
  221. !
  222. ! int vis_fcmpgt32(double /*frs1*/, double /*frs2*/);
  223. !
  224. .inline vis_fcmpgt32,16
  225. std %o0,[%sp+0x48]
  226. ldd [%sp+0x48],%f4
  227. std %o2,[%sp+0x48]
  228. ldd [%sp+0x48],%f10
  229. fcmpgt32 %f4,%f10,%o0
  230. .end
  231. !
  232. ! int vis_fcmpeq32(double /*frs1*/, double /*frs2*/);
  233. !
  234. .inline vis_fcmpeq32,16
  235. std %o0,[%sp+0x48]
  236. ldd [%sp+0x48],%f4
  237. std %o2,[%sp+0x48]
  238. ldd [%sp+0x48],%f10
  239. fcmpeq32 %f4,%f10,%o0
  240. .end
  241. !--------------------------------------------------------------------
  242. ! Partitioned arithmetic
  243. !
  244. ! double vis_fmul8x16(float /*frs1*/, double /*frs2*/);
  245. !
  246. .inline vis_fmul8x16,12
  247. st %o0,[%sp+0x44]
  248. ld [%sp+0x44],%f4
  249. st %o1,[%sp+0x48]
  250. st %o2,[%sp+0x4c]
  251. ldd [%sp+0x48],%f10
  252. fmul8x16 %f4,%f10,%f0
  253. .end
  254. !
  255. ! double vis_fmul8x16_dummy(float /*frs1*/, int /*dummy*/, double /*frs2*/);
  256. !
  257. .inline vis_fmul8x16_dummy,16
  258. st %o0,[%sp+0x44]
  259. ld [%sp+0x44],%f4
  260. std %o2,[%sp+0x48]
  261. ldd [%sp+0x48],%f10
  262. fmul8x16 %f4,%f10,%f0
  263. .end
  264. !
  265. ! double vis_fmul8x16au(float /*frs1*/, float /*frs2*/);
  266. !
  267. .inline vis_fmul8x16au,8
  268. st %o0,[%sp+0x48]
  269. ld [%sp+0x48],%f4
  270. st %o1,[%sp+0x48]
  271. ld [%sp+0x48],%f10
  272. fmul8x16au %f4,%f10,%f0
  273. .end
  274. !
  275. ! double vis_fmul8x16al(float /*frs1*/, float /*frs2*/);
  276. !
  277. .inline vis_fmul8x16al,8
  278. st %o0,[%sp+0x44]
  279. ld [%sp+0x44],%f4
  280. st %o1,[%sp+0x48]
  281. ld [%sp+0x48],%f10
  282. fmul8x16al %f4,%f10,%f0
  283. .end
  284. !
  285. ! double vis_fmul8sux16(double /*frs1*/, double /*frs2*/);
  286. !
  287. .inline vis_fmul8sux16,16
  288. std %o0,[%sp+0x48]
  289. ldd [%sp+0x48],%f4
  290. std %o2,[%sp+0x48]
  291. ldd [%sp+0x48],%f10
  292. fmul8sux16 %f4,%f10,%f0
  293. .end
  294. !
  295. ! double vis_fmul8ulx16(double /*frs1*/, double /*frs2*/);
  296. !
  297. .inline vis_fmul8ulx16,16
  298. std %o0,[%sp+0x48]
  299. ldd [%sp+0x48],%f4
  300. std %o2,[%sp+0x48]
  301. ldd [%sp+0x48],%f10
  302. fmul8ulx16 %f4,%f10,%f0
  303. .end
  304. !
  305. ! double vis_fmuld8sux16(float /*frs1*/, float /*frs2*/);
  306. !
  307. .inline vis_fmuld8sux16,8
  308. st %o0,[%sp+0x48]
  309. ld [%sp+0x48],%f4
  310. st %o1,[%sp+0x48]
  311. ld [%sp+0x48],%f10
  312. fmuld8sux16 %f4,%f10,%f0
  313. .end
  314. !
  315. ! double vis_fmuld8ulx16(float /*frs1*/, float /*frs2*/);
  316. !
  317. .inline vis_fmuld8ulx16,8
  318. st %o0,[%sp+0x48]
  319. ld [%sp+0x48],%f4
  320. st %o1,[%sp+0x48]
  321. ld [%sp+0x48],%f10
  322. fmuld8ulx16 %f4,%f10,%f0
  323. .end
  324. !
  325. ! double vis_fpadd16(double /*frs1*/, double /*frs2*/);
  326. !
  327. .inline vis_fpadd16,16
  328. std %o0,[%sp+0x40]
  329. ldd [%sp+0x40],%f4
  330. std %o2,[%sp+0x48]
  331. ldd [%sp+0x48],%f10
  332. fpadd16 %f4,%f10,%f0
  333. .end
  334. !
  335. ! float vis_fpadd16s(float /*frs1*/, float /*frs2*/);
  336. !
  337. .inline vis_fpadd16s,8
  338. st %o0,[%sp+0x48]
  339. ld [%sp+0x48],%f4
  340. st %o1,[%sp+0x48]
  341. ld [%sp+0x48],%f10
  342. fpadd16s %f4,%f10,%f0
  343. .end
  344. !
  345. ! double vis_fpadd32(double /*frs1*/, double /*frs2*/);
  346. !
  347. .inline vis_fpadd32,16
  348. std %o0,[%sp+0x48]
  349. ldd [%sp+0x48],%f4
  350. std %o2,[%sp+0x48]
  351. ldd [%sp+0x48],%f10
  352. fpadd32 %f4,%f10,%f0
  353. .end
  354. !
  355. ! float vis_fpadd32s(float /*frs1*/, float /*frs2*/);
  356. !
  357. .inline vis_fpadd32s,8
  358. st %o0,[%sp+0x48]
  359. ld [%sp+0x48],%f4
  360. st %o1,[%sp+0x48]
  361. ld [%sp+0x48],%f10
  362. fpadd32s %f4,%f10,%f0
  363. .end
  364. !
  365. ! double vis_fpsub16(double /*frs1*/, double /*frs2*/);
  366. !
  367. .inline vis_fpsub16,16
  368. std %o0,[%sp+0x48]
  369. ldd [%sp+0x48],%f4
  370. std %o2,[%sp+0x48]
  371. ldd [%sp+0x48],%f10
  372. fpsub16 %f4,%f10,%f0
  373. .end
  374. !
  375. ! float vis_fpsub16s(float /*frs1*/, float /*frs2*/);
  376. !
  377. .inline vis_fpsub16s,8
  378. st %o0,[%sp+0x48]
  379. ld [%sp+0x48],%f4
  380. st %o1,[%sp+0x48]
  381. ld [%sp+0x48],%f10
  382. fpsub16s %f4,%f10,%f0
  383. .end
  384. !
  385. ! double vis_fpsub32(double /*frs1*/, double /*frs2*/);
  386. !
  387. .inline vis_fpsub32,16
  388. std %o0,[%sp+0x48]
  389. ldd [%sp+0x48],%f4
  390. std %o2,[%sp+0x48]
  391. ldd [%sp+0x48],%f10
  392. fpsub32 %f4,%f10,%f0
  393. .end
  394. !
  395. ! float vis_fpsub32s(float /*frs1*/, float /*frs2*/);
  396. !
  397. .inline vis_fpsub32s,8
  398. st %o0,[%sp+0x48]
  399. ld [%sp+0x48],%f4
  400. st %o1,[%sp+0x48]
  401. ld [%sp+0x48],%f10
  402. fpsub32s %f4,%f10,%f0
  403. .end
  404. !--------------------------------------------------------------------
  405. ! Pixel packing
  406. !
  407. ! float vis_fpack16(double /*frs2*/);
  408. !
  409. .inline vis_fpack16,8
  410. std %o0,[%sp+0x48]
  411. ldd [%sp+0x48],%f4
  412. fpack16 %f4,%f0
  413. .end
  414. !
  415. ! double vis_fpack16_pair(double /*frs2*/, double /*frs2*/);
  416. !
  417. .inline vis_fpack16_pair,16
  418. std %o0,[%sp+0x48]
  419. ldd [%sp+0x48],%f4
  420. std %o2,[%sp+0x48]
  421. ldd [%sp+0x48],%f10
  422. fpack16 %f4,%f0
  423. fpack16 %f10,%f1
  424. .end
  425. !
  426. ! void vis_st2_fpack16(double, double, double *)
  427. !
  428. .inline vis_st2_fpack16,20
  429. std %o0,[%sp+0x48]
  430. ldd [%sp+0x48],%f4
  431. std %o2,[%sp+0x48]
  432. ldd [%sp+0x48],%f10
  433. fpack16 %f4,%f0
  434. fpack16 %f10,%f1
  435. st %f0,[%o4+0]
  436. st %f1,[%o4+4]
  437. .end
  438. !
  439. ! void vis_std_fpack16(double, double, double *)
  440. !
  441. .inline vis_std_fpack16,20
  442. std %o0,[%sp+0x48]
  443. ldd [%sp+0x48],%f4
  444. std %o2,[%sp+0x48]
  445. ldd [%sp+0x48],%f10
  446. fpack16 %f4,%f0
  447. fpack16 %f10,%f1
  448. std %f0,[%o4]
  449. .end
  450. !
  451. ! void vis_st2_fpackfix(double, double, double *)
  452. !
  453. .inline vis_st2_fpackfix,20
  454. std %o0,[%sp+0x48]
  455. ldd [%sp+0x48],%f4
  456. std %o2,[%sp+0x48]
  457. ldd [%sp+0x48],%f10
  458. fpackfix %f4,%f0
  459. fpackfix %f10,%f1
  460. st %f0,[%o4+0]
  461. st %f1,[%o4+4]
  462. .end
  463. !
  464. ! double vis_fpack16_to_hi(double /*frs1*/, double /*frs2*/);
  465. !
  466. .inline vis_fpack16_to_hi,16
  467. std %o0,[%sp+0x48]
  468. ldd [%sp+0x48],%f0
  469. std %o2,[%sp+0x48]
  470. ldd [%sp+0x48],%f4
  471. fpack16 %f4,%f0
  472. .end
  473. ! double vis_fpack16_to_lo(double /*frs1*/, double /*frs2*/);
  474. !
  475. .inline vis_fpack16_to_lo,16
  476. std %o0,[%sp+0x48]
  477. ldd [%sp+0x48],%f0
  478. std %o2,[%sp+0x48]
  479. ldd [%sp+0x48],%f4
  480. fpack16 %f4,%f3
  481. fmovs %f3,%f1 /* without this, optimizer goes wrong */
  482. .end
  483. !
  484. ! double vis_fpack32(double /*frs1*/, double /*frs2*/);
  485. !
  486. .inline vis_fpack32,16
  487. std %o0,[%sp+0x48]
  488. ldd [%sp+0x48],%f4
  489. std %o2,[%sp+0x48]
  490. ldd [%sp+0x48],%f10
  491. fpack32 %f4,%f10,%f0
  492. .end
  493. !
  494. ! float vis_fpackfix(double /*frs2*/);
  495. !
  496. .inline vis_fpackfix,8
  497. std %o0,[%sp+0x48]
  498. ldd [%sp+0x48],%f4
  499. fpackfix %f4,%f0
  500. .end
  501. !
  502. ! double vis_fpackfix_pair(double /*frs2*/, double /*frs2*/);
  503. !
  504. .inline vis_fpackfix_pair,16
  505. std %o0,[%sp+0x48]
  506. ldd [%sp+0x48],%f4
  507. std %o2,[%sp+0x48]
  508. ldd [%sp+0x48],%f6
  509. fpackfix %f4,%f0
  510. fpackfix %f6,%f1
  511. .end
  512. !--------------------------------------------------------------------
  513. ! Motion estimation
  514. !
  515. ! double vis_pdist(double /*frs1*/, double /*frs2*/, double /*frd*/);
  516. !
  517. .inline vis_pdist,24
  518. std %o4,[%sp+0x48]
  519. ldd [%sp+0x48],%f0
  520. std %o0,[%sp+0x48]
  521. ldd [%sp+0x48],%f4
  522. std %o2,[%sp+0x48]
  523. ldd [%sp+0x48],%f10
  524. pdist %f4,%f10,%f0
  525. .end
  526. !--------------------------------------------------------------------
  527. ! Channel merging
  528. !
  529. ! double vis_fpmerge(float /*frs1*/, float /*frs2*/);
  530. !
  531. .inline vis_fpmerge,8
  532. st %o0,[%sp+0x48]
  533. ld [%sp+0x48],%f4
  534. st %o1,[%sp+0x48]
  535. ld [%sp+0x48],%f10
  536. fpmerge %f4,%f10,%f0
  537. .end
  538. !--------------------------------------------------------------------
  539. ! Pixel expansion
  540. !
  541. ! double vis_fexpand(float /*frs2*/);
  542. !
  543. .inline vis_fexpand,4
  544. st %o0,[%sp+0x48]
  545. ld [%sp+0x48],%f4
  546. fexpand %f4,%f0
  547. .end
  548. ! double vis_fexpand_hi(double /*frs2*/);
  549. !
  550. .inline vis_fexpand_hi,8
  551. std %o0,[%sp+0x48]
  552. ldd [%sp+0x48],%f4
  553. fexpand %f4,%f0
  554. .end
  555. ! double vis_fexpand_lo(double /*frs2*/);
  556. !
  557. .inline vis_fexpand_lo,8
  558. std %o0,[%sp+0x48]
  559. ldd [%sp+0x48],%f4
  560. fmovs %f5, %f2
  561. fexpand %f2,%f0
  562. .end
  563. !--------------------------------------------------------------------
  564. ! Bitwise logical operations
  565. !
  566. ! double vis_fnor(double /*frs1*/, double /*frs2*/);
  567. !
  568. .inline vis_fnor,16
  569. std %o0,[%sp+0x48]
  570. ldd [%sp+0x48],%f4
  571. std %o2,[%sp+0x48]
  572. ldd [%sp+0x48],%f10
  573. fnor %f4,%f10,%f0
  574. .end
  575. !
  576. ! float vis_fnors(float /*frs1*/, float /*frs2*/);
  577. !
  578. .inline vis_fnors,8
  579. st %o0,[%sp+0x48]
  580. ld [%sp+0x48],%f4
  581. st %o1,[%sp+0x48]
  582. ld [%sp+0x48],%f10
  583. fnors %f4,%f10,%f0
  584. .end
  585. !
  586. ! double vis_fandnot(double /*frs1*/, double /*frs2*/);
  587. !
  588. .inline vis_fandnot,16
  589. std %o0,[%sp+0x48]
  590. ldd [%sp+0x48],%f4
  591. std %o2,[%sp+0x48]
  592. ldd [%sp+0x48],%f10
  593. fandnot1 %f4,%f10,%f0
  594. .end
  595. !
  596. ! float vis_fandnots(float /*frs1*/, float /*frs2*/);
  597. !
  598. .inline vis_fandnots,8
  599. st %o0,[%sp+0x48]
  600. ld [%sp+0x48],%f4
  601. st %o1,[%sp+0x48]
  602. ld [%sp+0x48],%f10
  603. fandnot1s %f4,%f10,%f0
  604. .end
  605. !
  606. ! double vis_fnot(double /*frs1*/);
  607. !
  608. .inline vis_fnot,8
  609. std %o0,[%sp+0x48]
  610. ldd [%sp+0x48],%f4
  611. fnot1 %f4,%f0
  612. .end
  613. !
  614. ! float vis_fnots(float /*frs1*/);
  615. !
  616. .inline vis_fnots,4
  617. st %o0,[%sp+0x48]
  618. ld [%sp+0x48],%f4
  619. fnot1s %f4,%f0
  620. .end
  621. !
  622. ! double vis_fxor(double /*frs1*/, double /*frs2*/);
  623. !
  624. .inline vis_fxor,16
  625. std %o0,[%sp+0x48]
  626. ldd [%sp+0x48],%f4
  627. std %o2,[%sp+0x48]
  628. ldd [%sp+0x48],%f10
  629. fxor %f4,%f10,%f0
  630. .end
  631. !
  632. ! float vis_fxors(float /*frs1*/, float /*frs2*/);
  633. !
  634. .inline vis_fxors,8
  635. st %o0,[%sp+0x48]
  636. ld [%sp+0x48],%f4
  637. st %o1,[%sp+0x48]
  638. ld [%sp+0x48],%f10
  639. fxors %f4,%f10,%f0
  640. .end
  641. !
  642. ! double vis_fnand(double /*frs1*/, double /*frs2*/);
  643. !
  644. .inline vis_fnand,16
  645. std %o0,[%sp+0x48]
  646. ldd [%sp+0x48],%f4
  647. std %o2,[%sp+0x48]
  648. ldd [%sp+0x48],%f10
  649. fnand %f4,%f10,%f0
  650. .end
  651. !
  652. ! float vis_fnands(float /*frs1*/, float /*frs2*/);
  653. !
  654. .inline vis_fnands,8
  655. st %o0,[%sp+0x48]
  656. ld [%sp+0x48],%f4
  657. st %o1,[%sp+0x48]
  658. ld [%sp+0x48],%f10
  659. fnands %f4,%f10,%f0
  660. .end
  661. !
  662. ! double vis_fand(double /*frs1*/, double /*frs2*/);
  663. !
  664. .inline vis_fand,16
  665. std %o0,[%sp+0x48]
  666. ldd [%sp+0x48],%f4
  667. std %o2,[%sp+0x48]
  668. ldd [%sp+0x48],%f10
  669. fand %f4,%f10,%f0
  670. .end
  671. !
  672. ! float vis_fands(float /*frs1*/, float /*frs2*/);
  673. !
  674. .inline vis_fands,8
  675. st %o0,[%sp+0x48]
  676. ld [%sp+0x48],%f4
  677. st %o1,[%sp+0x48]
  678. ld [%sp+0x48],%f10
  679. fands %f4,%f10,%f0
  680. .end
  681. !
  682. ! double vis_fxnor(double /*frs1*/, double /*frs2*/);
  683. !
  684. .inline vis_fxnor,16
  685. std %o0,[%sp+0x48]
  686. ldd [%sp+0x48],%f4
  687. std %o2,[%sp+0x48]
  688. ldd [%sp+0x48],%f10
  689. fxnor %f4,%f10,%f0
  690. .end
  691. !
  692. ! float vis_fxnors(float /*frs1*/, float /*frs2*/);
  693. !
  694. .inline vis_fxnors,8
  695. st %o0,[%sp+0x48]
  696. ld [%sp+0x48],%f4
  697. st %o1,[%sp+0x48]
  698. ld [%sp+0x48],%f10
  699. fxnors %f4,%f10,%f0
  700. .end
  701. !
  702. ! double vis_fsrc(double /*frs1*/);
  703. !
  704. .inline vis_fsrc,8
  705. std %o0,[%sp+0x48]
  706. ldd [%sp+0x48],%f4
  707. fsrc1 %f4,%f0
  708. .end
  709. !
  710. ! float vis_fsrcs(float /*frs1*/);
  711. !
  712. .inline vis_fsrcs,4
  713. st %o0,[%sp+0x48]
  714. ld [%sp+0x48],%f4
  715. fsrc1s %f4,%f0
  716. .end
  717. !
  718. ! double vis_fornot(double /*frs1*/, double /*frs2*/);
  719. !
  720. .inline vis_fornot,16
  721. std %o0,[%sp+0x48]
  722. ldd [%sp+0x48],%f4
  723. std %o2,[%sp+0x48]
  724. ldd [%sp+0x48],%f10
  725. fornot1 %f4,%f10,%f0
  726. .end
  727. !
  728. ! float vis_fornots(float /*frs1*/, float /*frs2*/);
  729. !
  730. .inline vis_fornots,8
  731. st %o0,[%sp+0x48]
  732. ld [%sp+0x48],%f4
  733. st %o1,[%sp+0x48]
  734. ld [%sp+0x48],%f10
  735. fornot1s %f4,%f10,%f0
  736. .end
  737. !
  738. ! double vis_for(double /*frs1*/, double /*frs2*/);
  739. !
  740. .inline vis_for,16
  741. std %o0,[%sp+0x48]
  742. ldd [%sp+0x48],%f4
  743. std %o2,[%sp+0x48]
  744. ldd [%sp+0x48],%f10
  745. for %f4,%f10,%f0
  746. .end
  747. !
  748. ! float vis_fors(float /*frs1*/, float /*frs2*/);
  749. !
  750. .inline vis_fors,8
  751. st %o0,[%sp+0x48]
  752. ld [%sp+0x48],%f4
  753. st %o1,[%sp+0x48]
  754. ld [%sp+0x48],%f10
  755. fors %f4,%f10,%f0
  756. .end
  757. !
  758. ! double vis_fzero(/* void */)
  759. !
  760. .inline vis_fzero,0
  761. fzero %f0
  762. .end
  763. !
  764. ! float vis_fzeros(/* void */)
  765. !
  766. .inline vis_fzeros,0
  767. fzeros %f0
  768. .end
  769. !
  770. ! double vis_fone(/* void */)
  771. !
  772. .inline vis_fone,0
  773. fone %f0
  774. .end
  775. !
  776. ! float vis_fones(/* void */)
  777. !
  778. .inline vis_fones,0
  779. fones %f0
  780. .end
  781. !--------------------------------------------------------------------
  782. ! Partial store instructions
  783. !
  784. ! vis_stdfa_ASI_PST8P(double frd, void *rs1, int rmask)
  785. !
  786. .inline vis_stdfa_ASI_PST8P,16
  787. std %o0,[%sp+0x48]
  788. ldd [%sp+0x48],%f4
  789. stda %f4,[%o2]%o3,0xc0 ! ASI_PST8_P
  790. .end
  791. !
  792. ! vis_stdfa_ASI_PST8PL(double frd, void *rs1, int rmask)
  793. !
  794. .inline vis_stdfa_ASI_PST8PL,16
  795. std %o0,[%sp+0x48]
  796. ldd [%sp+0x48],%f4
  797. stda %f4,[%o2]%o3,0xc8 ! ASI_PST8_PL
  798. .end
  799. !
  800. ! vis_stdfa_ASI_PST8P_int_pair(void *rs1, void *rs2, void *rs3, int rmask);
  801. !
  802. .inline vis_stdfa_ASI_PST8P_int_pair,16
  803. ld [%o0],%f4
  804. ld [%o1],%f5
  805. stda %f4,[%o2]%o3,0xc0 ! ASI_PST8_P
  806. .end
  807. !
  808. ! vis_stdfa_ASI_PST8S(double frd, void *rs1, int rmask)
  809. !
  810. .inline vis_stdfa_ASI_PST8S,16
  811. std %o0,[%sp+0x48]
  812. ldd [%sp+0x48],%f4
  813. stda %f4,[%o2]%o3,0xc1 ! ASI_PST8_S
  814. .end
  815. !
  816. ! vis_stdfa_ASI_PST16P(double frd, void *rs1, int rmask)
  817. !
  818. .inline vis_stdfa_ASI_PST16P,16
  819. std %o0,[%sp+0x48]
  820. ldd [%sp+0x48],%f4
  821. stda %f4,[%o2]%o3,0xc2 ! ASI_PST16_P
  822. .end
  823. !
  824. ! vis_stdfa_ASI_PST16S(double frd, void *rs1, int rmask)
  825. !
  826. .inline vis_stdfa_ASI_PST16S,16
  827. std %o0,[%sp+0x48]
  828. ldd [%sp+0x48],%f4
  829. stda %f4,[%o2]%o3,0xc3 ! ASI_PST16_S
  830. .end
  831. !
  832. ! vis_stdfa_ASI_PST32P(double frd, void *rs1, int rmask)
  833. !
  834. .inline vis_stdfa_ASI_PST32P,16
  835. std %o0,[%sp+0x48]
  836. ldd [%sp+0x48],%f4
  837. stda %f4,[%o2]%o3,0xc4 ! ASI_PST32_P
  838. .end
  839. !
  840. ! vis_stdfa_ASI_PST32S(double frd, void *rs1, int rmask)
  841. !
  842. .inline vis_stdfa_ASI_PST32S,16
  843. std %o0,[%sp+0x48]
  844. ldd [%sp+0x48],%f4
  845. stda %f4,[%o2]%o3,0xc5 ! ASI_PST32_S
  846. .end
  847. !--------------------------------------------------------------------
  848. ! Short store instructions
  849. !
  850. ! vis_stdfa_ASI_FL8P(double frd, void *rs1)
  851. !
  852. .inline vis_stdfa_ASI_FL8P,12
  853. std %o0,[%sp+0x48]
  854. ldd [%sp+0x48],%f4
  855. stda %f4,[%o2]0xd0 ! ASI_FL8_P
  856. .end
  857. !
  858. ! vis_stdfa_ASI_FL8P_index(double frd, void *rs1, long index)
  859. !
  860. .inline vis_stdfa_ASI_FL8P_index,16
  861. std %o0,[%sp+0x48]
  862. ldd [%sp+0x48],%f4
  863. stda %f4,[%o2+%o3]0xd0 ! ASI_FL8_P
  864. .end
  865. !
  866. ! vis_stdfa_ASI_FL8S(double frd, void *rs1)
  867. !
  868. .inline vis_stdfa_ASI_FL8S,12
  869. std %o0,[%sp+0x48]
  870. ldd [%sp+0x48],%f4
  871. stda %f4,[%o2]0xd1 ! ASI_FL8_S
  872. .end
  873. !
  874. ! vis_stdfa_ASI_FL16P(double frd, void *rs1)
  875. !
  876. .inline vis_stdfa_ASI_FL16P,12
  877. std %o0,[%sp+0x48]
  878. ldd [%sp+0x48],%f4
  879. stda %f4,[%o2]0xd2 ! ASI_FL16_P
  880. .end
  881. !
  882. ! vis_stdfa_ASI_FL16P_index(double frd, void *rs1, long index)
  883. !
  884. .inline vis_stdfa_ASI_FL16P_index,16
  885. std %o0,[%sp+0x48]
  886. ldd [%sp+0x48],%f4
  887. stda %f4,[%o2+%o3]0xd2 ! ASI_FL16_P
  888. .end
  889. !
  890. ! vis_stdfa_ASI_FL16S(double frd, void *rs1)
  891. !
  892. .inline vis_stdfa_ASI_FL16S,12
  893. std %o0,[%sp+0x48]
  894. ldd [%sp+0x48],%f4
  895. stda %f4,[%o2]0xd3 ! ASI_FL16_S
  896. .end
  897. !
  898. ! vis_stdfa_ASI_FL8PL(double frd, void *rs1)
  899. !
  900. .inline vis_stdfa_ASI_FL8PL,12
  901. std %o0,[%sp+0x48]
  902. ldd [%sp+0x48],%f4
  903. stda %f4,[%o2]0xd8 ! ASI_FL8_PL
  904. .end
  905. !
  906. ! vis_stdfa_ASI_FL8SL(double frd, void *rs1)
  907. !
  908. .inline vis_stdfa_ASI_FL8SL,12
  909. std %o0,[%sp+0x48]
  910. ldd [%sp+0x48],%f4
  911. stda %f4,[%o2]0xd9 ! ASI_FL8_SL
  912. .end
  913. !
  914. ! vis_stdfa_ASI_FL16PL(double frd, void *rs1)
  915. !
  916. .inline vis_stdfa_ASI_FL16PL,12
  917. std %o0,[%sp+0x48]
  918. ldd [%sp+0x48],%f4
  919. stda %f4,[%o2]0xda ! ASI_FL16_PL
  920. .end
  921. !
  922. ! vis_stdfa_ASI_FL16SL(double frd, void *rs1)
  923. !
  924. .inline vis_stdfa_ASI_FL16SL,12
  925. std %o0,[%sp+0x48]
  926. ldd [%sp+0x48],%f4
  927. stda %f4,[%o2]0xdb ! ASI_FL16_SL
  928. .end
  929. !--------------------------------------------------------------------
  930. ! Short load instructions
  931. !
  932. ! double vis_lddfa_ASI_FL8P(void *rs1)
  933. !
  934. .inline vis_lddfa_ASI_FL8P,4
  935. ldda [%o0]0xd0,%f4 ! ASI_FL8_P
  936. fmovd %f4,%f0 ! Compiler can clean this up
  937. .end
  938. !
  939. ! double vis_lddfa_ASI_FL8P_index(void *rs1, long index)
  940. !
  941. .inline vis_lddfa_ASI_FL8P_index,8
  942. ldda [%o0+%o1]0xd0,%f4
  943. fmovd %f4,%f0
  944. .end
  945. !
  946. ! double vis_lddfa_ASI_FL8P_hi(void *rs1, unsigned int index)
  947. !
  948. .inline vis_lddfa_ASI_FL8P_hi,8
  949. sra %o1,16,%o1
  950. ldda [%o0+%o1]0xd0,%f4
  951. fmovd %f4,%f0
  952. .end
  953. !
  954. ! double vis_lddfa_ASI_FL8P_lo(void *rs1, unsigned int index)
  955. !
  956. .inline vis_lddfa_ASI_FL8P_lo,8
  957. sll %o1,16,%o1
  958. sra %o1,16,%o1
  959. ldda [%o0+%o1]0xd0,%f4
  960. fmovd %f4,%f0
  961. .end
  962. !
  963. ! double vis_lddfa_ASI_FL8S(void *rs1)
  964. !
  965. .inline vis_lddfa_ASI_FL8S,4
  966. ldda [%o0]0xd1,%f4 ! ASI_FL8_S
  967. fmovd %f4,%f0
  968. .end
  969. !
  970. ! double vis_lddfa_ASI_FL16P(void *rs1)
  971. !
  972. .inline vis_lddfa_ASI_FL16P,4
  973. ldda [%o0]0xd2,%f4 ! ASI_FL16_P
  974. fmovd %f4,%f0
  975. .end
  976. !
  977. ! double vis_lddfa_ASI_FL16P_index(void *rs1, long index)
  978. !
  979. .inline vis_lddfa_ASI_FL16P_index,8
  980. ldda [%o0+%o1]0xd2,%f4 ! ASI_FL16_P
  981. fmovd %f4,%f0
  982. .end
  983. !
  984. ! double vis_lddfa_ASI_FL16S(void *rs1)
  985. !
  986. .inline vis_lddfa_ASI_FL16S,4
  987. ldda [%o0]0xd3,%f4 ! ASI_FL16_S
  988. fmovd %f4,%f0
  989. .end
  990. !
  991. ! double vis_lddfa_ASI_FL8PL(void *rs1)
  992. !
  993. .inline vis_lddfa_ASI_FL8PL,4
  994. ldda [%o0]0xd8,%f4 ! ASI_FL8_PL
  995. fmovd %f4,%f0
  996. .end
  997. !
  998. ! double vis_lddfa_ASI_FL8PL_index(void *rs1, long index)
  999. !
  1000. .inline vis_lddfa_ASI_FL8PL_index,8
  1001. ldda [%o0+%o1]0xd8,%f4 ! ASI_FL8_PL
  1002. fmovd %f4,%f0
  1003. .end
  1004. !
  1005. ! double vis_lddfa_ASI_FL8SL(void *rs1)
  1006. !
  1007. .inline vis_lddfa_ASI_FL8SL,4
  1008. ldda [%o0]0xd9,%f4 ! ASI_FL8_SL
  1009. fmovd %f4,%f0
  1010. .end
  1011. !
  1012. ! double vis_lddfa_ASI_FL16PL(void *rs1)
  1013. !
  1014. .inline vis_lddfa_ASI_FL16PL,4
  1015. ldda [%o0]0xda,%f4 ! ASI_FL16_PL
  1016. fmovd %f4,%f0
  1017. .end
  1018. !
  1019. ! double vis_lddfa_ASI_FL16PL_index(void *rs1, long index)
  1020. !
  1021. .inline vis_lddfa_ASI_FL16PL_index,8
  1022. ldda [%o0+%o1]0xda,%f4 ! ASI_FL16_PL
  1023. fmovd %f4,%f0
  1024. .end
  1025. !
  1026. ! double vis_lddfa_ASI_FL16SL(void *rs1)
  1027. !
  1028. .inline vis_lddfa_ASI_FL16SL,4
  1029. ldda [%o0]0xdb,%f4 ! ASI_FL16_SL
  1030. fmovd %f4,%f0
  1031. .end
  1032. !--------------------------------------------------------------------
  1033. ! Graphics status register
  1034. !
  1035. ! unsigned int vis_read_gsr(void)
  1036. !
  1037. .inline vis_read_gsr,0
  1038. rd %gsr,%o0
  1039. .end
  1040. !
  1041. ! void vis_write_gsr(unsigned int /* GSR */)
  1042. !
  1043. .inline vis_write_gsr,4
  1044. wr %g0,%o0,%gsr
  1045. .end
  1046. !--------------------------------------------------------------------
  1047. ! Voxel texture mapping
  1048. !
  1049. ! unsigned long vis_array8(unsigned long long /*rs1 */, int /*rs2*/)
  1050. !
  1051. .inline vis_array8,12
  1052. sllx %o0,32,%o0
  1053. srl %o1,0,%o1 ! clear the most significant 32 bits of %o1
  1054. or %o0,%o1,%o3 ! join %o0 and %o1 into %o3
  1055. array8 %o3,%o2,%o0
  1056. .end
  1057. !
  1058. ! unsigned long vis_array16(unsigned long long /*rs1*/, int /*rs2*/)
  1059. !
  1060. .inline vis_array16,12
  1061. sllx %o0,32,%o0
  1062. srl %o1,0,%o1 ! clear the most significant 32 bits of %o1
  1063. or %o0,%o1,%o3 ! join %o0 and %o1 into %o3
  1064. array16 %o3,%o2,%o0
  1065. .end
  1066. !
  1067. ! unsigned long vis_array32(unsigned long long /*rs1*/, int /*rs2*/)
  1068. !
  1069. .inline vis_array32,12
  1070. sllx %o0,32,%o0
  1071. srl %o1,0,%o1 ! clear the most significant 32 bits of %o1
  1072. or %o0,%o1,%o3 ! join %o0 and %o1 into %o3
  1073. array32 %o3,%o2,%o0
  1074. .end
  1075. !--------------------------------------------------------------------
  1076. ! Register aliasing and type casts
  1077. !
  1078. ! float vis_read_hi(double /* frs1 */);
  1079. !
  1080. .inline vis_read_hi,8
  1081. std %o0,[%sp+0x48] ! store double frs1
  1082. ldd [%sp+0x48],%f0 ! %f0:%f1 = double frs1; return %f0;
  1083. .end
  1084. !
  1085. ! float vis_read_lo(double /* frs1 */);
  1086. !
  1087. .inline vis_read_lo,8
  1088. std %o0,[%sp+0x48] ! store double frs1
  1089. ldd [%sp+0x48],%f0 ! %f0:%f1 = double frs1;
  1090. fmovs %f1,%f0 ! %f0 = low word (frs1); return %f0;
  1091. .end
  1092. !
  1093. ! double vis_write_hi(double /* frs1 */, float /* frs2 */);
  1094. !
  1095. .inline vis_write_hi,12
  1096. std %o0,[%sp+0x48] ! store double frs1;
  1097. ldd [%sp+0x48],%f0 ! %f0:%f1 = double frs1;
  1098. st %o2,[%sp+0x44] ! store float frs2;
  1099. ld [%sp+0x44],%f2 ! %f2 = float frs2;
  1100. fmovs %f2,%f0 ! %f0 = float frs2; return %f0:f1;
  1101. .end
  1102. !
  1103. ! double vis_write_lo(double /* frs1 */, float /* frs2 */);
  1104. !
  1105. .inline vis_write_lo,12
  1106. std %o0,[%sp+0x48] ! store double frs1;
  1107. ldd [%sp+0x48],%f0 ! %f0:%f1 = double frs1;
  1108. st %o2,[%sp+0x44] ! store float frs2;
  1109. ld [%sp+0x44],%f2 ! %f2 = float frs2;
  1110. fmovs %f2,%f1 ! %f1 = float frs2; return %f0:f1;
  1111. .end
  1112. !
  1113. ! double vis_freg_pair(float /* frs1 */, float /* frs2 */);
  1114. !
  1115. .inline vis_freg_pair,8
  1116. st %o0,[%sp+0x48] ! store float frs1
  1117. ld [%sp+0x48],%f0
  1118. st %o1,[%sp+0x48] ! store float frs2
  1119. ld [%sp+0x48],%f1
  1120. .end
  1121. !
  1122. ! float vis_to_float(unsigned int /*value*/);
  1123. !
  1124. .inline vis_to_float,4
  1125. st %o0,[%sp+0x48]
  1126. ld [%sp+0x48],%f0
  1127. .end
  1128. !
  1129. ! double vis_to_double(unsigned int /*value1*/, unsigned int /*value2*/);
  1130. !
  1131. .inline vis_to_double,8
  1132. std %o0,[%sp+0x48]
  1133. ldd [%sp+0x48],%f0
  1134. .end
  1135. !
  1136. ! double vis_to_double_dup(unsigned int /*value*/);
  1137. !
  1138. .inline vis_to_double_dup,4
  1139. st %o0,[%sp+0x48]
  1140. ld [%sp+0x48],%f1
  1141. fmovs %f1,%f0 ! duplicate value
  1142. .end
  1143. !
  1144. ! double vis_ll_to_double(unsigned long long /*value*/);
  1145. !
  1146. .inline vis_ll_to_double,8
  1147. std %o0,[%sp+0x48]
  1148. ldd [%sp+0x48],%f0
  1149. .end
  1150. !--------------------------------------------------------------------
  1151. ! Address space identifier (ASI) register
  1152. !
  1153. ! unsigned int vis_read_asi(void)
  1154. !
  1155. .inline vis_read_asi,0
  1156. rd %asi,%o0
  1157. .end
  1158. !
  1159. ! void vis_write_asi(unsigned int /* ASI */)
  1160. !
  1161. .inline vis_write_asi,4
  1162. wr %g0,%o0,%asi
  1163. .end
  1164. !--------------------------------------------------------------------
  1165. ! Load/store from/into alternate space
  1166. !
  1167. ! float vis_ldfa_ASI_REG(void *rs1)
  1168. !
  1169. .inline vis_ldfa_ASI_REG,4
  1170. lda [%o0+0]%asi,%f4
  1171. fmovs %f4,%f0 ! Compiler can clean this up
  1172. .end
  1173. !
  1174. ! float vis_ldfa_ASI_P(void *rs1)
  1175. !
  1176. .inline vis_ldfa_ASI_P,4
  1177. lda [%o0]0x80,%f4 ! ASI_P
  1178. fmovs %f4,%f0 ! Compiler can clean this up
  1179. .end
  1180. !
  1181. ! float vis_ldfa_ASI_PL(void *rs1)
  1182. !
  1183. .inline vis_ldfa_ASI_PL,4
  1184. lda [%o0]0x88,%f4 ! ASI_PL
  1185. fmovs %f4,%f0 ! Compiler can clean this up
  1186. .end
  1187. !
  1188. ! double vis_lddfa_ASI_REG(void *rs1)
  1189. !
  1190. .inline vis_lddfa_ASI_REG,4
  1191. ldda [%o0+0]%asi,%f4
  1192. fmovd %f4,%f0 ! Compiler can clean this up
  1193. .end
  1194. !
  1195. ! double vis_lddfa_ASI_P(void *rs1)
  1196. !
  1197. .inline vis_lddfa_ASI_P,4
  1198. ldda [%o0]0x80,%f4 ! ASI_P
  1199. fmovd %f4,%f0 ! Compiler can clean this up
  1200. .end
  1201. !
  1202. ! double vis_lddfa_ASI_PL(void *rs1)
  1203. !
  1204. .inline vis_lddfa_ASI_PL,4
  1205. ldda [%o0]0x88,%f4 ! ASI_PL
  1206. fmovd %f4,%f0 ! Compiler can clean this up
  1207. .end
  1208. !
  1209. ! vis_stfa_ASI_REG(float frs, void *rs1)
  1210. !
  1211. .inline vis_stfa_ASI_REG,8
  1212. st %o0,[%sp+0x48]
  1213. ld [%sp+0x48],%f4
  1214. sta %f4,[%o1+0]%asi
  1215. .end
  1216. !
  1217. ! vis_stfa_ASI_P(float frs, void *rs1)
  1218. !
  1219. .inline vis_stfa_ASI_P,8
  1220. st %o0,[%sp+0x48]
  1221. ld [%sp+0x48],%f4
  1222. sta %f4,[%o1]0x80 ! ASI_P
  1223. .end
  1224. !
  1225. ! vis_stfa_ASI_PL(float frs, void *rs1)
  1226. !
  1227. .inline vis_stfa_ASI_PL,8
  1228. st %o0,[%sp+0x48]
  1229. ld [%sp+0x48],%f4
  1230. sta %f4,[%o1]0x88 ! ASI_PL
  1231. .end
  1232. !
  1233. ! vis_stdfa_ASI_REG(double frd, void *rs1)
  1234. !
  1235. .inline vis_stdfa_ASI_REG,12
  1236. std %o0,[%sp+0x48]
  1237. ldd [%sp+0x48],%f4
  1238. stda %f4,[%o2+0]%asi
  1239. .end
  1240. !
  1241. ! vis_stdfa_ASI_P(double frd, void *rs1)
  1242. !
  1243. .inline vis_stdfa_ASI_P,12
  1244. std %o0,[%sp+0x48]
  1245. ldd [%sp+0x48],%f4
  1246. stda %f4,[%o2]0x80 ! ASI_P
  1247. .end
  1248. !
  1249. ! vis_stdfa_ASI_PL(double frd, void *rs1)
  1250. !
  1251. .inline vis_stdfa_ASI_PL,12
  1252. std %o0,[%sp+0x48]
  1253. ldd [%sp+0x48],%f4
  1254. stda %f4,[%o2]0x88 ! ASI_PL
  1255. .end
  1256. !
  1257. ! unsigned short vis_lduha_ASI_REG(void *rs1)
  1258. !
  1259. .inline vis_lduha_ASI_REG,4
  1260. lduha [%o0+0]%asi,%o0
  1261. .end
  1262. !
  1263. ! unsigned short vis_lduha_ASI_P(void *rs1)
  1264. !
  1265. .inline vis_lduha_ASI_P,4
  1266. lduha [%o0]0x80,%o0 ! ASI_P
  1267. .end
  1268. !
  1269. ! unsigned short vis_lduha_ASI_PL(void *rs1)
  1270. !
  1271. .inline vis_lduha_ASI_PL,4
  1272. lduha [%o0]0x88,%o0 ! ASI_PL
  1273. .end
  1274. !
  1275. ! unsigned short vis_lduha_ASI_P_index(void *rs1, long index)
  1276. !
  1277. .inline vis_lduha_ASI_P_index,8
  1278. lduha [%o0+%o1]0x80,%o0 ! ASI_P
  1279. .end
  1280. !
  1281. ! unsigned short vis_lduha_ASI_PL_index(void *rs1, long index)
  1282. !
  1283. .inline vis_lduha_ASI_PL_index,8
  1284. lduha [%o0+%o1]0x88,%o0 ! ASI_PL
  1285. .end
  1286. !--------------------------------------------------------------------
  1287. ! Prefetch
  1288. !
  1289. ! void vis_prefetch_read(void * /*address*/);
  1290. !
  1291. .inline vis_prefetch_read,4
  1292. prefetch [%o0+0],0
  1293. .end
  1294. !
  1295. ! void vis_prefetch_write(void * /*address*/);
  1296. !
  1297. .inline vis_prefetch_write,4
  1298. prefetch [%o0+0],2
  1299. .end