summaryrefslogtreecommitdiff
path: root/src/VISmoveImage.s
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-14 16:48:55 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-14 16:48:55 +0000
commit68c56916d79bf06e26e01c3e84206edc928d9b51 (patch)
treed39c13092dc680721e163e448a57df847a6fad62 /src/VISmoveImage.s
Initial revision
Diffstat (limited to 'src/VISmoveImage.s')
-rw-r--r--src/VISmoveImage.s2710
1 files changed, 2710 insertions, 0 deletions
diff --git a/src/VISmoveImage.s b/src/VISmoveImage.s
new file mode 100644
index 0000000..43815f5
--- /dev/null
+++ b/src/VISmoveImage.s
@@ -0,0 +1,2710 @@
+/*
+ * VISmoveImage.S: High speed moveImage operations utilizing the UltraSPARC
+ * Visual Instruction Set.
+ *
+ * Copyright (C) 1998,1999 Jakub Jelinek (jakub@redhat.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * JAKUB JELINEK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/VISmoveImage.s,v 1.2 2000/05/23 04:47:43 dawes Exp $ */
+
+
+/* NOTE NOTE NOTE: All loads in these routines _MUST_ be 64-byte block
+ * loads. If any non-block loads are done to the frame-
+ * buffer when prefetching is enabled (which we use, when
+ * available) this will cause lockups on FFB2 due to a
+ * hardware bug. -DaveM
+ */
+
+/*
+ void
+ VISmoveImageLR(unsigned char *src, unsigned char *dst, long w, long h, long skind, long dkind)
+ {
+ int i;
+
+ // Handles copying non-overlapping images and for overlapping images
+ // copying where dstx <= srcx.
+ // To copy overlapping images where dsty > srcy, set src and dst
+ // to start of the last scanline and negate both skind and dkind arguments.
+
+ assert(abs(skind) >= w && abs(dkind) >= w);
+
+ while (h--) {
+ for (i = 0; i < w; i++)
+ *d++ = *s++;
+ s += skind - w;
+ d += dkind - w;
+ }
+ }
+
+ void
+ VISmoveImageRL(unsigned char *src, unsigned char *dst, long w, long h, long skind, long dkind)
+ {
+ int i;
+
+ // Handles copying non-overlapping images and for overlapping images
+ // copying where dstx >= srcx.
+ // To copy overlapping images where dsty > srcy, set src and dst
+ // to start of the last scanline and negate both skind and dkind arguments.
+
+ assert(abs(skind) >= w && abs(dkind) >= w);
+
+ s += w;
+ d += w;
+ while (h--) {
+ for (i = 0; i < w; i++)
+ *--d = *--s;
+ s += skind + w;
+ d += dkind + w;
+ }
+ }
+
+ */
+
+#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__)
+#define SMUL mulx
+#define ICC xcc
+#else
+#define SMUL smul
+#define ICC icc
+#endif
+
+#define ASI_PST8_P 0xc0
+#define ASI_BLK_P 0xf0
+#define SYNC 0x40
+
+/* Register usage: */
+/* integer registers: */
+#define src i0
+#define dst i1
+#define w i2
+#define h i3
+#define skind i4
+#define dkind i5
+#define branchbase l0
+#define tmp1 l1
+#define tmp4 l2
+#define tmp5 l3
+#define leftw l4
+#define rightw l5
+#define srcstart l6
+#define mode l7
+#define fregset o0 /* Must be [og]? for v8plusa */
+#define srcend o1
+#define srcn o2
+#define srcnext o3
+#define rightw2 o4
+#define tmp2 o5 /* Must be [og]? for v8plusa */
+#define narrow o7
+#define prepw g1 /* Must be [og]? for v8plusa */
+#define srcstop g2
+#define srcnotdone g3
+#define curw g4 /* Must be [og]? for v8plusa */
+#define leftw2 rightw2
+#define tmp3 g5 /* Must be [og]? for v8plusa */
+/* floating point registers: */
+#define ftmp1 f0
+#define ftmp2 f2
+#define ftmp3 f4
+#define ftmp4 f6
+#define ftmp5 f8
+#define ftmp6 f10
+#define ftmp7 f12
+#define ftmp8 f14
+#define store_regs f16-f31
+#define load_bank1 f32-f46
+#define load_bank2 f48-f62
+#define fnop fmovd %ftmp2, %ftmp2
+
+#define LOAD(f32,f46,tgt,tgtr) \
+ subcc %curw, 64, %curw; \
+ bleu,pn %ICC, tgt; \
+ fmovd %f46, %ftmp1; \
+ ldda [%src] ASI_BLK_P, %f32; \
+ add %src, 64, %src; \
+tgtr:
+
+#define PREPLOAD(f32,f46,tgt,tgtr) \
+ brlez,pn %prepw, tgt; \
+ fmovd %f46, %ftmp1; \
+ ldda [%src] ASI_BLK_P, %f32; \
+ add %src, 64, %src; \
+tgtr:
+
+#define STORE \
+ stda %f16, [%dst] ASI_BLK_P;
+
+#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) \
+ A0 \
+ faligndata %f0,%F2,%f16; \
+ A1 \
+ faligndata %f2,%F4,%f18; \
+ A2 \
+ faligndata %f4,%F6,%f20; \
+ A3 \
+ faligndata %f6,%F8,%f22; \
+ A4 \
+ faligndata %f8,%F10,%f24; \
+ A5 \
+ faligndata %f10,%F12,%f26; \
+ A6 \
+ faligndata %f12,%F14,%f28; \
+ A7 \
+ faligndata %f14,%F16,%f30;
+
+ .section ".rodata"
+ .asciz "VISmoveImage (C) 1998,1999 Jakub Jelinek"
+
+/* The code might not be self-explanatory, but it was written to be processed
+ * by machines, not humans. Comments are deliberately left as an exercise
+ * to the occasional reader. */
+
+ .text
+ .globl VISmoveImageLR
+ .align 32
+VISmoveImageLR:
+ save %sp, -160, %sp ! Group 0
+0: rd %pc, %tmp3 ! Group 1
+ sub %src, %dst, %mode ! Group 7
+ brz,pn %h, return
+ neg %dst, %leftw ! Group 8
+ mov %src, %srcstart
+ andn %src, 63, %src ! Group 9
+ cmp %w, 128
+ blu,pn %ICC, prepare_narrow
+ and %mode, 63, %mode ! Group 10
+ add %dst, %w, %rightw
+ ldda [%src] ASI_BLK_P, %f32 ! Group 11
+ add %src, 64, %src ! Group 12
+ clr %narrow
+ ldda [%src] ASI_BLK_P, %f48 ! Group 13
+ and %leftw, 63, %leftw ! Group 14
+ sub %rightw, 1, %rightw
+ andn %dst, 63, %dst ! Group 15
+ and %rightw, 63, %rightw
+ alignaddr %mode, %g0, %g0 ! Group 16
+ add %rightw, 1, %rightw ! Group 17
+ clr %fregset
+ add %src, 64, %src ! Group 18
+ add %tmp3, (BranchBase - 0b), %branchbase
+ mov 64, %prepw ! Group 19
+ ba,pt %xcc, roll_wide
+ sub %h, 1, %srcnotdone
+prepare_narrow:
+#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__)
+ brlez,pn %w, return
+#else
+ tst %w
+ ble,pn %icc, return
+#endif
+ add %dst, %w, %rightw ! Group 11
+ and %leftw, 63, %leftw
+ ldda [%src] ASI_BLK_P, %f32 ! Group 12
+ sub %rightw, 1, %rightw ! Group 13
+ andn %dst, 63, %dst
+ and %rightw, 63, %rightw ! Group 14
+ sub %w, %leftw, %tmp2
+ add %rightw, 1, %rightw ! Group 15
+ clr %fregset
+ subcc %tmp2, %rightw, %curw ! Group 16
+ and %srcstart, 63, %tmp1
+ mov %curw, %prepw ! Group 17
+ add %tmp1, %w, %tmp1
+ bg,pt %ICC, 1f
+ add %src, 64, %src ! Group 18
+ cmp %tmp1, 128
+ movg %icc, 64, %prepw ! Group 19
+1: add %srcstart, %w, %srcend
+ sub %h, 1, %srcnotdone ! Group 20
+ add %srcstart, %skind, %srcnext
+ add %srcend, 63, %tmp4 ! Group 21
+ andn %srcnext, 63, %srcnext
+ add %w, 64, %tmp2 ! Group 22
+ cmp %skind, 0
+ bl,pn %ICC, 1f
+ clr %srcstop ! Group 23
+ cmp %skind, %tmp2
+ bgeu,pt %ICC, 2f
+ andn %tmp4, 63, %tmp2 ! Group 24
+ SMUL %skind, %srcnotdone, %srcstop
+ ba,pt %xcc, 2f
+ add %tmp4, %srcstop, %srcstop
+1: addcc %tmp2, %skind, %g0
+ ble,pt %ICC, 2f
+ sub %srcnext, 64, %tmp2
+ SMUL %skind, %srcnotdone, %srcstop
+ sub %srcstart, 64, %narrow
+ add %srcstop, %narrow, %srcstop
+2: add %srcnext, 64, %narrow
+ andn %tmp4, 63, %srcend ! Group 25
+ mov %srcnext, %srcn
+ cmp %narrow, %srcend ! Group 26
+ andn %srcstop, 63, %srcstop
+ move %ICC, %tmp2, %srcnext ! Group 27
+ alignaddr %mode, %g0, %g0 ! Group 28
+ add %tmp3, (BranchBase - 0b), %branchbase
+ mov 1, %narrow ! Group 29
+ cmp %srcnext, %srcstop
+ move %ICC, 0, %srcnotdone ! Group 30
+ cmp %tmp1, 64
+ bleu,pn %ICC, 1f
+ dec %h ! Group 31
+ ldda [%src] ASI_BLK_P, %f48 ! Group 32
+ ba,pt %xcc, roll_narrow ! Group 33
+ addcc %src, 64, %src
+1: brz,a,pn %srcnotdone, roll_narrow
+ membar #Sync
+ ldda [%srcnext] ASI_BLK_P, %f48
+ ba,pt %xcc, roll_narrow
+ addcc %srcnext, 64, %src
+
+ .align 32
+prepr0: faligndata %f32, %f34, %f16
+ faligndata %f34, %f36, %f18
+ faligndata %f36, %f38, %f20
+ faligndata %f38, %f40, %f22
+ faligndata %f40, %f42, %f24
+ faligndata %f42, %f44, %f26
+ ba,pt %xcc, 4f
+ faligndata %f44, %f46, %f28
+ .align 32
+prepr1: faligndata %f48, %f50, %f16
+ faligndata %f50, %f52, %f18
+ faligndata %f52, %f54, %f20
+ faligndata %f54, %f56, %f22
+ faligndata %f56, %f58, %f24
+ faligndata %f58, %f60, %f26
+ ba,pt %xcc, 5f
+ faligndata %f60, %f62, %f28
+ .align 32
+prepr2: faligndata %f34, %f36, %f16
+ faligndata %f36, %f38, %f18
+ faligndata %f38, %f40, %f20
+ faligndata %f40, %f42, %f22
+ faligndata %f42, %f44, %f24
+ faligndata %f44, %f46, %f26
+ ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f28
+ .align 32
+prepr3: faligndata %f50, %f52, %f16
+ faligndata %f52, %f54, %f18
+ faligndata %f54, %f56, %f20
+ faligndata %f56, %f58, %f22
+ faligndata %f58, %f60, %f24
+ faligndata %f60, %f62, %f26
+ ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f28
+ .align 32
+prepr4: faligndata %f36, %f38, %f16
+ faligndata %f38, %f40, %f18
+ faligndata %f40, %f42, %f20
+ faligndata %f42, %f44, %f22
+ faligndata %f44, %f46, %f24
+ ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f26
+ .align 32
+prepr5: faligndata %f52, %f54, %f16
+ faligndata %f54, %f56, %f18
+ faligndata %f56, %f58, %f20
+ faligndata %f58, %f60, %f22
+ faligndata %f60, %f62, %f24
+ ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f26
+ .align 32
+prepr6: faligndata %f38, %f40, %f16
+ faligndata %f40, %f42, %f18
+ faligndata %f42, %f44, %f20
+ faligndata %f44, %f46, %f22
+ ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f24
+ .align 32
+prepr7: faligndata %f54, %f56, %f16
+ faligndata %f56, %f58, %f18
+ faligndata %f58, %f60, %f20
+ faligndata %f60, %f62, %f22
+ ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f24
+ .align 32
+prepr8: faligndata %f40, %f42, %f16
+ faligndata %f42, %f44, %f18
+ faligndata %f44, %f46, %f20
+ ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f22
+ .align 32
+prepr9: faligndata %f56, %f58, %f16
+ faligndata %f58, %f60, %f18
+ faligndata %f60, %f62, %f20
+ ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f22
+ .align 32
+prepr10:faligndata %f42, %f44, %f16
+ faligndata %f44, %f46, %f18
+ ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f20
+ .align 32
+prepr11:faligndata %f58, %f60, %f16
+ faligndata %f60, %f62, %f18
+ ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f20
+ .align 32
+prepr12:faligndata %f44, %f46, %f16
+ ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f18
+ .align 32
+prepr13:faligndata %f60, %f62, %f16
+ ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f18
+ .align 32
+prepr14:ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f16
+ nop
+ nop
+4: ba,pt %xcc, narrowst
+ faligndata %f46, %f0, %f30
+ .align 32
+prepr15:ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f16
+ nop
+ nop
+5: ba,pt %xcc, narrowst
+ faligndata %f62, %f0, %f30
+
+ .align 32
+prepn0: faligndata %ftmp1, %f32, %f30
+ ba,pt %xcc, leftst
+ mov (vis0 - BranchBase), %tmp3
+ nop
+1: ba,pt %xcc, leftst
+ mov (vis12 - BranchBase), %tmp3
+ .align 32
+prepn1: faligndata %ftmp1, %f48, %f30
+ ba,pt %xcc, leftst
+ mov (vis1 - BranchBase), %tmp3
+ nop
+2: ba,pt %xcc, leftst
+ mov (vis13 - BranchBase), %tmp3
+ .align 32
+prepn2: faligndata %ftmp1, %f32, %f28
+ faligndata %f32, %f34, %f30
+ ba,pt %xcc, leftst
+ mov (vis2 - BranchBase), %tmp3
+3: faligndata %f44, %f46, %f30
+ ba,pt %xcc, leftst
+ mov (vis14 - BranchBase), %tmp3
+ .align 32
+prepn3: faligndata %ftmp1, %f48, %f28
+ faligndata %f48, %f50, %f30
+ ba,pt %xcc, leftst
+ mov (vis3 - BranchBase), %tmp3
+ .align 32
+prepn4: faligndata %ftmp1, %f32, %f26
+ faligndata %f32, %f34, %f28
+ faligndata %f34, %f36, %f30
+ ba,pt %xcc, leftst
+ mov (vis4 - BranchBase), %tmp3
+ .align 32
+prepn5: faligndata %ftmp1, %f48, %f26
+ faligndata %f48, %f50, %f28
+ faligndata %f50, %f52, %f30
+ ba,pt %xcc, leftst
+ mov (vis5 - BranchBase), %tmp3
+ .align 32
+prepn6: faligndata %ftmp1, %f32, %f24
+ faligndata %f32, %f34, %f26
+ faligndata %f34, %f36, %f28
+ faligndata %f36, %f38, %f30
+ ba,pt %xcc, leftst
+ mov (vis6 - BranchBase), %tmp3
+ .align 32
+prepn7: faligndata %ftmp1, %f48, %f24
+ faligndata %f48, %f50, %f26
+ faligndata %f50, %f52, %f28
+ faligndata %f52, %f54, %f30
+ ba,pt %xcc, leftst
+ mov (vis7 - BranchBase), %tmp3
+ .align 32
+prepn8: faligndata %ftmp1, %f32, %f22
+ faligndata %f32, %f34, %f24
+ faligndata %f34, %f36, %f26
+ faligndata %f36, %f38, %f28
+ faligndata %f38, %f40, %f30
+ ba,pt %xcc, leftst
+ mov (vis8 - BranchBase), %tmp3
+ .align 32
+prepn9: faligndata %ftmp1, %f48, %f22
+ faligndata %f48, %f50, %f24
+ faligndata %f50, %f52, %f26
+ faligndata %f52, %f54, %f28
+ faligndata %f54, %f56, %f30
+ ba,pt %xcc, leftst
+ mov (vis9 - BranchBase), %tmp3
+ .align 32
+prepn10:faligndata %ftmp1, %f32, %f20
+ faligndata %f32, %f34, %f22
+ faligndata %f34, %f36, %f24
+ faligndata %f36, %f38, %f26
+ faligndata %f38, %f40, %f28
+ faligndata %f40, %f42, %f30
+ ba,pt %xcc, leftst
+ mov (vis10 - BranchBase), %tmp3
+ .align 32
+prepn11:faligndata %ftmp1, %f48, %f20
+ faligndata %f48, %f50, %f22
+ faligndata %f50, %f52, %f24
+ faligndata %f52, %f54, %f26
+ faligndata %f54, %f56, %f28
+ faligndata %f56, %f58, %f30
+ ba,pt %xcc, leftst
+ mov (vis11 - BranchBase), %tmp3
+ .align 32
+prepn12:faligndata %ftmp1, %f32, %f18
+ faligndata %f32, %f34, %f20
+ faligndata %f34, %f36, %f22
+ faligndata %f36, %f38, %f24
+ faligndata %f38, %f40, %f26
+ faligndata %f40, %f42, %f28
+ ba,pt %xcc, 1b
+ faligndata %f42, %f44, %f30
+ .align 32
+prepn13:faligndata %ftmp1, %f48, %f18
+ faligndata %f48, %f50, %f20
+ faligndata %f50, %f52, %f22
+ faligndata %f52, %f54, %f24
+ faligndata %f54, %f56, %f26
+ faligndata %f56, %f58, %f28
+ ba,pt %xcc, 2b
+ faligndata %f58, %f60, %f30
+ .align 32
+prepn14:faligndata %ftmp1, %f32, %f16
+ faligndata %f32, %f34, %f18
+ faligndata %f34, %f36, %f20
+ faligndata %f36, %f38, %f22
+ faligndata %f38, %f40, %f24
+ faligndata %f40, %f42, %f26
+ ba,pt %xcc, 3b
+ faligndata %f42, %f44, %f28
+ .align 32
+prepn15:faligndata %ftmp1, %f48, %f16
+ faligndata %f48, %f50, %f18
+ faligndata %f50, %f52, %f20
+ faligndata %f52, %f54, %f22
+ faligndata %f54, %f56, %f24
+ faligndata %f56, %f58, %f26
+ faligndata %f58, %f60, %f28
+ faligndata %f60, %f62, %f30
+ ba,pt %xcc, leftst
+ mov (vis15 - BranchBase), %tmp3
+
+ .align 64
+BranchBase:
+prepl0: FREG_FROB(f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep0e,prep0r),f48)
+ ba,pt %xcc, leftst
+ mov (vis1 - BranchBase), %tmp3
+ .align 64
+prepl1: FREG_FROB(f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep1e,prep1r),f32)
+ ba,pt %xcc, leftst
+ mov (vis0 - BranchBase), %tmp3
+ .align 64
+prepl2: FREG_FROB(f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep2e,prep2r),f48,f48,,f50)
+ ba,pt %xcc, leftst
+ mov (vis3 - BranchBase), %tmp3
+ .align 64
+prepl3: FREG_FROB(f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep3e,prep3r),f32,f32,,f34)
+ ba,pt %xcc, leftst
+ mov (vis2 - BranchBase), %tmp3
+ .align 64
+prepl4: FREG_FROB(f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep4e,prep4r),f48,f48,,f50,f50,,f52)
+ ba,pt %xcc, leftst
+ mov (vis5 - BranchBase), %tmp3
+ .align 64
+prepl5: FREG_FROB(f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep5e,prep5r),f32,f32,,f34,f34,,f36)
+ ba,pt %xcc, leftst
+ mov (vis4 - BranchBase), %tmp3
+ .align 64
+prepl6: FREG_FROB(f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep6e,prep6r),f48,f48,,f50,f50,,f52,f52,,f54)
+ ba,pt %xcc, leftst
+ mov (vis7 - BranchBase), %tmp3
+ .align 64
+prepl7: FREG_FROB(f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep7e,prep7r),f32,f32,,f34,f34,,f36,f36,,f38)
+ ba,pt %xcc, leftst
+ mov (vis6 - BranchBase), %tmp3
+ .align 64
+prepl8: FREG_FROB(f40,,f42,f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep8e,prep8r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56)
+ ba,pt %xcc, leftst
+ mov (vis9 - BranchBase), %tmp3
+ .align 64
+prepl9: FREG_FROB(f56,,f58,f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep9e,prep9r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40)
+ ba,pt %xcc, leftst
+ mov (vis8 - BranchBase), %tmp3
+ .align 64
+prepl10:FREG_FROB(f42,,f44,f44,,f46,ftmp1,PREPLOAD(f32,f46,prep10e,prep10r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58)
+ ba,pt %xcc, leftst
+ mov (vis11 - BranchBase), %tmp3
+ .align 64
+prepl11:FREG_FROB(f58,,f60,f60,,f62,ftmp1,PREPLOAD(f48,f62,prep11e,prep11r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42)
+ ba,pt %xcc, leftst
+ mov (vis10 - BranchBase), %tmp3
+ .align 64
+prepl12:FREG_FROB(f44,,f46,ftmp1,PREPLOAD(f32,f46,prep12e,prep12r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60)
+ ba,pt %xcc, leftst
+ mov (vis13 - BranchBase), %tmp3
+ .align 64
+prepl13:FREG_FROB(f60,,f62,ftmp1,PREPLOAD(f48,f62,prep13e,prep13r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44)
+ ba,pt %xcc, leftst
+ mov (vis12 - BranchBase), %tmp3
+ .align 64
+prepl14:FREG_FROB(ftmp1,PREPLOAD(f32,f46,prep14e,prep14r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62)
+ ba,pt %xcc, leftst
+ mov (vis15 - BranchBase), %tmp3
+ .align 64
+prepl15:FREG_FROB(ftmp1,PREPLOAD(f48,f62,prep15e,prep15r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46)
+ ba,pt %xcc, leftst
+ mov (vis14 - BranchBase), %tmp3
+
+ .align 128
+vis0: FREG_FROB(f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis0e,vis0r),f48)
+ STORE
+ add %dst, 64, %dst
+vis1: FREG_FROB(f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis1e,vis1r),f32)
+ STORE
+ ba,pt %xcc, vis0
+ add %dst, 64, %dst
+ .align 128
+vis2: FREG_FROB(f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis2e,vis2r),f48,f48,,f50)
+ STORE
+ add %dst, 64, %dst
+vis3: FREG_FROB(f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis3e,vis3r),f32,f32,,f34)
+ STORE
+ ba,pt %xcc, vis2
+ add %dst, 64, %dst
+ .align 128
+vis4: FREG_FROB(f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis4e,vis4r),f48,f48,,f50,f50,,f52)
+ STORE
+ add %dst, 64, %dst
+vis5: FREG_FROB(f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis5e,vis5r),f32,f32,,f34,f34,,f36)
+ STORE
+ ba,pt %xcc, vis4
+ add %dst, 64, %dst
+ .align 128
+vis6: FREG_FROB(f38,,f40,f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis6e,vis6r),f48,f48,,f50,f50,,f52,f52,,f54)
+ STORE
+ add %dst, 64, %dst
+vis7: FREG_FROB(f54,,f56,f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis7e,vis7r),f32,f32,,f34,f34,,f36,f36,,f38)
+ STORE
+ ba,pt %xcc, vis6
+ add %dst, 64, %dst
+ .align 128
+vis8: FREG_FROB(f40,,f42,f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis8e,vis8r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56)
+ STORE
+ add %dst, 64, %dst
+vis9: FREG_FROB(f56,,f58,f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis9e,vis9r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40)
+ STORE
+ ba,pt %xcc, vis8
+ add %dst, 64, %dst
+ .align 128
+vis10: FREG_FROB(f42,,f44,f44,,f46,ftmp1,LOAD(f32,f46,vis10e,vis10r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58)
+ STORE
+ add %dst, 64, %dst
+vis11: FREG_FROB(f58,,f60,f60,,f62,ftmp1,LOAD(f48,f62,vis11e,vis11r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42)
+ STORE
+ ba,pt %xcc, vis10
+ add %dst, 64, %dst
+ .align 128
+vis12: FREG_FROB(f44,,f46,ftmp1,LOAD(f32,f46,vis12e,vis12r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60)
+ STORE
+ add %dst, 64, %dst
+vis13: FREG_FROB(f60,,f62,ftmp1,LOAD(f48,f62,vis13e,vis13r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44)
+ STORE
+ ba,pt %xcc, vis12
+ add %dst, 64, %dst
+ .align 128
+vis14: FREG_FROB(ftmp1,LOAD(f32,f46,vis14e,vis14r),f48,f48,,f50,f50,,f52,f52,,f54,f54,,f56,f56,,f58,f58,,f60,f60,,f62)
+ STORE
+ add %dst, 64, %dst
+vis15: FREG_FROB(ftmp1,LOAD(f48,f62,vis15e,vis15r),f32,f32,,f34,f34,,f36,f36,,f38,f38,,f40,f40,,f42,f42,,f44,f44,,f46)
+ STORE
+ ba,pt %xcc, vis14
+ add %dst, 64, %dst
+
+leftst: brlz,pn %curw, narrowst + 4
+ and %leftw, 0x38, %tmp1
+ andcc %leftw, 7, %g0
+ be,pn %icc, 1f
+ neg %tmp1
+ sub %dst, %leftw, %tmp4
+ add %branchbase, (2f - BranchBase - 8), %tmp2
+ edge8 %tmp4, %g0, %tmp5
+ jmpl %tmp2 + %tmp1, %g0
+ andn %tmp4, 7, %tmp4
+1: addcc %branchbase, (3f - BranchBase), %tmp2
+ sra %tmp1, 1, %tmp1
+ jmpl %tmp2 + %tmp1, %g0
+ nop
+ ba,pt %xcc, 2f+0x00
+ stda %f16, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 2f+0x04
+ stda %f18, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 2f+0x08
+ stda %f20, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 2f+0x0c
+ stda %f22, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 2f+0x10
+ stda %f24, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 2f+0x14
+ stda %f26, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 2f+0x18
+ stda %f28, [%tmp4 + %tmp5] ASI_PST8_P
+ jmpl %branchbase + %tmp3, %g0
+ stda %f30, [%tmp4 + %tmp5] ASI_PST8_P
+2: std %f18, [%dst - 0x38]
+ std %f20, [%dst - 0x30]
+ std %f22, [%dst - 0x28]
+ std %f24, [%dst - 0x20]
+ std %f26, [%dst - 0x18]
+ std %f28, [%dst - 0x10]
+ std %f30, [%dst - 0x08]
+3: jmpl %branchbase + %tmp3, %g0
+ nop
+
+rightst:cmp %rightw, 64
+ be,pn %icc, 2f
+ and %rightw, 0x38, %tmp1
+ andcc %rightw, 7, %g0
+ be,pn %icc, 1f
+ neg %tmp1
+ sub %g0, %rightw, %tmp5
+ add %branchbase, (3f - BranchBase - 8), %tmp2
+ edge8l %tmp5, %g0, %tmp5
+ add %mode, %skind, %mode
+ jmpl %tmp1 + %tmp2, %g0
+ sub %dst, %tmp1, %tmp4
+1: addcc %branchbase, (4f - BranchBase), %tmp2
+ sra %tmp1, 1, %tmp1
+ jmpl %tmp1 + %tmp2, %g0
+2: add %mode, %skind, %mode
+ ba,pt %xcc, 4f
+ stda %f16, [%dst] ASI_BLK_P
+ ba,pt %xcc, 3f+0x00
+ stda %f30, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x04
+ stda %f28, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x08
+ stda %f26, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x0c
+ stda %f24, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x10
+ stda %f22, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x14
+ stda %f20, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x18
+ stda %f18, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x1c
+ stda %f16, [%tmp4 + %tmp5] ASI_PST8_P
+3: std %f28, [%dst + 0x30]
+ std %f26, [%dst + 0x28]
+ std %f24, [%dst + 0x20]
+ std %f22, [%dst + 0x18]
+ std %f20, [%dst + 0x10]
+ std %f18, [%dst + 0x08]
+ std %f16, [%dst + 0x00]
+4: brnz,pn %narrow, narrow_cont
+ deccc %srcnotdone
+ blu,pn %ICC, return
+ sub %mode, %dkind, %mode
+ alignaddr %mode, %g0, %g0
+ and %mode, 63, %mode
+ cmp %srcnext, %srcn
+ bne,a,pn %ICC, 6f
+ xor %fregset, 64, %fregset
+ brnz,a,pn %fregset, 5f
+ ldda [%src] ASI_BLK_P, %f32
+ ldda [%src] ASI_BLK_P, %f48
+5: add %src, 64, %src
+6: add %dst, %dkind, %dst
+ sub %w, %rightw, %tmp1
+ add %srcstart, %skind, %srcstart
+ sub %dst, %tmp1, %dst
+ add %rightw, %dkind, %rightw
+ andn %dst, 63, %dst
+ sub %rightw, 1, %rightw
+ sub %leftw, %dkind, %leftw
+ and %rightw, 63, %rightw
+ and %leftw, 63, %leftw
+ add %rightw, 1, %rightw
+roll_wide:
+ add %srcstart, %w, %srcend
+ add %srcstart, %skind, %srcnext
+ fnop
+ add %srcend, 63, %srcend
+ andncc %srcnext, 63, %srcnext
+ fnop
+ sll %mode, 4, %tmp1
+ andn %srcend, 63, %srcend
+ fnop
+ mov %srcnext, %srcn
+ and %mode, 7, %rightw2
+ fnop
+ andn %tmp1, 127, %tmp1
+ add %rightw2, %rightw, %rightw2
+ fnop
+ add %tmp1, %fregset, %tmp1
+ subcc %w, %leftw, %tmp3
+ fnop
+ srl %tmp1, 1, %tmp2
+ add %srcnext, 64, %tmp4
+ fnop
+ add %tmp2, (prepn0 - BranchBase), %tmp2
+ cmp %mode, %leftw
+ movgeu %icc, %tmp2, %tmp1
+ cmp %tmp4, %srcend
+ add %dst, 64, %tmp4
+ move %ICC, %srcend, %srcnext
+ movrnz %leftw, %tmp4, %dst
+ jmpl %branchbase + %tmp1, %g0
+ sub %tmp3, %rightw, %curw
+
+return: return %i7+8
+ wr %g0, 0, %fprs
+
+narrowst:
+ and %leftw, 0x38, %tmp1
+ sub %dst, %leftw, %tmp5
+ sub %w, 1, %fregset
+ andcc %leftw, 7, %tmp4
+ add %fregset, %tmp5, %fregset
+ neg %tmp1
+ and %fregset, 7, %srcend
+ be,pn %icc, 1f
+ edge8 %g0, %srcend, %srcend
+ add %tmp1, (2f - BranchBase - 8), %tmp1
+ edge8 %tmp5, %fregset, %tmp2
+ andn %tmp5, 7, %tmp5
+ andn %fregset, 7, %fregset
+ jmpl %branchbase + %tmp1, %g0
+ sub %w, %tmp4, %tmp4
+1: addcc %branchbase, (3f - BranchBase - 8), %tmp2
+ sll %tmp1, 1, %tmp1
+ andn %fregset, 7, %fregset
+ jmpl %tmp2 + %tmp1, %g0
+ mov %w, %tmp4
+ ba,pt %xcc, 2f+0x00
+ stda %f16, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 2f+0x10
+ stda %f18, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 2f+0x20
+ stda %f20, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 2f+0x30
+ stda %f22, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 2f+0x40
+ stda %f24, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 2f+0x50
+ stda %f26, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 2f+0x60
+ stda %f28, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 4f
+ stda %f30, [%tmp5 + %tmp2] ASI_PST8_P
+2: subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 3f+0x00
+ fnop
+ std %f18, [%dst - 0x38]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 3f+0x10
+ fnop
+ std %f20, [%dst - 0x30]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 3f+0x20
+ fnop
+ std %f22, [%dst - 0x28]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 3f+0x30
+ fnop
+ std %f24, [%dst - 0x20]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 3f+0x40
+ fnop
+ std %f26, [%dst - 0x18]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 3f+0x50
+ fnop
+ std %f28, [%dst - 0x10]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 3f+0x60
+ fnop
+ std %f30, [%dst - 0x08]
+ ba,pt %xcc, 4f
+ nop
+3: cmp %tmp4, -8
+ bg,a,pn %ICC, 4f
+ stda %f18, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 4f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 4f
+ stda %f20, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 4f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 4f
+ stda %f22, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 4f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 4f
+ stda %f24, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 4f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 4f
+ stda %f26, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 4f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 4f
+ stda %f28, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 4f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 4f
+ stda %f30, [%fregset + %srcend] ASI_PST8_P
+4: and %tmp3, 60, %tmp3
+ sub %dst, 64, %dst
+ add %tmp3, 96, %tmp3
+ add %mode, %skind, %mode
+ brz,pn %h, return
+ and %tmp3, 64, %fregset
+narrow_cont:
+ deccc %h
+ blu,pn %ICC, return
+ sub %mode, %dkind, %mode
+ alignaddr %mode, %g0, %g0
+ and %mode, 63, %mode
+ sub %srcnext, %srcn, %tmp4
+ add %dst, %dkind, %dst
+ sub %w, %rightw, %tmp1
+ add %srcstart, %skind, %srcstart
+ sub %dst, %tmp1, %dst
+ add %rightw, %dkind, %rightw
+ sub %leftw, %dkind, %leftw
+ sub %rightw, 1, %rightw
+ and %leftw, 63, %leftw
+ and %rightw, 63, %rightw
+ add %srcstart, %w, %srcend
+ add %rightw, 1, %rightw
+ add %srcstart, %skind, %srcnext
+ add %srcend, 63, %srcend
+ andn %srcnext, 63, %srcnext
+ andn %srcend, 63, %srcend
+ sub %w, %leftw, %prepw
+ mov %srcnext, %srcn
+ add %srcnext, 64, %tmp2
+ sub %srcnext, 64, %tmp3
+ and %srcstart, 63, %tmp1
+ cmp %skind, 0
+ movg %ICC, %srcend, %tmp3
+ sub %prepw, %rightw, %prepw
+ add %tmp1, %w, %tmp1
+ cmp %tmp2, %srcend
+ mov %prepw, %curw
+ move %ICC, %tmp3, %srcnext
+ mov %h, %srcnotdone
+ cmp %tmp1, 128
+ movg %ICC, 64, %prepw
+ andn %dst, 63, %dst
+ cmp %srcnext, %srcstop
+ move %ICC, 0, %srcnotdone
+ brnz,a,pn %tmp4, roll_narrow
+ xor %fregset, 64, %fregset
+ cmp %tmp1, 64
+ bg,pt %ICC, 5f
+ tst %srcnotdone
+ be,a,pn %ICC, roll_narrow
+ membar SYNC
+ mov %srcnext, %src
+5: brnz,a,pn %fregset, 6f
+ ldda [%src] ASI_BLK_P, %f32
+ ldda [%src] ASI_BLK_P, %f48
+6: addcc %src, 64, %src
+roll_narrow:
+ fnop
+ sll %mode, 4, %tmp2
+ and %mode, 7, %rightw2
+ fnop
+ andn %tmp2, 127, %tmp2
+ add %dst, 64, %tmp4
+ fnop
+ add %tmp2, %fregset, %tmp2
+ addcc %rightw2, %rightw, %rightw2
+ fnop
+ srl %tmp2, 1, %tmp3
+ movrnz %leftw, %tmp4, %dst
+ fnop
+ add %tmp3, (prepr0 - BranchBase), %tmp4
+ cmp %tmp1, 64
+ movleu %icc, %tmp4, %tmp2
+ fnop
+ add %tmp3, (prepn0 - BranchBase), %tmp4
+ cmp %mode, %leftw
+ fnop
+ movgeu %icc, %tmp4, %tmp2
+ jmpl %branchbase + %tmp2, %g0
+ and %tmp3, 32, %tmp3
+
+#define VISEND(i,tgt,tgtr,fi,fset) \
+tgt: \
+ brnz,pt %curw, 1f; \
+ cmp %rightw2, (64 - (i&14)*4); \
+ bgu,pn %icc, tgtr - 8; \
+ tst %srcnotdone; \
+ be,a,pn %ICC, tgtr; \
+ membar SYNC; \
+ ba,pt %xcc, tgtr - 8; \
+ mov %srcnext, %src; \
+1: mov ((i & 1) ^ 1) * 64, %fregset; \
+ bleu,pn %icc, rightst; \
+ faligndata %ftmp1, %ftmp2, %fi; \
+ brz,a,pn %srcnotdone, 3f; \
+ membar SYNC; \
+ ldda [%srcnext] ASI_BLK_P, %fset; \
+ add %srcnext, 64, %src; \
+3: mov (i & 1) * 64, %fregset;
+
+VISEND(0,vis0e,vis0r,f30,f32)
+ ba,pt %xcc, rightst
+ faligndata %ftmp1, %f48, %f30
+VISEND(1,vis1e,vis1r,f30,f48)
+ ba,pt %xcc, rightst
+ faligndata %ftmp1, %f32, %f30
+VISEND(2,vis2e,vis2r,f28,f32)
+ faligndata %ftmp1, %f48, %f28
+ ba,pt %xcc, rightst
+ faligndata %f48, %f50, %f30
+VISEND(3,vis3e,vis3r,f28,f48)
+ faligndata %ftmp1, %f32, %f28
+ ba,pt %xcc, rightst
+ faligndata %f32, %f34, %f30
+VISEND(4,vis4e,vis4r,f26,f32)
+ faligndata %ftmp1, %f48, %f26
+ faligndata %f48, %f50, %f28
+ ba,pt %xcc, rightst
+ faligndata %f50, %f52, %f30
+VISEND(5,vis5e,vis5r,f26,f48)
+ faligndata %ftmp1, %f32, %f26
+ faligndata %f32, %f34, %f28
+ ba,pt %xcc, rightst
+ faligndata %f34, %f36, %f30
+VISEND(6,vis6e,vis6r,f24,f32)
+ faligndata %ftmp1, %f48, %f24
+ faligndata %f48, %f50, %f26
+ faligndata %f50, %f52, %f28
+ ba,pt %xcc, rightst
+ faligndata %f52, %f54, %f30
+VISEND(7,vis7e,vis7r,f24,f48)
+ faligndata %ftmp1, %f32, %f24
+ faligndata %f32, %f34, %f26
+ faligndata %f34, %f36, %f28
+ ba,pt %xcc, rightst
+ faligndata %f36, %f38, %f30
+VISEND(8,vis8e,vis8r,f22,f32)
+ faligndata %ftmp1, %f48, %f22
+ faligndata %f48, %f50, %f24
+ faligndata %f50, %f52, %f26
+ faligndata %f52, %f54, %f28
+ ba,pt %xcc, rightst
+ faligndata %f54, %f56, %f30
+VISEND(9,vis9e,vis9r,f22,f48)
+ faligndata %ftmp1, %f32, %f22
+ faligndata %f32, %f34, %f24
+ faligndata %f34, %f36, %f26
+ faligndata %f36, %f38, %f28
+ ba,pt %xcc, rightst
+ faligndata %f38, %f40, %f30
+VISEND(10,vis10e,vis10r,f20,f32)
+ faligndata %ftmp1, %f48, %f20
+ faligndata %f48, %f50, %f22
+ faligndata %f50, %f52, %f24
+ faligndata %f52, %f54, %f26
+ faligndata %f54, %f56, %f28
+ ba,pt %xcc, rightst
+ faligndata %f56, %f58, %f30
+VISEND(11,vis11e,vis11r,f20,f48)
+ faligndata %ftmp1, %f32, %f20
+ faligndata %f32, %f34, %f22
+ faligndata %f34, %f36, %f24
+ faligndata %f36, %f38, %f26
+ faligndata %f38, %f40, %f28
+ ba,pt %xcc, rightst
+ faligndata %f40, %f42, %f30
+VISEND(12,vis12e,vis12r,f18,f32)
+ faligndata %ftmp1, %f48, %f18
+ faligndata %f48, %f50, %f20
+ faligndata %f50, %f52, %f22
+ faligndata %f52, %f54, %f24
+ faligndata %f54, %f56, %f26
+ faligndata %f56, %f58, %f28
+ ba,pt %xcc, rightst
+ faligndata %f58, %f60, %f30
+VISEND(13,vis13e,vis13r,f18,f48)
+ faligndata %ftmp1, %f32, %f18
+ faligndata %f32, %f34, %f20
+ faligndata %f34, %f36, %f22
+ faligndata %f36, %f38, %f24
+ faligndata %f38, %f40, %f26
+ faligndata %f40, %f42, %f28
+ ba,pt %xcc, rightst
+ faligndata %f42, %f44, %f30
+VISEND(14,vis14e,vis14r,f16,f32)
+ faligndata %ftmp1, %f48, %f16
+ faligndata %f48, %f50, %f18
+ faligndata %f50, %f52, %f20
+ faligndata %f52, %f54, %f22
+ faligndata %f54, %f56, %f24
+ faligndata %f56, %f58, %f26
+ faligndata %f58, %f60, %f28
+ ba,pt %xcc, rightst
+ faligndata %f60, %f62, %f30
+VISEND(15,vis15e,vis15r,f16,f48)
+ faligndata %ftmp1, %f32, %f16
+ faligndata %f32, %f34, %f18
+ faligndata %f34, %f36, %f20
+ faligndata %f36, %f38, %f22
+ faligndata %f38, %f40, %f24
+ faligndata %f40, %f42, %f26
+ faligndata %f42, %f44, %f28
+ ba,pt %xcc, rightst
+ faligndata %f44, %f46, %f30
+
+#define PREPEND(tgt,tgtr) \
+tgt: \
+ brnz,pt %srcnotdone, tgtr - 8; \
+ mov %srcnext, %src; \
+ ba,pt %xcc, tgtr; \
+ membar SYNC;
+
+ .align 16
+PREPEND(prep0e,prep0r)
+PREPEND(prep1e,prep1r)
+PREPEND(prep2e,prep2r)
+PREPEND(prep3e,prep3r)
+PREPEND(prep4e,prep4r)
+PREPEND(prep5e,prep5r)
+PREPEND(prep6e,prep6r)
+PREPEND(prep7e,prep7r)
+PREPEND(prep8e,prep8r)
+PREPEND(prep9e,prep9r)
+PREPEND(prep10e,prep10r)
+PREPEND(prep11e,prep11r)
+PREPEND(prep12e,prep12r)
+PREPEND(prep13e,prep13r)
+PREPEND(prep14e,prep14r)
+PREPEND(prep15e,prep15r)
+
+/* The other way is even more complicated, as the hardware prefers
+ * going from lower addresses up. */
+
+#define RLOAD(f32,tgt,tgtr) \
+ subcc %curw, 64, %curw; \
+ bleu,pn %ICC, tgt; \
+ fmovd %f32, %ftmp1; \
+ ldda [%src] ASI_BLK_P, %f32; \
+ sub %src, 64, %src; \
+tgtr:
+
+#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__) || !defined(SIGNAL_CLOBBERS_OG_REGS)
+
+#define RPREPLOAD(f32,tgt,tgtr) \
+ brlez,pn %prepw, tgt; \
+ fmovd %f32, %ftmp1; \
+ ldda [%src] ASI_BLK_P, %f32; \
+ sub %src, 64, %src; \
+tgtr:
+
+#else
+
+#define RPREPLOAD(f32,tgt,tgtr) \
+ tst %prepw; \
+ ble,pn %ICC, tgt; \
+ fmovd %f32, %ftmp1; \
+ ldda [%src] ASI_BLK_P, %f32; \
+ sub %src, 64, %src; \
+tgtr:
+
+#endif
+
+ .globl VISmoveImageRL
+ .align 32
+VISmoveImageRL:
+ save %sp, -160, %sp ! Group 0
+0: rd %pc, %tmp3 ! Group 1
+ and %dst, 63, %leftw ! Group 7
+ mov 64, %tmp1
+ add %src, %w, %src ! Group 8
+ add %dst, %w, %dst
+ sub %src, %dst, %mode ! Group 9
+ brz,pn %h, rreturn
+ sub %dst, 1, %rightw ! Group 10
+ mov %src, %srcstart
+ dec %src ! Group 11
+ cmp %w, 128
+ blu,pn %ICC, rprepare_narrow
+ and %mode, 63, %mode ! Group 12
+ andn %src, 63, %src
+ ldda [%src] ASI_BLK_P, %f32 ! Group 13
+ sub %src, 64, %src ! Group 14
+ clr %narrow
+ ldda [%src] ASI_BLK_P, %f48 ! Group 15
+ sub %tmp1, %leftw, %leftw ! Group 16
+ and %rightw, 63, %rightw
+ dec %dst ! Group 17
+ add %rightw, 1, %rightw
+ alignaddr %mode, %g0, %g0 ! Group 18
+ andn %dst, 63, %dst ! Group 19
+ clr %fregset
+ sub %src, 64, %src ! Group 20
+ add %tmp3, (BranchBaseR - 0b), %branchbase
+ mov 64, %prepw ! Group 21
+ ba,pt %xcc, rroll_wide
+ sub %h, 1, %srcnotdone
+rprepare_narrow:
+#if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__)
+ brlez,pn %w, rreturn
+#else
+ tst %w
+ ble,pn %icc, rreturn
+#endif
+ andn %src, 63, %src ! Group 12
+ sub %tmp1, %leftw, %leftw
+ ldda [%src] ASI_BLK_P, %f32 ! Group 13
+ and %rightw, 63, %rightw ! Group 14
+ dec %dst
+ add %rightw, 1, %rightw ! Group 15
+ andn %dst, 63, %dst
+ sub %w, %leftw, %tmp2 ! Group 16
+ sub %srcstart, 1, %tmp1
+ subcc %tmp2, %rightw, %curw ! Group 17
+ and %tmp1, 63, %tmp1
+ mov %curw, %prepw ! Group 18
+ sub %tmp1, %w, %tmp1
+ bg,pt %ICC, 1f
+ sub %src, 64, %src ! Group 19
+ cmp %tmp1, -65
+ movl %ICC, 64, %prepw ! Group 20
+1: add %srcstart, %skind, %srcnext
+ sub %h, 1, %srcnotdone ! Group 21
+ sub %srcstart, %w, %tmp4
+ sub %srcnext, 1, %srcnext ! Group 22
+ andn %tmp4, 63, %srcend
+ andn %srcnext, 63, %srcnext ! Group 23
+ cmp %skind, 0
+ add %w, 64, %tmp2 ! Group 24
+ mov %srcnext, %srcn
+ bl,pn %ICC, 1f
+ clr %srcstop ! Group 25
+ cmp %skind, %tmp2
+ bgeu,pt %ICC, 3f
+ add %srcnext, 64, %fregset
+ SMUL %skind, %srcnotdone, %srcstop
+ ba,pt %xcc, 2f
+ add %srcstart, 63, %tmp4
+1: addcc %tmp2, %skind, %g0
+ ble,pt %ICC, 3f
+ sub %srcnext, 64, %fregset
+ SMUL %skind, %srcnotdone, %srcstop
+ sub %tmp4, 64, %tmp4
+2: add %srcstop, %tmp4, %srcstop
+3: cmp %srcnext, %srcend
+ andn %srcstop, 63, %srcstop
+ move %ICC, %fregset, %srcnext
+ cmp %srcnext, %srcstop
+ clr %fregset
+ move %ICC, 0, %srcnotdone
+ alignaddr %mode, %g0, %g0
+ add %tmp3, (BranchBaseR - 0b), %branchbase
+ mov 1, %narrow
+ cmp %tmp1, -1
+ bge,pn %ICC, 1f
+ dec %h
+ ldda [%src] ASI_BLK_P, %f48
+ ba,pt %xcc, rroll_narrow
+ subcc %src, 64, %src
+1: brz,a,pn %srcnotdone, rroll_narrow
+ membar #Sync
+ ldda [%srcnext] ASI_BLK_P, %f48
+ ba,pt %xcc, rroll_narrow
+ subcc %srcnext, 64, %src
+
+ .align 32
+rrepr0: ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f30
+ nop
+ nop
+1: ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f16
+ .align 32
+rrepr1: ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f30
+ nop
+ nop
+2: ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f16
+ .align 32
+rrepr2: faligndata %f32, %f34, %f30
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f28
+ .align 32
+rrepr3: faligndata %f48, %f50, %f30
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f28
+ .align 32
+rrepr4: faligndata %f34, %f36, %f30
+ faligndata %f32, %f34, %f28
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f26
+ .align 32
+rrepr5: faligndata %f50, %f52, %f30
+ faligndata %f48, %f50, %f28
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f26
+ .align 32
+rrepr6: faligndata %f36, %f38, %f30
+ faligndata %f34, %f36, %f28
+ faligndata %f32, %f34, %f26
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f24
+ .align 32
+rrepr7: faligndata %f52, %f54, %f30
+ faligndata %f50, %f52, %f28
+ faligndata %f48, %f50, %f26
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f24
+ .align 32
+rrepr8: faligndata %f38, %f40, %f30
+ faligndata %f36, %f38, %f28
+ faligndata %f34, %f36, %f26
+ faligndata %f32, %f34, %f24
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f22
+ .align 32
+rrepr9: faligndata %f54, %f56, %f30
+ faligndata %f52, %f54, %f28
+ faligndata %f50, %f52, %f26
+ faligndata %f48, %f50, %f24
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f22
+ .align 32
+rrepr10:faligndata %f40, %f42, %f30
+ faligndata %f38, %f40, %f28
+ faligndata %f36, %f38, %f26
+ faligndata %f34, %f36, %f24
+ faligndata %f32, %f34, %f22
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f20
+ .align 32
+rrepr11:faligndata %f56, %f58, %f30
+ faligndata %f54, %f56, %f28
+ faligndata %f52, %f54, %f26
+ faligndata %f50, %f52, %f24
+ faligndata %f48, %f50, %f22
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f20
+ .align 32
+rrepr12:faligndata %f42, %f44, %f30
+ faligndata %f40, %f42, %f28
+ faligndata %f38, %f40, %f26
+ faligndata %f36, %f38, %f24
+ faligndata %f34, %f36, %f22
+ faligndata %f32, %f34, %f20
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f32, %f18
+ .align 32
+rrepr13:faligndata %f58, %f60, %f30
+ faligndata %f56, %f58, %f28
+ faligndata %f54, %f56, %f26
+ faligndata %f52, %f54, %f24
+ faligndata %f50, %f52, %f22
+ faligndata %f48, %f50, %f20
+ ba,pt %xcc, narrowstr
+ faligndata %ftmp1, %f48, %f18
+ .align 32
+rrepr14:faligndata %f44, %f46, %f30
+ faligndata %f42, %f44, %f28
+ faligndata %f40, %f42, %f26
+ faligndata %f38, %f40, %f24
+ faligndata %f36, %f38, %f22
+ faligndata %f34, %f36, %f20
+ ba,pt %xcc, 1b
+ faligndata %f32, %f34, %f18
+ .align 32
+rrepr15:faligndata %f60, %f62, %f30
+ faligndata %f58, %f60, %f28
+ faligndata %f56, %f58, %f26
+ faligndata %f54, %f56, %f24
+ faligndata %f52, %f54, %f22
+ faligndata %f50, %f52, %f20
+ ba,pt %xcc, 2b
+ faligndata %f48, %f50, %f18
+
+ .align 32
+rrepn0: faligndata %f46, %ftmp1, %f30
+ faligndata %f44, %f46, %f28
+ faligndata %f42, %f44, %f26
+ faligndata %f40, %f42, %f24
+ faligndata %f38, %f40, %f22
+ faligndata %f36, %f38, %f20
+ ba,pt %xcc, 1f
+ faligndata %f34, %f36, %f18
+ .align 32
+rrepn1: faligndata %f62, %ftmp1, %f30
+ faligndata %f60, %f62, %f28
+ faligndata %f58, %f60, %f26
+ faligndata %f56, %f58, %f24
+ faligndata %f54, %f56, %f22
+ faligndata %f52, %f54, %f20
+ ba,pt %xcc, 2f
+ faligndata %f50, %f52, %f18
+ .align 32
+rrepn2: faligndata %f46, %ftmp1, %f28
+ faligndata %f44, %f46, %f26
+ faligndata %f42, %f44, %f24
+ faligndata %f40, %f42, %f22
+ faligndata %f38, %f40, %f20
+ faligndata %f36, %f38, %f18
+ ba,pt %xcc, 3f
+ faligndata %f34, %f36, %f16
+ .align 32
+rrepn3: faligndata %f62, %ftmp1, %f28
+ faligndata %f60, %f62, %f26
+ faligndata %f58, %f60, %f24
+ faligndata %f56, %f58, %f22
+ faligndata %f54, %f56, %f20
+ faligndata %f52, %f54, %f18
+ ba,pt %xcc, 4f
+ faligndata %f50, %f52, %f16
+ .align 32
+rrepn4: faligndata %f46, %ftmp1, %f26
+ faligndata %f44, %f46, %f24
+ faligndata %f42, %f44, %f22
+ faligndata %f40, %f42, %f20
+ faligndata %f38, %f40, %f18
+ faligndata %f36, %f38, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis4 - BranchBaseR), %tmp3
+ .align 32
+rrepn5: faligndata %f62, %ftmp1, %f26
+ faligndata %f60, %f62, %f24
+ faligndata %f58, %f60, %f22
+ faligndata %f56, %f58, %f20
+ faligndata %f54, %f56, %f18
+ faligndata %f52, %f54, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis5 - BranchBaseR), %tmp3
+ .align 32
+rrepn6: faligndata %f46, %ftmp1, %f24
+ faligndata %f44, %f46, %f22
+ faligndata %f42, %f44, %f20
+ faligndata %f40, %f42, %f18
+ faligndata %f38, %f40, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis6 - BranchBaseR), %tmp3
+ .align 32
+rrepn7: faligndata %f62, %ftmp1, %f24
+ faligndata %f60, %f62, %f22
+ faligndata %f58, %f60, %f20
+ faligndata %f56, %f58, %f18
+ faligndata %f54, %f56, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis7 - BranchBaseR), %tmp3
+ .align 32
+rrepn8: faligndata %f46, %ftmp1, %f22
+ faligndata %f44, %f46, %f20
+ faligndata %f42, %f44, %f18
+ faligndata %f40, %f42, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis8 - BranchBaseR), %tmp3
+ .align 32
+rrepn9: faligndata %f62, %ftmp1, %f22
+ faligndata %f60, %f62, %f20
+ faligndata %f58, %f60, %f18
+ faligndata %f56, %f58, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis9 - BranchBaseR), %tmp3
+ .align 32
+rrepn10:faligndata %f46, %ftmp1, %f20
+ faligndata %f44, %f46, %f18
+ faligndata %f42, %f44, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis10 - BranchBaseR), %tmp3
+ .align 32
+rrepn11:faligndata %f62, %ftmp1, %f20
+ faligndata %f60, %f62, %f18
+ faligndata %f58, %f60, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis11 - BranchBaseR), %tmp3
+ .align 32
+rrepn12:faligndata %f46, %ftmp1, %f18
+ faligndata %f44, %f46, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis12 - BranchBaseR), %tmp3
+ nop
+ nop
+3: ba,pt %xcc, rightstr
+ mov (rvis2 - BranchBaseR), %tmp3
+ .align 32
+rrepn13:faligndata %f62, %ftmp1, %f18
+ faligndata %f60, %f62, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis13 - BranchBaseR), %tmp3
+ nop
+ nop
+4: ba,pt %xcc, rightstr
+ mov (rvis3 - BranchBaseR), %tmp3
+ .align 32
+rrepn14:faligndata %f46, %ftmp1, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis14 - BranchBaseR), %tmp3
+ nop
+1: faligndata %f32, %f34, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis0 - BranchBaseR), %tmp3
+ .align 32
+rrepn15:faligndata %f62, %ftmp1, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis15 - BranchBaseR), %tmp3
+ nop
+2: faligndata %f48, %f50, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis1 - BranchBaseR), %tmp3
+
+ .align 64
+BranchBaseR:
+rrepl0: RPREPLOAD(f32,rrep0e,rrep0r)
+ fnop
+ faligndata %f48, %f50, %f16
+ faligndata %f50, %f52, %f18
+ faligndata %f52, %f54, %f20
+ faligndata %f54, %f56, %f22
+ faligndata %f56, %f58, %f24
+ faligndata %f58, %f60, %f26
+ faligndata %f60, %f62, %f28
+ faligndata %f62, %ftmp1, %f30
+ ba,pt %xcc, rightstr
+ mov (rvis1 - BranchBaseR), %tmp3
+ nop
+ nop
+ .align 32
+rrepl1: RPREPLOAD(f48,rrep1e,rrep1r)
+ fnop
+ faligndata %f32, %f34, %f16
+ faligndata %f34, %f36, %f18
+ faligndata %f36, %f38, %f20
+ faligndata %f38, %f40, %f22
+ faligndata %f40, %f42, %f24
+ faligndata %f42, %f44, %f26
+ faligndata %f44, %f46, %f28
+ faligndata %f46, %ftmp1, %f30
+ ba,pt %xcc, rightstr
+ mov (rvis0 - BranchBaseR), %tmp3
+ nop
+ nop
+ .align 32
+rrepl2: faligndata %f32, %f34, %f30
+ RPREPLOAD(f32,rrep2e,rrep2r)
+ fnop
+ fnop
+ faligndata %f50, %f52, %f16
+ faligndata %f52, %f54, %f18
+ faligndata %f54, %f56, %f20
+ faligndata %f56, %f58, %f22
+ faligndata %f58, %f60, %f24
+ faligndata %f60, %f62, %f26
+ faligndata %f62, %ftmp1, %f28
+ ba,pt %xcc, rightstr
+ mov (rvis3 - BranchBaseR), %tmp3
+ nop
+ .align 32
+rrepl3: faligndata %f48, %f50, %f30
+ RPREPLOAD(f48,rrep3e,rrep3r)
+ fnop
+ fnop
+ faligndata %f34, %f36, %f16
+ faligndata %f36, %f38, %f18
+ faligndata %f38, %f40, %f20
+ faligndata %f40, %f42, %f22
+ faligndata %f42, %f44, %f24
+ faligndata %f44, %f46, %f26
+ faligndata %f46, %ftmp1, %f28
+ ba,pt %xcc, rightstr
+ mov (rvis2 - BranchBaseR), %tmp3
+ nop
+ .align 32
+rrepl4: faligndata %f32, %f34, %f28
+ faligndata %f34, %f36, %f30
+ RPREPLOAD(f32,rrep4e,rrep4r)
+ fnop
+ fnop
+ fnop
+ faligndata %f52, %f54, %f16
+ faligndata %f54, %f56, %f18
+ faligndata %f56, %f58, %f20
+ faligndata %f58, %f60, %f22
+ faligndata %f60, %f62, %f24
+ faligndata %f62, %ftmp1, %f26
+ ba,pt %xcc, rightstr
+ mov (rvis5 - BranchBaseR), %tmp3
+ .align 32
+rrepl5: faligndata %f48, %f50, %f28
+ faligndata %f50, %f52, %f30
+ RPREPLOAD(f48,rrep5e,rrep5r)
+ fnop
+ fnop
+ fnop
+ faligndata %f36, %f38, %f16
+ faligndata %f38, %f40, %f18
+ faligndata %f40, %f42, %f20
+ faligndata %f42, %f44, %f22
+ faligndata %f44, %f46, %f24
+ faligndata %f46, %ftmp1, %f26
+ ba,pt %xcc, rightstr
+ mov (rvis4 - BranchBaseR), %tmp3
+ .align 32
+rrepl6: faligndata %f32, %f34, %f26
+ faligndata %f34, %f36, %f28
+ faligndata %f36, %f38, %f30
+ RPREPLOAD(f32,rrep6e,rrep6r)
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f54, %f56, %f16
+ faligndata %f56, %f58, %f18
+ faligndata %f58, %f60, %f20
+ faligndata %f60, %f62, %f22
+ faligndata %f62, %ftmp1, %f24
+ ba,pt %xcc, rightstr
+ mov (rvis7 - BranchBaseR), %tmp3
+ .align 32
+rrepl7: faligndata %f48, %f50, %f26
+ faligndata %f50, %f52, %f28
+ faligndata %f52, %f54, %f30
+ RPREPLOAD(f48,rrep7e,rrep7r)
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f38, %f40, %f16
+ faligndata %f40, %f42, %f18
+ faligndata %f42, %f44, %f20
+ faligndata %f44, %f46, %f22
+ faligndata %f46, %ftmp1, %f24
+ ba,pt %xcc, rightstr
+ mov (rvis6 - BranchBaseR), %tmp3
+ .align 32
+rrepl8: faligndata %f32, %f34, %f24
+ faligndata %f34, %f36, %f26
+ faligndata %f36, %f38, %f28
+ faligndata %f38, %f40, %f30
+ RPREPLOAD(f32,rrep8e,rrep8r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f56, %f58, %f16
+ faligndata %f58, %f60, %f18
+ faligndata %f60, %f62, %f20
+ faligndata %f62, %ftmp1, %f22
+ ba,pt %xcc, rightstr
+ mov (rvis9 - BranchBaseR), %tmp3
+ .align 32
+rrepl9: faligndata %f48, %f50, %f24
+ faligndata %f50, %f52, %f26
+ faligndata %f52, %f54, %f28
+ faligndata %f54, %f56, %f30
+ RPREPLOAD(f48,rrep9e,rrep9r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f40, %f42, %f16
+ faligndata %f42, %f44, %f18
+ faligndata %f44, %f46, %f20
+ faligndata %f46, %ftmp1, %f22
+ ba,pt %xcc, rightstr
+ mov (rvis8 - BranchBaseR), %tmp3
+ .align 32
+rrepl10:faligndata %f32, %f34, %f22
+ faligndata %f34, %f36, %f24
+ faligndata %f36, %f38, %f26
+ faligndata %f38, %f40, %f28
+ faligndata %f40, %f42, %f30
+ RPREPLOAD(f32,rrep10e,rrep10r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f58, %f60, %f16
+ faligndata %f60, %f62, %f18
+ faligndata %f62, %ftmp1, %f20
+ ba,pt %xcc, rightstr
+ mov (rvis11 - BranchBaseR), %tmp3
+ .align 32
+rrepl11:faligndata %f48, %f50, %f22
+ faligndata %f50, %f52, %f24
+ faligndata %f52, %f54, %f26
+ faligndata %f54, %f56, %f28
+ faligndata %f56, %f58, %f30
+ RPREPLOAD(f48,rrep11e,rrep11r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f42, %f44, %f16
+ faligndata %f44, %f46, %f18
+ faligndata %f46, %ftmp1, %f20
+ ba,pt %xcc, rightstr
+ mov (rvis10 - BranchBaseR), %tmp3
+ .align 32
+rrepl12:faligndata %f32, %f34, %f20
+ faligndata %f34, %f36, %f22
+ faligndata %f36, %f38, %f24
+ faligndata %f38, %f40, %f26
+ faligndata %f40, %f42, %f28
+ faligndata %f42, %f44, %f30
+ RPREPLOAD(f32,rrep12e,rrep12r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f60, %f62, %f16
+ faligndata %f62, %ftmp1, %f18
+ ba,pt %xcc, rightstr
+ mov (rvis13 - BranchBaseR), %tmp3
+ .align 32
+rrepl13:faligndata %f48, %f50, %f20
+ faligndata %f50, %f52, %f22
+ faligndata %f52, %f54, %f24
+ faligndata %f54, %f56, %f26
+ faligndata %f56, %f58, %f28
+ faligndata %f58, %f60, %f30
+ RPREPLOAD(f48,rrep13e,rrep13r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f44, %f46, %f16
+ faligndata %f46, %ftmp1, %f18
+ ba,pt %xcc, rightstr
+ mov (rvis12 - BranchBaseR), %tmp3
+ .align 32
+rrepl14:faligndata %f32, %f34, %f18
+ faligndata %f34, %f36, %f20
+ faligndata %f36, %f38, %f22
+ faligndata %f38, %f40, %f24
+ faligndata %f40, %f42, %f26
+ faligndata %f42, %f44, %f28
+ faligndata %f44, %f46, %f30
+ RPREPLOAD(f32,rrep14e,rrep14r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f62, %ftmp1, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis15 - BranchBaseR), %tmp3
+ .align 32
+rrepl15:faligndata %f48, %f50, %f18
+ faligndata %f50, %f52, %f20
+ faligndata %f52, %f54, %f22
+ faligndata %f54, %f56, %f24
+ faligndata %f56, %f58, %f26
+ faligndata %f58, %f60, %f28
+ faligndata %f60, %f62, %f30
+ RPREPLOAD(f48,rrep15e,rrep15r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f46, %ftmp1, %f16
+ ba,pt %xcc, rightstr
+ mov (rvis14 - BranchBaseR), %tmp3
+
+ .align 64
+rvis0: nop
+ RLOAD(f32,rvis0e,rvis0r)
+ fnop
+ faligndata %f48, %f50, %f16
+ faligndata %f50, %f52, %f18
+ faligndata %f52, %f54, %f20
+ faligndata %f54, %f56, %f22
+ faligndata %f56, %f58, %f24
+ faligndata %f58, %f60, %f26
+ faligndata %f60, %f62, %f28
+ faligndata %f62, %ftmp1, %f30
+ STORE
+ sub %dst, 64, %dst
+rvis1: RLOAD(f48,rvis1e,rvis1r)
+ fnop
+ faligndata %f32, %f34, %f16
+ faligndata %f34, %f36, %f18
+ faligndata %f36, %f38, %f20
+ faligndata %f38, %f40, %f22
+ faligndata %f40, %f42, %f24
+ faligndata %f42, %f44, %f26
+ faligndata %f44, %f46, %f28
+ faligndata %f46, %ftmp1, %f30
+ STORE
+ ba,pt %xcc, rvis0+0x04
+ sub %dst, 64, %dst
+ .align 64
+rvis2: faligndata %f32, %f34, %ftmp8
+ RLOAD(f32,rvis2e,rvis2r)
+ fnop
+ fnop
+ faligndata %f50, %f52, %f16
+ faligndata %f52, %f54, %f18
+ faligndata %f54, %f56, %f20
+ faligndata %f56, %f58, %f22
+ faligndata %f58, %f60, %f24
+ faligndata %f60, %f62, %f26
+ faligndata %f62, %ftmp1, %f28
+ fmovd %ftmp8, %f30
+ STORE
+ sub %dst, 64, %dst
+rvis3: faligndata %f48, %f50, %ftmp8
+ RLOAD(f48,rvis3e,rvis3r)
+ fnop
+ fnop
+ faligndata %f34, %f36, %f16
+ faligndata %f36, %f38, %f18
+ faligndata %f38, %f40, %f20
+ faligndata %f40, %f42, %f22
+ faligndata %f42, %f44, %f24
+ faligndata %f44, %f46, %f26
+ faligndata %f46, %ftmp1, %f28
+ fmovd %ftmp8, %f30
+ STORE
+ ba,pt %xcc, rvis2
+ sub %dst, 64, %dst
+ .align 64
+rvis4: faligndata %f32, %f34, %ftmp7
+ faligndata %f34, %f36, %ftmp8
+ RLOAD(f32,rvis4e,rvis4r)
+ fnop
+ fnop
+ fnop
+ faligndata %f52, %f54, %f16
+ faligndata %f54, %f56, %f18
+ faligndata %f56, %f58, %f20
+ faligndata %f58, %f60, %f22
+ faligndata %f60, %f62, %f24
+ faligndata %f62, %ftmp1, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ STORE
+ sub %dst, 64, %dst
+rvis5: faligndata %f48, %f50, %ftmp7
+ faligndata %f50, %f52, %ftmp8
+ RLOAD(f48,rvis5e,rvis5r)
+ fnop
+ fnop
+ fnop
+ faligndata %f36, %f38, %f16
+ faligndata %f38, %f40, %f18
+ faligndata %f40, %f42, %f20
+ faligndata %f42, %f44, %f22
+ faligndata %f44, %f46, %f24
+ faligndata %f46, %ftmp1, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ STORE
+ ba,pt %xcc, rvis4
+ sub %dst, 64, %dst
+ .align 64
+rvis6: faligndata %f32, %f34, %ftmp6
+ faligndata %f34, %f36, %ftmp7
+ faligndata %f36, %f38, %ftmp8
+ RLOAD(f32,rvis6e,rvis6r)
+ fnop
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f54, %f56, %f16
+ faligndata %f56, %f58, %f18
+ faligndata %f58, %f60, %f20
+ faligndata %f60, %f62, %f22
+ faligndata %f62, %ftmp1, %f24
+ STORE
+ sub %dst, 64, %dst
+rvis7: faligndata %f48, %f50, %ftmp6
+ faligndata %f50, %f52, %ftmp7
+ faligndata %f52, %f54, %ftmp8
+ RLOAD(f48,rvis7e,rvis7r)
+ fnop
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f38, %f40, %f16
+ faligndata %f40, %f42, %f18
+ faligndata %f42, %f44, %f20
+ faligndata %f44, %f46, %f22
+ faligndata %f46, %ftmp1, %f24
+ STORE
+ ba,pt %xcc, rvis6
+ sub %dst, 64, %dst
+ .align 64
+rvis8: faligndata %f32, %f34, %ftmp5
+ faligndata %f34, %f36, %ftmp6
+ faligndata %f36, %f38, %ftmp7
+ faligndata %f38, %f40, %ftmp8
+ RLOAD(f32,rvis8e,rvis8r)
+ fnop
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f56, %f58, %f16
+ faligndata %f58, %f60, %f18
+ faligndata %f60, %f62, %f20
+ faligndata %f62, %ftmp1, %f22
+ STORE
+ sub %dst, 64, %dst
+rvis9: faligndata %f48, %f50, %ftmp5
+ faligndata %f50, %f52, %ftmp6
+ faligndata %f52, %f54, %ftmp7
+ faligndata %f54, %f56, %ftmp8
+ RLOAD(f48,rvis9e,rvis9r)
+ fnop
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f40, %f42, %f16
+ faligndata %f42, %f44, %f18
+ faligndata %f44, %f46, %f20
+ faligndata %f46, %ftmp1, %f22
+ STORE
+ ba,pt %xcc, rvis8
+ sub %dst, 64, %dst
+ .align 64
+rvis10: faligndata %f32, %f34, %ftmp4
+ faligndata %f34, %f36, %ftmp5
+ faligndata %f36, %f38, %ftmp6
+ faligndata %f38, %f40, %ftmp7
+ faligndata %f40, %f42, %ftmp8
+ RLOAD(f32,rvis10e,rvis10r)
+ fnop
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f58, %f60, %f16
+ faligndata %f60, %f62, %f18
+ faligndata %f62, %ftmp1, %f20
+ STORE
+ sub %dst, 64, %dst
+rvis11: faligndata %f48, %f50, %ftmp4
+ faligndata %f50, %f52, %ftmp5
+ faligndata %f52, %f54, %ftmp6
+ faligndata %f54, %f56, %ftmp7
+ faligndata %f56, %f58, %ftmp8
+ RLOAD(f48,rvis11e,rvis11r)
+ fnop
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f42, %f44, %f16
+ faligndata %f44, %f46, %f18
+ faligndata %f46, %ftmp1, %f20
+ STORE
+ ba,pt %xcc, rvis10
+ sub %dst, 64, %dst
+ .align 64
+rvis12: faligndata %f32, %f34, %ftmp3
+ faligndata %f34, %f36, %ftmp4
+ faligndata %f36, %f38, %ftmp5
+ faligndata %f38, %f40, %ftmp6
+ faligndata %f40, %f42, %ftmp7
+ faligndata %f42, %f44, %ftmp8
+ RLOAD(f32,rvis12e,rvis12r)
+ fnop
+ fmovd %ftmp3, %f20
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f60, %f62, %f16
+ faligndata %f62, %ftmp1, %f18
+ STORE
+ sub %dst, 64, %dst
+rvis13: faligndata %f48, %f50, %ftmp3
+ faligndata %f50, %f52, %ftmp4
+ faligndata %f52, %f54, %ftmp5
+ faligndata %f54, %f56, %ftmp6
+ faligndata %f56, %f58, %ftmp7
+ faligndata %f58, %f60, %ftmp8
+ RLOAD(f48,rvis13e,rvis13r)
+ fnop
+ fmovd %ftmp3, %f20
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ fmovd %ftmp8, %f30
+ faligndata %f44, %f46, %f16
+ faligndata %f46, %ftmp1, %f18
+ STORE
+ ba,pt %xcc, rvis12
+ sub %dst, 64, %dst
+ .align 64
+rvis14: fnop
+ faligndata %f32, %f34, %f18
+ faligndata %f34, %f36, %f20
+ faligndata %f36, %f38, %f22
+ faligndata %f38, %f40, %f24
+ faligndata %f40, %f42, %f26
+ faligndata %f42, %f44, %f28
+ faligndata %f44, %f46, %f30
+ RLOAD(f32,rvis14e,rvis14r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f62, %ftmp1, %f16
+ STORE
+ sub %dst, 64, %dst
+rvis15: fnop
+ faligndata %f48, %f50, %f18
+ faligndata %f50, %f52, %f20
+ faligndata %f52, %f54, %f22
+ faligndata %f54, %f56, %f24
+ faligndata %f56, %f58, %f26
+ faligndata %f58, %f60, %f28
+ faligndata %f60, %f62, %f30
+ RLOAD(f48,rvis15e,rvis15r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f46, %ftmp1, %f16
+ STORE
+ ba,pt %xcc, rvis14
+ sub %dst, 64, %dst
+
+rightstr:
+ brlz,pn %curw, narrowstr + 4
+ cmp %rightw, 64
+ be,pn %icc, 2f
+ and %rightw, 0x38, %tmp1
+ andcc %rightw, 7, %g0
+ be,pn %icc, 1f
+ neg %tmp1
+ sub %g0, %rightw, %tmp5
+ add %branchbase, (3f - BranchBaseR - 8), %tmp2
+ edge8l %tmp5, %g0, %tmp5
+ sub %dst, %tmp1, %tmp4
+ jmpl %tmp1 + %tmp2, %g0
+ add %tmp4, 0x40, %tmp4
+1: addcc %branchbase, (4f - BranchBaseR), %tmp2
+ sra %tmp1, 1, %tmp1
+ jmpl %tmp1 + %tmp2, %g0
+2: add %dst, 0x40, %tmp1
+ jmpl %branchbase + %tmp3, %g0
+ stda %f16, [%tmp1] ASI_BLK_P
+ ba,pt %xcc, 3f+0x00
+ stda %f30, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x04
+ stda %f28, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x08
+ stda %f26, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x0c
+ stda %f24, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x10
+ stda %f22, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x14
+ stda %f20, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x18
+ stda %f18, [%tmp4 + %tmp5] ASI_PST8_P
+ jmpl %branchbase + %tmp3, %g0
+ stda %f16, [%tmp4 + %tmp5] ASI_PST8_P
+3: std %f28, [%dst + 0x70]
+ std %f26, [%dst + 0x68]
+ std %f24, [%dst + 0x60]
+ std %f22, [%dst + 0x58]
+ std %f20, [%dst + 0x50]
+ std %f18, [%dst + 0x48]
+ std %f16, [%dst + 0x40]
+4: jmpl %branchbase + %tmp3, %g0
+ nop
+
+leftstr:cmp %leftw, 64
+ be,pn %icc, 2f
+ and %leftw, 0x38, %tmp1
+ andcc %leftw, 7, %g0
+ be,pn %icc, 1f
+ neg %tmp1
+ sub %dst, %leftw, %tmp4
+ add %branchbase, (3f - BranchBaseR - 8), %tmp2
+ edge8 %tmp4, %g0, %tmp5
+ andn %tmp4, 7, %tmp4
+ add %mode, %skind, %mode
+ jmpl %tmp2 + %tmp1, %g0
+ add %tmp4, 0x40, %tmp4
+1: add %branchbase, (4f - BranchBaseR), %tmp2
+ sra %tmp1, 1, %tmp1
+ jmpl %tmp2 + %tmp1, %g0
+2: add %mode, %skind, %mode
+ ba,pt %xcc, 4f
+ stda %f16, [%dst] ASI_BLK_P
+ ba,pt %xcc, 3f+0x00
+ stda %f16, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x04
+ stda %f18, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x08
+ stda %f20, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x0c
+ stda %f22, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x10
+ stda %f24, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x14
+ stda %f26, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x18
+ stda %f28, [%tmp4 + %tmp5] ASI_PST8_P
+ ba,pt %xcc, 3f+0x1c
+ stda %f30, [%tmp4 + %tmp5] ASI_PST8_P
+3: std %f18, [%dst + 0x08]
+ std %f20, [%dst + 0x10]
+ std %f22, [%dst + 0x18]
+ std %f24, [%dst + 0x20]
+ std %f26, [%dst + 0x28]
+ std %f28, [%dst + 0x30]
+ std %f30, [%dst + 0x38]
+4: brnz,pn %narrow, rnarrow_cont
+ deccc %srcnotdone
+ blu,pn %ICC, rreturn
+ sub %mode, %dkind, %mode
+ alignaddr %mode, %g0, %g0
+ and %mode, 63, %mode
+ cmp %srcnext, %srcn
+ bne,a,pn %ICC, 6f
+ xor %fregset, 64, %fregset
+ brnz,a,pn %fregset, 5f
+ ldda [%src] ASI_BLK_P, %f32
+ ldda [%src] ASI_BLK_P, %f48
+5: sub %src, 64, %src
+6: add %dst, %dkind, %dst
+ sub %w, %leftw, %tmp1
+ add %srcstart, %skind, %srcstart
+ add %dst, %tmp1, %dst
+ add %rightw, %dkind, %rightw
+ add %dst, 63, %dst
+ sub %rightw, 1, %rightw
+ sub %dkind, %leftw, %leftw
+ and %rightw, 63, %rightw
+ and %leftw, 63, %leftw
+ add %rightw, 1, %rightw
+ mov 64, %tmp1
+ andn %dst, 63, %dst
+ sub %tmp1, %leftw, %leftw
+rroll_wide:
+ add %srcstart, %skind, %srcnext
+ sub %srcstart, %w, %srcend
+ fnop
+ deccc %srcnext
+ sll %mode, 4, %tmp4
+ fnop
+ andn %srcnext, 63, %srcnext
+ andn %srcend, 63, %srcend
+ fnop
+ mov %srcnext, %srcn
+ and %mode, 7, %leftw2
+ fnop
+ andn %tmp4, 127, %tmp4
+ sub %leftw, %leftw2, %leftw2
+ fnop
+ add %tmp4, %fregset, %tmp4
+ subcc %w, %leftw, %curw
+ fnop
+ srl %tmp4, 1, %tmp3
+ sub %tmp1, %mode, %tmp1
+ fnop
+ add %tmp3, (rrepn0 - BranchBaseR), %tmp2
+ cmp %tmp1, %rightw
+ add %tmp4, %tmp3, %tmp4
+ sub %srcnext, 64, %tmp1
+ movgeu %icc, %tmp2, %tmp4
+ cmp %srcnext, %srcend
+ sub %dst, 64, %dst
+ move %ICC, %tmp1, %srcnext
+ jmpl %branchbase + %tmp4, %g0
+ sub %curw, %rightw, %curw
+
+rreturn:return %i7+8
+ wr %g0, 0, %fprs
+
+narrowstr:
+ cmp %rightw, 64
+ add %dst, 0x80, %fregset
+ and %rightw, 0x38, %tmp1
+ sub %fregset, %leftw, %tmp2
+ mov %w, %tmp4
+ andn %tmp2, 7, %fregset
+ be,pn %icc, 2f
+ edge8 %tmp2, %g0, %srcend
+ andcc %rightw, 7, %g0
+ be,pn %icc, 1f
+ neg %tmp1
+ sub %g0, %rightw, %tmp4
+ add %tmp1, (2f - BranchBaseR - 8), %tmp1
+ add %dst, 0x40, %tmp5
+ sub %leftw, 0x41, %tmp2
+ add %tmp5, %rightw, %tmp5
+ edge8l %tmp4, %tmp2, %tmp2
+ and %rightw, 7, %tmp4
+ andn %tmp5, 7, %tmp5
+ jmpl %branchbase + %tmp1, %g0
+ sub %w, %tmp4, %tmp4
+1: addcc %branchbase, (4f - BranchBaseR - 8), %tmp2
+ sll %tmp1, 1, %tmp1
+ jmpl %tmp2 + %tmp1, %g0
+ nop
+ ba,pt %xcc, 3f+0x00
+ stda %f30, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 3f+0x10
+ stda %f28, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 3f+0x20
+ stda %f26, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 3f+0x30
+ stda %f24, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 3f+0x40
+ stda %f22, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 3f+0x50
+ stda %f20, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 3f+0x60
+ stda %f18, [%tmp5 + %tmp2] ASI_PST8_P
+ ba,pt %xcc, 3f+0x70
+ stda %f16, [%tmp5 + %tmp2] ASI_PST8_P
+2: subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x00
+ fnop
+ std %f30, [%dst + 0x78]
+3: subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x10
+ fnop
+ std %f28, [%dst + 0x70]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x20
+ fnop
+ std %f26, [%dst + 0x68]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x30
+ fnop
+ std %f24, [%dst + 0x60]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x40
+ fnop
+ std %f22, [%dst + 0x58]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x50
+ fnop
+ std %f20, [%dst + 0x50]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x60
+ fnop
+ std %f18, [%dst + 0x48]
+ subcc %tmp4, 8, %tmp4
+ bl,pn %icc, 4f+0x70
+ fnop
+ std %f16, [%dst + 0x40]
+ ba,pt %xcc, 5f
+ nop
+4: cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f30, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 5f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f28, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 5f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f26, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 5f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f24, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 5f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f22, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 5f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f20, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 5f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f18, [%fregset + %srcend] ASI_PST8_P
+ ba,a,pt %xcc, 5f
+ cmp %tmp4, -8
+ bg,a,pn %ICC, 5f
+ stda %f16, [%fregset + %srcend] ASI_PST8_P
+5: and %tmp3, 60, %tmp3
+ add %dst, 64, %dst
+ xor %tmp3, 60, %tmp3
+ add %mode, %skind, %mode
+ add %tmp3, 4, %tmp3
+ brz,pn %h, rreturn
+ and %tmp3, 64, %fregset
+rnarrow_cont:
+ deccc %h
+ blu,pn %ICC, rreturn
+ sub %mode, %dkind, %mode
+ alignaddr %mode, %g0, %g0
+ and %mode, 63, %mode
+ sub %srcnext, %srcn, %tmp4
+ add %dst, %dkind, %dst
+ sub %w, %leftw, %tmp1
+ add %srcstart, %skind, %srcstart
+ add %dst, %tmp1, %dst
+ add %rightw, %dkind, %rightw
+ sub %dkind, %leftw, %leftw
+ sub %rightw, 1, %rightw
+ and %leftw, 63, %leftw
+ add %dst, 63, %dst
+ mov 64, %tmp1
+ and %rightw, 63, %rightw
+ sub %tmp1, %leftw, %leftw
+ add %srcstart, %skind, %srcnext
+ add %rightw, 1, %rightw
+ sub %srcstart, %w, %srcend
+ dec %srcnext
+ andn %srcend, 63, %srcend
+ andn %srcnext, 63, %srcnext
+ sub %w, %leftw, %prepw
+ mov %srcnext, %srcn
+ sub %srcnext, 64, %tmp3
+ add %srcnext, 64, %tmp2
+ cmp %skind, 0
+ movg %ICC, %tmp2, %tmp3
+ mov %h, %srcnotdone
+ sub %prepw, %rightw, %prepw
+ sub %srcstart, 1, %tmp1
+ cmp %srcnext, %srcend
+ move %ICC, %tmp3, %srcnext
+ and %tmp1, 63, %tmp1
+ sub %srcnext, 64, %tmp3
+ sub %tmp1, %w, %tmp1
+ cmp %srcnext, %srcend
+ move %ICC, %tmp3, %srcnext
+ mov %prepw, %curw
+ cmp %tmp1, -65
+ movl %ICC, 64, %prepw
+ andn %dst, 63, %dst
+ cmp %srcnext, %srcstop
+ move %ICC, 0, %srcnotdone
+ brnz,a,pn %tmp4, rroll_narrow
+ xor %fregset, 64, %fregset
+ cmp %tmp1, -1
+ bl,pt %ICC, 6f
+ tst %srcnotdone
+ be,a,pn %ICC, rroll_narrow
+ membar SYNC
+ mov %srcnext, %src
+6: brnz,a,pn %fregset, 7f
+ ldda [%src] ASI_BLK_P, %f32
+ ldda [%src] ASI_BLK_P, %f48
+7: subcc %src, 64, %src
+rroll_narrow:
+ fnop
+ sll %mode, 4, %tmp2
+ and %mode, 7, %leftw2
+ fnop
+ andn %tmp2, 127, %tmp2
+ sub %dst, 64, %dst
+ fnop
+ add %tmp2, %fregset, %tmp2
+ subcc %leftw, %leftw2, %leftw2
+ fnop
+ srl %tmp2, 1, %tmp3
+ add %tmp3, (rrepr0 - BranchBaseR), %tmp4
+ fnop
+ add %tmp2, %tmp3, %tmp2
+ cmp %tmp1, -1
+ fnop
+ mov 64, %tmp1
+ movge %icc, %tmp4, %tmp2
+ sub %tmp1, %mode, %tmp1
+ add %tmp3, (rrepn0 - BranchBaseR), %tmp4
+ fnop
+ cmp %tmp1, %rightw
+ movgeu %icc, %tmp4, %tmp2
+ jmpl %branchbase + %tmp2, %g0
+ and %tmp3, 32, %tmp3
+
+#define RVISEND1(i,tgt,tgtr) \
+tgt: \
+ brnz,pt %curw, 1f; \
+ cmp %leftw2, ((i&14)*4); \
+ bg,pn %icc, tgtr - 8; \
+ tst %srcnotdone; \
+ be,a,pn %ICC, tgtr; \
+ membar SYNC; \
+ ba,pt %xcc, tgtr - 8; \
+ mov %srcnext, %src; \
+1: mov ((i & 1) ^ 1) * 64, %fregset;
+
+#define RVISEND2(i,fset) \
+ brz,a,pn %srcnotdone, 3f; \
+ membar SYNC; \
+ ldda [%srcnext] ASI_BLK_P, %fset; \
+ sub %srcnext, 64, %src; \
+3: mov (i & 1) * 64, %fregset;
+
+RVISEND1(0,rvis0e,rvis0r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ ble,pn %icc, leftstr
+ faligndata %ftmp2, %ftmp1, %f30
+RVISEND2(0,f32)
+ fnop
+ faligndata %f48, %f50, %f16
+ faligndata %f50, %f52, %f18
+ faligndata %f52, %f54, %f20
+ faligndata %f54, %f56, %f22
+ faligndata %f56, %f58, %f24
+ faligndata %f58, %f60, %f26
+ faligndata %f60, %f62, %f28
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f30
+RVISEND1(1,rvis1e,rvis1r)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ ble,pn %icc, leftstr
+ faligndata %ftmp2, %ftmp1, %f30
+RVISEND2(1,f48)
+ fnop
+ faligndata %f32, %f34, %f16
+ faligndata %f34, %f36, %f18
+ faligndata %f36, %f38, %f20
+ faligndata %f38, %f40, %f22
+ faligndata %f40, %f42, %f24
+ faligndata %f42, %f44, %f26
+ faligndata %f44, %f46, %f28
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f30
+RVISEND1(2,rvis2e,rvis2r)
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %ftmp2, %ftmp1, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(2,f32)
+ fnop
+ fnop
+ faligndata %f50, %f52, %f16
+ faligndata %f52, %f54, %f18
+ faligndata %f54, %f56, %f20
+ faligndata %f56, %f58, %f22
+ faligndata %f58, %f60, %f24
+ faligndata %f60, %f62, %f26
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f28
+RVISEND1(3,rvis3e,rvis3r)
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %ftmp2, %ftmp1, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(3,f48)
+ fnop
+ fnop
+ faligndata %f34, %f36, %f16
+ faligndata %f36, %f38, %f18
+ faligndata %f38, %f40, %f20
+ faligndata %f40, %f42, %f22
+ faligndata %f42, %f44, %f24
+ faligndata %f44, %f46, %f26
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f28
+RVISEND1(4,rvis4e,rvis4r)
+ fnop
+ fnop
+ faligndata %ftmp2, %ftmp1, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(4,f32)
+ fnop
+ fnop
+ fnop
+ faligndata %f52, %f54, %f16
+ faligndata %f54, %f56, %f18
+ faligndata %f56, %f58, %f20
+ faligndata %f58, %f60, %f22
+ faligndata %f60, %f62, %f24
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f26
+RVISEND1(5,rvis5e,rvis5r)
+ fnop
+ fnop
+ faligndata %ftmp2, %ftmp1, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(5,f48)
+ fnop
+ fnop
+ fnop
+ faligndata %f36, %f38, %f16
+ faligndata %f38, %f40, %f18
+ faligndata %f40, %f42, %f20
+ faligndata %f42, %f44, %f22
+ faligndata %f44, %f46, %f24
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f26
+RVISEND1(6,rvis6e,rvis6r)
+ faligndata %ftmp2, %ftmp1, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(6,f32)
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f54, %f56, %f16
+ faligndata %f56, %f58, %f18
+ faligndata %f58, %f60, %f20
+ faligndata %f60, %f62, %f22
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f24
+RVISEND1(7,rvis7e,rvis7r)
+ faligndata %ftmp2, %ftmp1, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(7,f48)
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f38, %f40, %f16
+ faligndata %f40, %f42, %f18
+ faligndata %f42, %f44, %f20
+ faligndata %f44, %f46, %f22
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f24
+RVISEND1(8,rvis8e,rvis8r)
+ faligndata %ftmp2, %ftmp1, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(8,f32)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f56, %f58, %f16
+ faligndata %f58, %f60, %f18
+ faligndata %f60, %f62, %f20
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f22
+RVISEND1(9,rvis9e,rvis9r)
+ faligndata %ftmp2, %ftmp1, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(9,f48)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f40, %f42, %f16
+ faligndata %f42, %f44, %f18
+ faligndata %f44, %f46, %f20
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f22
+RVISEND1(10,rvis10e,rvis10r)
+ faligndata %ftmp2, %ftmp1, %f20
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(10,f32)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f58, %f60, %f16
+ faligndata %f60, %f62, %f18
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f20
+RVISEND1(11,rvis11e,rvis11r)
+ faligndata %ftmp2, %ftmp1, %f20
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(11,f48)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f42, %f44, %f16
+ faligndata %f44, %f46, %f18
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f20
+RVISEND1(12,rvis12e,rvis12r)
+ faligndata %ftmp2, %ftmp1, %f18
+ fmovd %ftmp3, %f20
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(12,f32)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f60, %f62, %f16
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f18
+RVISEND1(13,rvis13e,rvis13r)
+ faligndata %ftmp2, %ftmp1, %f18
+ fmovd %ftmp3, %f20
+ fmovd %ftmp4, %f22
+ fmovd %ftmp5, %f24
+ fmovd %ftmp6, %f26
+ fmovd %ftmp7, %f28
+ ble,pn %icc, leftstr
+ fmovd %ftmp8, %f30
+RVISEND2(13,f48)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ faligndata %f44, %f46, %f16
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f18
+RVISEND1(14,rvis14e,rvis14r)
+ ble,pn %icc, leftstr
+ faligndata %ftmp2, %ftmp1, %f16
+RVISEND2(14,f32)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ ba,pt %xcc, leftstr
+ faligndata %f62, %ftmp1, %f16
+RVISEND1(15,rvis15e,rvis15r)
+ ble,pn %icc, leftstr
+ faligndata %ftmp2, %ftmp1, %f16
+RVISEND2(15,f48)
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ fnop
+ ba,pt %xcc, leftstr
+ faligndata %f46, %ftmp1, %f16
+
+#define RREPEND(tgt,tgtr) \
+tgt: \
+ brnz,pt %srcnotdone, tgtr - 8; \
+ mov %srcnext, %src; \
+ ba,pt %xcc, tgtr; \
+ membar SYNC;
+
+ .align 16
+RREPEND(rrep0e,rrep0r)
+RREPEND(rrep1e,rrep1r)
+RREPEND(rrep2e,rrep2r)
+RREPEND(rrep3e,rrep3r)
+RREPEND(rrep4e,rrep4r)
+RREPEND(rrep5e,rrep5r)
+RREPEND(rrep6e,rrep6r)
+RREPEND(rrep7e,rrep7r)
+RREPEND(rrep8e,rrep8r)
+RREPEND(rrep9e,rrep9r)
+RREPEND(rrep10e,rrep10r)
+RREPEND(rrep11e,rrep11r)
+RREPEND(rrep12e,rrep12r)
+RREPEND(rrep13e,rrep13r)
+RREPEND(rrep14e,rrep14r)
+RREPEND(rrep15e,rrep15r)