Home | History | Annotate | Line # | Download | only in src
      1 /*
      2  * VISmoveImage.S: High speed moveImage operations utilizing the UltraSPARC
      3  *                 Visual Instruction Set.
      4  *
      5  * Copyright (C) 1998,1999 Jakub Jelinek (jakub (at) 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;					\
    145 tgtr:
    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;					\
    152 tgtr:
    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
    185 VISmoveImageLR:
    186 #ifdef __arch64__
    187 	save			%sp, -192, %sp				! Group 0
    188 #else
    189 	save			%sp, -96, %sp				! Group 0
    190 #endif
    191 0:	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
    217 prepare_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
    241 1:	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
    256 1:	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
    262 2:	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
    279 1:	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
    286 prepr0:	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
    295 prepr1:	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
    304 prepr2:	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
    313 prepr3:	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
    322 prepr4:	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
    330 prepr5:	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
    338 prepr6:	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
    345 prepr7:	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
    352 prepr8:	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
    358 prepr9:	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
    364 prepr10:faligndata		%f42, %f44, %f16
    365 	faligndata		%f44, %f46, %f18
    366 	ba,pt			%xcc, narrowst
    367 	 faligndata		%f46, %f0, %f20
    368 	.align			32
    369 prepr11:faligndata		%f58, %f60, %f16
    370 	faligndata		%f60, %f62, %f18
    371 	ba,pt			%xcc, narrowst
    372 	 faligndata		%f62, %f0, %f20
    373 	.align			32
    374 prepr12:faligndata		%f44, %f46, %f16
    375 	ba,pt			%xcc, narrowst
    376 	 faligndata		%f46, %f0, %f18
    377 	.align			32
    378 prepr13:faligndata		%f60, %f62, %f16
    379 	ba,pt			%xcc, narrowst
    380 	 faligndata		%f62, %f0, %f18
    381 	.align			32
    382 prepr14:ba,pt			%xcc, narrowst
    383 	 faligndata		%f46, %f0, %f16
    384 	nop
    385 	nop
    386 4:	ba,pt			%xcc, narrowst
    387 	 faligndata		%f46, %f0, %f30
    388 	.align			32
    389 prepr15:ba,pt			%xcc, narrowst
    390 	 faligndata		%f62, %f0, %f16
    391 	nop
    392 	nop
    393 5:	ba,pt			%xcc, narrowst
    394 	 faligndata		%f62, %f0, %f30
    395 
    396 	.align			32
    397 prepn0:	faligndata		%ftmp1, %f32, %f30
    398 	ba,pt			%xcc, leftst
    399 	 mov			(vis0 - BranchBase), %tmp3
    400 	nop
    401 1:	ba,pt			%xcc, leftst
    402 	 mov			(vis12 - BranchBase), %tmp3
    403 	.align			32
    404 prepn1:	faligndata		%ftmp1, %f48, %f30
    405 	ba,pt			%xcc, leftst
    406 	 mov			(vis1 - BranchBase), %tmp3
    407 	nop
    408 2:	ba,pt			%xcc, leftst
    409 	 mov			(vis13 - BranchBase), %tmp3
    410 	.align			32
    411 prepn2: faligndata		%ftmp1, %f32, %f28
    412 	faligndata		%f32, %f34, %f30
    413 	ba,pt			%xcc, leftst
    414 	 mov			(vis2 - BranchBase), %tmp3
    415 3:	faligndata		%f44, %f46, %f30
    416 	ba,pt			%xcc, leftst
    417 	 mov			(vis14 - BranchBase), %tmp3
    418 	.align			32
    419 prepn3: faligndata		%ftmp1, %f48, %f28
    420 	faligndata		%f48, %f50, %f30
    421 	ba,pt			%xcc, leftst
    422 	 mov			(vis3 - BranchBase), %tmp3
    423 	.align			32
    424 prepn4: 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
    430 prepn5:	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
    436 prepn6: 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
    443 prepn7:	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
    450 prepn8:	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
    458 prepn9:	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
    466 prepn10: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
    475 prepn11: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
    484 prepn12: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
    493 prepn13: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
    502 prepn14: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
    511 prepn15: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
    523 BranchBase:
    524 prepl0:	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
    528 prepl1:	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
    532 prepl2:	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
    536 prepl3:	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
    540 prepl4:	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
    544 prepl5:	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
    548 prepl6:	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
    552 prepl7:	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
    556 prepl8:	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
    560 prepl9:	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
    564 prepl10: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
    568 prepl11: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
    572 prepl12: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
    576 prepl13: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
    580 prepl14: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
    584 prepl15: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
    589 vis0:	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
    592 vis1:	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
    597 vis2:	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
    600 vis3:	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
    605 vis4:	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
    608 vis5:	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
    613 vis6:	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
    616 vis7:	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
    621 vis8:	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
    624 vis9:	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
    629 vis10:	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
    632 vis11:	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
    637 vis12:	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
    640 vis13:	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
    645 vis14:	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
    648 vis15:	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 
    653 leftst:	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
    663 1:	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
    683 2:	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]
    690 3:	jmpl			%branchbase + %tmp3, %g0
    691 	 nop
    692 
    693 rightst: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
    705 1:	addcc			%branchbase, (4f - BranchBase), %tmp2
    706 	sra			%tmp1, 1, %tmp1
    707 	jmpl			%tmp1 + %tmp2, %g0
    708 2:	 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
    727 3:	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]
    734 4:	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
    746 5:	add			%src, 64, %src
    747 6:	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
    758 roll_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 
    790 return: return			%i7+8
    791 #if defined(__NetBSD__)
    792 	 wr			%g0, 4, %fprs
    793 #else
    794 	 wr			%g0, 0, %fprs
    795 #endif
    796 
    797 narrowst:
    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
    813 1:	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
    834 2:	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
    864 3:	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
    891 4:	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
    897 narrow_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
    945 5:	brnz,a,pn		%fregset, 6f
    946 	 ldda			[%src] ASI_BLK_P, %f32
    947 	ldda			[%src] ASI_BLK_P, %f48
    948 6:	addcc			%src, 64, %src
    949 roll_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)				\
    975 tgt:								\
    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;			\
    984 1:	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;		\
    991 3:	mov			(i & 1) * 64, %fregset;
    992 
    993 VISEND(0,vis0e,vis0r,f30,f32)
    994 	ba,pt			%xcc, rightst
    995 	 faligndata		%ftmp1, %f48, %f30
    996 VISEND(1,vis1e,vis1r,f30,f48)
    997 	ba,pt			%xcc, rightst
    998 	 faligndata		%ftmp1, %f32, %f30
    999 VISEND(2,vis2e,vis2r,f28,f32)
   1000 	faligndata		%ftmp1, %f48, %f28
   1001 	ba,pt			%xcc, rightst
   1002 	 faligndata		%f48, %f50, %f30
   1003 VISEND(3,vis3e,vis3r,f28,f48)
   1004 	faligndata		%ftmp1, %f32, %f28
   1005 	ba,pt			%xcc, rightst
   1006 	 faligndata		%f32, %f34, %f30
   1007 VISEND(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
   1012 VISEND(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
   1017 VISEND(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
   1023 VISEND(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
   1029 VISEND(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
   1036 VISEND(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
   1043 VISEND(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
   1051 VISEND(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
   1059 VISEND(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
   1068 VISEND(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
   1077 VISEND(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
   1087 VISEND(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)					\
   1099 tgt:								\
   1100 	brnz,pt			%srcnotdone, tgtr - 8;		\
   1101 	 mov			%srcnext, %src;			\
   1102 	ba,pt			%xcc, tgtr;			\
   1103 	 membar			SYNC;
   1104 
   1105 	.align			16
   1106 PREPEND(prep0e,prep0r)
   1107 PREPEND(prep1e,prep1r)
   1108 PREPEND(prep2e,prep2r)
   1109 PREPEND(prep3e,prep3r)
   1110 PREPEND(prep4e,prep4r)
   1111 PREPEND(prep5e,prep5r)
   1112 PREPEND(prep6e,prep6r)
   1113 PREPEND(prep7e,prep7r)
   1114 PREPEND(prep8e,prep8r)
   1115 PREPEND(prep9e,prep9r)
   1116 PREPEND(prep10e,prep10r)
   1117 PREPEND(prep11e,prep11r)
   1118 PREPEND(prep12e,prep12r)
   1119 PREPEND(prep13e,prep13r)
   1120 PREPEND(prep14e,prep14r)
   1121 PREPEND(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;					\
   1132 tgtr:
   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;					\
   1141 tgtr:
   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;					\
   1151 tgtr:
   1152 
   1153 #endif
   1154 
   1155 	.globl			VISmoveImageRL
   1156 	.align			32
   1157 VISmoveImageRL:
   1158 #ifdef __arch64__
   1159 	save			%sp, -192, %sp				! Group 0
   1160 #else
   1161 	save			%sp, -96, %sp				! Group 0
   1162 #endif
   1163 0:	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
   1193 rprepare_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
   1217 1:	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
   1234 1:	addcc			%tmp2, %skind, %g0
   1235 	ble,pt			%ICC, 3f
   1236 	 sub			%srcnext, 64, %fregset
   1237 	SMUL			%skind, %srcnotdone, %srcstop
   1238 	sub			%tmp4, 64, %tmp4
   1239 2:	add			%srcstop, %tmp4, %srcstop
   1240 3:	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
   1255 1:	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
   1262 rrepr0:	ba,pt			%xcc, narrowstr
   1263 	 faligndata		%ftmp1, %f32, %f30
   1264 	nop
   1265 	nop
   1266 1:	ba,pt			%xcc, narrowstr
   1267 	 faligndata		%ftmp1, %f32, %f16
   1268 	.align			32
   1269 rrepr1:	ba,pt			%xcc, narrowstr
   1270 	 faligndata		%ftmp1, %f48, %f30
   1271 	nop
   1272 	nop
   1273 2:	ba,pt			%xcc, narrowstr
   1274 	 faligndata		%ftmp1, %f48, %f16
   1275 	.align			32
   1276 rrepr2:	faligndata		%f32, %f34, %f30
   1277 	ba,pt			%xcc, narrowstr
   1278 	 faligndata		%ftmp1, %f32, %f28
   1279 	.align			32
   1280 rrepr3:	faligndata		%f48, %f50, %f30
   1281 	ba,pt			%xcc, narrowstr
   1282 	 faligndata		%ftmp1, %f48, %f28
   1283 	.align			32
   1284 rrepr4:	faligndata		%f34, %f36, %f30
   1285 	faligndata		%f32, %f34, %f28
   1286 	ba,pt			%xcc, narrowstr
   1287 	 faligndata		%ftmp1, %f32, %f26
   1288 	.align			32
   1289 rrepr5: faligndata		%f50, %f52, %f30
   1290 	faligndata		%f48, %f50, %f28
   1291 	ba,pt			%xcc, narrowstr
   1292 	 faligndata		%ftmp1, %f48, %f26
   1293 	.align			32
   1294 rrepr6:	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
   1300 rrepr7: 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
   1306 rrepr8:	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
   1313 rrepr9: 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
   1320 rrepr10: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
   1328 rrepr11: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
   1336 rrepr12: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
   1345 rrepr13: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
   1354 rrepr14: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
   1363 rrepr15: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
   1373 rrepn0:	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
   1382 rrepn1:	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
   1391 rrepn2:	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
   1400 rrepn3:	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
   1409 rrepn4:	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
   1418 rrepn5:	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
   1427 rrepn6:	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
   1435 rrepn7:	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
   1443 rrepn8:	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
   1450 rrepn9:	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
   1457 rrepn10: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
   1463 rrepn11: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
   1469 rrepn12:faligndata		%f46, %ftmp1, %f18
   1470 	faligndata		%f44, %f46, %f16
   1471 	ba,pt			%xcc, rightstr
   1472 	 mov			(rvis12 - BranchBaseR), %tmp3
   1473 	nop
   1474 	nop
   1475 3:	ba,pt			%xcc, rightstr
   1476 	 mov			(rvis2 - BranchBaseR), %tmp3
   1477 	.align			32
   1478 rrepn13:faligndata		%f62, %ftmp1, %f18
   1479 	faligndata		%f60, %f62, %f16
   1480 	ba,pt			%xcc, rightstr
   1481 	 mov			(rvis13 - BranchBaseR), %tmp3
   1482 	nop
   1483 	nop
   1484 4:	ba,pt			%xcc, rightstr
   1485 	 mov			(rvis3 - BranchBaseR), %tmp3
   1486 	.align			32
   1487 rrepn14:faligndata		%f46, %ftmp1, %f16
   1488 	ba,pt			%xcc, rightstr
   1489 	 mov			(rvis14 - BranchBaseR), %tmp3
   1490 	nop
   1491 1:	faligndata		%f32, %f34, %f16
   1492 	ba,pt			%xcc, rightstr
   1493 	 mov			(rvis0 - BranchBaseR), %tmp3
   1494 	.align			32
   1495 rrepn15:faligndata		%f62, %ftmp1, %f16
   1496 	ba,pt			%xcc, rightstr
   1497 	 mov			(rvis15 - BranchBaseR), %tmp3
   1498 	nop
   1499 2:	faligndata		%f48, %f50, %f16
   1500 	ba,pt			%xcc, rightstr
   1501 	 mov			(rvis1 - BranchBaseR), %tmp3
   1502 
   1503 	.align			64
   1504 BranchBaseR:
   1505 rrepl0:	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
   1520 rrepl1:	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
   1535 rrepl2:	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
   1550 rrepl3:	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
   1565 rrepl4:	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
   1580 rrepl5:	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
   1595 rrepl6:	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
   1611 rrepl7:	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
   1627 rrepl8:	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
   1644 rrepl9:	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
   1661 rrepl10: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
   1679 rrepl11: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
   1697 rrepl12: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
   1716 rrepl13: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
   1735 rrepl14: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
   1754 rrepl15: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
   1774 rvis0:	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
   1787 rvis1:	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
   1801 rvis2:	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
   1815 rvis3:	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
   1831 rvis4:	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
   1847 rvis5:	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
   1865 rvis6:	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
   1880 rvis7:	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
   1897 rvis8:	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
   1913 rvis9:	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
   1931 rvis10:	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
   1948 rvis11:	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
   1967 rvis12:	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
   1985 rvis13:	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
   2005 rvis14:	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
   2024 rvis15:	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 
   2045 rightstr:
   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
   2059 1:	addcc			%branchbase, (4f - BranchBaseR), %tmp2
   2060 	sra			%tmp1, 1, %tmp1
   2061 	jmpl			%tmp1 + %tmp2, %g0
   2062 2:	 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
   2081 3:	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]
   2088 4:	jmpl			%branchbase + %tmp3, %g0
   2089 	 nop
   2090 
   2091 leftstr: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
   2104 1:	add			%branchbase, (4f - BranchBaseR), %tmp2
   2105 	sra			%tmp1, 1, %tmp1
   2106 	jmpl			%tmp2 + %tmp1, %g0
   2107 2:	 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
   2126 3:	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]
   2133 4:	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
   2145 5:	sub			%src, 64, %src
   2146 6:	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
   2160 rroll_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 
   2193 rreturn:return			%i7+8
   2194 #if defined(__NetBSD__)
   2195 	 wr			%g0, 4, %fprs
   2196 #else
   2197 	 wr			%g0, 0, %fprs
   2198 #endif
   2199 
   2200 narrowstr:
   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
   2222 1:	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
   2242 2:	subcc			%tmp4, 8, %tmp4
   2243 	bl,pn			%icc, 4f+0x00
   2244 	 fnop
   2245 	std			%f30, [%dst + 0x78]
   2246 3:	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
   2276 4:	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
   2307 5:	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
   2314 rnarrow_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
   2369 6:	brnz,a,pn		%fregset, 7f
   2370 	 ldda			[%src] ASI_BLK_P, %f32
   2371 	ldda			[%src] ASI_BLK_P, %f48
   2372 7:	subcc			%src, 64, %src
   2373 rroll_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)					\
   2401 tgt:								\
   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;			\
   2410 1:	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;		\
   2417 3:	mov			(i & 1) * 64, %fregset;
   2418 
   2419 RVISEND1(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
   2428 RVISEND2(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
   2439 RVISEND1(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
   2448 RVISEND2(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
   2459 RVISEND1(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
   2467 RVISEND2(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
   2478 RVISEND1(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
   2486 RVISEND2(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
   2497 RVISEND1(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
   2504 RVISEND2(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
   2515 RVISEND1(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
   2522 RVISEND2(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
   2533 RVISEND1(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
   2539 RVISEND2(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
   2550 RVISEND1(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
   2556 RVISEND2(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
   2567 RVISEND1(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
   2574 RVISEND2(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
   2585 RVISEND1(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
   2592 RVISEND2(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
   2603 RVISEND1(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
   2611 RVISEND2(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
   2622 RVISEND1(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
   2630 RVISEND2(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
   2641 RVISEND1(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
   2650 RVISEND2(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
   2661 RVISEND1(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
   2670 RVISEND2(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
   2681 RVISEND1(14,rvis14e,rvis14r)
   2682 	ble,pn			%icc, leftstr
   2683 	 faligndata		%ftmp2, %ftmp1, %f16
   2684 RVISEND2(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
   2694 RVISEND1(15,rvis15e,rvis15r)
   2695 	ble,pn			%icc, leftstr
   2696 	 faligndata		%ftmp2, %ftmp1, %f16
   2697 RVISEND2(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)					\
   2709 tgt:								\
   2710 	brnz,pt			%srcnotdone, tgtr - 8;		\
   2711 	 mov			%srcnext, %src;			\
   2712 	ba,pt			%xcc, tgtr;			\
   2713 	 membar			SYNC;
   2714 
   2715 	.align			16
   2716 RREPEND(rrep0e,rrep0r)
   2717 RREPEND(rrep1e,rrep1r)
   2718 RREPEND(rrep2e,rrep2r)
   2719 RREPEND(rrep3e,rrep3r)
   2720 RREPEND(rrep4e,rrep4r)
   2721 RREPEND(rrep5e,rrep5r)
   2722 RREPEND(rrep6e,rrep6r)
   2723 RREPEND(rrep7e,rrep7r)
   2724 RREPEND(rrep8e,rrep8r)
   2725 RREPEND(rrep9e,rrep9r)
   2726 RREPEND(rrep10e,rrep10r)
   2727 RREPEND(rrep11e,rrep11r)
   2728 RREPEND(rrep12e,rrep12r)
   2729 RREPEND(rrep13e,rrep13r)
   2730 RREPEND(rrep14e,rrep14r)
   2731 RREPEND(rrep15e,rrep15r)
   2732