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