1! 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.  Oracle designates this
7! particular file as subject to the "Classpath" exception as provided
8! by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21! or visit www.oracle.com if you need additional information or have any
22! 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
1390