Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 !
2 ! This Source Code Form is subject to the terms of the Mozilla Public
3 ! License, v. 2.0. If a copy of the MPL was not distributed with this
4 ! file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 ! This file is to be used in place of vis.il in 64-bit builds.
8 !--------------------------------------------------------------------
9 ! Pure edge handling instructions
10 !
11 ! int vis_edge8(void */*frs1*/, void */*frs2*/);
12 !
13 .inline vis_edge8,16
14 edge8 %o0,%o1,%o0
15 .end
16 !
17 ! int vis_edge8l(void */*frs1*/, void */*frs2*/);
18 !
19 .inline vis_edge8l,16
20 edge8l %o0,%o1,%o0
21 .end
22 !
23 ! int vis_edge16(void */*frs1*/, void */*frs2*/);
24 !
25 .inline vis_edge16,16
26 edge16 %o0,%o1,%o0
27 .end
28 !
29 ! int vis_edge16l(void */*frs1*/, void */*frs2*/);
30 !
31 .inline vis_edge16l,16
32 edge16l %o0,%o1,%o0
33 .end
34 !
35 ! int vis_edge32(void */*frs1*/, void */*frs2*/);
36 !
37 .inline vis_edge32,16
38 edge32 %o0,%o1,%o0
39 .end
40 !
41 ! int vis_edge32l(void */*frs1*/, void */*frs2*/);
42 !
43 .inline vis_edge32l,16
44 edge32l %o0,%o1,%o0
45 .end
47 !--------------------------------------------------------------------
48 ! Edge handling instructions with negative return values if cc set
49 !
50 ! int vis_edge8cc(void */*frs1*/, void */*frs2*/);
51 !
52 .inline vis_edge8cc,16
53 edge8 %o0,%o1,%o0
54 mov 0,%o1
55 movgu %xcc,-1024,%o1
56 or %o1,%o0,%o0
57 .end
58 !
59 ! int vis_edge8lcc(void */*frs1*/, void */*frs2*/);
60 !
61 .inline vis_edge8lcc,16
62 edge8l %o0,%o1,%o0
63 mov 0,%o1
64 movgu %xcc,-1024,%o1
65 or %o1,%o0,%o0
66 .end
67 !
68 ! int vis_edge16cc(void */*frs1*/, void */*frs2*/);
69 !
70 .inline vis_edge16cc,16
71 edge16 %o0,%o1,%o0
72 mov 0,%o1
73 movgu %xcc,-1024,%o1
74 or %o1,%o0,%o0
75 .end
76 !
77 ! int vis_edge16lcc(void */*frs1*/, void */*frs2*/);
78 !
79 .inline vis_edge16lcc,16
80 edge16l %o0,%o1,%o0
81 mov 0,%o1
82 movgu %xcc,-1024,%o1
83 or %o1,%o0,%o0
84 .end
85 !
86 ! int vis_edge32cc(void */*frs1*/, void */*frs2*/);
87 !
88 .inline vis_edge32cc,16
89 edge32 %o0,%o1,%o0
90 mov 0,%o1
91 movgu %xcc,-1024,%o1
92 or %o1,%o0,%o0
93 .end
94 !
95 ! int vis_edge32lcc(void */*frs1*/, void */*frs2*/);
96 !
97 .inline vis_edge32lcc,16
98 edge32l %o0,%o1,%o0
99 mov 0,%o1
100 movgu %xcc,-1024,%o1
101 or %o1,%o0,%o0
102 .end
104 !--------------------------------------------------------------------
105 ! Alignment instructions
106 !
107 ! void *vis_alignaddr(void */*rs1*/, int /*rs2*/);
108 !
109 .inline vis_alignaddr,12
110 alignaddr %o0,%o1,%o0
111 .end
112 !
113 ! void *vis_alignaddrl(void */*rs1*/, int /*rs2*/);
114 !
115 .inline vis_alignaddrl,12
116 alignaddrl %o0,%o1,%o0
117 .end
118 !
119 ! double vis_faligndata(double /*frs1*/, double /*frs2*/);
120 !
121 .inline vis_faligndata,16
122 faligndata %f0,%f2,%f0
123 .end
125 !--------------------------------------------------------------------
126 ! Partitioned comparison instructions
127 !
128 ! int vis_fcmple16(double /*frs1*/, double /*frs2*/);
129 !
130 .inline vis_fcmple16,16
131 fcmple16 %f0,%f2,%o0
132 .end
133 !
134 ! int vis_fcmpne16(double /*frs1*/, double /*frs2*/);
135 !
136 .inline vis_fcmpne16,16
137 fcmpne16 %f0,%f2,%o0
138 .end
139 !
140 ! int vis_fcmple32(double /*frs1*/, double /*frs2*/);
141 !
142 .inline vis_fcmple32,16
143 fcmple32 %f0,%f2,%o0
144 .end
145 !
146 ! int vis_fcmpne32(double /*frs1*/, double /*frs2*/);
147 !
148 .inline vis_fcmpne32,16
149 fcmpne32 %f0,%f2,%o0
150 .end
151 !
152 ! int vis_fcmpgt16(double /*frs1*/, double /*frs2*/);
153 !
154 .inline vis_fcmpgt16,16
155 fcmpgt16 %f0,%f2,%o0
156 .end
157 !
158 ! int vis_fcmpeq16(double /*frs1*/, double /*frs2*/);
159 !
160 .inline vis_fcmpeq16,16
161 fcmpeq16 %f0,%f2,%o0
162 .end
163 !
164 ! int vis_fcmpgt32(double /*frs1*/, double /*frs2*/);
165 !
166 .inline vis_fcmpgt32,16
167 fcmpgt32 %f0,%f2,%o0
168 .end
169 !
170 ! int vis_fcmpeq32(double /*frs1*/, double /*frs2*/);
171 !
172 .inline vis_fcmpeq32,16
173 fcmpeq32 %f0,%f2,%o0
174 .end
176 !--------------------------------------------------------------------
177 ! Partitioned arithmetic
178 !
179 ! double vis_fmul8x16(float /*frs1*/, double /*frs2*/);
180 !
181 .inline vis_fmul8x16,12
182 fmul8x16 %f1,%f2,%f0
183 .end
184 !
185 ! double vis_fmul8x16_dummy(float /*frs1*/, int /*dummy*/, double /*frs2*/);
186 !
187 .inline vis_fmul8x16_dummy,16
188 fmul8x16 %f1,%f4,%f0
189 .end
190 !
191 ! double vis_fmul8x16au(float /*frs1*/, float /*frs2*/);
192 !
193 .inline vis_fmul8x16au,8
194 fmul8x16au %f1,%f3,%f0
195 .end
196 !
197 ! double vis_fmul8x16al(float /*frs1*/, float /*frs2*/);
198 !
199 .inline vis_fmul8x16al,8
200 fmul8x16al %f1,%f3,%f0
201 .end
202 !
203 ! double vis_fmul8sux16(double /*frs1*/, double /*frs2*/);
204 !
205 .inline vis_fmul8sux16,16
206 fmul8sux16 %f0,%f2,%f0
207 .end
208 !
209 ! double vis_fmul8ulx16(double /*frs1*/, double /*frs2*/);
210 !
211 .inline vis_fmul8ulx16,16
212 fmul8ulx16 %f0,%f2,%f0
213 .end
214 !
215 ! double vis_fmuld8sux16(float /*frs1*/, float /*frs2*/);
216 !
217 .inline vis_fmuld8sux16,8
218 fmuld8sux16 %f1,%f3,%f0
219 .end
220 !
221 ! double vis_fmuld8ulx16(float /*frs1*/, float /*frs2*/);
222 !
223 .inline vis_fmuld8ulx16,8
224 fmuld8ulx16 %f1,%f3,%f0
225 .end
226 !
227 ! double vis_fpadd16(double /*frs1*/, double /*frs2*/);
228 !
229 .inline vis_fpadd16,16
230 fpadd16 %f0,%f2,%f0
231 .end
232 !
233 ! float vis_fpadd16s(float /*frs1*/, float /*frs2*/);
234 !
235 .inline vis_fpadd16s,8
236 fpadd16s %f1,%f3,%f0
237 .end
238 !
239 ! double vis_fpadd32(double /*frs1*/, double /*frs2*/);
240 !
241 .inline vis_fpadd32,16
242 fpadd32 %f0,%f2,%f0
243 .end
244 !
245 ! float vis_fpadd32s(float /*frs1*/, float /*frs2*/);
246 !
247 .inline vis_fpadd32s,8
248 fpadd32s %f1,%f3,%f0
249 .end
250 !
251 ! double vis_fpsub16(double /*frs1*/, double /*frs2*/);
252 !
253 .inline vis_fpsub16,16
254 fpsub16 %f0,%f2,%f0
255 .end
256 !
257 ! float vis_fpsub16s(float /*frs1*/, float /*frs2*/);
258 !
259 .inline vis_fpsub16s,8
260 fpsub16s %f1,%f3,%f0
261 .end
262 !
263 ! double vis_fpsub32(double /*frs1*/, double /*frs2*/);
264 !
265 .inline vis_fpsub32,16
266 fpsub32 %f0,%f2,%f0
267 .end
268 !
269 ! float vis_fpsub32s(float /*frs1*/, float /*frs2*/);
270 !
271 .inline vis_fpsub32s,8
272 fpsub32s %f1,%f3,%f0
273 .end
275 !--------------------------------------------------------------------
276 ! Pixel packing
277 !
278 ! float vis_fpack16(double /*frs2*/);
279 !
280 .inline vis_fpack16,8
281 fpack16 %f0,%f0
282 .end
283 !
284 ! double vis_fpack16_pair(double /*frs2*/, double /*frs2*/);
285 !
286 .inline vis_fpack16_pair,16
287 fpack16 %f0,%f0
288 fpack16 %f2,%f1
289 .end
290 !
291 ! void vis_st2_fpack16(double, double, double *)
292 !
293 .inline vis_st2_fpack16,24
294 fpack16 %f0,%f0
295 fpack16 %f2,%f1
296 st %f0,[%o2+0]
297 st %f1,[%o2+4]
298 .end
299 !
300 ! void vis_std_fpack16(double, double, double *)
301 !
302 .inline vis_std_fpack16,24
303 fpack16 %f0,%f0
304 fpack16 %f2,%f1
305 std %f0,[%o2]
306 .end
307 !
308 ! void vis_st2_fpackfix(double, double, double *)
309 !
310 .inline vis_st2_fpackfix,24
311 fpackfix %f0,%f0
312 fpackfix %f2,%f1
313 st %f0,[%o2+0]
314 st %f1,[%o2+4]
315 .end
316 !
317 ! double vis_fpack16_to_hi(double /*frs1*/, double /*frs2*/);
318 !
319 .inline vis_fpack16_to_hi,16
320 fpack16 %f2,%f0
321 .end
323 ! double vis_fpack16_to_lo(double /*frs1*/, double /*frs2*/);
324 !
325 .inline vis_fpack16_to_lo,16
326 fpack16 %f2,%f3
327 fmovs %f3,%f1 /* without this, optimizer goes wrong */
328 .end
330 !
331 ! double vis_fpack32(double /*frs1*/, double /*frs2*/);
332 !
333 .inline vis_fpack32,16
334 fpack32 %f0,%f2,%f0
335 .end
336 !
337 ! float vis_fpackfix(double /*frs2*/);
338 !
339 .inline vis_fpackfix,8
340 fpackfix %f0,%f0
341 .end
342 !
343 ! double vis_fpackfix_pair(double /*frs2*/, double /*frs2*/);
344 !
345 .inline vis_fpackfix_pair,16
346 fpackfix %f0,%f0
347 fpackfix %f2,%f1
348 .end
350 !--------------------------------------------------------------------
351 ! Motion estimation
352 !
353 ! double vis_pxldist64(double accum /*frd*/, double pxls1 /*frs1*/,
354 ! double pxls2 /*frs2*/);
355 !
356 .inline vis_pxldist64,24
357 pdist %f2,%f4,%f0
358 .end
360 !--------------------------------------------------------------------
361 ! Channel merging
362 !
363 ! double vis_fpmerge(float /*frs1*/, float /*frs2*/);
364 !
365 .inline vis_fpmerge,8
366 fpmerge %f1,%f3,%f0
367 .end
369 !--------------------------------------------------------------------
370 ! Pixel expansion
371 !
372 ! double vis_fexpand(float /*frs2*/);
373 !
374 .inline vis_fexpand,4
375 fexpand %f1,%f0
376 .end
378 ! double vis_fexpand_hi(double /*frs2*/);
379 !
380 .inline vis_fexpand_hi,8
381 fexpand %f0,%f0
382 .end
384 ! double vis_fexpand_lo(double /*frs2*/);
385 !
386 .inline vis_fexpand_lo,8
387 fexpand %f1,%f0
388 .end
390 !--------------------------------------------------------------------
391 ! Bitwise logical operations
392 !
393 ! double vis_fnor(double /*frs1*/, double /*frs2*/);
394 !
395 .inline vis_fnor,16
396 fnor %f0,%f2,%f0
397 .end
398 !
399 ! float vis_fnors(float /*frs1*/, float /*frs2*/);
400 !
401 .inline vis_fnors,8
402 fnors %f1,%f3,%f0
403 .end
404 !
405 ! double vis_fandnot(double /*frs1*/, double /*frs2*/);
406 !
407 .inline vis_fandnot,16
408 fandnot1 %f0,%f2,%f0
409 .end
410 !
411 ! float vis_fandnots(float /*frs1*/, float /*frs2*/);
412 !
413 .inline vis_fandnots,8
414 fandnot1s %f1,%f3,%f0
415 .end
416 !
417 ! double vis_fnot(double /*frs1*/);
418 !
419 .inline vis_fnot,8
420 fnot1 %f0,%f0
421 .end
422 !
423 ! float vis_fnots(float /*frs1*/);
424 !
425 .inline vis_fnots,4
426 fnot1s %f1,%f0
427 .end
428 !
429 ! double vis_fxor(double /*frs1*/, double /*frs2*/);
430 !
431 .inline vis_fxor,16
432 fxor %f0,%f2,%f0
433 .end
434 !
435 ! float vis_fxors(float /*frs1*/, float /*frs2*/);
436 !
437 .inline vis_fxors,8
438 fxors %f1,%f3,%f0
439 .end
440 !
441 ! double vis_fnand(double /*frs1*/, double /*frs2*/);
442 !
443 .inline vis_fnand,16
444 fnand %f0,%f2,%f0
445 .end
446 !
447 ! float vis_fnands(float /*frs1*/, float /*frs2*/);
448 !
449 .inline vis_fnands,8
450 fnands %f1,%f3,%f0
451 .end
452 !
453 ! double vis_fand(double /*frs1*/, double /*frs2*/);
454 !
455 .inline vis_fand,16
456 fand %f0,%f2,%f0
457 .end
458 !
459 ! float vis_fands(float /*frs1*/, float /*frs2*/);
460 !
461 .inline vis_fands,8
462 fands %f1,%f3,%f0
463 .end
464 !
465 ! double vis_fxnor(double /*frs1*/, double /*frs2*/);
466 !
467 .inline vis_fxnor,16
468 fxnor %f0,%f2,%f0
469 .end
470 !
471 ! float vis_fxnors(float /*frs1*/, float /*frs2*/);
472 !
473 .inline vis_fxnors,8
474 fxnors %f1,%f3,%f0
475 .end
476 !
477 ! double vis_fsrc(double /*frs1*/);
478 !
479 .inline vis_fsrc,8
480 fsrc1 %f0,%f0
481 .end
482 !
483 ! float vis_fsrcs(float /*frs1*/);
484 !
485 .inline vis_fsrcs,4
486 fsrc1s %f1,%f0
487 .end
488 !
489 ! double vis_fornot(double /*frs1*/, double /*frs2*/);
490 !
491 .inline vis_fornot,16
492 fornot1 %f0,%f2,%f0
493 .end
494 !
495 ! float vis_fornots(float /*frs1*/, float /*frs2*/);
496 !
497 .inline vis_fornots,8
498 fornot1s %f1,%f3,%f0
499 .end
500 !
501 ! double vis_for(double /*frs1*/, double /*frs2*/);
502 !
503 .inline vis_for,16
504 for %f0,%f2,%f0
505 .end
506 !
507 ! float vis_fors(float /*frs1*/, float /*frs2*/);
508 !
509 .inline vis_fors,8
510 fors %f1,%f3,%f0
511 .end
512 !
513 ! double vis_fzero(/* void */)
514 !
515 .inline vis_fzero,0
516 fzero %f0
517 .end
518 !
519 ! float vis_fzeros(/* void */)
520 !
521 .inline vis_fzeros,0
522 fzeros %f0
523 .end
524 !
525 ! double vis_fone(/* void */)
526 !
527 .inline vis_fone,0
528 fone %f0
529 .end
530 !
531 ! float vis_fones(/* void */)
532 !
533 .inline vis_fones,0
534 fones %f0
535 .end
537 !--------------------------------------------------------------------
538 ! Partial store instructions
539 !
540 ! vis_stdfa_ASI_PST8P(double frd, void *rs1, int rmask)
541 !
542 .inline vis_stdfa_ASI_PST8P,20
543 stda %f0,[%o1]%o2,0xc0 ! ASI_PST8_P
544 .end
545 !
546 ! vis_stdfa_ASI_PST8PL(double frd, void *rs1, int rmask)
547 !
548 .inline vis_stdfa_ASI_PST8PL,20
549 stda %f0,[%o1]%o2,0xc8 ! ASI_PST8_PL
550 .end
551 !
552 ! vis_stdfa_ASI_PST8P_int_pair(void *rs1, void *rs2, void *rs3, int rmask);
553 !
554 .inline vis_stdfa_ASI_PST8P_int_pair,28
555 ld [%o0],%f4
556 ld [%o1],%f5
557 stda %f4,[%o2]%o3,0xc0 ! ASI_PST8_P
558 .end
559 !
560 ! vis_stdfa_ASI_PST8S(double frd, void *rs1, int rmask)
561 !
562 .inline vis_stdfa_ASI_PST8S,20
563 stda %f0,[%o1]%o2,0xc1 ! ASI_PST8_S
564 .end
565 !
566 ! vis_stdfa_ASI_PST16P(double frd, void *rs1, int rmask)
567 !
568 .inline vis_stdfa_ASI_PST16P,20
569 stda %f0,[%o1]%o2,0xc2 ! ASI_PST16_P
570 .end
571 !
572 ! vis_stdfa_ASI_PST16S(double frd, void *rs1, int rmask)
573 !
574 .inline vis_stdfa_ASI_PST16S,20
575 stda %f0,[%o1]%o2,0xc3 ! ASI_PST16_S
576 .end
577 !
578 ! vis_stdfa_ASI_PST32P(double frd, void *rs1, int rmask)
579 !
580 .inline vis_stdfa_ASI_PST32P,20
581 stda %f0,[%o1]%o2,0xc4 ! ASI_PST32_P
582 .end
583 !
584 ! vis_stdfa_ASI_PST32S(double frd, void *rs1, int rmask)
585 !
586 .inline vis_stdfa_ASI_PST32S,20
587 stda %f0,[%o1]%o2,0xc5 ! ASI_PST32_S
588 .end
590 !--------------------------------------------------------------------
591 ! Short store instructions
592 !
593 ! vis_stdfa_ASI_FL8P(double frd, void *rs1)
594 !
595 .inline vis_stdfa_ASI_FL8P,16
596 stda %f0,[%o1]0xd0 ! ASI_FL8_P
597 .end
598 !
599 ! vis_stdfa_ASI_FL8P_index(double frd, void *rs1, long index)
600 !
601 .inline vis_stdfa_ASI_FL8P_index,24
602 stda %f0,[%o1+%o2]0xd0 ! ASI_FL8_P
603 .end
604 !
605 ! vis_stdfa_ASI_FL8S(double frd, void *rs1)
606 !
607 .inline vis_stdfa_ASI_FL8S,16
608 stda %f0,[%o1]0xd1 ! ASI_FL8_S
609 .end
610 !
611 ! vis_stdfa_ASI_FL16P(double frd, void *rs1)
612 !
613 .inline vis_stdfa_ASI_FL16P,16
614 stda %f0,[%o1]0xd2 ! ASI_FL16_P
615 .end
616 !
617 ! vis_stdfa_ASI_FL16P_index(double frd, void *rs1, long index)
618 !
619 .inline vis_stdfa_ASI_FL16P_index,24
620 stda %f0,[%o1+%o2]0xd2 ! ASI_FL16_P
621 .end
622 !
623 ! vis_stdfa_ASI_FL16S(double frd, void *rs1)
624 !
625 .inline vis_stdfa_ASI_FL16S,16
626 stda %f0,[%o1]0xd3 ! ASI_FL16_S
627 .end
628 !
629 ! vis_stdfa_ASI_FL8PL(double frd, void *rs1)
630 !
631 .inline vis_stdfa_ASI_FL8PL,16
632 stda %f0,[%o1]0xd8 ! ASI_FL8_PL
633 .end
634 !
635 ! vis_stdfa_ASI_FL8SL(double frd, void *rs1)
636 !
637 .inline vis_stdfa_ASI_FL8SL,16
638 stda %f0,[%o1]0xd9 ! ASI_FL8_SL
639 .end
640 !
641 ! vis_stdfa_ASI_FL16PL(double frd, void *rs1)
642 !
643 .inline vis_stdfa_ASI_FL16PL,16
644 stda %f0,[%o1]0xda ! ASI_FL16_PL
645 .end
646 !
647 ! vis_stdfa_ASI_FL16SL(double frd, void *rs1)
648 !
649 .inline vis_stdfa_ASI_FL16SL,16
650 stda %f0,[%o1]0xdb ! ASI_FL16_SL
651 .end
653 !--------------------------------------------------------------------
654 ! Short load instructions
655 !
656 ! double vis_lddfa_ASI_FL8P(void *rs1)
657 !
658 .inline vis_lddfa_ASI_FL8P,8
659 ldda [%o0]0xd0,%f4 ! ASI_FL8_P
660 fmovd %f4,%f0 ! Compiler can clean this up
661 .end
662 !
663 ! double vis_lddfa_ASI_FL8P_index(void *rs1, long index)
664 !
665 .inline vis_lddfa_ASI_FL8P_index,16
666 ldda [%o0+%o1]0xd0,%f4
667 fmovd %f4,%f0
668 .end
669 !
670 ! double vis_lddfa_ASI_FL8P_hi(void *rs1, unsigned int index)
671 !
672 .inline vis_lddfa_ASI_FL8P_hi,12
673 sra %o1,16,%o1
674 ldda [%o0+%o1]0xd0,%f4
675 fmovd %f4,%f0
676 .end
677 !
678 ! double vis_lddfa_ASI_FL8P_lo(void *rs1, unsigned int index)
679 !
680 .inline vis_lddfa_ASI_FL8P_lo,12
681 sll %o1,16,%o1
682 sra %o1,16,%o1
683 ldda [%o0+%o1]0xd0,%f4
684 fmovd %f4,%f0
685 .end
686 !
687 ! double vis_lddfa_ASI_FL8S(void *rs1)
688 !
689 .inline vis_lddfa_ASI_FL8S,8
690 ldda [%o0]0xd1,%f4 ! ASI_FL8_S
691 fmovd %f4,%f0
692 .end
693 !
694 ! double vis_lddfa_ASI_FL16P(void *rs1)
695 !
696 .inline vis_lddfa_ASI_FL16P,8
697 ldda [%o0]0xd2,%f4 ! ASI_FL16_P
698 fmovd %f4,%f0
699 .end
700 !
701 ! double vis_lddfa_ASI_FL16P_index(void *rs1, long index)
702 !
703 .inline vis_lddfa_ASI_FL16P_index,16
704 ldda [%o0+%o1]0xd2,%f4 ! ASI_FL16_P
705 fmovd %f4,%f0
706 .end
707 !
708 ! double vis_lddfa_ASI_FL16S(void *rs1)
709 !
710 .inline vis_lddfa_ASI_FL16S,8
711 ldda [%o0]0xd3,%f4 ! ASI_FL16_S
712 fmovd %f4,%f0
713 .end
714 !
715 ! double vis_lddfa_ASI_FL8PL(void *rs1)
716 !
717 .inline vis_lddfa_ASI_FL8PL,8
718 ldda [%o0]0xd8,%f4 ! ASI_FL8_PL
719 fmovd %f4,%f0
720 .end
721 !
722 ! double vis_lddfa_ASI_FL8PL_index(void *rs1, long index)
723 !
724 .inline vis_lddfa_ASI_FL8PL_index,16
725 ldda [%o0+%o1]0xd8,%f4 ! ASI_FL8_PL
726 fmovd %f4,%f0
727 .end
728 !
729 ! double vis_lddfa_ASI_FL8SL(void *rs1)
730 !
731 .inline vis_lddfa_ASI_FL8SL,8
732 ldda [%o0]0xd9,%f4 ! ASI_FL8_SL
733 fmovd %f4,%f0
734 .end
735 !
736 ! double vis_lddfa_ASI_FL16PL(void *rs1)
737 !
738 .inline vis_lddfa_ASI_FL16PL,8
739 ldda [%o0]0xda,%f4 ! ASI_FL16_PL
740 fmovd %f4,%f0
741 .end
742 !
743 ! double vis_lddfa_ASI_FL16PL_index(void *rs1, long index)
744 !
745 .inline vis_lddfa_ASI_FL16PL_index,16
746 ldda [%o0+%o1]0xda,%f4 ! ASI_FL16_PL
747 fmovd %f4,%f0
748 .end
749 !
750 ! double vis_lddfa_ASI_FL16SL(void *rs1)
751 !
752 .inline vis_lddfa_ASI_FL16SL,8
753 ldda [%o0]0xdb,%f4 ! ASI_FL16_SL
754 fmovd %f4,%f0
755 .end
757 !--------------------------------------------------------------------
758 ! Graphics status register
759 !
760 ! unsigned int vis_read_gsr(void)
761 !
762 .inline vis_read_gsr,0
763 rd %gsr,%o0
764 .end
765 !
766 ! void vis_write_gsr(unsigned int /* GSR */)
767 !
768 .inline vis_write_gsr,4
769 wr %g0,%o0,%gsr
770 .end
772 !--------------------------------------------------------------------
773 ! Voxel texture mapping
774 !
775 ! unsigned long vis_array8(unsigned long long /*rs1 */, int /*rs2*/)
776 !
777 .inline vis_array8,12
778 array8 %o0,%o1,%o0
779 .end
780 !
781 ! unsigned long vis_array16(unsigned long long /*rs1*/, int /*rs2*/)
782 !
783 .inline vis_array16,12
784 array16 %o0,%o1,%o0
785 .end
786 !
787 ! unsigned long vis_array32(unsigned long long /*rs1*/, int /*rs2*/)
788 !
789 .inline vis_array32,12
790 array32 %o0,%o1,%o0
791 .end
793 !--------------------------------------------------------------------
794 ! Register aliasing and type casts
795 !
796 ! float vis_read_hi(double /* frs1 */);
797 !
798 .inline vis_read_hi,8
799 fmovs %f0,%f0
800 .end
801 !
802 ! float vis_read_lo(double /* frs1 */);
803 !
804 .inline vis_read_lo,8
805 fmovs %f1,%f0 ! %f0 = low word (frs1); return %f0;
806 .end
807 !
808 ! double vis_write_hi(double /* frs1 */, float /* frs2 */);
809 !
810 .inline vis_write_hi,12
811 fmovs %f3,%f0 ! %f3 = float frs2; return %f0:f1;
812 .end
813 !
814 ! double vis_write_lo(double /* frs1 */, float /* frs2 */);
815 !
816 .inline vis_write_lo,12
817 fmovs %f3,%f1 ! %f3 = float frs2; return %f0:f1;
818 .end
819 !
820 ! double vis_freg_pair(float /* frs1 */, float /* frs2 */);
821 !
822 .inline vis_freg_pair,8
823 fmovs %f1,%f0 ! %f1 = float frs1; put in hi;
824 fmovs %f3,%f1 ! %f3 = float frs2; put in lo; return %f0:f1;
825 .end
826 !
827 ! float vis_to_float(unsigned int /*value*/);
828 !
829 .inline vis_to_float,4
830 st %o0,[%sp+2183]
831 ld [%sp+2183],%f0
832 .end
833 !
834 ! double vis_to_double(unsigned int /*value1*/, unsigned int /*value2*/);
835 !
836 .inline vis_to_double,8
837 st %o0,[%sp+2183]
838 ld [%sp+2183],%f0
839 st %o1,[%sp+2183]
840 ld [%sp+2183],%f1
841 .end
842 !
843 ! double vis_to_double_dup(unsigned int /*value*/);
844 !
845 .inline vis_to_double_dup,4
846 st %o0,[%sp+2183]
847 ld [%sp+2183],%f1
848 fmovs %f1,%f0 ! duplicate value
849 .end
850 !
851 ! double vis_ll_to_double(unsigned long long /*value*/);
852 !
853 .inline vis_ll_to_double,8
854 stx %o0,[%sp+2183]
855 ldd [%sp+2183],%f0
856 .end
858 !--------------------------------------------------------------------
859 ! Address space identifier (ASI) register
860 !
861 ! unsigned int vis_read_asi(void)
862 !
863 .inline vis_read_asi,0
864 rd %asi,%o0
865 .end
866 !
867 ! void vis_write_asi(unsigned int /* ASI */)
868 !
869 .inline vis_write_asi,4
870 wr %g0,%o0,%asi
871 .end
873 !--------------------------------------------------------------------
874 ! Load/store from/into alternate space
875 !
876 ! float vis_ldfa_ASI_REG(void *rs1)
877 !
878 .inline vis_ldfa_ASI_REG,8
879 lda [%o0+0]%asi,%f4
880 fmovs %f4,%f0 ! Compiler can clean this up
881 .end
882 !
883 ! float vis_ldfa_ASI_P(void *rs1)
884 !
885 .inline vis_ldfa_ASI_P,8
886 lda [%o0]0x80,%f4 ! ASI_P
887 fmovs %f4,%f0 ! Compiler can clean this up
888 .end
889 !
890 ! float vis_ldfa_ASI_PL(void *rs1)
891 !
892 .inline vis_ldfa_ASI_PL,8
893 lda [%o0]0x88,%f4 ! ASI_PL
894 fmovs %f4,%f0 ! Compiler can clean this up
895 .end
896 !
897 ! double vis_lddfa_ASI_REG(void *rs1)
898 !
899 .inline vis_lddfa_ASI_REG,8
900 ldda [%o0+0]%asi,%f4
901 fmovd %f4,%f0 ! Compiler can clean this up
902 .end
903 !
904 ! double vis_lddfa_ASI_P(void *rs1)
905 !
906 .inline vis_lddfa_ASI_P,8
907 ldda [%o0]0x80,%f4 ! ASI_P
908 fmovd %f4,%f0 ! Compiler can clean this up
909 .end
910 !
911 ! double vis_lddfa_ASI_PL(void *rs1)
912 !
913 .inline vis_lddfa_ASI_PL,8
914 ldda [%o0]0x88,%f4 ! ASI_PL
915 fmovd %f4,%f0 ! Compiler can clean this up
916 .end
917 !
918 ! vis_stfa_ASI_REG(float frs, void *rs1)
919 !
920 .inline vis_stfa_ASI_REG,12
921 sta %f1,[%o1+0]%asi
922 .end
923 !
924 ! vis_stfa_ASI_P(float frs, void *rs1)
925 !
926 .inline vis_stfa_ASI_P,12
927 sta %f1,[%o1]0x80 ! ASI_P
928 .end
929 !
930 ! vis_stfa_ASI_PL(float frs, void *rs1)
931 !
932 .inline vis_stfa_ASI_PL,12
933 sta %f1,[%o1]0x88 ! ASI_PL
934 .end
935 !
936 ! vis_stdfa_ASI_REG(double frd, void *rs1)
937 !
938 .inline vis_stdfa_ASI_REG,16
939 stda %f0,[%o1+0]%asi
940 .end
941 !
942 ! vis_stdfa_ASI_P(double frd, void *rs1)
943 !
944 .inline vis_stdfa_ASI_P,16
945 stda %f0,[%o1]0x80 ! ASI_P
946 .end
947 !
948 ! vis_stdfa_ASI_PL(double frd, void *rs1)
949 !
950 .inline vis_stdfa_ASI_PL,16
951 stda %f0,[%o1]0x88 ! ASI_PL
952 .end
953 !
954 ! unsigned short vis_lduha_ASI_REG(void *rs1)
955 !
956 .inline vis_lduha_ASI_REG,8
957 lduha [%o0+0]%asi,%o0
958 .end
959 !
960 ! unsigned short vis_lduha_ASI_P(void *rs1)
961 !
962 .inline vis_lduha_ASI_P,8
963 lduha [%o0]0x80,%o0 ! ASI_P
964 .end
965 !
966 ! unsigned short vis_lduha_ASI_PL(void *rs1)
967 !
968 .inline vis_lduha_ASI_PL,8
969 lduha [%o0]0x88,%o0 ! ASI_PL
970 .end
971 !
972 ! unsigned short vis_lduha_ASI_P_index(void *rs1, long index)
973 !
974 .inline vis_lduha_ASI_P_index,16
975 lduha [%o0+%o1]0x80,%o0 ! ASI_P
976 .end
977 !
978 ! unsigned short vis_lduha_ASI_PL_index(void *rs1, long index)
979 !
980 .inline vis_lduha_ASI_PL_index,16
981 lduha [%o0+%o1]0x88,%o0 ! ASI_PL
982 .end
984 !--------------------------------------------------------------------
985 ! Prefetch
986 !
987 ! void vis_prefetch_read(void * /*address*/);
988 !
989 .inline vis_prefetch_read,8
990 prefetch [%o0+0],0
991 .end
992 !
993 ! void vis_prefetch_write(void * /*address*/);
994 !
995 .inline vis_prefetch_write,8
996 prefetch [%o0+0],2
997 .end