1/*
2 * VISmoveImage.S: High speed moveImage operations utilizing the UltraSPARC
3 *                 Visual Instruction Set.
4 *
5 * Copyright (C) 1998,1999 Jakub Jelinek (jakub@redhat.com)
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * JAKUB JELINEK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25
26/* NOTE NOTE NOTE: All loads in these routines _MUST_ be 64-byte block
27 *                 loads.  If any non-block loads are done to the frame-
28 *                 buffer when prefetching is enabled (which we use, when
29 *		   available) this will cause lockups on FFB2 due to a
30 *		   hardware bug. -DaveM
31 */
32
33/*
34   void
35   VISmoveImageLR(unsigned char *src, unsigned char *dst, long w, long h, long skind, long dkind)
36   {
37     int i;
38
39     // Handles copying non-overlapping images and for overlapping images
40     // copying where dstx <= srcx.
41     // To copy overlapping images where dsty > srcy, set src and dst
42     // to start of the last scanline and negate both skind and dkind arguments.
43
44     assert(abs(skind) >= w && abs(dkind) >= w);
45
46     while (h--) {
47       for (i = 0; i < w; i++)
48         *d++ = *s++;
49       s += skind - w;
50       d += dkind - w;
51     }
52   }
53
54   void
55   VISmoveImageRL(unsigned char *src, unsigned char *dst, long w, long h, long skind, long dkind)
56   {
57     int i;
58
59     // Handles copying non-overlapping images and for overlapping images
60     // copying where dstx >= srcx.
61     // To copy overlapping images where dsty > srcy, set src and dst
62     // to start of the last scanline and negate both skind and dkind arguments.
63
64     assert(abs(skind) >= w && abs(dkind) >= w);
65
66     s += w;
67     d += w;
68     while (h--) {
69       for (i = 0; i < w; i++)
70         *--d = *--s;
71       s += skind + w;
72       d += dkind + w;
73     }
74   }
75
76 */
77
78#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__)
79
80 .register %g2, #scratch
81 .register %g3, #scratch
82
83#define SMUL			mulx
84#define ICC			xcc
85.register %g2,#scratch
86.register %g3,#scratch
87#else
88#define SMUL			smul
89#define ICC			icc
90#endif
91
92#define ASI_PST8_P		0xc0
93#define ASI_BLK_P		0xf0
94#define SYNC			0x40
95
96/* Register usage:								*/
97/*   integer registers:								*/
98#define src			i0
99#define dst			i1
100#define w			i2
101#define h			i3
102#define skind			i4
103#define dkind			i5
104#define branchbase		l0
105#define tmp1			l1
106#define tmp4			l2
107#define tmp5			l3
108#define leftw			l4
109#define rightw			l5
110#define srcstart		l6
111#define mode			l7
112#define fregset			o0		/* Must be [og]? for v8plusa */
113#define srcend			o1
114#define srcn			o2
115#define srcnext			o3
116#define rightw2			o4
117#define tmp2			o5		/* Must be [og]? for v8plusa */
118#define narrow			o7
119#define prepw			g1		/* Must be [og]? for v8plusa */
120#define srcstop			g2
121#define srcnotdone		g3
122#define curw			g4		/* Must be [og]? for v8plusa */
123#define leftw2			rightw2
124#define tmp3			g5		/* Must be [og]? for v8plusa */
125/*   floating point registers:							*/
126#define ftmp1			f0
127#define ftmp2			f2
128#define ftmp3			f4
129#define ftmp4			f6
130#define ftmp5			f8
131#define ftmp6			f10
132#define ftmp7			f12
133#define ftmp8			f14
134#define store_regs		f16-f31
135#define load_bank1		f32-f46
136#define load_bank2		f48-f62
137#define fnop			fmovd	%ftmp2, %ftmp2
138
139#define LOAD(f32,f46,tgt,tgtr)							\
140	subcc			%curw, 64, %curw;				\
141	bleu,pn			%ICC, tgt;					\
142	 fmovd			%f46, %ftmp1;					\
143	ldda			[%src] ASI_BLK_P, %f32;				\
144	add			%src, 64, %src;					\
145tgtr:
146
147#define PREPLOAD(f32,f46,tgt,tgtr)						\
148	brlez,pn		%prepw, tgt;					\
149	 fmovd			%f46, %ftmp1;					\
150	ldda			[%src] ASI_BLK_P, %f32;				\
151	add			%src, 64, %src;					\
152tgtr:
153
154#define STORE									\
155	stda			%f16, [%dst] ASI_BLK_P;
156
157#define FREG_FROB(f0,A0,F2,f2,A1,F4,f4,A2,F6,f6,A3,F8,f8,A4,F10,f10,A5,F12,f12,A6,F14,f14,A7,F16) 	\
158	A0									\
159	faligndata		%f0,%F2,%f16;					\
160	A1									\
161	faligndata		%f2,%F4,%f18;					\
162	A2									\
163	faligndata		%f4,%F6,%f20;					\
164	A3									\
165	faligndata		%f6,%F8,%f22;					\
166	A4									\
167	faligndata		%f8,%F10,%f24;					\
168	A5									\
169	faligndata		%f10,%F12,%f26;					\
170	A6									\
171	faligndata		%f12,%F14,%f28;					\
172	A7									\
173	faligndata		%f14,%F16,%f30;
174
175	.section		".rodata"
176	.asciz			"VISmoveImage (C) 1998,1999 Jakub Jelinek"
177
178/* The code might not be self-explanatory, but it was written to be processed
179 * by machines, not humans.  Comments are deliberately left as an exercise
180 * to the occasional reader.  */
181
182	.text
183	.globl			VISmoveImageLR
184	.align			32
185VISmoveImageLR:
186#ifdef __arch64__
187	save			%sp, -192, %sp				! Group 0
188#else
189	save			%sp, -96, %sp				! Group 0
190#endif
1910:	rd			%pc, %tmp3				! Group 1
192	sub			%src, %dst, %mode			! Group 7
193	brz,pn			%h, return
194	 neg			%dst, %leftw				! Group 8
195	mov			%src, %srcstart
196	andn			%src, 63, %src				! Group 9
197	cmp			%w, 128
198	blu,pn			%ICC, prepare_narrow
199	 and			%mode, 63, %mode			! Group 10
200	add			%dst, %w, %rightw
201	ldda			[%src] ASI_BLK_P, %f32			! Group 11
202	add			%src, 64, %src				! Group 12
203	clr			%narrow
204	ldda			[%src] ASI_BLK_P, %f48			! Group 13
205	and			%leftw, 63, %leftw			! Group 14
206	sub			%rightw, 1, %rightw
207	andn			%dst, 63, %dst				! Group 15
208	and			%rightw, 63, %rightw
209	alignaddr		%mode, %g0, %g0				! Group 16
210	add			%rightw, 1, %rightw			! Group 17
211	clr			%fregset
212	add			%src, 64, %src				! Group 18
213	add			%tmp3, (BranchBase - 0b), %branchbase
214	mov			64, %prepw				! Group 19
215	ba,pt			%xcc, roll_wide
216	 sub			%h, 1, %srcnotdone
217prepare_narrow:
218#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__)
219	brlez,pn		%w, return
220#else
221	tst			%w
222	ble,pn			%icc, return
223#endif
224	 add			%dst, %w, %rightw			! Group 11
225	and			%leftw, 63, %leftw
226	ldda			[%src] ASI_BLK_P, %f32			! Group 12
227	sub			%rightw, 1, %rightw			! Group 13
228	andn			%dst, 63, %dst
229	and			%rightw, 63, %rightw			! Group 14
230	sub			%w, %leftw, %tmp2
231	add			%rightw, 1, %rightw			! Group 15
232	clr			%fregset
233	subcc			%tmp2, %rightw, %curw			! Group 16
234	and			%srcstart, 63, %tmp1
235	mov			%curw, %prepw				! Group 17
236	add			%tmp1, %w, %tmp1
237	bg,pt			%ICC, 1f
238	 add			%src, 64, %src				! Group 18
239	cmp			%tmp1, 128
240	movg			%icc, 64, %prepw			! Group 19
2411:	add			%srcstart, %w, %srcend
242	sub			%h, 1, %srcnotdone			! Group 20
243	add			%srcstart, %skind, %srcnext
244	add			%srcend, 63, %tmp4			! Group 21
245	andn			%srcnext, 63, %srcnext
246	add			%w, 64, %tmp2				! Group 22
247	cmp			%skind, 0
248	bl,pn			%ICC, 1f
249	 clr			%srcstop				! Group 23
250	cmp			%skind, %tmp2
251	bgeu,pt			%ICC, 2f
252	 andn			%tmp4, 63, %tmp2			! Group 24
253	SMUL			%skind, %srcnotdone, %srcstop
254	ba,pt			%xcc, 2f
255	 add			%tmp4, %srcstop, %srcstop
2561:	addcc			%tmp2, %skind, %g0
257	ble,pt			%ICC, 2f
258	 sub			%srcnext, 64, %tmp2
259	SMUL			%skind, %srcnotdone, %srcstop
260	sub			%srcstart, 64, %narrow
261	add			%srcstop, %narrow, %srcstop
2622:	add			%srcnext, 64, %narrow
263	andn			%tmp4, 63, %srcend			! Group 25
264	mov			%srcnext, %srcn
265	cmp			%narrow, %srcend			! Group 26
266	andn			%srcstop, 63, %srcstop
267	move			%ICC, %tmp2, %srcnext			! Group 27
268	alignaddr		%mode, %g0, %g0				! Group 28
269	add			%tmp3, (BranchBase - 0b), %branchbase
270	mov			1, %narrow				! Group 29
271	cmp			%srcnext, %srcstop
272	move			%ICC, 0, %srcnotdone			! Group 30
273	cmp			%tmp1, 64
274	bleu,pn			%ICC, 1f
275	 dec			%h					! Group 31
276	ldda			[%src] ASI_BLK_P, %f48			! Group 32
277	ba,pt			%xcc, roll_narrow			! Group 33
278	 addcc			%src, 64, %src
2791:	brz,a,pn		%srcnotdone, roll_narrow
280	 membar			#Sync
281	ldda			[%srcnext] ASI_BLK_P, %f48
282	ba,pt			%xcc, roll_narrow
283	 addcc			%srcnext, 64, %src
284
285	.align			32
286prepr0:	faligndata		%f32, %f34, %f16
287	faligndata		%f34, %f36, %f18
288	faligndata		%f36, %f38, %f20
289	faligndata		%f38, %f40, %f22
290	faligndata		%f40, %f42, %f24
291	faligndata		%f42, %f44, %f26
292	ba,pt			%xcc, 4f
293	 faligndata		%f44, %f46, %f28
294	.align			32
295prepr1:	faligndata		%f48, %f50, %f16
296	faligndata		%f50, %f52, %f18
297	faligndata		%f52, %f54, %f20
298	faligndata		%f54, %f56, %f22
299	faligndata		%f56, %f58, %f24
300	faligndata		%f58, %f60, %f26
301	ba,pt			%xcc, 5f
302	 faligndata		%f60, %f62, %f28
303	.align			32
304prepr2:	faligndata		%f34, %f36, %f16
305	faligndata		%f36, %f38, %f18
306	faligndata		%f38, %f40, %f20
307	faligndata		%f40, %f42, %f22
308	faligndata		%f42, %f44, %f24
309	faligndata		%f44, %f46, %f26
310	ba,pt			%xcc, narrowst
311	 faligndata		%f46, %f0, %f28
312	.align			32
313prepr3:	faligndata		%f50, %f52, %f16
314	faligndata		%f52, %f54, %f18
315	faligndata		%f54, %f56, %f20
316	faligndata		%f56, %f58, %f22
317	faligndata		%f58, %f60, %f24
318	faligndata		%f60, %f62, %f26
319	ba,pt			%xcc, narrowst
320	 faligndata		%f62, %f0, %f28
321	.align			32
322prepr4:	faligndata		%f36, %f38, %f16
323	faligndata		%f38, %f40, %f18
324	faligndata		%f40, %f42, %f20
325	faligndata		%f42, %f44, %f22
326	faligndata		%f44, %f46, %f24
327	ba,pt			%xcc, narrowst
328	 faligndata		%f46, %f0, %f26
329	.align			32
330prepr5:	faligndata		%f52, %f54, %f16
331	faligndata		%f54, %f56, %f18
332	faligndata		%f56, %f58, %f20
333	faligndata		%f58, %f60, %f22
334	faligndata		%f60, %f62, %f24
335	ba,pt			%xcc, narrowst
336	 faligndata		%f62, %f0, %f26
337	.align			32
338prepr6:	faligndata		%f38, %f40, %f16
339	faligndata		%f40, %f42, %f18
340	faligndata		%f42, %f44, %f20
341	faligndata		%f44, %f46, %f22
342	ba,pt			%xcc, narrowst
343	 faligndata		%f46, %f0, %f24
344	.align			32
345prepr7:	faligndata		%f54, %f56, %f16
346	faligndata		%f56, %f58, %f18
347	faligndata		%f58, %f60, %f20
348	faligndata		%f60, %f62, %f22
349	ba,pt			%xcc, narrowst
350	 faligndata		%f62, %f0, %f24
351	.align			32
352prepr8:	faligndata		%f40, %f42, %f16
353	faligndata		%f42, %f44, %f18
354	faligndata		%f44, %f46, %f20
355	ba,pt			%xcc, narrowst
356	 faligndata		%f46, %f0, %f22
357	.align			32
358prepr9:	faligndata		%f56, %f58, %f16
359	faligndata		%f58, %f60, %f18
360	faligndata		%f60, %f62, %f20
361	ba,pt			%xcc, narrowst
362	 faligndata		%f62, %f0, %f22
363	.align			32
364prepr10:faligndata		%f42, %f44, %f16
365	faligndata		%f44, %f46, %f18
366	ba,pt			%xcc, narrowst
367	 faligndata		%f46, %f0, %f20
368	.align			32
369prepr11:faligndata		%f58, %f60, %f16
370	faligndata		%f60, %f62, %f18
371	ba,pt			%xcc, narrowst
372	 faligndata		%f62, %f0, %f20
373	.align			32
374prepr12:faligndata		%f44, %f46, %f16
375	ba,pt			%xcc, narrowst
376	 faligndata		%f46, %f0, %f18
377	.align			32
378prepr13:faligndata		%f60, %f62, %f16
379	ba,pt			%xcc, narrowst
380	 faligndata		%f62, %f0, %f18
381	.align			32
382prepr14:ba,pt			%xcc, narrowst
383	 faligndata		%f46, %f0, %f16
384	nop
385	nop
3864:	ba,pt			%xcc, narrowst
387	 faligndata		%f46, %f0, %f30
388	.align			32
389prepr15:ba,pt			%xcc, narrowst
390	 faligndata		%f62, %f0, %f16
391	nop
392	nop
3935:	ba,pt			%xcc, narrowst
394	 faligndata		%f62, %f0, %f30
395
396	.align			32
397prepn0:	faligndata		%ftmp1, %f32, %f30
398	ba,pt			%xcc, leftst
399	 mov			(vis0 - BranchBase), %tmp3
400	nop
4011:	ba,pt			%xcc, leftst
402	 mov			(vis12 - BranchBase), %tmp3
403	.align			32
404prepn1:	faligndata		%ftmp1, %f48, %f30
405	ba,pt			%xcc, leftst
406	 mov			(vis1 - BranchBase), %tmp3
407	nop
4082:	ba,pt			%xcc, leftst
409	 mov			(vis13 - BranchBase), %tmp3
410	.align			32
411prepn2: faligndata		%ftmp1, %f32, %f28
412	faligndata		%f32, %f34, %f30
413	ba,pt			%xcc, leftst
414	 mov			(vis2 - BranchBase), %tmp3
4153:	faligndata		%f44, %f46, %f30
416	ba,pt			%xcc, leftst
417	 mov			(vis14 - BranchBase), %tmp3
418	.align			32
419prepn3: faligndata		%ftmp1, %f48, %f28
420	faligndata		%f48, %f50, %f30
421	ba,pt			%xcc, leftst
422	 mov			(vis3 - BranchBase), %tmp3
423	.align			32
424prepn4: faligndata		%ftmp1, %f32, %f26
425	faligndata		%f32, %f34, %f28
426	faligndata		%f34, %f36, %f30
427	ba,pt			%xcc, leftst
428	 mov			(vis4 - BranchBase), %tmp3
429	.align			32
430prepn5:	faligndata		%ftmp1, %f48, %f26
431	faligndata		%f48, %f50, %f28
432	faligndata		%f50, %f52, %f30
433	ba,pt			%xcc, leftst
434	 mov			(vis5 - BranchBase), %tmp3
435	.align			32
436prepn6: faligndata		%ftmp1, %f32, %f24
437	faligndata		%f32, %f34, %f26
438	faligndata		%f34, %f36, %f28
439	faligndata		%f36, %f38, %f30
440	ba,pt			%xcc, leftst
441	 mov			(vis6 - BranchBase), %tmp3
442	.align			32
443prepn7:	faligndata		%ftmp1, %f48, %f24
444	faligndata		%f48, %f50, %f26
445	faligndata		%f50, %f52, %f28
446	faligndata		%f52, %f54, %f30
447	ba,pt			%xcc, leftst
448	 mov			(vis7 - BranchBase), %tmp3
449	.align			32
450prepn8:	faligndata		%ftmp1, %f32, %f22
451	faligndata		%f32, %f34, %f24
452	faligndata		%f34, %f36, %f26
453	faligndata		%f36, %f38, %f28
454	faligndata		%f38, %f40, %f30
455	ba,pt			%xcc, leftst
456	 mov			(vis8 - BranchBase), %tmp3
457	.align			32
458prepn9:	faligndata		%ftmp1, %f48, %f22
459	faligndata		%f48, %f50, %f24
460	faligndata		%f50, %f52, %f26
461	faligndata		%f52, %f54, %f28
462	faligndata		%f54, %f56, %f30
463	ba,pt			%xcc, leftst
464	 mov			(vis9 - BranchBase), %tmp3
465	.align			32
466prepn10:faligndata		%ftmp1, %f32, %f20
467	faligndata		%f32, %f34, %f22
468	faligndata		%f34, %f36, %f24
469	faligndata		%f36, %f38, %f26
470	faligndata		%f38, %f40, %f28
471	faligndata		%f40, %f42, %f30
472	ba,pt			%xcc, leftst
473	 mov			(vis10 - BranchBase), %tmp3
474	.align			32
475prepn11:faligndata		%ftmp1, %f48, %f20
476	faligndata		%f48, %f50, %f22
477	faligndata		%f50, %f52, %f24
478	faligndata		%f52, %f54, %f26
479	faligndata		%f54, %f56, %f28
480	faligndata		%f56, %f58, %f30
481	ba,pt			%xcc, leftst
482	 mov			(vis11 - BranchBase), %tmp3
483	.align			32
484prepn12:faligndata		%ftmp1, %f32, %f18
485	faligndata		%f32, %f34, %f20
486	faligndata		%f34, %f36, %f22
487	faligndata		%f36, %f38, %f24
488	faligndata		%f38, %f40, %f26
489	faligndata		%f40, %f42, %f28
490	ba,pt			%xcc, 1b
491	 faligndata		%f42, %f44, %f30
492	.align			32
493prepn13:faligndata		%ftmp1, %f48, %f18
494	faligndata		%f48, %f50, %f20
495	faligndata		%f50, %f52, %f22
496	faligndata		%f52, %f54, %f24
497	faligndata		%f54, %f56, %f26
498	faligndata		%f56, %f58, %f28
499	ba,pt			%xcc, 2b
500	 faligndata		%f58, %f60, %f30
501	.align			32
502prepn14:faligndata		%ftmp1, %f32, %f16
503	faligndata		%f32, %f34, %f18
504	faligndata		%f34, %f36, %f20
505	faligndata		%f36, %f38, %f22
506	faligndata		%f38, %f40, %f24
507	faligndata		%f40, %f42, %f26
508	ba,pt			%xcc, 3b
509	 faligndata		%f42, %f44, %f28
510	.align			32
511prepn15:faligndata		%ftmp1, %f48, %f16
512	faligndata		%f48, %f50, %f18
513	faligndata		%f50, %f52, %f20
514	faligndata		%f52, %f54, %f22
515	faligndata		%f54, %f56, %f24
516	faligndata		%f56, %f58, %f26
517	faligndata		%f58, %f60, %f28
518	faligndata		%f60, %f62, %f30
519	ba,pt			%xcc, leftst
520	 mov			(vis15 - BranchBase), %tmp3
521
522	.align			64
523BranchBase:
524prepl0:	FREG_FROB(f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep0e,prep0r),f48)
525	ba,pt			%xcc, leftst
526	 mov			(vis1 - BranchBase), %tmp3
527	.align			64
528prepl1:	FREG_FROB(f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep1e,prep1r),f32)
529	ba,pt			%xcc, leftst
530	 mov			(vis0 - BranchBase), %tmp3
531	.align			64
532prepl2:	FREG_FROB(f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep2e,prep2r),f48,f48,,f50)
533	ba,pt			%xcc, leftst
534	 mov			(vis3 - BranchBase), %tmp3
535	.align			64
536prepl3:	FREG_FROB(f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep3e,prep3r),f32,f32,,f34)
537	ba,pt			%xcc, leftst
538	 mov			(vis2 - BranchBase), %tmp3
539	.align			64
540prepl4:	FREG_FROB(f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep4e,prep4r),f48,f48,,f50,f50,,f52)
541	ba,pt			%xcc, leftst
542	 mov			(vis5 - BranchBase), %tmp3
543	.align			64
544prepl5:	FREG_FROB(f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep5e,prep5r),f32,f32,,f34,f34,,f36)
545	ba,pt			%xcc, leftst
546	 mov			(vis4 - BranchBase), %tmp3
547	.align			64
548prepl6:	FREG_FROB(f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep6e,prep6r),f48,f48,,f50,f50,,f52,f52,,f54)
549	ba,pt			%xcc, leftst
550	 mov			(vis7 - BranchBase), %tmp3
551	.align			64
552prepl7:	FREG_FROB(f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep7e,prep7r),f32,f32,,f34,f34,,f36,f36,,f38)
553	ba,pt			%xcc, leftst
554	 mov			(vis6 - BranchBase), %tmp3
555	.align			64
556prepl8:	FREG_FROB(f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep8e,prep8r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56)
557	ba,pt			%xcc, leftst
558	 mov			(vis9 - BranchBase), %tmp3
559	.align			64
560prepl9:	FREG_FROB(f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep9e,prep9r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40)
561	ba,pt			%xcc, leftst
562	 mov			(vis8 - BranchBase), %tmp3
563	.align			64
564prepl10:FREG_FROB(f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep10e,prep10r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58)
565	ba,pt			%xcc, leftst
566	 mov			(vis11 - BranchBase), %tmp3
567	.align			64
568prepl11:FREG_FROB(f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep11e,prep11r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42)
569	ba,pt			%xcc, leftst
570	 mov			(vis10 - BranchBase), %tmp3
571	.align			64
572prepl12:FREG_FROB(f44,,f46,ftmp1,PREPLOAD(f32,f46,prep12e,prep12r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60)
573	ba,pt			%xcc, leftst
574	 mov			(vis13 - BranchBase), %tmp3
575	.align			64
576prepl13:FREG_FROB(f60,,f62,ftmp1,PREPLOAD(f48,f62,prep13e,prep13r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44)
577	ba,pt			%xcc, leftst
578	 mov			(vis12 - BranchBase), %tmp3
579	.align			64
580prepl14:FREG_FROB(ftmp1,PREPLOAD(f32,f46,prep14e,prep14r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62)
581	ba,pt			%xcc, leftst
582	 mov			(vis15 - BranchBase), %tmp3
583	.align			64
584prepl15:FREG_FROB(ftmp1,PREPLOAD(f48,f62,prep15e,prep15r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46)
585	ba,pt			%xcc, leftst
586	 mov			(vis14 - BranchBase), %tmp3
587
588	.align			128
589vis0:	FREG_FROB(f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis0e,vis0r),f48)
590	STORE
591	add			%dst, 64, %dst
592vis1:	FREG_FROB(f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis1e,vis1r),f32)
593	STORE
594	ba,pt			%xcc, vis0
595	 add			%dst, 64, %dst
596	.align			128
597vis2:	FREG_FROB(f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis2e,vis2r),f48,f48,,f50)
598	STORE
599	add			%dst, 64, %dst
600vis3:	FREG_FROB(f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis3e,vis3r),f32,f32,,f34)
601	STORE
602	ba,pt			%xcc, vis2
603	 add			%dst, 64, %dst
604	.align			128
605vis4:	FREG_FROB(f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis4e,vis4r),f48,f48,,f50,f50,,f52)
606	STORE
607	add			%dst, 64, %dst
608vis5:	FREG_FROB(f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis5e,vis5r),f32,f32,,f34,f34,,f36)
609	STORE
610	ba,pt			%xcc, vis4
611	 add			%dst, 64, %dst
612	.align			128
613vis6:	FREG_FROB(f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis6e,vis6r),f48,f48,,f50,f50,,f52,f52,,f54)
614	STORE
615	add			%dst, 64, %dst
616vis7:	FREG_FROB(f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis7e,vis7r),f32,f32,,f34,f34,,f36,f36,,f38)
617	STORE
618	ba,pt			%xcc, vis6
619	 add			%dst, 64, %dst
620	.align			128
621vis8:	FREG_FROB(f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis8e,vis8r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56)
622	STORE
623	add			%dst, 64, %dst
624vis9:	FREG_FROB(f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis9e,vis9r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40)
625	STORE
626	ba,pt			%xcc, vis8
627	 add			%dst, 64, %dst
628	.align			128
629vis10:	FREG_FROB(f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis10e,vis10r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58)
630	STORE
631	add			%dst, 64, %dst
632vis11:	FREG_FROB(f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis11e,vis11r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42)
633	STORE
634	ba,pt			%xcc, vis10
635	 add			%dst, 64, %dst
636	.align			128
637vis12:	FREG_FROB(f44,,f46,ftmp1,LOAD(f32,f46,vis12e,vis12r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60)
638	STORE
639	add			%dst, 64, %dst
640vis13:	FREG_FROB(f60,,f62,ftmp1,LOAD(f48,f62,vis13e,vis13r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44)
641	STORE
642	ba,pt			%xcc, vis12
643	 add			%dst, 64, %dst
644	.align			128
645vis14:	FREG_FROB(ftmp1,LOAD(f32,f46,vis14e,vis14r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62)
646	STORE
647	add			%dst, 64, %dst
648vis15:	FREG_FROB(ftmp1,LOAD(f48,f62,vis15e,vis15r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46)
649	STORE
650	ba,pt			%xcc, vis14
651	 add			%dst, 64, %dst
652
653leftst:	brlz,pn			%curw, narrowst + 4
654	 and			%leftw, 0x38, %tmp1
655	andcc			%leftw, 7, %g0
656	be,pn			%icc, 1f
657	 neg			%tmp1
658	sub			%dst, %leftw, %tmp4
659	add			%branchbase, (2f - BranchBase - 8), %tmp2
660	edge8			%tmp4, %g0, %tmp5
661	jmpl			%tmp2 + %tmp1, %g0
662	 andn			%tmp4, 7, %tmp4
6631:	addcc			%branchbase, (3f - BranchBase), %tmp2
664	sra			%tmp1, 1, %tmp1
665	jmpl			%tmp2 + %tmp1, %g0
666	 nop
667	ba,pt			%xcc, 2f+0x00
668	 stda			%f16, [%tmp4 + %tmp5] ASI_PST8_P
669	ba,pt			%xcc, 2f+0x04
670	 stda			%f18, [%tmp4 + %tmp5] ASI_PST8_P
671	ba,pt			%xcc, 2f+0x08
672	 stda			%f20, [%tmp4 + %tmp5] ASI_PST8_P
673	ba,pt			%xcc, 2f+0x0c
674	 stda			%f22, [%tmp4 + %tmp5] ASI_PST8_P
675	ba,pt			%xcc, 2f+0x10
676	 stda			%f24, [%tmp4 + %tmp5] ASI_PST8_P
677	ba,pt			%xcc, 2f+0x14
678	 stda			%f26, [%tmp4 + %tmp5] ASI_PST8_P
679	ba,pt			%xcc, 2f+0x18
680	 stda			%f28, [%tmp4 + %tmp5] ASI_PST8_P
681	jmpl			%branchbase + %tmp3, %g0
682	 stda			%f30, [%tmp4 + %tmp5] ASI_PST8_P
6832:	std			%f18, [%dst - 0x38]
684	std			%f20, [%dst - 0x30]
685	std			%f22, [%dst - 0x28]
686	std			%f24, [%dst - 0x20]
687	std			%f26, [%dst - 0x18]
688	std			%f28, [%dst - 0x10]
689	std			%f30, [%dst - 0x08]
6903:	jmpl			%branchbase + %tmp3, %g0
691	 nop
692
693rightst:cmp			%rightw, 64
694	be,pn			%icc, 2f
695	 and			%rightw, 0x38, %tmp1
696	andcc			%rightw, 7, %g0
697	be,pn			%icc, 1f
698	 neg			%tmp1
699	sub			%g0, %rightw, %tmp5
700	add			%branchbase, (3f - BranchBase - 8), %tmp2
701	edge8l			%tmp5, %g0, %tmp5
702	add			%mode, %skind, %mode
703	jmpl			%tmp1 + %tmp2, %g0
704	 sub			%dst, %tmp1, %tmp4
7051:	addcc			%branchbase, (4f - BranchBase), %tmp2
706	sra			%tmp1, 1, %tmp1
707	jmpl			%tmp1 + %tmp2, %g0
7082:	 add			%mode, %skind, %mode
709	ba,pt			%xcc, 4f
710	 stda			%f16, [%dst] ASI_BLK_P
711	ba,pt			%xcc, 3f+0x00
712	 stda			%f30, [%tmp4 + %tmp5] ASI_PST8_P
713	ba,pt			%xcc, 3f+0x04
714	 stda			%f28, [%tmp4 + %tmp5] ASI_PST8_P
715	ba,pt			%xcc, 3f+0x08
716	 stda			%f26, [%tmp4 + %tmp5] ASI_PST8_P
717	ba,pt			%xcc, 3f+0x0c
718	 stda			%f24, [%tmp4 + %tmp5] ASI_PST8_P
719	ba,pt			%xcc, 3f+0x10
720	 stda			%f22, [%tmp4 + %tmp5] ASI_PST8_P
721	ba,pt			%xcc, 3f+0x14
722	 stda			%f20, [%tmp4 + %tmp5] ASI_PST8_P
723	ba,pt			%xcc, 3f+0x18
724	 stda			%f18, [%tmp4 + %tmp5] ASI_PST8_P
725	ba,pt			%xcc, 3f+0x1c
726	 stda			%f16, [%tmp4 + %tmp5] ASI_PST8_P
7273:	std			%f28, [%dst + 0x30]
728	std			%f26, [%dst + 0x28]
729	std			%f24, [%dst + 0x20]
730	std			%f22, [%dst + 0x18]
731	std			%f20, [%dst + 0x10]
732	std			%f18, [%dst + 0x08]
733	std			%f16, [%dst + 0x00]
7344:	brnz,pn			%narrow, narrow_cont
735	 deccc			%srcnotdone
736	blu,pn			%ICC, return
737	 sub			%mode, %dkind, %mode
738	alignaddr		%mode, %g0, %g0
739	and			%mode, 63, %mode
740	cmp			%srcnext, %srcn
741	bne,a,pn		%ICC, 6f
742	 xor			%fregset, 64, %fregset
743	brnz,a,pn		%fregset, 5f
744	 ldda			[%src] ASI_BLK_P, %f32
745	ldda			[%src] ASI_BLK_P, %f48
7465:	add			%src, 64, %src
7476:	add			%dst, %dkind, %dst
748	sub			%w, %rightw, %tmp1
749	add			%srcstart, %skind, %srcstart
750	sub			%dst, %tmp1, %dst
751	add			%rightw, %dkind, %rightw
752	andn			%dst, 63, %dst
753	sub			%rightw, 1, %rightw
754	sub			%leftw, %dkind, %leftw
755	and			%rightw, 63, %rightw
756	and			%leftw, 63, %leftw
757	add			%rightw, 1, %rightw
758roll_wide:
759	add			%srcstart, %w, %srcend
760	add			%srcstart, %skind, %srcnext
761	fnop
762	add			%srcend, 63, %srcend
763	andncc			%srcnext, 63, %srcnext
764	fnop
765	sll			%mode, 4, %tmp1
766	andn			%srcend, 63, %srcend
767	fnop
768	mov			%srcnext, %srcn
769	and			%mode, 7, %rightw2
770	fnop
771	andn			%tmp1, 127, %tmp1
772	add			%rightw2, %rightw, %rightw2
773	fnop
774	add			%tmp1, %fregset, %tmp1
775	subcc			%w, %leftw, %tmp3
776	fnop
777	srl			%tmp1, 1, %tmp2
778	add			%srcnext, 64, %tmp4
779	fnop
780	add			%tmp2, (prepn0 - BranchBase), %tmp2
781	cmp			%mode, %leftw
782	movgeu			%icc, %tmp2, %tmp1
783	cmp			%tmp4, %srcend
784	add			%dst, 64, %tmp4
785	move			%ICC, %srcend, %srcnext
786	movrnz			%leftw, %tmp4, %dst
787	jmpl			%branchbase + %tmp1, %g0
788	 sub			%tmp3, %rightw, %curw
789
790return: return			%i7+8
791#if defined(__NetBSD__)
792	 wr			%g0, 4, %fprs
793#else
794	 wr			%g0, 0, %fprs
795#endif
796
797narrowst:
798	and			%leftw, 0x38, %tmp1
799	sub			%dst, %leftw, %tmp5
800	sub			%w, 1, %fregset
801	andcc			%leftw, 7, %tmp4
802	add			%fregset, %tmp5, %fregset
803	neg			%tmp1
804	and			%fregset, 7, %srcend
805	be,pn			%icc, 1f
806	 edge8			%g0, %srcend, %srcend
807	add			%tmp1, (2f - BranchBase - 8), %tmp1
808	edge8			%tmp5, %fregset, %tmp2
809	andn			%tmp5, 7, %tmp5
810	andn			%fregset, 7, %fregset
811	jmpl			%branchbase + %tmp1, %g0
812	 sub			%w, %tmp4, %tmp4
8131:	addcc			%branchbase, (3f - BranchBase - 8), %tmp2
814	sll			%tmp1, 1, %tmp1
815	andn			%fregset, 7, %fregset
816	jmpl			%tmp2 + %tmp1, %g0
817	 mov			%w, %tmp4
818	ba,pt			%xcc, 2f+0x00
819	 stda			%f16, [%tmp5 + %tmp2] ASI_PST8_P
820	ba,pt			%xcc, 2f+0x10
821	 stda			%f18, [%tmp5 + %tmp2] ASI_PST8_P
822	ba,pt			%xcc, 2f+0x20
823	 stda			%f20, [%tmp5 + %tmp2] ASI_PST8_P
824	ba,pt			%xcc, 2f+0x30
825	 stda			%f22, [%tmp5 + %tmp2] ASI_PST8_P
826	ba,pt			%xcc, 2f+0x40
827	 stda			%f24, [%tmp5 + %tmp2] ASI_PST8_P
828	ba,pt			%xcc, 2f+0x50
829	 stda			%f26, [%tmp5 + %tmp2] ASI_PST8_P
830	ba,pt			%xcc, 2f+0x60
831	 stda			%f28, [%tmp5 + %tmp2] ASI_PST8_P
832	ba,pt			%xcc, 4f
833	 stda			%f30, [%tmp5 + %tmp2] ASI_PST8_P
8342:	subcc			%tmp4, 8, %tmp4
835	bl,pn			%icc, 3f+0x00
836	 fnop
837	std			%f18, [%dst - 0x38]
838	subcc			%tmp4, 8, %tmp4
839	bl,pn			%icc, 3f+0x10
840	 fnop
841	std			%f20, [%dst - 0x30]
842	subcc			%tmp4, 8, %tmp4
843	bl,pn			%icc, 3f+0x20
844	 fnop
845	std			%f22, [%dst - 0x28]
846	subcc			%tmp4, 8, %tmp4
847	bl,pn			%icc, 3f+0x30
848	 fnop
849	std			%f24, [%dst - 0x20]
850	subcc			%tmp4, 8, %tmp4
851	bl,pn			%icc, 3f+0x40
852	 fnop
853	std			%f26, [%dst - 0x18]
854	subcc			%tmp4, 8, %tmp4
855	bl,pn			%icc, 3f+0x50
856	 fnop
857	std			%f28, [%dst - 0x10]
858	subcc			%tmp4, 8, %tmp4
859	bl,pn			%icc, 3f+0x60
860	 fnop
861	std			%f30, [%dst - 0x08]
862	ba,pt			%xcc, 4f
863	 nop
8643:	cmp			%tmp4, -8
865	bg,a,pn			%ICC, 4f
866	 stda			%f18, [%fregset + %srcend] ASI_PST8_P
867	ba,a,pt			%xcc, 4f
868	cmp			%tmp4, -8
869	bg,a,pn			%ICC, 4f
870	 stda			%f20, [%fregset + %srcend] ASI_PST8_P
871	ba,a,pt			%xcc, 4f
872	cmp			%tmp4, -8
873	bg,a,pn			%ICC, 4f
874	 stda			%f22, [%fregset + %srcend] ASI_PST8_P
875	ba,a,pt			%xcc, 4f
876	cmp			%tmp4, -8
877	bg,a,pn			%ICC, 4f
878	 stda			%f24, [%fregset + %srcend] ASI_PST8_P
879	ba,a,pt			%xcc, 4f
880	cmp			%tmp4, -8
881	bg,a,pn			%ICC, 4f
882	 stda			%f26, [%fregset + %srcend] ASI_PST8_P
883	ba,a,pt			%xcc, 4f
884	cmp			%tmp4, -8
885	bg,a,pn			%ICC, 4f
886	 stda			%f28, [%fregset + %srcend] ASI_PST8_P
887	ba,a,pt			%xcc, 4f
888	cmp			%tmp4, -8
889	bg,a,pn			%ICC, 4f
890	 stda			%f30, [%fregset + %srcend] ASI_PST8_P
8914:	and			%tmp3, 60, %tmp3
892	sub			%dst, 64, %dst
893	add			%tmp3, 96, %tmp3
894	add			%mode, %skind, %mode
895	brz,pn			%h, return
896	 and			%tmp3, 64, %fregset
897narrow_cont:
898	deccc			%h
899	blu,pn			%ICC, return
900	 sub			%mode, %dkind, %mode
901	alignaddr		%mode, %g0, %g0
902	and			%mode, 63, %mode
903	sub			%srcnext, %srcn, %tmp4
904	add			%dst, %dkind, %dst
905	sub			%w, %rightw, %tmp1
906	add			%srcstart, %skind, %srcstart
907	sub			%dst, %tmp1, %dst
908	add			%rightw, %dkind, %rightw
909	sub			%leftw, %dkind, %leftw
910	sub			%rightw, 1, %rightw
911	and			%leftw, 63, %leftw
912	and			%rightw, 63, %rightw
913	add			%srcstart, %w, %srcend
914	add			%rightw, 1, %rightw
915	add			%srcstart, %skind, %srcnext
916	add			%srcend, 63, %srcend
917	andn			%srcnext, 63, %srcnext
918	andn			%srcend, 63, %srcend
919	sub			%w, %leftw, %prepw
920	mov			%srcnext, %srcn
921	add			%srcnext, 64, %tmp2
922	sub			%srcnext, 64, %tmp3
923	and			%srcstart, 63, %tmp1
924	cmp			%skind, 0
925	movg			%ICC, %srcend, %tmp3
926	sub			%prepw, %rightw, %prepw
927	add			%tmp1, %w, %tmp1
928	cmp			%tmp2, %srcend
929	mov			%prepw, %curw
930	move			%ICC, %tmp3, %srcnext
931	mov			%h, %srcnotdone
932	cmp			%tmp1, 128
933	movg			%ICC, 64, %prepw
934	andn			%dst, 63, %dst
935	cmp			%srcnext, %srcstop
936	move			%ICC, 0, %srcnotdone
937	brnz,a,pn		%tmp4, roll_narrow
938	 xor			%fregset, 64, %fregset
939	cmp			%tmp1, 64
940	bg,pt			%ICC, 5f
941	 tst			%srcnotdone
942	be,a,pn			%ICC, roll_narrow
943	 membar			SYNC
944	mov			%srcnext, %src
9455:	brnz,a,pn		%fregset, 6f
946	 ldda			[%src] ASI_BLK_P, %f32
947	ldda			[%src] ASI_BLK_P, %f48
9486:	addcc			%src, 64, %src
949roll_narrow:
950	fnop
951	sll			%mode, 4, %tmp2
952	and			%mode, 7, %rightw2
953	fnop
954	andn			%tmp2, 127, %tmp2
955	add			%dst, 64, %tmp4
956	fnop
957	add			%tmp2, %fregset, %tmp2
958	addcc			%rightw2, %rightw, %rightw2
959	fnop
960	srl			%tmp2, 1, %tmp3
961	movrnz			%leftw, %tmp4, %dst
962	fnop
963	add			%tmp3, (prepr0 - BranchBase), %tmp4
964	cmp			%tmp1, 64
965	movleu			%icc, %tmp4, %tmp2
966	fnop
967	add			%tmp3, (prepn0 - BranchBase), %tmp4
968	cmp			%mode, %leftw
969	fnop
970	movgeu			%icc, %tmp4, %tmp2
971	jmpl			%branchbase + %tmp2, %g0
972	 and			%tmp3, 32, %tmp3
973
974#define VISEND(i,tgt,tgtr,fi,fset)				\
975tgt:								\
976	brnz,pt			%curw, 1f;			\
977	 cmp			%rightw2, (64 - (i&14)*4);	\
978	bgu,pn			%icc, tgtr - 8;			\
979	 tst			%srcnotdone;			\
980	be,a,pn			%ICC, tgtr;			\
981	 membar			SYNC;				\
982	ba,pt			%xcc, tgtr - 8;			\
983	 mov			%srcnext, %src;			\
9841:	mov			((i & 1) ^ 1) * 64, %fregset;	\
985	bleu,pn			%icc, rightst;			\
986	 faligndata		%ftmp1, %ftmp2, %fi;		\
987	brz,a,pn		%srcnotdone, 3f;		\
988	 membar			SYNC;				\
989	ldda			[%srcnext] ASI_BLK_P, %fset;	\
990	add			%srcnext, 64, %src;		\
9913:	mov			(i & 1) * 64, %fregset;
992
993VISEND(0,vis0e,vis0r,f30,f32)
994	ba,pt			%xcc, rightst
995	 faligndata		%ftmp1, %f48, %f30
996VISEND(1,vis1e,vis1r,f30,f48)
997	ba,pt			%xcc, rightst
998	 faligndata		%ftmp1, %f32, %f30
999VISEND(2,vis2e,vis2r,f28,f32)
1000	faligndata		%ftmp1, %f48, %f28
1001	ba,pt			%xcc, rightst
1002	 faligndata		%f48, %f50, %f30
1003VISEND(3,vis3e,vis3r,f28,f48)
1004	faligndata		%ftmp1, %f32, %f28
1005	ba,pt			%xcc, rightst
1006	 faligndata		%f32, %f34, %f30
1007VISEND(4,vis4e,vis4r,f26,f32)
1008	faligndata		%ftmp1, %f48, %f26
1009	faligndata		%f48, %f50, %f28
1010	ba,pt			%xcc, rightst
1011	 faligndata		%f50, %f52, %f30
1012VISEND(5,vis5e,vis5r,f26,f48)
1013	faligndata		%ftmp1, %f32, %f26
1014	faligndata		%f32, %f34, %f28
1015	ba,pt			%xcc, rightst
1016	 faligndata		%f34, %f36, %f30
1017VISEND(6,vis6e,vis6r,f24,f32)
1018	faligndata		%ftmp1, %f48, %f24
1019	faligndata		%f48, %f50, %f26
1020	faligndata		%f50, %f52, %f28
1021	ba,pt			%xcc, rightst
1022	 faligndata		%f52, %f54, %f30
1023VISEND(7,vis7e,vis7r,f24,f48)
1024	faligndata		%ftmp1, %f32, %f24
1025	faligndata		%f32, %f34, %f26
1026	faligndata		%f34, %f36, %f28
1027	ba,pt			%xcc, rightst
1028	 faligndata		%f36, %f38, %f30
1029VISEND(8,vis8e,vis8r,f22,f32)
1030	faligndata		%ftmp1, %f48, %f22
1031	faligndata		%f48, %f50, %f24
1032	faligndata		%f50, %f52, %f26
1033	faligndata		%f52, %f54, %f28
1034	ba,pt			%xcc, rightst
1035	 faligndata		%f54, %f56, %f30
1036VISEND(9,vis9e,vis9r,f22,f48)
1037	faligndata		%ftmp1, %f32, %f22
1038	faligndata		%f32, %f34, %f24
1039	faligndata		%f34, %f36, %f26
1040	faligndata		%f36, %f38, %f28
1041	ba,pt			%xcc, rightst
1042	 faligndata		%f38, %f40, %f30
1043VISEND(10,vis10e,vis10r,f20,f32)
1044	faligndata		%ftmp1, %f48, %f20
1045	faligndata		%f48, %f50, %f22
1046	faligndata		%f50, %f52, %f24
1047	faligndata		%f52, %f54, %f26
1048	faligndata		%f54, %f56, %f28
1049	ba,pt			%xcc, rightst
1050	 faligndata		%f56, %f58, %f30
1051VISEND(11,vis11e,vis11r,f20,f48)
1052	faligndata		%ftmp1, %f32, %f20
1053	faligndata		%f32, %f34, %f22
1054	faligndata		%f34, %f36, %f24
1055	faligndata		%f36, %f38, %f26
1056	faligndata		%f38, %f40, %f28
1057	ba,pt			%xcc, rightst
1058	 faligndata		%f40, %f42, %f30
1059VISEND(12,vis12e,vis12r,f18,f32)
1060	faligndata		%ftmp1, %f48, %f18
1061	faligndata		%f48, %f50, %f20
1062	faligndata		%f50, %f52, %f22
1063	faligndata		%f52, %f54, %f24
1064	faligndata		%f54, %f56, %f26
1065	faligndata		%f56, %f58, %f28
1066	ba,pt			%xcc, rightst
1067	 faligndata		%f58, %f60, %f30
1068VISEND(13,vis13e,vis13r,f18,f48)
1069	faligndata		%ftmp1, %f32, %f18
1070	faligndata		%f32, %f34, %f20
1071	faligndata		%f34, %f36, %f22
1072	faligndata		%f36, %f38, %f24
1073	faligndata		%f38, %f40, %f26
1074	faligndata		%f40, %f42, %f28
1075	ba,pt			%xcc, rightst
1076	 faligndata		%f42, %f44, %f30
1077VISEND(14,vis14e,vis14r,f16,f32)
1078	faligndata		%ftmp1, %f48, %f16
1079	faligndata		%f48, %f50, %f18
1080	faligndata		%f50, %f52, %f20
1081	faligndata		%f52, %f54, %f22
1082	faligndata		%f54, %f56, %f24
1083	faligndata		%f56, %f58, %f26
1084	faligndata		%f58, %f60, %f28
1085	ba,pt			%xcc, rightst
1086	 faligndata		%f60, %f62, %f30
1087VISEND(15,vis15e,vis15r,f16,f48)
1088	faligndata		%ftmp1, %f32, %f16
1089	faligndata		%f32, %f34, %f18
1090	faligndata		%f34, %f36, %f20
1091	faligndata		%f36, %f38, %f22
1092	faligndata		%f38, %f40, %f24
1093	faligndata		%f40, %f42, %f26
1094	faligndata		%f42, %f44, %f28
1095	ba,pt			%xcc, rightst
1096	 faligndata		%f44, %f46, %f30
1097
1098#define PREPEND(tgt,tgtr)					\
1099tgt:								\
1100	brnz,pt			%srcnotdone, tgtr - 8;		\
1101	 mov			%srcnext, %src;			\
1102	ba,pt			%xcc, tgtr;			\
1103	 membar			SYNC;
1104
1105	.align			16
1106PREPEND(prep0e,prep0r)
1107PREPEND(prep1e,prep1r)
1108PREPEND(prep2e,prep2r)
1109PREPEND(prep3e,prep3r)
1110PREPEND(prep4e,prep4r)
1111PREPEND(prep5e,prep5r)
1112PREPEND(prep6e,prep6r)
1113PREPEND(prep7e,prep7r)
1114PREPEND(prep8e,prep8r)
1115PREPEND(prep9e,prep9r)
1116PREPEND(prep10e,prep10r)
1117PREPEND(prep11e,prep11r)
1118PREPEND(prep12e,prep12r)
1119PREPEND(prep13e,prep13r)
1120PREPEND(prep14e,prep14r)
1121PREPEND(prep15e,prep15r)
1122
1123/* The other way is even more complicated, as the hardware prefers
1124 * going from lower addresses up.  */
1125
1126#define RLOAD(f32,tgt,tgtr)							\
1127	subcc			%curw, 64, %curw;				\
1128	bleu,pn			%ICC, tgt;					\
1129	 fmovd			%f32, %ftmp1;					\
1130	ldda			[%src] ASI_BLK_P, %f32;				\
1131	sub			%src, 64, %src;					\
1132tgtr:
1133
1134#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__) || !defined(SIGNAL_CLOBBERS_OG_REGS)
1135
1136#define RPREPLOAD(f32,tgt,tgtr)							\
1137	brlez,pn		%prepw, tgt;					\
1138	 fmovd			%f32, %ftmp1;					\
1139	ldda			[%src] ASI_BLK_P, %f32;				\
1140	sub			%src, 64, %src;					\
1141tgtr:
1142
1143#else
1144
1145#define RPREPLOAD(f32,tgt,tgtr)							\
1146	tst			%prepw;						\
1147	ble,pn			%ICC, tgt;					\
1148	 fmovd			%f32, %ftmp1;					\
1149	ldda			[%src] ASI_BLK_P, %f32;				\
1150	sub			%src, 64, %src;					\
1151tgtr:
1152
1153#endif
1154
1155	.globl			VISmoveImageRL
1156	.align			32
1157VISmoveImageRL:
1158#ifdef __arch64__
1159	save			%sp, -192, %sp				! Group 0
1160#else
1161	save			%sp, -96, %sp				! Group 0
1162#endif
11630:	rd			%pc, %tmp3				! Group 1
1164	and			%dst, 63, %leftw			! Group 7
1165	mov			64, %tmp1
1166	add			%src, %w, %src				! Group 8
1167	add			%dst, %w, %dst
1168	sub			%src, %dst, %mode			! Group 9
1169	brz,pn			%h, rreturn
1170	 sub			%dst, 1, %rightw			! Group 10
1171	mov			%src, %srcstart
1172	dec			%src					! Group 11
1173	cmp			%w, 128
1174	blu,pn			%ICC, rprepare_narrow
1175	 and			%mode, 63, %mode			! Group 12
1176	andn			%src, 63, %src
1177	ldda			[%src] ASI_BLK_P, %f32			! Group 13
1178	sub			%src, 64, %src				! Group 14
1179	clr			%narrow
1180	ldda			[%src] ASI_BLK_P, %f48			! Group 15
1181	sub			%tmp1, %leftw, %leftw			! Group 16
1182	and			%rightw, 63, %rightw
1183	dec			%dst					! Group 17
1184	add			%rightw, 1, %rightw
1185	alignaddr		%mode, %g0, %g0				! Group 18
1186	andn			%dst, 63, %dst				! Group 19
1187	clr			%fregset
1188	sub			%src, 64, %src				! Group 20
1189	add			%tmp3, (BranchBaseR - 0b), %branchbase
1190	mov			64, %prepw				! Group 21
1191	ba,pt			%xcc, rroll_wide
1192	 sub			%h, 1, %srcnotdone
1193rprepare_narrow:
1194#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__)
1195	brlez,pn		%w, rreturn
1196#else
1197	tst			%w
1198	ble,pn			%icc, rreturn
1199#endif
1200	 andn			%src, 63, %src				! Group 12
1201	sub			%tmp1, %leftw, %leftw
1202	ldda			[%src] ASI_BLK_P, %f32			! Group 13
1203	and			%rightw, 63, %rightw			! Group 14
1204	dec			%dst
1205	add			%rightw, 1, %rightw			! Group 15
1206	andn			%dst, 63, %dst
1207	sub			%w, %leftw, %tmp2			! Group 16
1208	sub			%srcstart, 1, %tmp1
1209	subcc			%tmp2, %rightw, %curw			! Group 17
1210	and			%tmp1, 63, %tmp1
1211	mov			%curw, %prepw				! Group 18
1212	sub			%tmp1, %w, %tmp1
1213	bg,pt			%ICC, 1f
1214	 sub			%src, 64, %src				! Group 19
1215	cmp			%tmp1, -65
1216	movl			%ICC, 64, %prepw			! Group 20
12171:	add			%srcstart, %skind, %srcnext
1218	sub			%h, 1, %srcnotdone			! Group 21
1219	sub			%srcstart, %w, %tmp4
1220	sub			%srcnext, 1, %srcnext			! Group 22
1221	andn			%tmp4, 63, %srcend
1222	andn			%srcnext, 63, %srcnext			! Group 23
1223	cmp			%skind, 0
1224	add			%w, 64, %tmp2				! Group 24
1225	mov			%srcnext, %srcn
1226	bl,pn			%ICC, 1f
1227	 clr			%srcstop				! Group 25
1228	cmp			%skind, %tmp2
1229	bgeu,pt			%ICC, 3f
1230	 add			%srcnext, 64, %fregset
1231	SMUL			%skind, %srcnotdone, %srcstop
1232	ba,pt			%xcc, 2f
1233	 add			%srcstart, 63, %tmp4
12341:	addcc			%tmp2, %skind, %g0
1235	ble,pt			%ICC, 3f
1236	 sub			%srcnext, 64, %fregset
1237	SMUL			%skind, %srcnotdone, %srcstop
1238	sub			%tmp4, 64, %tmp4
12392:	add			%srcstop, %tmp4, %srcstop
12403:	cmp			%srcnext, %srcend
1241	andn			%srcstop, 63, %srcstop
1242	move			%ICC, %fregset, %srcnext
1243	cmp			%srcnext, %srcstop
1244	clr			%fregset
1245	move			%ICC, 0, %srcnotdone
1246	alignaddr		%mode, %g0, %g0
1247	add			%tmp3, (BranchBaseR - 0b), %branchbase
1248	mov			1, %narrow
1249	cmp			%tmp1, -1
1250	bge,pn			%ICC, 1f
1251	 dec			%h
1252	ldda			[%src] ASI_BLK_P, %f48
1253	ba,pt			%xcc, rroll_narrow
1254	 subcc			%src, 64, %src
12551:	brz,a,pn		%srcnotdone, rroll_narrow
1256	 membar			#Sync
1257	ldda			[%srcnext] ASI_BLK_P, %f48
1258	ba,pt			%xcc, rroll_narrow
1259	 subcc			%srcnext, 64, %src
1260
1261	.align			32
1262rrepr0:	ba,pt			%xcc, narrowstr
1263	 faligndata		%ftmp1, %f32, %f30
1264	nop
1265	nop
12661:	ba,pt			%xcc, narrowstr
1267	 faligndata		%ftmp1, %f32, %f16
1268	.align			32
1269rrepr1:	ba,pt			%xcc, narrowstr
1270	 faligndata		%ftmp1, %f48, %f30
1271	nop
1272	nop
12732:	ba,pt			%xcc, narrowstr
1274	 faligndata		%ftmp1, %f48, %f16
1275	.align			32
1276rrepr2:	faligndata		%f32, %f34, %f30
1277	ba,pt			%xcc, narrowstr
1278	 faligndata		%ftmp1, %f32, %f28
1279	.align			32
1280rrepr3:	faligndata		%f48, %f50, %f30
1281	ba,pt			%xcc, narrowstr
1282	 faligndata		%ftmp1, %f48, %f28
1283	.align			32
1284rrepr4:	faligndata		%f34, %f36, %f30
1285	faligndata		%f32, %f34, %f28
1286	ba,pt			%xcc, narrowstr
1287	 faligndata		%ftmp1, %f32, %f26
1288	.align			32
1289rrepr5: faligndata		%f50, %f52, %f30
1290	faligndata		%f48, %f50, %f28
1291	ba,pt			%xcc, narrowstr
1292	 faligndata		%ftmp1, %f48, %f26
1293	.align			32
1294rrepr6:	faligndata		%f36, %f38, %f30
1295	faligndata		%f34, %f36, %f28
1296	faligndata		%f32, %f34, %f26
1297	ba,pt			%xcc, narrowstr
1298	 faligndata		%ftmp1, %f32, %f24
1299	.align			32
1300rrepr7: faligndata		%f52, %f54, %f30
1301	faligndata		%f50, %f52, %f28
1302	faligndata		%f48, %f50, %f26
1303	ba,pt			%xcc, narrowstr
1304	 faligndata		%ftmp1, %f48, %f24
1305	.align			32
1306rrepr8:	faligndata		%f38, %f40, %f30
1307	faligndata		%f36, %f38, %f28
1308	faligndata		%f34, %f36, %f26
1309	faligndata		%f32, %f34, %f24
1310	ba,pt			%xcc, narrowstr
1311	 faligndata		%ftmp1, %f32, %f22
1312	.align			32
1313rrepr9: faligndata		%f54, %f56, %f30
1314	faligndata		%f52, %f54, %f28
1315	faligndata		%f50, %f52, %f26
1316	faligndata		%f48, %f50, %f24
1317	ba,pt			%xcc, narrowstr
1318	 faligndata		%ftmp1, %f48, %f22
1319	.align			32
1320rrepr10:faligndata		%f40, %f42, %f30
1321	faligndata		%f38, %f40, %f28
1322	faligndata		%f36, %f38, %f26
1323	faligndata		%f34, %f36, %f24
1324	faligndata		%f32, %f34, %f22
1325	ba,pt			%xcc, narrowstr
1326	 faligndata		%ftmp1, %f32, %f20
1327	.align			32
1328rrepr11:faligndata		%f56, %f58, %f30
1329	faligndata		%f54, %f56, %f28
1330	faligndata		%f52, %f54, %f26
1331	faligndata		%f50, %f52, %f24
1332	faligndata		%f48, %f50, %f22
1333	ba,pt			%xcc, narrowstr
1334	 faligndata		%ftmp1, %f48, %f20
1335	.align			32
1336rrepr12:faligndata		%f42, %f44, %f30
1337	faligndata		%f40, %f42, %f28
1338	faligndata		%f38, %f40, %f26
1339	faligndata		%f36, %f38, %f24
1340	faligndata		%f34, %f36, %f22
1341	faligndata		%f32, %f34, %f20
1342	ba,pt			%xcc, narrowstr
1343	 faligndata		%ftmp1, %f32, %f18
1344	.align			32
1345rrepr13:faligndata		%f58, %f60, %f30
1346	faligndata		%f56, %f58, %f28
1347	faligndata		%f54, %f56, %f26
1348	faligndata		%f52, %f54, %f24
1349	faligndata		%f50, %f52, %f22
1350	faligndata		%f48, %f50, %f20
1351	ba,pt			%xcc, narrowstr
1352	 faligndata		%ftmp1, %f48, %f18
1353	.align			32
1354rrepr14:faligndata		%f44, %f46, %f30
1355	faligndata		%f42, %f44, %f28
1356	faligndata		%f40, %f42, %f26
1357	faligndata		%f38, %f40, %f24
1358	faligndata		%f36, %f38, %f22
1359	faligndata		%f34, %f36, %f20
1360	ba,pt			%xcc, 1b
1361	 faligndata		%f32, %f34, %f18
1362	.align			32
1363rrepr15:faligndata		%f60, %f62, %f30
1364	faligndata		%f58, %f60, %f28
1365	faligndata		%f56, %f58, %f26
1366	faligndata		%f54, %f56, %f24
1367	faligndata		%f52, %f54, %f22
1368	faligndata		%f50, %f52, %f20
1369	ba,pt			%xcc, 2b
1370	 faligndata		%f48, %f50, %f18
1371
1372	.align			32
1373rrepn0:	faligndata		%f46, %ftmp1, %f30
1374	faligndata		%f44, %f46, %f28
1375	faligndata		%f42, %f44, %f26
1376	faligndata		%f40, %f42, %f24
1377	faligndata		%f38, %f40, %f22
1378	faligndata		%f36, %f38, %f20
1379	ba,pt			%xcc, 1f
1380	 faligndata		%f34, %f36, %f18
1381	.align			32
1382rrepn1:	faligndata		%f62, %ftmp1, %f30
1383	faligndata		%f60, %f62, %f28
1384	faligndata		%f58, %f60, %f26
1385	faligndata		%f56, %f58, %f24
1386	faligndata		%f54, %f56, %f22
1387	faligndata		%f52, %f54, %f20
1388	ba,pt			%xcc, 2f
1389	 faligndata		%f50, %f52, %f18
1390	.align			32
1391rrepn2:	faligndata		%f46, %ftmp1, %f28
1392	faligndata		%f44, %f46, %f26
1393	faligndata		%f42, %f44, %f24
1394	faligndata		%f40, %f42, %f22
1395	faligndata		%f38, %f40, %f20
1396	faligndata		%f36, %f38, %f18
1397	ba,pt			%xcc, 3f
1398	 faligndata		%f34, %f36, %f16
1399	.align			32
1400rrepn3:	faligndata		%f62, %ftmp1, %f28
1401	faligndata		%f60, %f62, %f26
1402	faligndata		%f58, %f60, %f24
1403	faligndata		%f56, %f58, %f22
1404	faligndata		%f54, %f56, %f20
1405	faligndata		%f52, %f54, %f18
1406	ba,pt			%xcc, 4f
1407	 faligndata		%f50, %f52, %f16
1408	.align			32
1409rrepn4:	faligndata		%f46, %ftmp1, %f26
1410	faligndata		%f44, %f46, %f24
1411	faligndata		%f42, %f44, %f22
1412	faligndata		%f40, %f42, %f20
1413	faligndata		%f38, %f40, %f18
1414	faligndata		%f36, %f38, %f16
1415	ba,pt			%xcc, rightstr
1416	 mov			(rvis4 - BranchBaseR), %tmp3
1417	.align			32
1418rrepn5:	faligndata		%f62, %ftmp1, %f26
1419	faligndata		%f60, %f62, %f24
1420	faligndata		%f58, %f60, %f22
1421	faligndata		%f56, %f58, %f20
1422	faligndata		%f54, %f56, %f18
1423	faligndata		%f52, %f54, %f16
1424	ba,pt			%xcc, rightstr
1425	 mov			(rvis5 - BranchBaseR), %tmp3
1426	.align			32
1427rrepn6:	faligndata		%f46, %ftmp1, %f24
1428	faligndata		%f44, %f46, %f22
1429	faligndata		%f42, %f44, %f20
1430	faligndata		%f40, %f42, %f18
1431	faligndata		%f38, %f40, %f16
1432	ba,pt			%xcc, rightstr
1433	 mov			(rvis6 - BranchBaseR), %tmp3
1434	.align			32
1435rrepn7:	faligndata		%f62, %ftmp1, %f24
1436	faligndata		%f60, %f62, %f22
1437	faligndata		%f58, %f60, %f20
1438	faligndata		%f56, %f58, %f18
1439	faligndata		%f54, %f56, %f16
1440	ba,pt			%xcc, rightstr
1441	 mov			(rvis7 - BranchBaseR), %tmp3
1442	.align			32
1443rrepn8:	faligndata		%f46, %ftmp1, %f22
1444	faligndata		%f44, %f46, %f20
1445	faligndata		%f42, %f44, %f18
1446	faligndata		%f40, %f42, %f16
1447	ba,pt			%xcc, rightstr
1448	 mov			(rvis8 - BranchBaseR), %tmp3
1449	.align			32
1450rrepn9:	faligndata		%f62, %ftmp1, %f22
1451	faligndata		%f60, %f62, %f20
1452	faligndata		%f58, %f60, %f18
1453	faligndata		%f56, %f58, %f16
1454	ba,pt			%xcc, rightstr
1455	 mov			(rvis9 - BranchBaseR), %tmp3
1456	.align			32
1457rrepn10:faligndata		%f46, %ftmp1, %f20
1458	faligndata		%f44, %f46, %f18
1459	faligndata		%f42, %f44, %f16
1460	ba,pt			%xcc, rightstr
1461	 mov			(rvis10 - BranchBaseR), %tmp3
1462	.align			32
1463rrepn11:faligndata		%f62, %ftmp1, %f20
1464	faligndata		%f60, %f62, %f18
1465	faligndata		%f58, %f60, %f16
1466	ba,pt			%xcc, rightstr
1467	 mov			(rvis11 - BranchBaseR), %tmp3
1468	.align			32
1469rrepn12:faligndata		%f46, %ftmp1, %f18
1470	faligndata		%f44, %f46, %f16
1471	ba,pt			%xcc, rightstr
1472	 mov			(rvis12 - BranchBaseR), %tmp3
1473	nop
1474	nop
14753:	ba,pt			%xcc, rightstr
1476	 mov			(rvis2 - BranchBaseR), %tmp3
1477	.align			32
1478rrepn13:faligndata		%f62, %ftmp1, %f18
1479	faligndata		%f60, %f62, %f16
1480	ba,pt			%xcc, rightstr
1481	 mov			(rvis13 - BranchBaseR), %tmp3
1482	nop
1483	nop
14844:	ba,pt			%xcc, rightstr
1485	 mov			(rvis3 - BranchBaseR), %tmp3
1486	.align			32
1487rrepn14:faligndata		%f46, %ftmp1, %f16
1488	ba,pt			%xcc, rightstr
1489	 mov			(rvis14 - BranchBaseR), %tmp3
1490	nop
14911:	faligndata		%f32, %f34, %f16
1492	ba,pt			%xcc, rightstr
1493	 mov			(rvis0 - BranchBaseR), %tmp3
1494	.align			32
1495rrepn15:faligndata		%f62, %ftmp1, %f16
1496	ba,pt			%xcc, rightstr
1497	 mov			(rvis15 - BranchBaseR), %tmp3
1498	nop
14992:	faligndata		%f48, %f50, %f16
1500	ba,pt			%xcc, rightstr
1501	 mov			(rvis1 - BranchBaseR), %tmp3
1502
1503	.align			64
1504BranchBaseR:
1505rrepl0:	RPREPLOAD(f32,rrep0e,rrep0r)
1506	fnop
1507	faligndata		%f48, %f50, %f16
1508	faligndata		%f50, %f52, %f18
1509	faligndata		%f52, %f54, %f20
1510	faligndata		%f54, %f56, %f22
1511	faligndata		%f56, %f58, %f24
1512	faligndata		%f58, %f60, %f26
1513	faligndata		%f60, %f62, %f28
1514	faligndata		%f62, %ftmp1, %f30
1515	ba,pt			%xcc, rightstr
1516	 mov			(rvis1 - BranchBaseR), %tmp3
1517	nop
1518	nop
1519	.align			32
1520rrepl1:	RPREPLOAD(f48,rrep1e,rrep1r)
1521	fnop
1522	faligndata		%f32, %f34, %f16
1523	faligndata		%f34, %f36, %f18
1524	faligndata		%f36, %f38, %f20
1525	faligndata		%f38, %f40, %f22
1526	faligndata		%f40, %f42, %f24
1527	faligndata		%f42, %f44, %f26
1528	faligndata		%f44, %f46, %f28
1529	faligndata		%f46, %ftmp1, %f30
1530	ba,pt			%xcc, rightstr
1531	 mov			(rvis0 - BranchBaseR), %tmp3
1532	nop
1533	nop
1534	.align			32
1535rrepl2:	faligndata		%f32, %f34, %f30
1536	RPREPLOAD(f32,rrep2e,rrep2r)
1537	fnop
1538	fnop
1539	faligndata		%f50, %f52, %f16
1540	faligndata		%f52, %f54, %f18
1541	faligndata		%f54, %f56, %f20
1542	faligndata		%f56, %f58, %f22
1543	faligndata		%f58, %f60, %f24
1544	faligndata		%f60, %f62, %f26
1545	faligndata		%f62, %ftmp1, %f28
1546	ba,pt			%xcc, rightstr
1547	 mov			(rvis3 - BranchBaseR), %tmp3
1548	nop
1549	.align			32
1550rrepl3:	faligndata		%f48, %f50, %f30
1551	RPREPLOAD(f48,rrep3e,rrep3r)
1552	fnop
1553	fnop
1554	faligndata		%f34, %f36, %f16
1555	faligndata		%f36, %f38, %f18
1556	faligndata		%f38, %f40, %f20
1557	faligndata		%f40, %f42, %f22
1558	faligndata		%f42, %f44, %f24
1559	faligndata		%f44, %f46, %f26
1560	faligndata		%f46, %ftmp1, %f28
1561	ba,pt			%xcc, rightstr
1562	 mov			(rvis2 - BranchBaseR), %tmp3
1563	nop
1564	.align			32
1565rrepl4:	faligndata		%f32, %f34, %f28
1566	faligndata		%f34, %f36, %f30
1567	RPREPLOAD(f32,rrep4e,rrep4r)
1568	fnop
1569	fnop
1570	fnop
1571	faligndata		%f52, %f54, %f16
1572	faligndata		%f54, %f56, %f18
1573	faligndata		%f56, %f58, %f20
1574	faligndata		%f58, %f60, %f22
1575	faligndata		%f60, %f62, %f24
1576	faligndata		%f62, %ftmp1, %f26
1577	ba,pt			%xcc, rightstr
1578	 mov			(rvis5 - BranchBaseR), %tmp3
1579	.align			32
1580rrepl5:	faligndata		%f48, %f50, %f28
1581	faligndata		%f50, %f52, %f30
1582	RPREPLOAD(f48,rrep5e,rrep5r)
1583	fnop
1584	fnop
1585	fnop
1586	faligndata		%f36, %f38, %f16
1587	faligndata		%f38, %f40, %f18
1588	faligndata		%f40, %f42, %f20
1589	faligndata		%f42, %f44, %f22
1590	faligndata		%f44, %f46, %f24
1591	faligndata		%f46, %ftmp1, %f26
1592	ba,pt			%xcc, rightstr
1593	 mov			(rvis4 - BranchBaseR), %tmp3
1594	.align			32
1595rrepl6:	faligndata		%f32, %f34, %f26
1596	faligndata		%f34, %f36, %f28
1597	faligndata		%f36, %f38, %f30
1598	RPREPLOAD(f32,rrep6e,rrep6r)
1599	fnop
1600	fnop
1601	fnop
1602	fnop
1603	faligndata		%f54, %f56, %f16
1604	faligndata		%f56, %f58, %f18
1605	faligndata		%f58, %f60, %f20
1606	faligndata		%f60, %f62, %f22
1607	faligndata		%f62, %ftmp1, %f24
1608	ba,pt			%xcc, rightstr
1609	 mov			(rvis7 - BranchBaseR), %tmp3
1610	.align			32
1611rrepl7:	faligndata		%f48, %f50, %f26
1612	faligndata		%f50, %f52, %f28
1613	faligndata		%f52, %f54, %f30
1614	RPREPLOAD(f48,rrep7e,rrep7r)
1615	fnop
1616	fnop
1617	fnop
1618	fnop
1619	faligndata		%f38, %f40, %f16
1620	faligndata		%f40, %f42, %f18
1621	faligndata		%f42, %f44, %f20
1622	faligndata		%f44, %f46, %f22
1623	faligndata		%f46, %ftmp1, %f24
1624	ba,pt			%xcc, rightstr
1625	 mov			(rvis6 - BranchBaseR), %tmp3
1626	.align			32
1627rrepl8:	faligndata		%f32, %f34, %f24
1628	faligndata		%f34, %f36, %f26
1629	faligndata		%f36, %f38, %f28
1630	faligndata		%f38, %f40, %f30
1631	RPREPLOAD(f32,rrep8e,rrep8r)
1632	fnop
1633	fnop
1634	fnop
1635	fnop
1636	fnop
1637	faligndata		%f56, %f58, %f16
1638	faligndata		%f58, %f60, %f18
1639	faligndata		%f60, %f62, %f20
1640	faligndata		%f62, %ftmp1, %f22
1641	ba,pt			%xcc, rightstr
1642	 mov			(rvis9 - BranchBaseR), %tmp3
1643	.align			32
1644rrepl9:	faligndata		%f48, %f50, %f24
1645	faligndata		%f50, %f52, %f26
1646	faligndata		%f52, %f54, %f28
1647	faligndata		%f54, %f56, %f30
1648	RPREPLOAD(f48,rrep9e,rrep9r)
1649	fnop
1650	fnop
1651	fnop
1652	fnop
1653	fnop
1654	faligndata		%f40, %f42, %f16
1655	faligndata		%f42, %f44, %f18
1656	faligndata		%f44, %f46, %f20
1657	faligndata		%f46, %ftmp1, %f22
1658	ba,pt			%xcc, rightstr
1659	 mov			(rvis8 - BranchBaseR), %tmp3
1660	.align			32
1661rrepl10:faligndata		%f32, %f34, %f22
1662	faligndata		%f34, %f36, %f24
1663	faligndata		%f36, %f38, %f26
1664	faligndata		%f38, %f40, %f28
1665	faligndata		%f40, %f42, %f30
1666	RPREPLOAD(f32,rrep10e,rrep10r)
1667	fnop
1668	fnop
1669	fnop
1670	fnop
1671	fnop
1672	fnop
1673	faligndata		%f58, %f60, %f16
1674	faligndata		%f60, %f62, %f18
1675	faligndata		%f62, %ftmp1, %f20
1676	ba,pt			%xcc, rightstr
1677	 mov			(rvis11 - BranchBaseR), %tmp3
1678	.align			32
1679rrepl11:faligndata		%f48, %f50, %f22
1680	faligndata		%f50, %f52, %f24
1681	faligndata		%f52, %f54, %f26
1682	faligndata		%f54, %f56, %f28
1683	faligndata		%f56, %f58, %f30
1684	RPREPLOAD(f48,rrep11e,rrep11r)
1685	fnop
1686	fnop
1687	fnop
1688	fnop
1689	fnop
1690	fnop
1691	faligndata		%f42, %f44, %f16
1692	faligndata		%f44, %f46, %f18
1693	faligndata		%f46, %ftmp1, %f20
1694	ba,pt			%xcc, rightstr
1695	 mov			(rvis10 - BranchBaseR), %tmp3
1696	.align			32
1697rrepl12:faligndata		%f32, %f34, %f20
1698	faligndata		%f34, %f36, %f22
1699	faligndata		%f36, %f38, %f24
1700	faligndata		%f38, %f40, %f26
1701	faligndata		%f40, %f42, %f28
1702	faligndata		%f42, %f44, %f30
1703	RPREPLOAD(f32,rrep12e,rrep12r)
1704	fnop
1705	fnop
1706	fnop
1707	fnop
1708	fnop
1709	fnop
1710	fnop
1711	faligndata		%f60, %f62, %f16
1712	faligndata		%f62, %ftmp1, %f18
1713	ba,pt			%xcc, rightstr
1714	 mov			(rvis13 - BranchBaseR), %tmp3
1715	.align			32
1716rrepl13:faligndata		%f48, %f50, %f20
1717	faligndata		%f50, %f52, %f22
1718	faligndata		%f52, %f54, %f24
1719	faligndata		%f54, %f56, %f26
1720	faligndata		%f56, %f58, %f28
1721	faligndata		%f58, %f60, %f30
1722	RPREPLOAD(f48,rrep13e,rrep13r)
1723	fnop
1724	fnop
1725	fnop
1726	fnop
1727	fnop
1728	fnop
1729	fnop
1730	faligndata		%f44, %f46, %f16
1731	faligndata		%f46, %ftmp1, %f18
1732	ba,pt			%xcc, rightstr
1733	 mov			(rvis12 - BranchBaseR), %tmp3
1734	.align			32
1735rrepl14:faligndata		%f32, %f34, %f18
1736	faligndata		%f34, %f36, %f20
1737	faligndata		%f36, %f38, %f22
1738	faligndata		%f38, %f40, %f24
1739	faligndata		%f40, %f42, %f26
1740	faligndata		%f42, %f44, %f28
1741	faligndata		%f44, %f46, %f30
1742	RPREPLOAD(f32,rrep14e,rrep14r)
1743	fnop
1744	fnop
1745	fnop
1746	fnop
1747	fnop
1748	fnop
1749	fnop
1750	faligndata		%f62, %ftmp1, %f16
1751	ba,pt			%xcc, rightstr
1752	 mov			(rvis15 - BranchBaseR), %tmp3
1753	.align			32
1754rrepl15:faligndata		%f48, %f50, %f18
1755	faligndata		%f50, %f52, %f20
1756	faligndata		%f52, %f54, %f22
1757	faligndata		%f54, %f56, %f24
1758	faligndata		%f56, %f58, %f26
1759	faligndata		%f58, %f60, %f28
1760	faligndata		%f60, %f62, %f30
1761	RPREPLOAD(f48,rrep15e,rrep15r)
1762	fnop
1763	fnop
1764	fnop
1765	fnop
1766	fnop
1767	fnop
1768	fnop
1769	faligndata		%f46, %ftmp1, %f16
1770	ba,pt			%xcc, rightstr
1771	 mov			(rvis14 - BranchBaseR), %tmp3
1772
1773	.align			64
1774rvis0:	nop
1775	RLOAD(f32,rvis0e,rvis0r)
1776	fnop
1777	faligndata		%f48, %f50, %f16
1778	faligndata		%f50, %f52, %f18
1779	faligndata		%f52, %f54, %f20
1780	faligndata		%f54, %f56, %f22
1781	faligndata		%f56, %f58, %f24
1782	faligndata		%f58, %f60, %f26
1783	faligndata		%f60, %f62, %f28
1784	faligndata		%f62, %ftmp1, %f30
1785	STORE
1786	sub			%dst, 64, %dst
1787rvis1:	RLOAD(f48,rvis1e,rvis1r)
1788	fnop
1789	faligndata		%f32, %f34, %f16
1790	faligndata		%f34, %f36, %f18
1791	faligndata		%f36, %f38, %f20
1792	faligndata		%f38, %f40, %f22
1793	faligndata		%f40, %f42, %f24
1794	faligndata		%f42, %f44, %f26
1795	faligndata		%f44, %f46, %f28
1796	faligndata		%f46, %ftmp1, %f30
1797	STORE
1798	ba,pt			%xcc, rvis0+0x04
1799	 sub			%dst, 64, %dst
1800	.align			64
1801rvis2:	faligndata		%f32, %f34, %ftmp8
1802	RLOAD(f32,rvis2e,rvis2r)
1803	fnop
1804	fnop
1805	faligndata		%f50, %f52, %f16
1806	faligndata		%f52, %f54, %f18
1807	faligndata		%f54, %f56, %f20
1808	faligndata		%f56, %f58, %f22
1809	faligndata		%f58, %f60, %f24
1810	faligndata		%f60, %f62, %f26
1811	faligndata		%f62, %ftmp1, %f28
1812	fmovd			%ftmp8, %f30
1813	STORE
1814	sub			%dst, 64, %dst
1815rvis3:	faligndata		%f48, %f50, %ftmp8
1816	RLOAD(f48,rvis3e,rvis3r)
1817	fnop
1818	fnop
1819	faligndata		%f34, %f36, %f16
1820	faligndata		%f36, %f38, %f18
1821	faligndata		%f38, %f40, %f20
1822	faligndata		%f40, %f42, %f22
1823	faligndata		%f42, %f44, %f24
1824	faligndata		%f44, %f46, %f26
1825	faligndata		%f46, %ftmp1, %f28
1826	fmovd			%ftmp8, %f30
1827	STORE
1828	ba,pt			%xcc, rvis2
1829	 sub			%dst, 64, %dst
1830	.align			64
1831rvis4:	faligndata		%f32, %f34, %ftmp7
1832	faligndata		%f34, %f36, %ftmp8
1833	RLOAD(f32,rvis4e,rvis4r)
1834	fnop
1835	fnop
1836	fnop
1837	faligndata		%f52, %f54, %f16
1838	faligndata		%f54, %f56, %f18
1839	faligndata		%f56, %f58, %f20
1840	faligndata		%f58, %f60, %f22
1841	faligndata		%f60, %f62, %f24
1842	faligndata		%f62, %ftmp1, %f26
1843	fmovd			%ftmp7, %f28
1844	fmovd			%ftmp8, %f30
1845	STORE
1846	sub			%dst, 64, %dst
1847rvis5:	faligndata		%f48, %f50, %ftmp7
1848	faligndata		%f50, %f52, %ftmp8
1849	RLOAD(f48,rvis5e,rvis5r)
1850	fnop
1851	fnop
1852	fnop
1853	faligndata		%f36, %f38, %f16
1854	faligndata		%f38, %f40, %f18
1855	faligndata		%f40, %f42, %f20
1856	faligndata		%f42, %f44, %f22
1857	faligndata		%f44, %f46, %f24
1858	faligndata		%f46, %ftmp1, %f26
1859	fmovd			%ftmp7, %f28
1860	fmovd			%ftmp8, %f30
1861	STORE
1862	ba,pt			%xcc, rvis4
1863	 sub			%dst, 64, %dst
1864	.align			64
1865rvis6:	faligndata		%f32, %f34, %ftmp6
1866	faligndata		%f34, %f36, %ftmp7
1867	faligndata		%f36, %f38, %ftmp8
1868	RLOAD(f32,rvis6e,rvis6r)
1869	fnop
1870	fmovd			%ftmp6, %f26
1871	fmovd			%ftmp7, %f28
1872	fmovd			%ftmp8, %f30
1873	faligndata		%f54, %f56, %f16
1874	faligndata		%f56, %f58, %f18
1875	faligndata		%f58, %f60, %f20
1876	faligndata		%f60, %f62, %f22
1877	faligndata		%f62, %ftmp1, %f24
1878	STORE
1879	sub			%dst, 64, %dst
1880rvis7:	faligndata		%f48, %f50, %ftmp6
1881	faligndata		%f50, %f52, %ftmp7
1882	faligndata		%f52, %f54, %ftmp8
1883	RLOAD(f48,rvis7e,rvis7r)
1884	fnop
1885	fmovd			%ftmp6, %f26
1886	fmovd			%ftmp7, %f28
1887	fmovd			%ftmp8, %f30
1888	faligndata		%f38, %f40, %f16
1889	faligndata		%f40, %f42, %f18
1890	faligndata		%f42, %f44, %f20
1891	faligndata		%f44, %f46, %f22
1892	faligndata		%f46, %ftmp1, %f24
1893	STORE
1894	ba,pt			%xcc, rvis6
1895	 sub			%dst, 64, %dst
1896	.align			64
1897rvis8:	faligndata		%f32, %f34, %ftmp5
1898	faligndata		%f34, %f36, %ftmp6
1899	faligndata		%f36, %f38, %ftmp7
1900	faligndata		%f38, %f40, %ftmp8
1901	RLOAD(f32,rvis8e,rvis8r)
1902	fnop
1903	fmovd			%ftmp5, %f24
1904	fmovd			%ftmp6, %f26
1905	fmovd			%ftmp7, %f28
1906	fmovd			%ftmp8, %f30
1907	faligndata		%f56, %f58, %f16
1908	faligndata		%f58, %f60, %f18
1909	faligndata		%f60, %f62, %f20
1910	faligndata		%f62, %ftmp1, %f22
1911	STORE
1912	sub			%dst, 64, %dst
1913rvis9:	faligndata		%f48, %f50, %ftmp5
1914	faligndata		%f50, %f52, %ftmp6
1915	faligndata		%f52, %f54, %ftmp7
1916	faligndata		%f54, %f56, %ftmp8
1917	RLOAD(f48,rvis9e,rvis9r)
1918	fnop
1919	fmovd			%ftmp5, %f24
1920	fmovd			%ftmp6, %f26
1921	fmovd			%ftmp7, %f28
1922	fmovd			%ftmp8, %f30
1923	faligndata		%f40, %f42, %f16
1924	faligndata		%f42, %f44, %f18
1925	faligndata		%f44, %f46, %f20
1926	faligndata		%f46, %ftmp1, %f22
1927	STORE
1928	ba,pt			%xcc, rvis8
1929	 sub			%dst, 64, %dst
1930	.align			64
1931rvis10:	faligndata		%f32, %f34, %ftmp4
1932	faligndata		%f34, %f36, %ftmp5
1933	faligndata		%f36, %f38, %ftmp6
1934	faligndata		%f38, %f40, %ftmp7
1935	faligndata		%f40, %f42, %ftmp8
1936	RLOAD(f32,rvis10e,rvis10r)
1937	fnop
1938	fmovd			%ftmp4, %f22
1939	fmovd			%ftmp5, %f24
1940	fmovd			%ftmp6, %f26
1941	fmovd			%ftmp7, %f28
1942	fmovd			%ftmp8, %f30
1943	faligndata		%f58, %f60, %f16
1944	faligndata		%f60, %f62, %f18
1945	faligndata		%f62, %ftmp1, %f20
1946	STORE
1947	sub			%dst, 64, %dst
1948rvis11:	faligndata		%f48, %f50, %ftmp4
1949	faligndata		%f50, %f52, %ftmp5
1950	faligndata		%f52, %f54, %ftmp6
1951	faligndata		%f54, %f56, %ftmp7
1952	faligndata		%f56, %f58, %ftmp8
1953	RLOAD(f48,rvis11e,rvis11r)
1954	fnop
1955	fmovd			%ftmp4, %f22
1956	fmovd			%ftmp5, %f24
1957	fmovd			%ftmp6, %f26
1958	fmovd			%ftmp7, %f28
1959	fmovd			%ftmp8, %f30
1960	faligndata		%f42, %f44, %f16
1961	faligndata		%f44, %f46, %f18
1962	faligndata		%f46, %ftmp1, %f20
1963	STORE
1964	ba,pt			%xcc, rvis10
1965	 sub			%dst, 64, %dst
1966	.align			64
1967rvis12:	faligndata		%f32, %f34, %ftmp3
1968	faligndata		%f34, %f36, %ftmp4
1969	faligndata		%f36, %f38, %ftmp5
1970	faligndata		%f38, %f40, %ftmp6
1971	faligndata		%f40, %f42, %ftmp7
1972	faligndata		%f42, %f44, %ftmp8
1973	RLOAD(f32,rvis12e,rvis12r)
1974	fnop
1975	fmovd			%ftmp3, %f20
1976	fmovd			%ftmp4, %f22
1977	fmovd			%ftmp5, %f24
1978	fmovd			%ftmp6, %f26
1979	fmovd			%ftmp7, %f28
1980	fmovd			%ftmp8, %f30
1981	faligndata		%f60, %f62, %f16
1982	faligndata		%f62, %ftmp1, %f18
1983	STORE
1984	sub			%dst, 64, %dst
1985rvis13:	faligndata		%f48, %f50, %ftmp3
1986	faligndata		%f50, %f52, %ftmp4
1987	faligndata		%f52, %f54, %ftmp5
1988	faligndata		%f54, %f56, %ftmp6
1989	faligndata		%f56, %f58, %ftmp7
1990	faligndata		%f58, %f60, %ftmp8
1991	RLOAD(f48,rvis13e,rvis13r)
1992	fnop
1993	fmovd			%ftmp3, %f20
1994	fmovd			%ftmp4, %f22
1995	fmovd			%ftmp5, %f24
1996	fmovd			%ftmp6, %f26
1997	fmovd			%ftmp7, %f28
1998	fmovd			%ftmp8, %f30
1999	faligndata		%f44, %f46, %f16
2000	faligndata		%f46, %ftmp1, %f18
2001	STORE
2002	ba,pt			%xcc, rvis12
2003	 sub			%dst, 64, %dst
2004	.align			64
2005rvis14:	fnop
2006	faligndata		%f32, %f34, %f18
2007	faligndata		%f34, %f36, %f20
2008	faligndata		%f36, %f38, %f22
2009	faligndata		%f38, %f40, %f24
2010	faligndata		%f40, %f42, %f26
2011	faligndata		%f42, %f44, %f28
2012	faligndata		%f44, %f46, %f30
2013	RLOAD(f32,rvis14e,rvis14r)
2014	fnop
2015	fnop
2016	fnop
2017	fnop
2018	fnop
2019	fnop
2020	fnop
2021	faligndata		%f62, %ftmp1, %f16
2022	STORE
2023	sub			%dst, 64, %dst
2024rvis15:	fnop
2025	faligndata		%f48, %f50, %f18
2026	faligndata		%f50, %f52, %f20
2027	faligndata		%f52, %f54, %f22
2028	faligndata		%f54, %f56, %f24
2029	faligndata		%f56, %f58, %f26
2030	faligndata		%f58, %f60, %f28
2031	faligndata		%f60, %f62, %f30
2032	RLOAD(f48,rvis15e,rvis15r)
2033	fnop
2034	fnop
2035	fnop
2036	fnop
2037	fnop
2038	fnop
2039	fnop
2040	faligndata		%f46, %ftmp1, %f16
2041	STORE
2042	ba,pt			%xcc, rvis14
2043	 sub			%dst, 64, %dst
2044
2045rightstr:
2046	brlz,pn			%curw, narrowstr + 4
2047	 cmp			%rightw, 64
2048	be,pn			%icc, 2f
2049	 and			%rightw, 0x38, %tmp1
2050	andcc			%rightw, 7, %g0
2051	be,pn			%icc, 1f
2052	 neg			%tmp1
2053	sub			%g0, %rightw, %tmp5
2054	add			%branchbase, (3f - BranchBaseR - 8), %tmp2
2055	edge8l			%tmp5, %g0, %tmp5
2056	sub			%dst, %tmp1, %tmp4
2057	jmpl			%tmp1 + %tmp2, %g0
2058	 add			%tmp4, 0x40, %tmp4
20591:	addcc			%branchbase, (4f - BranchBaseR), %tmp2
2060	sra			%tmp1, 1, %tmp1
2061	jmpl			%tmp1 + %tmp2, %g0
20622:	 add			%dst, 0x40, %tmp1
2063	jmpl			%branchbase + %tmp3, %g0
2064	 stda			%f16, [%tmp1] ASI_BLK_P
2065	ba,pt			%xcc, 3f+0x00
2066	 stda			%f30, [%tmp4 + %tmp5] ASI_PST8_P
2067	ba,pt			%xcc, 3f+0x04
2068	 stda			%f28, [%tmp4 + %tmp5] ASI_PST8_P
2069	ba,pt			%xcc, 3f+0x08
2070	 stda			%f26, [%tmp4 + %tmp5] ASI_PST8_P
2071	ba,pt			%xcc, 3f+0x0c
2072	 stda			%f24, [%tmp4 + %tmp5] ASI_PST8_P
2073	ba,pt			%xcc, 3f+0x10
2074	 stda			%f22, [%tmp4 + %tmp5] ASI_PST8_P
2075	ba,pt			%xcc, 3f+0x14
2076	 stda			%f20, [%tmp4 + %tmp5] ASI_PST8_P
2077	ba,pt			%xcc, 3f+0x18
2078	 stda			%f18, [%tmp4 + %tmp5] ASI_PST8_P
2079	jmpl			%branchbase + %tmp3, %g0
2080	 stda			%f16, [%tmp4 + %tmp5] ASI_PST8_P
20813:	std			%f28, [%dst + 0x70]
2082	std			%f26, [%dst + 0x68]
2083	std			%f24, [%dst + 0x60]
2084	std			%f22, [%dst + 0x58]
2085	std			%f20, [%dst + 0x50]
2086	std			%f18, [%dst + 0x48]
2087	std			%f16, [%dst + 0x40]
20884:	jmpl			%branchbase + %tmp3, %g0
2089	 nop
2090
2091leftstr:cmp			%leftw, 64
2092	be,pn			%icc, 2f
2093	 and			%leftw, 0x38, %tmp1
2094	andcc			%leftw, 7, %g0
2095	be,pn			%icc, 1f
2096	 neg			%tmp1
2097	sub			%dst, %leftw, %tmp4
2098	add			%branchbase, (3f - BranchBaseR - 8), %tmp2
2099	edge8			%tmp4, %g0, %tmp5
2100	andn			%tmp4, 7, %tmp4
2101	add			%mode, %skind, %mode
2102	jmpl			%tmp2 + %tmp1, %g0
2103	 add			%tmp4, 0x40, %tmp4
21041:	add			%branchbase, (4f - BranchBaseR), %tmp2
2105	sra			%tmp1, 1, %tmp1
2106	jmpl			%tmp2 + %tmp1, %g0
21072:	 add			%mode, %skind, %mode
2108	ba,pt			%xcc, 4f
2109	 stda			%f16, [%dst] ASI_BLK_P
2110	ba,pt			%xcc, 3f+0x00
2111	 stda			%f16, [%tmp4 + %tmp5] ASI_PST8_P
2112	ba,pt			%xcc, 3f+0x04
2113	 stda			%f18, [%tmp4 + %tmp5] ASI_PST8_P
2114	ba,pt			%xcc, 3f+0x08
2115	 stda			%f20, [%tmp4 + %tmp5] ASI_PST8_P
2116	ba,pt			%xcc, 3f+0x0c
2117	 stda			%f22, [%tmp4 + %tmp5] ASI_PST8_P
2118	ba,pt			%xcc, 3f+0x10
2119	 stda			%f24, [%tmp4 + %tmp5] ASI_PST8_P
2120	ba,pt			%xcc, 3f+0x14
2121	 stda			%f26, [%tmp4 + %tmp5] ASI_PST8_P
2122	ba,pt			%xcc, 3f+0x18
2123	 stda			%f28, [%tmp4 + %tmp5] ASI_PST8_P
2124	ba,pt			%xcc, 3f+0x1c
2125	 stda			%f30, [%tmp4 + %tmp5] ASI_PST8_P
21263:	std			%f18, [%dst + 0x08]
2127	std			%f20, [%dst + 0x10]
2128	std			%f22, [%dst + 0x18]
2129	std			%f24, [%dst + 0x20]
2130	std			%f26, [%dst + 0x28]
2131	std			%f28, [%dst + 0x30]
2132	std			%f30, [%dst + 0x38]
21334:	brnz,pn			%narrow, rnarrow_cont
2134	 deccc			%srcnotdone
2135	blu,pn			%ICC, rreturn
2136	 sub			%mode, %dkind, %mode
2137	alignaddr		%mode, %g0, %g0
2138	and			%mode, 63, %mode
2139	cmp			%srcnext, %srcn
2140	bne,a,pn		%ICC, 6f
2141	 xor			%fregset, 64, %fregset
2142	brnz,a,pn		%fregset, 5f
2143	 ldda			[%src] ASI_BLK_P, %f32
2144	ldda			[%src] ASI_BLK_P, %f48
21455:	sub			%src, 64, %src
21466:	add			%dst, %dkind, %dst
2147	sub			%w, %leftw, %tmp1
2148	add			%srcstart, %skind, %srcstart
2149	add			%dst, %tmp1, %dst
2150	add			%rightw, %dkind, %rightw
2151	add			%dst, 63, %dst
2152	sub			%rightw, 1, %rightw
2153	sub			%dkind, %leftw, %leftw
2154	and			%rightw, 63, %rightw
2155	and			%leftw, 63, %leftw
2156	add			%rightw, 1, %rightw
2157	mov			64, %tmp1
2158	andn			%dst, 63, %dst
2159	sub			%tmp1, %leftw, %leftw
2160rroll_wide:
2161	add			%srcstart, %skind, %srcnext
2162	sub			%srcstart, %w, %srcend
2163	fnop
2164	deccc			%srcnext
2165	sll			%mode, 4, %tmp4
2166	fnop
2167	andn			%srcnext, 63, %srcnext
2168	andn			%srcend, 63, %srcend
2169	fnop
2170	mov			%srcnext, %srcn
2171	and			%mode, 7, %leftw2
2172	fnop
2173	andn			%tmp4, 127, %tmp4
2174	sub			%leftw, %leftw2, %leftw2
2175	fnop
2176	add			%tmp4, %fregset, %tmp4
2177	subcc			%w, %leftw, %curw
2178	fnop
2179	srl			%tmp4, 1, %tmp3
2180	sub			%tmp1, %mode, %tmp1
2181	fnop
2182	add			%tmp3, (rrepn0 - BranchBaseR), %tmp2
2183	cmp			%tmp1, %rightw
2184	add			%tmp4, %tmp3, %tmp4
2185	sub			%srcnext, 64, %tmp1
2186	movgeu			%icc, %tmp2, %tmp4
2187	cmp			%srcnext, %srcend
2188	sub			%dst, 64, %dst
2189	move			%ICC, %tmp1, %srcnext
2190	jmpl			%branchbase + %tmp4, %g0
2191	 sub			%curw, %rightw, %curw
2192
2193rreturn:return			%i7+8
2194#if defined(__NetBSD__)
2195	 wr			%g0, 4, %fprs
2196#else
2197	 wr			%g0, 0, %fprs
2198#endif
2199
2200narrowstr:
2201	cmp			%rightw, 64
2202	add			%dst, 0x80, %fregset
2203	and			%rightw, 0x38, %tmp1
2204	sub			%fregset, %leftw, %tmp2
2205	mov			%w, %tmp4
2206	andn			%tmp2, 7, %fregset
2207	be,pn			%icc, 2f
2208	 edge8			%tmp2, %g0, %srcend
2209	andcc			%rightw, 7, %g0
2210	be,pn			%icc, 1f
2211	 neg			%tmp1
2212	sub			%g0, %rightw, %tmp4
2213	add			%tmp1, (2f - BranchBaseR - 8), %tmp1
2214	add			%dst, 0x40, %tmp5
2215	sub			%leftw, 0x41, %tmp2
2216	add			%tmp5, %rightw, %tmp5
2217	edge8l			%tmp4, %tmp2, %tmp2
2218	and			%rightw, 7, %tmp4
2219	andn			%tmp5, 7, %tmp5
2220	jmpl			%branchbase + %tmp1, %g0
2221	 sub			%w, %tmp4, %tmp4
22221:	addcc			%branchbase, (4f - BranchBaseR - 8), %tmp2
2223	sll			%tmp1, 1, %tmp1
2224	jmpl			%tmp2 + %tmp1, %g0
2225	 nop
2226	ba,pt			%xcc, 3f+0x00
2227	 stda			%f30, [%tmp5 + %tmp2] ASI_PST8_P
2228	ba,pt			%xcc, 3f+0x10
2229	 stda			%f28, [%tmp5 + %tmp2] ASI_PST8_P
2230	ba,pt			%xcc, 3f+0x20
2231	 stda			%f26, [%tmp5 + %tmp2] ASI_PST8_P
2232	ba,pt			%xcc, 3f+0x30
2233	 stda			%f24, [%tmp5 + %tmp2] ASI_PST8_P
2234	ba,pt			%xcc, 3f+0x40
2235	 stda			%f22, [%tmp5 + %tmp2] ASI_PST8_P
2236	ba,pt			%xcc, 3f+0x50
2237	 stda			%f20, [%tmp5 + %tmp2] ASI_PST8_P
2238	ba,pt			%xcc, 3f+0x60
2239	 stda			%f18, [%tmp5 + %tmp2] ASI_PST8_P
2240	ba,pt			%xcc, 3f+0x70
2241	 stda			%f16, [%tmp5 + %tmp2] ASI_PST8_P
22422:	subcc			%tmp4, 8, %tmp4
2243	bl,pn			%icc, 4f+0x00
2244	 fnop
2245	std			%f30, [%dst + 0x78]
22463:	subcc			%tmp4, 8, %tmp4
2247	bl,pn			%icc, 4f+0x10
2248	 fnop
2249	std			%f28, [%dst + 0x70]
2250	subcc			%tmp4, 8, %tmp4
2251	bl,pn			%icc, 4f+0x20
2252	 fnop
2253	std			%f26, [%dst + 0x68]
2254	subcc			%tmp4, 8, %tmp4
2255	bl,pn			%icc, 4f+0x30
2256	 fnop
2257	std			%f24, [%dst + 0x60]
2258	subcc			%tmp4, 8, %tmp4
2259	bl,pn			%icc, 4f+0x40
2260	 fnop
2261	std			%f22, [%dst + 0x58]
2262	subcc			%tmp4, 8, %tmp4
2263	bl,pn			%icc, 4f+0x50
2264	 fnop
2265	std			%f20, [%dst + 0x50]
2266	subcc			%tmp4, 8, %tmp4
2267	bl,pn			%icc, 4f+0x60
2268	 fnop
2269	std			%f18, [%dst + 0x48]
2270	subcc			%tmp4, 8, %tmp4
2271	bl,pn			%icc, 4f+0x70
2272	 fnop
2273	std			%f16, [%dst + 0x40]
2274	ba,pt			%xcc, 5f
2275	 nop
22764:	cmp			%tmp4, -8
2277	bg,a,pn			%ICC, 5f
2278	 stda			%f30, [%fregset + %srcend] ASI_PST8_P
2279	ba,a,pt			%xcc, 5f
2280	cmp			%tmp4, -8
2281	bg,a,pn			%ICC, 5f
2282	 stda			%f28, [%fregset + %srcend] ASI_PST8_P
2283	ba,a,pt			%xcc, 5f
2284	cmp			%tmp4, -8
2285	bg,a,pn			%ICC, 5f
2286	 stda			%f26, [%fregset + %srcend] ASI_PST8_P
2287	ba,a,pt			%xcc, 5f
2288	cmp			%tmp4, -8
2289	bg,a,pn			%ICC, 5f
2290	 stda			%f24, [%fregset + %srcend] ASI_PST8_P
2291	ba,a,pt			%xcc, 5f
2292	cmp			%tmp4, -8
2293	bg,a,pn			%ICC, 5f
2294	 stda			%f22, [%fregset + %srcend] ASI_PST8_P
2295	ba,a,pt			%xcc, 5f
2296	cmp			%tmp4, -8
2297	bg,a,pn			%ICC, 5f
2298	 stda			%f20, [%fregset + %srcend] ASI_PST8_P
2299	ba,a,pt			%xcc, 5f
2300	cmp			%tmp4, -8
2301	bg,a,pn			%ICC, 5f
2302	 stda			%f18, [%fregset + %srcend] ASI_PST8_P
2303	ba,a,pt			%xcc, 5f
2304	cmp			%tmp4, -8
2305	bg,a,pn			%ICC, 5f
2306	 stda			%f16, [%fregset + %srcend] ASI_PST8_P
23075:	and			%tmp3, 60, %tmp3
2308	add			%dst, 64, %dst
2309	xor			%tmp3, 60, %tmp3
2310	add			%mode, %skind, %mode
2311	add			%tmp3, 4, %tmp3
2312	brz,pn			%h, rreturn
2313	 and			%tmp3, 64, %fregset
2314rnarrow_cont:
2315	deccc			%h
2316	blu,pn			%ICC, rreturn
2317	 sub			%mode, %dkind, %mode
2318	alignaddr		%mode, %g0, %g0
2319	and			%mode, 63, %mode
2320	sub			%srcnext, %srcn, %tmp4
2321	add			%dst, %dkind, %dst
2322	sub			%w, %leftw, %tmp1
2323	add			%srcstart, %skind, %srcstart
2324	add			%dst, %tmp1, %dst
2325	add			%rightw, %dkind, %rightw
2326	sub			%dkind, %leftw, %leftw
2327	sub			%rightw, 1, %rightw
2328	and			%leftw, 63, %leftw
2329	add			%dst, 63, %dst
2330	mov			64, %tmp1
2331	and			%rightw, 63, %rightw
2332	sub			%tmp1, %leftw, %leftw
2333	add			%srcstart, %skind, %srcnext
2334	add			%rightw, 1, %rightw
2335	sub			%srcstart, %w, %srcend
2336	dec			%srcnext
2337	andn			%srcend, 63, %srcend
2338	andn			%srcnext, 63, %srcnext
2339	sub			%w, %leftw, %prepw
2340	mov			%srcnext, %srcn
2341	sub			%srcnext, 64, %tmp3
2342	add			%srcnext, 64, %tmp2
2343	cmp			%skind, 0
2344	movg			%ICC, %tmp2, %tmp3
2345	mov			%h, %srcnotdone
2346	sub			%prepw, %rightw, %prepw
2347	sub			%srcstart, 1, %tmp1
2348	cmp			%srcnext, %srcend
2349	move			%ICC, %tmp3, %srcnext
2350	and			%tmp1, 63, %tmp1
2351	sub			%srcnext, 64, %tmp3
2352	sub			%tmp1, %w, %tmp1
2353	cmp			%srcnext, %srcend
2354	move			%ICC, %tmp3, %srcnext
2355	mov			%prepw, %curw
2356	cmp			%tmp1, -65
2357	movl			%ICC, 64, %prepw
2358	andn			%dst, 63, %dst
2359	cmp			%srcnext, %srcstop
2360	move			%ICC, 0, %srcnotdone
2361	brnz,a,pn		%tmp4, rroll_narrow
2362	 xor			%fregset, 64, %fregset
2363	cmp			%tmp1, -1
2364	bl,pt			%ICC, 6f
2365	 tst			%srcnotdone
2366	be,a,pn			%ICC, rroll_narrow
2367	 membar			SYNC
2368	mov			%srcnext, %src
23696:	brnz,a,pn		%fregset, 7f
2370	 ldda			[%src] ASI_BLK_P, %f32
2371	ldda			[%src] ASI_BLK_P, %f48
23727:	subcc			%src, 64, %src
2373rroll_narrow:
2374	fnop
2375	sll			%mode, 4, %tmp2
2376	and			%mode, 7, %leftw2
2377	fnop
2378	andn			%tmp2, 127, %tmp2
2379	sub			%dst, 64, %dst
2380	fnop
2381	add			%tmp2, %fregset, %tmp2
2382	subcc			%leftw, %leftw2, %leftw2
2383	fnop
2384	srl			%tmp2, 1, %tmp3
2385	add			%tmp3, (rrepr0 - BranchBaseR), %tmp4
2386	fnop
2387	add			%tmp2, %tmp3, %tmp2
2388	cmp			%tmp1, -1
2389	fnop
2390	mov			64, %tmp1
2391	movge			%icc, %tmp4, %tmp2
2392	sub			%tmp1, %mode, %tmp1
2393	add			%tmp3, (rrepn0 - BranchBaseR), %tmp4
2394	fnop
2395	cmp			%tmp1, %rightw
2396	movgeu			%icc, %tmp4, %tmp2
2397	jmpl			%branchbase + %tmp2, %g0
2398	 and			%tmp3, 32, %tmp3
2399
2400#define RVISEND1(i,tgt,tgtr)					\
2401tgt:								\
2402	brnz,pt			%curw, 1f;			\
2403	 cmp			%leftw2, ((i&14)*4);		\
2404	bg,pn			%icc, tgtr - 8;			\
2405	 tst			%srcnotdone;			\
2406	be,a,pn			%ICC, tgtr;			\
2407	 membar			SYNC;				\
2408	ba,pt			%xcc, tgtr - 8;			\
2409	 mov			%srcnext, %src;			\
24101:	mov			((i & 1) ^ 1) * 64, %fregset;
2411
2412#define RVISEND2(i,fset)					\
2413	brz,a,pn		%srcnotdone, 3f;		\
2414	 membar			SYNC;				\
2415	ldda			[%srcnext] ASI_BLK_P, %fset;	\
2416	sub			%srcnext, 64, %src;		\
24173:	mov			(i & 1) * 64, %fregset;
2418
2419RVISEND1(0,rvis0e,rvis0r)
2420	fnop
2421	fnop
2422	fnop
2423	fnop
2424	fnop
2425	fnop
2426	ble,pn			%icc, leftstr
2427	 faligndata		%ftmp2, %ftmp1, %f30
2428RVISEND2(0,f32)
2429	fnop
2430	faligndata		%f48, %f50, %f16
2431	faligndata		%f50, %f52, %f18
2432	faligndata		%f52, %f54, %f20
2433	faligndata		%f54, %f56, %f22
2434	faligndata		%f56, %f58, %f24
2435	faligndata		%f58, %f60, %f26
2436	faligndata		%f60, %f62, %f28
2437	ba,pt			%xcc, leftstr
2438	 faligndata		%f62, %ftmp1, %f30
2439RVISEND1(1,rvis1e,rvis1r)
2440	fnop
2441	fnop
2442	fnop
2443	fnop
2444	fnop
2445	fnop
2446	ble,pn			%icc, leftstr
2447	 faligndata		%ftmp2, %ftmp1, %f30
2448RVISEND2(1,f48)
2449	fnop
2450	faligndata		%f32, %f34, %f16
2451	faligndata		%f34, %f36, %f18
2452	faligndata		%f36, %f38, %f20
2453	faligndata		%f38, %f40, %f22
2454	faligndata		%f40, %f42, %f24
2455	faligndata		%f42, %f44, %f26
2456	faligndata		%f44, %f46, %f28
2457	ba,pt			%xcc, leftstr
2458	 faligndata		%f46, %ftmp1, %f30
2459RVISEND1(2,rvis2e,rvis2r)
2460	fnop
2461	fnop
2462	fnop
2463	fnop
2464	faligndata		%ftmp2, %ftmp1, %f28
2465	ble,pn			%icc, leftstr
2466	 fmovd			%ftmp8, %f30
2467RVISEND2(2,f32)
2468	fnop
2469	fnop
2470	faligndata		%f50, %f52, %f16
2471	faligndata		%f52, %f54, %f18
2472	faligndata		%f54, %f56, %f20
2473	faligndata		%f56, %f58, %f22
2474	faligndata		%f58, %f60, %f24
2475	faligndata		%f60, %f62, %f26
2476	ba,pt			%xcc, leftstr
2477	 faligndata		%f62, %ftmp1, %f28
2478RVISEND1(3,rvis3e,rvis3r)
2479	fnop
2480	fnop
2481	fnop
2482	fnop
2483	faligndata		%ftmp2, %ftmp1, %f28
2484	ble,pn			%icc, leftstr
2485	 fmovd			%ftmp8, %f30
2486RVISEND2(3,f48)
2487	fnop
2488	fnop
2489	faligndata		%f34, %f36, %f16
2490	faligndata		%f36, %f38, %f18
2491	faligndata		%f38, %f40, %f20
2492	faligndata		%f40, %f42, %f22
2493	faligndata		%f42, %f44, %f24
2494	faligndata		%f44, %f46, %f26
2495	ba,pt			%xcc, leftstr
2496	 faligndata		%f46, %ftmp1, %f28
2497RVISEND1(4,rvis4e,rvis4r)
2498	fnop
2499	fnop
2500	faligndata		%ftmp2, %ftmp1, %f26
2501	fmovd			%ftmp7, %f28
2502	ble,pn			%icc, leftstr
2503	 fmovd			%ftmp8, %f30
2504RVISEND2(4,f32)
2505	fnop
2506	fnop
2507	fnop
2508	faligndata		%f52, %f54, %f16
2509	faligndata		%f54, %f56, %f18
2510	faligndata		%f56, %f58, %f20
2511	faligndata		%f58, %f60, %f22
2512	faligndata		%f60, %f62, %f24
2513	ba,pt			%xcc, leftstr
2514	 faligndata		%f62, %ftmp1, %f26
2515RVISEND1(5,rvis5e,rvis5r)
2516	fnop
2517	fnop
2518	faligndata		%ftmp2, %ftmp1, %f26
2519	fmovd			%ftmp7, %f28
2520	ble,pn			%icc, leftstr
2521	 fmovd			%ftmp8, %f30
2522RVISEND2(5,f48)
2523	fnop
2524	fnop
2525	fnop
2526	faligndata		%f36, %f38, %f16
2527	faligndata		%f38, %f40, %f18
2528	faligndata		%f40, %f42, %f20
2529	faligndata		%f42, %f44, %f22
2530	faligndata		%f44, %f46, %f24
2531	ba,pt			%xcc, leftstr
2532	 faligndata		%f46, %ftmp1, %f26
2533RVISEND1(6,rvis6e,rvis6r)
2534	faligndata		%ftmp2, %ftmp1, %f24
2535	fmovd			%ftmp6, %f26
2536	fmovd			%ftmp7, %f28
2537	ble,pn			%icc, leftstr
2538	 fmovd			%ftmp8, %f30
2539RVISEND2(6,f32)
2540	fnop
2541	fnop
2542	fnop
2543	fnop
2544	faligndata		%f54, %f56, %f16
2545	faligndata		%f56, %f58, %f18
2546	faligndata		%f58, %f60, %f20
2547	faligndata		%f60, %f62, %f22
2548	ba,pt			%xcc, leftstr
2549	 faligndata		%f62, %ftmp1, %f24
2550RVISEND1(7,rvis7e,rvis7r)
2551	faligndata		%ftmp2, %ftmp1, %f24
2552	fmovd			%ftmp6, %f26
2553	fmovd			%ftmp7, %f28
2554	ble,pn			%icc, leftstr
2555	 fmovd			%ftmp8, %f30
2556RVISEND2(7,f48)
2557	fnop
2558	fnop
2559	fnop
2560	fnop
2561	faligndata		%f38, %f40, %f16
2562	faligndata		%f40, %f42, %f18
2563	faligndata		%f42, %f44, %f20
2564	faligndata		%f44, %f46, %f22
2565	ba,pt			%xcc, leftstr
2566	 faligndata		%f46, %ftmp1, %f24
2567RVISEND1(8,rvis8e,rvis8r)
2568	faligndata		%ftmp2, %ftmp1, %f22
2569	fmovd			%ftmp5, %f24
2570	fmovd			%ftmp6, %f26
2571	fmovd			%ftmp7, %f28
2572	ble,pn			%icc, leftstr
2573	 fmovd			%ftmp8, %f30
2574RVISEND2(8,f32)
2575	fnop
2576	fnop
2577	fnop
2578	fnop
2579	fnop
2580	faligndata		%f56, %f58, %f16
2581	faligndata		%f58, %f60, %f18
2582	faligndata		%f60, %f62, %f20
2583	ba,pt			%xcc, leftstr
2584	 faligndata		%f62, %ftmp1, %f22
2585RVISEND1(9,rvis9e,rvis9r)
2586	faligndata		%ftmp2, %ftmp1, %f22
2587	fmovd			%ftmp5, %f24
2588	fmovd			%ftmp6, %f26
2589	fmovd			%ftmp7, %f28
2590	ble,pn			%icc, leftstr
2591	 fmovd			%ftmp8, %f30
2592RVISEND2(9,f48)
2593	fnop
2594	fnop
2595	fnop
2596	fnop
2597	fnop
2598	faligndata		%f40, %f42, %f16
2599	faligndata		%f42, %f44, %f18
2600	faligndata		%f44, %f46, %f20
2601	ba,pt			%xcc, leftstr
2602	 faligndata		%f46, %ftmp1, %f22
2603RVISEND1(10,rvis10e,rvis10r)
2604	faligndata		%ftmp2, %ftmp1, %f20
2605	fmovd			%ftmp4, %f22
2606	fmovd			%ftmp5, %f24
2607	fmovd			%ftmp6, %f26
2608	fmovd			%ftmp7, %f28
2609	ble,pn			%icc, leftstr
2610	 fmovd			%ftmp8, %f30
2611RVISEND2(10,f32)
2612	fnop
2613	fnop
2614	fnop
2615	fnop
2616	fnop
2617	fnop
2618	faligndata		%f58, %f60, %f16
2619	faligndata		%f60, %f62, %f18
2620	ba,pt			%xcc, leftstr
2621	 faligndata		%f62, %ftmp1, %f20
2622RVISEND1(11,rvis11e,rvis11r)
2623	faligndata		%ftmp2, %ftmp1, %f20
2624	fmovd			%ftmp4, %f22
2625	fmovd			%ftmp5, %f24
2626	fmovd			%ftmp6, %f26
2627	fmovd			%ftmp7, %f28
2628	ble,pn			%icc, leftstr
2629	 fmovd			%ftmp8, %f30
2630RVISEND2(11,f48)
2631	fnop
2632	fnop
2633	fnop
2634	fnop
2635	fnop
2636	fnop
2637	faligndata		%f42, %f44, %f16
2638	faligndata		%f44, %f46, %f18
2639	ba,pt			%xcc, leftstr
2640	 faligndata		%f46, %ftmp1, %f20
2641RVISEND1(12,rvis12e,rvis12r)
2642	faligndata		%ftmp2, %ftmp1, %f18
2643	fmovd			%ftmp3, %f20
2644	fmovd			%ftmp4, %f22
2645	fmovd			%ftmp5, %f24
2646	fmovd			%ftmp6, %f26
2647	fmovd			%ftmp7, %f28
2648	ble,pn			%icc, leftstr
2649	 fmovd			%ftmp8, %f30
2650RVISEND2(12,f32)
2651	fnop
2652	fnop
2653	fnop
2654	fnop
2655	fnop
2656	fnop
2657	fnop
2658	faligndata		%f60, %f62, %f16
2659	ba,pt			%xcc, leftstr
2660	 faligndata		%f62, %ftmp1, %f18
2661RVISEND1(13,rvis13e,rvis13r)
2662	faligndata		%ftmp2, %ftmp1, %f18
2663	fmovd			%ftmp3, %f20
2664	fmovd			%ftmp4, %f22
2665	fmovd			%ftmp5, %f24
2666	fmovd			%ftmp6, %f26
2667	fmovd			%ftmp7, %f28
2668	ble,pn			%icc, leftstr
2669	 fmovd			%ftmp8, %f30
2670RVISEND2(13,f48)
2671	fnop
2672	fnop
2673	fnop
2674	fnop
2675	fnop
2676	fnop
2677	fnop
2678	faligndata		%f44, %f46, %f16
2679	ba,pt			%xcc, leftstr
2680	 faligndata		%f46, %ftmp1, %f18
2681RVISEND1(14,rvis14e,rvis14r)
2682	ble,pn			%icc, leftstr
2683	 faligndata		%ftmp2, %ftmp1, %f16
2684RVISEND2(14,f32)
2685	fnop
2686	fnop
2687	fnop
2688	fnop
2689	fnop
2690	fnop
2691	fnop
2692	ba,pt			%xcc, leftstr
2693	 faligndata		%f62, %ftmp1, %f16
2694RVISEND1(15,rvis15e,rvis15r)
2695	ble,pn			%icc, leftstr
2696	 faligndata		%ftmp2, %ftmp1, %f16
2697RVISEND2(15,f48)
2698	fnop
2699	fnop
2700	fnop
2701	fnop
2702	fnop
2703	fnop
2704	fnop
2705	ba,pt			%xcc, leftstr
2706	 faligndata		%f46, %ftmp1, %f16
2707
2708#define RREPEND(tgt,tgtr)					\
2709tgt:								\
2710	brnz,pt			%srcnotdone, tgtr - 8;		\
2711	 mov			%srcnext, %src;			\
2712	ba,pt			%xcc, tgtr;			\
2713	 membar			SYNC;
2714
2715	.align			16
2716RREPEND(rrep0e,rrep0r)
2717RREPEND(rrep1e,rrep1r)
2718RREPEND(rrep2e,rrep2r)
2719RREPEND(rrep3e,rrep3r)
2720RREPEND(rrep4e,rrep4r)
2721RREPEND(rrep5e,rrep5r)
2722RREPEND(rrep6e,rrep6r)
2723RREPEND(rrep7e,rrep7r)
2724RREPEND(rrep8e,rrep8r)
2725RREPEND(rrep9e,rrep9r)
2726RREPEND(rrep10e,rrep10r)
2727RREPEND(rrep11e,rrep11r)
2728RREPEND(rrep12e,rrep12r)
2729RREPEND(rrep13e,rrep13r)
2730RREPEND(rrep14e,rrep14r)
2731RREPEND(rrep15e,rrep15r)
2732