17c478bd9Sstevel@tonic-gate/* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 57257d1b4Sraf * Common Development and Distribution License (the "License"). 67257d1b4Sraf * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217257d1b4Sraf 227c478bd9Sstevel@tonic-gate/* 231e49577aSRod Evans * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. 247c478bd9Sstevel@tonic-gate */ 257c478bd9Sstevel@tonic-gate 269a70fc3bSMark J. Nelson .file "memcmp.s" 277c478bd9Sstevel@tonic-gate 287c478bd9Sstevel@tonic-gate/* 297c478bd9Sstevel@tonic-gate * memcmp(s1, s2, len) 307c478bd9Sstevel@tonic-gate * 317c478bd9Sstevel@tonic-gate * Compare n bytes: s1>s2: >0 s1==s2: 0 s1<s2: <0 327c478bd9Sstevel@tonic-gate * 337c478bd9Sstevel@tonic-gate * Fast assembler language version of the following C-program for memcmp 347c478bd9Sstevel@tonic-gate * which represents the `standard' for the C-library. 357c478bd9Sstevel@tonic-gate * 367c478bd9Sstevel@tonic-gate * int 377c478bd9Sstevel@tonic-gate * memcmp(const void *s1, const void *s2, size_t n) 387c478bd9Sstevel@tonic-gate * { 397c478bd9Sstevel@tonic-gate * if (s1 != s2 && n != 0) { 407c478bd9Sstevel@tonic-gate * const char *ps1 = s1; 417c478bd9Sstevel@tonic-gate * const char *ps2 = s2; 427c478bd9Sstevel@tonic-gate * do { 437c478bd9Sstevel@tonic-gate * if (*ps1++ != *ps2++) 447c478bd9Sstevel@tonic-gate * return(ps1[-1] - ps2[-1]); 457c478bd9Sstevel@tonic-gate * } while (--n != 0); 467c478bd9Sstevel@tonic-gate * } 477c478bd9Sstevel@tonic-gate * return (0); 487c478bd9Sstevel@tonic-gate * } 497c478bd9Sstevel@tonic-gate */ 507c478bd9Sstevel@tonic-gate 517c478bd9Sstevel@tonic-gate#include <sys/asm_linkage.h> 527c478bd9Sstevel@tonic-gate#include <sys/sun4asi.h> 537c478bd9Sstevel@tonic-gate 547c478bd9Sstevel@tonic-gate ANSI_PRAGMA_WEAK(memcmp,function) 557c478bd9Sstevel@tonic-gate 567c478bd9Sstevel@tonic-gate ENTRY(memcmp) 577c478bd9Sstevel@tonic-gate cmp %o0, %o1 ! s1 == s2? 587c478bd9Sstevel@tonic-gate be %ncc, .cmpeq 59*55fea89dSDan Cross 607c478bd9Sstevel@tonic-gate ! for small counts byte compare immediately 617c478bd9Sstevel@tonic-gate cmp %o2, 48 627c478bd9Sstevel@tonic-gate bleu,a %ncc, .bytcmp 637c478bd9Sstevel@tonic-gate mov %o2, %o3 ! o3 <= 48 64*55fea89dSDan Cross 65*55fea89dSDan Cross ! Count > 48. We will byte compare (8 + num of bytes to dbl align) 66*55fea89dSDan Cross ! bytes. We assume that most miscompares will occur in the 1st 8 bytes 677c478bd9Sstevel@tonic-gate 687c478bd9Sstevel@tonic-gate.chkdbl: 697c478bd9Sstevel@tonic-gate and %o0, 7, %o4 ! is s1 aligned on a 8 byte bound 707c478bd9Sstevel@tonic-gate mov 8, %o3 ! o2 > 48; o3 = 8 717c478bd9Sstevel@tonic-gate sub %o4, 8, %o4 ! o4 = -(num of bytes to dbl align) 727c478bd9Sstevel@tonic-gate ba %ncc, .bytcmp 737c478bd9Sstevel@tonic-gate sub %o3, %o4, %o3 ! o3 = 8 + (num of bytes to dbl align) 747c478bd9Sstevel@tonic-gate 757c478bd9Sstevel@tonic-gate 767c478bd9Sstevel@tonic-gate1: ldub [%o1], %o5 ! byte compare loop 777c478bd9Sstevel@tonic-gate inc %o1 787c478bd9Sstevel@tonic-gate inc %o0 797c478bd9Sstevel@tonic-gate dec %o2 807c478bd9Sstevel@tonic-gate cmp %o4, %o5 817c478bd9Sstevel@tonic-gate bne %ncc, .noteq 827c478bd9Sstevel@tonic-gate.bytcmp: 837c478bd9Sstevel@tonic-gate deccc %o3 847c478bd9Sstevel@tonic-gate bgeu,a %ncc, 1b 857c478bd9Sstevel@tonic-gate ldub [%o0], %o4 867c478bd9Sstevel@tonic-gate 877c478bd9Sstevel@tonic-gate ! Check to see if there are more bytes to compare 887c478bd9Sstevel@tonic-gate cmp %o2, 0 ! is o2 > 0 897c478bd9Sstevel@tonic-gate bgu,a %ncc, .blkchk ! we should already be dbl aligned 907c478bd9Sstevel@tonic-gate cmp %o2, 320 ! if cnt < 256 + 64 - no Block ld/st 917c478bd9Sstevel@tonic-gate.cmpeq: 927c478bd9Sstevel@tonic-gate retl ! strings compare equal 937c478bd9Sstevel@tonic-gate sub %g0, %g0, %o0 947c478bd9Sstevel@tonic-gate 957c478bd9Sstevel@tonic-gate.noteq: 967c478bd9Sstevel@tonic-gate retl ! strings aren't equal 977c478bd9Sstevel@tonic-gate sub %o4, %o5, %o0 ! return(*s1 - *s2) 987c478bd9Sstevel@tonic-gate 997c478bd9Sstevel@tonic-gate 1007c478bd9Sstevel@tonic-gate ! Now src1 is Double word aligned 1017c478bd9Sstevel@tonic-gate.blkchk: 1027c478bd9Sstevel@tonic-gate bgeu,a %ncc, blkcmp ! do block cmp 1037c478bd9Sstevel@tonic-gate andcc %o0, 63, %o3 ! is src1 block aligned 104*55fea89dSDan Cross 1057c478bd9Sstevel@tonic-gate ! double word compare - using ldd and faligndata. Compares upto 1067c478bd9Sstevel@tonic-gate ! 8 byte multiple count and does byte compare for the residual. 1077c478bd9Sstevel@tonic-gate 108*55fea89dSDan Cross.dwcmp: 109*55fea89dSDan Cross 1107c478bd9Sstevel@tonic-gate rd %fprs, %o3 ! o3 = fprs 1117c478bd9Sstevel@tonic-gate 1127c478bd9Sstevel@tonic-gate ! if fprs.fef == 0, set it. Checking it, reqires 2 instructions. 1137c478bd9Sstevel@tonic-gate ! So set it anyway, without checking. 1147c478bd9Sstevel@tonic-gate wr %g0, 0x4, %fprs ! fprs.fef = 1 1157c478bd9Sstevel@tonic-gate 1167c478bd9Sstevel@tonic-gate andn %o2, 7, %o4 ! o4 has 8 byte aligned cnt 1177c478bd9Sstevel@tonic-gate sub %o4, 8, %o4 1187c478bd9Sstevel@tonic-gate alignaddr %o1, %g0, %g1 1197c478bd9Sstevel@tonic-gate ldd [%g1], %d0 1207c478bd9Sstevel@tonic-gate4: 1217c478bd9Sstevel@tonic-gate add %g1, 8, %g1 1227c478bd9Sstevel@tonic-gate ldd [%g1], %d2 1237c478bd9Sstevel@tonic-gate ldd [%o0], %d6 1247c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d8 1257c478bd9Sstevel@tonic-gate fcmpne32 %d6, %d8, %o5 1267c478bd9Sstevel@tonic-gate fsrc1 %d6, %d6 ! 2 fsrc1's added since o5 cannot 127*55fea89dSDan Cross fsrc1 %d8, %d8 ! be used for 3 cycles else we 1287c478bd9Sstevel@tonic-gate fmovd %d2, %d0 ! create 9 bubbles in the pipeline 1297c478bd9Sstevel@tonic-gate brnz,a,pn %o5, 6f 1307c478bd9Sstevel@tonic-gate sub %o1, %o0, %o1 ! o1 gets the difference 1317c478bd9Sstevel@tonic-gate subcc %o4, 8, %o4 1327c478bd9Sstevel@tonic-gate add %o0, 8, %o0 1337c478bd9Sstevel@tonic-gate add %o1, 8, %o1 1347c478bd9Sstevel@tonic-gate bgu,pt %ncc, 4b 1357c478bd9Sstevel@tonic-gate sub %o2, 8, %o2 1367c478bd9Sstevel@tonic-gate 1377c478bd9Sstevel@tonic-gate.residcmp: 1387c478bd9Sstevel@tonic-gate ba 6f 1397c478bd9Sstevel@tonic-gate sub %o1, %o0, %o1 ! o1 gets the difference 1407c478bd9Sstevel@tonic-gate 1417c478bd9Sstevel@tonic-gate5: ldub [%o0 + %o1], %o5 ! byte compare loop 1427c478bd9Sstevel@tonic-gate inc %o0 1437c478bd9Sstevel@tonic-gate cmp %o4, %o5 1447c478bd9Sstevel@tonic-gate bne %ncc, .dnoteq 1457c478bd9Sstevel@tonic-gate6: 1467c478bd9Sstevel@tonic-gate deccc %o2 1477c478bd9Sstevel@tonic-gate bgeu,a %ncc, 5b 1487c478bd9Sstevel@tonic-gate ldub [%o0], %o4 149*55fea89dSDan Cross 1507c478bd9Sstevel@tonic-gate and %o3, 0x4, %o3 ! fprs.du = fprs.dl = 0 1517c478bd9Sstevel@tonic-gate wr %o3, %g0, %fprs ! fprs = o3 - restore fprs 1527c478bd9Sstevel@tonic-gate retl 153*55fea89dSDan Cross sub %g0, %g0, %o0 ! strings compare equal 154*55fea89dSDan Cross 1557c478bd9Sstevel@tonic-gate.dnoteq: 1567c478bd9Sstevel@tonic-gate and %o3, 0x4, %o3 ! fprs.du = fprs.dl = 0 1577c478bd9Sstevel@tonic-gate wr %o3, %g0, %fprs ! fprs = o3 - restore fprs 1587c478bd9Sstevel@tonic-gate retl 1597c478bd9Sstevel@tonic-gate sub %o4, %o5, %o0 ! return(*s1 - *s2) 1607c478bd9Sstevel@tonic-gate 161*55fea89dSDan Cross 162*55fea89dSDan Crossblkcmp: 1637c478bd9Sstevel@tonic-gate save %sp, -SA(MINFRAME), %sp 1647c478bd9Sstevel@tonic-gate rd %fprs, %l5 ! l5 = fprs 1657c478bd9Sstevel@tonic-gate 1667c478bd9Sstevel@tonic-gate ! if fprs.fef == 0, set it. Checking it, reqires 2 instructions. 1677c478bd9Sstevel@tonic-gate ! So set it anyway, without checking. 1687c478bd9Sstevel@tonic-gate wr %g0, 0x4, %fprs ! fprs.fef = 1 1697c478bd9Sstevel@tonic-gate 1707c478bd9Sstevel@tonic-gate bz,pn %ncc, .blalign ! now block aligned 1717c478bd9Sstevel@tonic-gate sub %i3, 64, %i3 1727c478bd9Sstevel@tonic-gate neg %i3 ! bytes till block aligned 1737c478bd9Sstevel@tonic-gate 1747c478bd9Sstevel@tonic-gate ! Compare %i3 bytes till dst is block (64 byte) aligned. use 1757c478bd9Sstevel@tonic-gate ! double word compares. 1767c478bd9Sstevel@tonic-gate 1777c478bd9Sstevel@tonic-gate alignaddr %i1, %g0, %g1 1787c478bd9Sstevel@tonic-gate ldd [%g1], %d0 1797c478bd9Sstevel@tonic-gate7: 1807c478bd9Sstevel@tonic-gate add %g1, 8, %g1 1817c478bd9Sstevel@tonic-gate ldd [%g1], %d2 1827c478bd9Sstevel@tonic-gate ldd [%i0], %d6 1837c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d8 1847c478bd9Sstevel@tonic-gate fcmpne32 %d6, %d8, %i5 1857c478bd9Sstevel@tonic-gate fsrc1 %d6, %d6 ! 2 fsrc1's added since i5 cannot 186*55fea89dSDan Cross fsrc1 %d8, %d8 ! be used for 3 cycles else we 1877c478bd9Sstevel@tonic-gate fmovd %d2, %d0 ! create 9 bubbles in the pipeline 188*55fea89dSDan Cross brnz,a,pn %i5, .remcmp 1897c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 1907c478bd9Sstevel@tonic-gate subcc %i3, 8, %i3 1917c478bd9Sstevel@tonic-gate add %i0, 8, %i0 1927c478bd9Sstevel@tonic-gate add %i1, 8, %i1 1937c478bd9Sstevel@tonic-gate bgu,pt %ncc, 7b 1947c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 1957c478bd9Sstevel@tonic-gate 196*55fea89dSDan Cross.blalign: 197*55fea89dSDan Cross 198*55fea89dSDan Cross ! src1 is block aligned 1997c478bd9Sstevel@tonic-gate membar #StoreLoad 2007c478bd9Sstevel@tonic-gate srl %i1, 3, %l6 ! bits 3,4,5 are now least sig in %l6 2017c478bd9Sstevel@tonic-gate andcc %l6, 7, %l6 ! mask everything except bits 1,2 3 2027c478bd9Sstevel@tonic-gate andn %i2, 63, %i3 ! calc number of blocks 2037c478bd9Sstevel@tonic-gate alignaddr %i1, %g0, %g0 ! gen %gsr 2047c478bd9Sstevel@tonic-gate andn %i1, 0x3F, %l7 ! blk aligned address 2057c478bd9Sstevel@tonic-gate sub %i2, %i3, %l2 2067c478bd9Sstevel@tonic-gate andn %l2, 7, %i4 ! calc doubles left after blkcpy 2077c478bd9Sstevel@tonic-gate 2087c478bd9Sstevel@tonic-gate be,a %ncc, 1f ! branch taken if src2 is 64-byte aligned 2097c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 2107c478bd9Sstevel@tonic-gate 2117c478bd9Sstevel@tonic-gate call .+8 ! get the address of this instruction in %o7 2127c478bd9Sstevel@tonic-gate sll %l6, 2, %l4 2137c478bd9Sstevel@tonic-gate add %o7, %l4, %o7 2147c478bd9Sstevel@tonic-gate jmp %o7 + 16 ! jump to the starting ldd instruction 2157c478bd9Sstevel@tonic-gate nop 2167c478bd9Sstevel@tonic-gate ldd [%l7+8], %d2 2177c478bd9Sstevel@tonic-gate ldd [%l7+16], %d4 2187c478bd9Sstevel@tonic-gate ldd [%l7+24], %d6 2197c478bd9Sstevel@tonic-gate ldd [%l7+32], %d8 2207c478bd9Sstevel@tonic-gate ldd [%l7+40], %d10 2217c478bd9Sstevel@tonic-gate ldd [%l7+48], %d12 2227c478bd9Sstevel@tonic-gate ldd [%l7+56], %d14 2237c478bd9Sstevel@tonic-gate1: 2247c478bd9Sstevel@tonic-gate add %l7, 64, %l7 2257c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 2267c478bd9Sstevel@tonic-gate add %l7, 64, %l7 2277c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 2287c478bd9Sstevel@tonic-gate sub %i3, 128, %i3 229*55fea89dSDan Cross 2307c478bd9Sstevel@tonic-gate ! switch statement to get us to the right 8 byte blk within a 2317c478bd9Sstevel@tonic-gate ! 64 byte block 232*55fea89dSDan Cross 2337c478bd9Sstevel@tonic-gate cmp %l6, 4 2347c478bd9Sstevel@tonic-gate bgeu,a hlf 2357c478bd9Sstevel@tonic-gate cmp %l6, 6 2367c478bd9Sstevel@tonic-gate cmp %l6, 2 2377c478bd9Sstevel@tonic-gate bgeu,a sqtr 2387c478bd9Sstevel@tonic-gate nop 2397c478bd9Sstevel@tonic-gate cmp %l6, 1 2407c478bd9Sstevel@tonic-gate be,a seg1 2417c478bd9Sstevel@tonic-gate nop 2427c478bd9Sstevel@tonic-gate ba seg0 2437c478bd9Sstevel@tonic-gate nop 244*55fea89dSDan Crosssqtr: 2457c478bd9Sstevel@tonic-gate be,a seg2 2467c478bd9Sstevel@tonic-gate nop 2477c478bd9Sstevel@tonic-gate 2487c478bd9Sstevel@tonic-gate ba,a seg3 2497c478bd9Sstevel@tonic-gate nop 250*55fea89dSDan Cross 251*55fea89dSDan Crosshlf: 2527c478bd9Sstevel@tonic-gate bgeu,a fqtr 2537c478bd9Sstevel@tonic-gate nop 2547c478bd9Sstevel@tonic-gate cmp %l6, 5 2557c478bd9Sstevel@tonic-gate be,a seg5 2567c478bd9Sstevel@tonic-gate nop 2577c478bd9Sstevel@tonic-gate ba seg4 2587c478bd9Sstevel@tonic-gate nop 259*55fea89dSDan Crossfqtr: 2607c478bd9Sstevel@tonic-gate be,a seg6 2617c478bd9Sstevel@tonic-gate nop 2627c478bd9Sstevel@tonic-gate ba seg7 2637c478bd9Sstevel@tonic-gate nop 2647c478bd9Sstevel@tonic-gate 2657c478bd9Sstevel@tonic-gate! The fsrc1 instructions are to make sure that the results of the fcmpne32 2667c478bd9Sstevel@tonic-gate! are used 3 cycles later - else spitfire adds 9 bubbles. 267*55fea89dSDan Cross 2687c478bd9Sstevel@tonic-gate#define FCMPNE32_D32_D48 \ 2697c478bd9Sstevel@tonic-gate fcmpne32 %d48, %d32, %l0 ;\ 2707c478bd9Sstevel@tonic-gate fcmpne32 %d50, %d34, %l1 ;\ 2717c478bd9Sstevel@tonic-gate fcmpne32 %d52, %d36, %l2 ;\ 2727c478bd9Sstevel@tonic-gate fcmpne32 %d54, %d38, %l3 ;\ 2737c478bd9Sstevel@tonic-gate brnz,a %l0, add ;\ 2747c478bd9Sstevel@tonic-gate mov 0, %l4 ;\ 2757c478bd9Sstevel@tonic-gate fcmpne32 %d56, %d40, %l0 ;\ 2767c478bd9Sstevel@tonic-gate brnz,a %l1, add ;\ 2777c478bd9Sstevel@tonic-gate mov 8, %l4 ;\ 2787c478bd9Sstevel@tonic-gate fcmpne32 %d58, %d42, %l1 ;\ 2797c478bd9Sstevel@tonic-gate brnz,a %l2, add ;\ 2807c478bd9Sstevel@tonic-gate mov 16, %l4 ;\ 2817c478bd9Sstevel@tonic-gate fcmpne32 %d60, %d44, %l2 ;\ 2827c478bd9Sstevel@tonic-gate brnz,a %l3, add ;\ 2837c478bd9Sstevel@tonic-gate mov 24, %l4 ;\ 2847c478bd9Sstevel@tonic-gate fcmpne32 %d62, %d46, %l3 ;\ 2857c478bd9Sstevel@tonic-gate brnz,a %l0, add ;\ 2867c478bd9Sstevel@tonic-gate mov 32, %l4 ;\ 2877c478bd9Sstevel@tonic-gate fsrc1 %d48, %d48 ;\ 2887c478bd9Sstevel@tonic-gate brnz,a %l1, add ;\ 2897c478bd9Sstevel@tonic-gate mov 40, %l4 ;\ 2907c478bd9Sstevel@tonic-gate fsrc1 %d48, %d48 ;\ 2917c478bd9Sstevel@tonic-gate brnz,a %l2, add ;\ 2927c478bd9Sstevel@tonic-gate mov 48, %l4 ;\ 2937c478bd9Sstevel@tonic-gate fsrc1 %d48, %d48 ;\ 2947c478bd9Sstevel@tonic-gate brnz,a %l3, add ;\ 2957c478bd9Sstevel@tonic-gate mov 56, %l4 2967c478bd9Sstevel@tonic-gate 2977c478bd9Sstevel@tonic-gateadd: 2987c478bd9Sstevel@tonic-gate add %l4, %i0, %i0 2997c478bd9Sstevel@tonic-gate add %l4, %i1, %i1 3007c478bd9Sstevel@tonic-gate ba .remcmp 3017c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 3027c478bd9Sstevel@tonic-gate 3037c478bd9Sstevel@tonic-gate#define FALIGN_D0 \ 3047c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d48 ;\ 3057c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d50 ;\ 3067c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d52 ;\ 3077c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d54 ;\ 3087c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d56 ;\ 3097c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d58 ;\ 3107c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d60 ;\ 3117c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d62 312*55fea89dSDan Cross 3137c478bd9Sstevel@tonic-gate#define FALIGN_D16 \ 3147c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d48 ;\ 3157c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d50 ;\ 3167c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d52 ;\ 3177c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d54 ;\ 3187c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d56 ;\ 3197c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d58 ;\ 3207c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d60 ;\ 3217c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d62 322*55fea89dSDan Cross 3237c478bd9Sstevel@tonic-gateseg0: 3247c478bd9Sstevel@tonic-gate FALIGN_D0 3257c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 3267c478bd9Sstevel@tonic-gate add %l7, 64, %l7 3277c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 3287c478bd9Sstevel@tonic-gate add %i0, 64, %i0 3297c478bd9Sstevel@tonic-gate add %i1, 64, %i1 3307c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 3317c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 332*55fea89dSDan Cross sub %i2, 64, %i2 3337c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 334*55fea89dSDan Cross 3357c478bd9Sstevel@tonic-gate FALIGN_D16 3367c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 3377c478bd9Sstevel@tonic-gate add %l7, 64, %l7 3387c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 3397c478bd9Sstevel@tonic-gate add %i0, 64, %i0 3407c478bd9Sstevel@tonic-gate add %i1, 64, %i1 3417c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 3427c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 343*55fea89dSDan Cross sub %i2, 64, %i2 3447c478bd9Sstevel@tonic-gate 3457c478bd9Sstevel@tonic-gate ba %ncc, seg0 3467c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 3477c478bd9Sstevel@tonic-gate 3487c478bd9Sstevel@tonic-gate0: 3497c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 3507c478bd9Sstevel@tonic-gate membar #Sync 3517c478bd9Sstevel@tonic-gate FALIGN_D0 3527c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 3537c478bd9Sstevel@tonic-gate add %i0, 64, %i0 3547c478bd9Sstevel@tonic-gate add %i1, 64, %i1 3557c478bd9Sstevel@tonic-gate ba %ncc, blkd16 356*55fea89dSDan Cross sub %i2, 64, %i2 3577c478bd9Sstevel@tonic-gate 3587c478bd9Sstevel@tonic-gate1: 3597c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 3607c478bd9Sstevel@tonic-gate membar #Sync 3617c478bd9Sstevel@tonic-gate FALIGN_D16 3627c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 3637c478bd9Sstevel@tonic-gate add %i0, 64, %i0 3647c478bd9Sstevel@tonic-gate add %i1, 64, %i1 3657c478bd9Sstevel@tonic-gate ba %ncc, blkd0 366*55fea89dSDan Cross sub %i2, 64, %i2 3677c478bd9Sstevel@tonic-gate 3687c478bd9Sstevel@tonic-gate#define FALIGN_D2 \ 3697c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d48 ;\ 3707c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d50 ;\ 3717c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d52 ;\ 3727c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d54 ;\ 3737c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d56 ;\ 3747c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d58 ;\ 3757c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d60 ;\ 3767c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d62 3777c478bd9Sstevel@tonic-gate 3787c478bd9Sstevel@tonic-gate#define FALIGN_D18 \ 3797c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d48 ;\ 3807c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d50 ;\ 3817c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d52 ;\ 3827c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d54 ;\ 3837c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d56 ;\ 3847c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d58 ;\ 3857c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d60 ;\ 3867c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d62 3877c478bd9Sstevel@tonic-gate 3887c478bd9Sstevel@tonic-gate 3897c478bd9Sstevel@tonic-gateseg1: 3907c478bd9Sstevel@tonic-gate FALIGN_D2 3917c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 3927c478bd9Sstevel@tonic-gate add %l7, 64, %l7 3937c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 3947c478bd9Sstevel@tonic-gate add %i0, 64, %i0 3957c478bd9Sstevel@tonic-gate add %i1, 64, %i1 3967c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 3977c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 398*55fea89dSDan Cross sub %i2, 64, %i2 3997c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 400*55fea89dSDan Cross 4017c478bd9Sstevel@tonic-gate FALIGN_D18 4027c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 4037c478bd9Sstevel@tonic-gate add %l7, 64, %l7 4047c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 4057c478bd9Sstevel@tonic-gate add %i0, 64, %i0 4067c478bd9Sstevel@tonic-gate add %i1, 64, %i1 4077c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 4087c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 409*55fea89dSDan Cross sub %i2, 64, %i2 4107c478bd9Sstevel@tonic-gate 4117c478bd9Sstevel@tonic-gate ba %ncc, seg1 4127c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 4137c478bd9Sstevel@tonic-gate 4147c478bd9Sstevel@tonic-gate0: 4157c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 4167c478bd9Sstevel@tonic-gate membar #Sync 4177c478bd9Sstevel@tonic-gate FALIGN_D2 4187c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 4197c478bd9Sstevel@tonic-gate add %i0, 64, %i0 4207c478bd9Sstevel@tonic-gate add %i1, 64, %i1 4217c478bd9Sstevel@tonic-gate ba %ncc, blkd18 422*55fea89dSDan Cross sub %i2, 64, %i2 4237c478bd9Sstevel@tonic-gate 4247c478bd9Sstevel@tonic-gate1: 4257c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 4267c478bd9Sstevel@tonic-gate membar #Sync 4277c478bd9Sstevel@tonic-gate FALIGN_D18 4287c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 4297c478bd9Sstevel@tonic-gate add %i0, 64, %i0 4307c478bd9Sstevel@tonic-gate add %i1, 64, %i1 4317c478bd9Sstevel@tonic-gate ba %ncc, blkd2 432*55fea89dSDan Cross sub %i2, 64, %i2 4337c478bd9Sstevel@tonic-gate 4347c478bd9Sstevel@tonic-gate#define FALIGN_D4 \ 4357c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d48 ;\ 4367c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d50 ;\ 4377c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d52 ;\ 4387c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d54 ;\ 4397c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d56 ;\ 4407c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d58 ;\ 4417c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d60 ;\ 4427c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d62 443*55fea89dSDan Cross 4447c478bd9Sstevel@tonic-gate#define FALIGN_D20 \ 4457c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d48 ;\ 4467c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d50 ;\ 4477c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d52 ;\ 4487c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d54 ;\ 4497c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d56 ;\ 4507c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d58 ;\ 4517c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d60 ;\ 4527c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d62 453*55fea89dSDan Cross 4547c478bd9Sstevel@tonic-gateseg2: 4557c478bd9Sstevel@tonic-gate FALIGN_D4 4567c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 4577c478bd9Sstevel@tonic-gate add %l7, 64, %l7 4587c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 4597c478bd9Sstevel@tonic-gate add %i0, 64, %i0 4607c478bd9Sstevel@tonic-gate add %i1, 64, %i1 4617c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 4627c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 463*55fea89dSDan Cross sub %i2, 64, %i2 4647c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 465*55fea89dSDan Cross 4667c478bd9Sstevel@tonic-gate FALIGN_D20 4677c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 4687c478bd9Sstevel@tonic-gate add %l7, 64, %l7 4697c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 4707c478bd9Sstevel@tonic-gate add %i0, 64, %i0 4717c478bd9Sstevel@tonic-gate add %i1, 64, %i1 4727c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 4737c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 474*55fea89dSDan Cross sub %i2, 64, %i2 4757c478bd9Sstevel@tonic-gate 4767c478bd9Sstevel@tonic-gate ba %ncc, seg2 4777c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 4787c478bd9Sstevel@tonic-gate 4797c478bd9Sstevel@tonic-gate0: 4807c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 4817c478bd9Sstevel@tonic-gate membar #Sync 4827c478bd9Sstevel@tonic-gate FALIGN_D4 4837c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 4847c478bd9Sstevel@tonic-gate add %i0, 64, %i0 4857c478bd9Sstevel@tonic-gate add %i1, 64, %i1 4867c478bd9Sstevel@tonic-gate ba %ncc, blkd20 487*55fea89dSDan Cross sub %i2, 64, %i2 4887c478bd9Sstevel@tonic-gate 4897c478bd9Sstevel@tonic-gate1: 4907c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 4917c478bd9Sstevel@tonic-gate membar #Sync 4927c478bd9Sstevel@tonic-gate FALIGN_D20 4937c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 4947c478bd9Sstevel@tonic-gate add %i0, 64, %i0 4957c478bd9Sstevel@tonic-gate add %i1, 64, %i1 4967c478bd9Sstevel@tonic-gate ba %ncc, blkd4 497*55fea89dSDan Cross sub %i2, 64, %i2 4987c478bd9Sstevel@tonic-gate 4997c478bd9Sstevel@tonic-gate#define FALIGN_D6 \ 5007c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d48 ;\ 5017c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d50 ;\ 5027c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d52 ;\ 5037c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d54 ;\ 5047c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d56 ;\ 5057c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d58 ;\ 5067c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d60 ;\ 5077c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d62 5087c478bd9Sstevel@tonic-gate 5097c478bd9Sstevel@tonic-gate#define FALIGN_D22 \ 5107c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d48 ;\ 5117c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d50 ;\ 5127c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d52 ;\ 5137c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d54 ;\ 5147c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d56 ;\ 5157c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d58 ;\ 5167c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d60 ;\ 5177c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d62 5187c478bd9Sstevel@tonic-gate 519*55fea89dSDan Cross 5207c478bd9Sstevel@tonic-gateseg3: 5217c478bd9Sstevel@tonic-gate FALIGN_D6 5227c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 5237c478bd9Sstevel@tonic-gate add %l7, 64, %l7 5247c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 5257c478bd9Sstevel@tonic-gate add %i0, 64, %i0 5267c478bd9Sstevel@tonic-gate add %i1, 64, %i1 5277c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 5287c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 529*55fea89dSDan Cross sub %i2, 64, %i2 5307c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 531*55fea89dSDan Cross 5327c478bd9Sstevel@tonic-gate FALIGN_D22 5337c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 5347c478bd9Sstevel@tonic-gate add %l7, 64, %l7 5357c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 5367c478bd9Sstevel@tonic-gate add %i0, 64, %i0 5377c478bd9Sstevel@tonic-gate add %i1, 64, %i1 5387c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 5397c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 540*55fea89dSDan Cross sub %i2, 64, %i2 5417c478bd9Sstevel@tonic-gate 5427c478bd9Sstevel@tonic-gate ba %ncc, seg3 5437c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 544*55fea89dSDan Cross 5457c478bd9Sstevel@tonic-gate 5467c478bd9Sstevel@tonic-gate0: 5477c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 5487c478bd9Sstevel@tonic-gate membar #Sync 5497c478bd9Sstevel@tonic-gate FALIGN_D6 5507c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 5517c478bd9Sstevel@tonic-gate add %i0, 64, %i0 5527c478bd9Sstevel@tonic-gate add %i1, 64, %i1 5537c478bd9Sstevel@tonic-gate ba %ncc, blkd22 554*55fea89dSDan Cross sub %i2, 64, %i2 5557c478bd9Sstevel@tonic-gate 5567c478bd9Sstevel@tonic-gate1: 5577c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 5587c478bd9Sstevel@tonic-gate membar #Sync 5597c478bd9Sstevel@tonic-gate FALIGN_D22 5607c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 5617c478bd9Sstevel@tonic-gate add %i0, 64, %i0 5627c478bd9Sstevel@tonic-gate add %i1, 64, %i1 5637c478bd9Sstevel@tonic-gate ba %ncc, blkd6 564*55fea89dSDan Cross sub %i2, 64, %i2 5657c478bd9Sstevel@tonic-gate 5667c478bd9Sstevel@tonic-gate#define FALIGN_D8 \ 5677c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d48 ;\ 5687c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d50 ;\ 5697c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d52 ;\ 5707c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d54 ;\ 5717c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d56 ;\ 5727c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d58 ;\ 5737c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d60 ;\ 5747c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d62 5757c478bd9Sstevel@tonic-gate 5767c478bd9Sstevel@tonic-gate#define FALIGN_D24 \ 5777c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d48 ;\ 5787c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d50 ;\ 5797c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d52 ;\ 5807c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d54 ;\ 5817c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d56 ;\ 5827c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d58 ;\ 5837c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d60 ;\ 5847c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d62 5857c478bd9Sstevel@tonic-gate 5867c478bd9Sstevel@tonic-gate 5877c478bd9Sstevel@tonic-gateseg4: 5887c478bd9Sstevel@tonic-gate FALIGN_D8 5897c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 5907c478bd9Sstevel@tonic-gate add %l7, 64, %l7 5917c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 5927c478bd9Sstevel@tonic-gate add %i0, 64, %i0 5937c478bd9Sstevel@tonic-gate add %i1, 64, %i1 5947c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 5957c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 596*55fea89dSDan Cross sub %i2, 64, %i2 5977c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 598*55fea89dSDan Cross 5997c478bd9Sstevel@tonic-gate FALIGN_D24 6007c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 6017c478bd9Sstevel@tonic-gate add %l7, 64, %l7 6027c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 6037c478bd9Sstevel@tonic-gate add %i0, 64, %i0 6047c478bd9Sstevel@tonic-gate add %i1, 64, %i1 6057c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 6067c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 607*55fea89dSDan Cross sub %i2, 64, %i2 6087c478bd9Sstevel@tonic-gate 6097c478bd9Sstevel@tonic-gate ba %ncc, seg4 6107c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 6117c478bd9Sstevel@tonic-gate 6127c478bd9Sstevel@tonic-gate 6137c478bd9Sstevel@tonic-gate0: 6147c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 6157c478bd9Sstevel@tonic-gate membar #Sync 6167c478bd9Sstevel@tonic-gate FALIGN_D8 6177c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 6187c478bd9Sstevel@tonic-gate add %i0, 64, %i0 6197c478bd9Sstevel@tonic-gate add %i1, 64, %i1 6207c478bd9Sstevel@tonic-gate ba %ncc, blkd24 621*55fea89dSDan Cross sub %i2, 64, %i2 6227c478bd9Sstevel@tonic-gate 6237c478bd9Sstevel@tonic-gate1: 6247c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 6257c478bd9Sstevel@tonic-gate membar #Sync 6267c478bd9Sstevel@tonic-gate FALIGN_D24 6277c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 6287c478bd9Sstevel@tonic-gate add %i0, 64, %i0 6297c478bd9Sstevel@tonic-gate add %i1, 64, %i1 6307c478bd9Sstevel@tonic-gate ba %ncc, blkd8 631*55fea89dSDan Cross sub %i2, 64, %i2 6327c478bd9Sstevel@tonic-gate 6337c478bd9Sstevel@tonic-gate#define FALIGN_D10 \ 6347c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d48 ;\ 6357c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d50 ;\ 6367c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d52 ;\ 6377c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d54 ;\ 6387c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d56 ;\ 6397c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d58 ;\ 6407c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d60 ;\ 6417c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d62 6427c478bd9Sstevel@tonic-gate 6437c478bd9Sstevel@tonic-gate#define FALIGN_D26 \ 6447c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d48 ;\ 6457c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d50 ;\ 6467c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d52 ;\ 6477c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d54 ;\ 6487c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d56 ;\ 6497c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d58 ;\ 6507c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d60 ;\ 6517c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d62 6527c478bd9Sstevel@tonic-gate 6537c478bd9Sstevel@tonic-gate 6547c478bd9Sstevel@tonic-gateseg5: 6557c478bd9Sstevel@tonic-gate FALIGN_D10 6567c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 6577c478bd9Sstevel@tonic-gate add %l7, 64, %l7 6587c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 6597c478bd9Sstevel@tonic-gate add %i0, 64, %i0 6607c478bd9Sstevel@tonic-gate add %i1, 64, %i1 6617c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 6627c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 663*55fea89dSDan Cross sub %i2, 64, %i2 6647c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 665*55fea89dSDan Cross 6667c478bd9Sstevel@tonic-gate FALIGN_D26 6677c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 6687c478bd9Sstevel@tonic-gate add %l7, 64, %l7 6697c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 6707c478bd9Sstevel@tonic-gate add %i0, 64, %i0 6717c478bd9Sstevel@tonic-gate add %i1, 64, %i1 6727c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 6737c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 674*55fea89dSDan Cross sub %i2, 64, %i2 6757c478bd9Sstevel@tonic-gate 6767c478bd9Sstevel@tonic-gate ba %ncc, seg5 6777c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 6787c478bd9Sstevel@tonic-gate 6797c478bd9Sstevel@tonic-gate 6807c478bd9Sstevel@tonic-gate0: 6817c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 6827c478bd9Sstevel@tonic-gate membar #Sync 6837c478bd9Sstevel@tonic-gate FALIGN_D10 6847c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 6857c478bd9Sstevel@tonic-gate add %i0, 64, %i0 6867c478bd9Sstevel@tonic-gate add %i1, 64, %i1 6877c478bd9Sstevel@tonic-gate ba %ncc, blkd26 688*55fea89dSDan Cross sub %i2, 64, %i2 6897c478bd9Sstevel@tonic-gate 6907c478bd9Sstevel@tonic-gate1: 6917c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 6927c478bd9Sstevel@tonic-gate membar #Sync 6937c478bd9Sstevel@tonic-gate FALIGN_D26 6947c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 6957c478bd9Sstevel@tonic-gate add %i0, 64, %i0 6967c478bd9Sstevel@tonic-gate add %i1, 64, %i1 6977c478bd9Sstevel@tonic-gate ba %ncc, blkd10 698*55fea89dSDan Cross sub %i2, 64, %i2 6997c478bd9Sstevel@tonic-gate 7007c478bd9Sstevel@tonic-gate#define FALIGN_D12 \ 7017c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d48 ;\ 7027c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d50 ;\ 7037c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d52 ;\ 7047c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d54 ;\ 7057c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d56 ;\ 7067c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d58 ;\ 7077c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d60 ;\ 7087c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d62 7097c478bd9Sstevel@tonic-gate 7107c478bd9Sstevel@tonic-gate#define FALIGN_D28 \ 7117c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d48 ;\ 7127c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d50 ;\ 7137c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d52 ;\ 7147c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d54 ;\ 7157c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d56 ;\ 7167c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d58 ;\ 7177c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d60 ;\ 7187c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d62 7197c478bd9Sstevel@tonic-gate 7207c478bd9Sstevel@tonic-gate 7217c478bd9Sstevel@tonic-gateseg6: 7227c478bd9Sstevel@tonic-gate FALIGN_D12 7237c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 7247c478bd9Sstevel@tonic-gate add %l7, 64, %l7 7257c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 7267c478bd9Sstevel@tonic-gate add %i0, 64, %i0 7277c478bd9Sstevel@tonic-gate add %i1, 64, %i1 7287c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 7297c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 730*55fea89dSDan Cross sub %i2, 64, %i2 7317c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 732*55fea89dSDan Cross 7337c478bd9Sstevel@tonic-gate FALIGN_D28 7347c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 7357c478bd9Sstevel@tonic-gate add %l7, 64, %l7 7367c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 7377c478bd9Sstevel@tonic-gate add %i0, 64, %i0 7387c478bd9Sstevel@tonic-gate add %i1, 64, %i1 7397c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 7407c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 741*55fea89dSDan Cross sub %i2, 64, %i2 7427c478bd9Sstevel@tonic-gate 7437c478bd9Sstevel@tonic-gate ba %ncc, seg6 7447c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 7457c478bd9Sstevel@tonic-gate 7467c478bd9Sstevel@tonic-gate 7477c478bd9Sstevel@tonic-gate0: 7487c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 7497c478bd9Sstevel@tonic-gate membar #Sync 7507c478bd9Sstevel@tonic-gate FALIGN_D12 7517c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 7527c478bd9Sstevel@tonic-gate add %i0, 64, %i0 7537c478bd9Sstevel@tonic-gate add %i1, 64, %i1 7547c478bd9Sstevel@tonic-gate ba %ncc, blkd28 755*55fea89dSDan Cross sub %i2, 64, %i2 7567c478bd9Sstevel@tonic-gate 7577c478bd9Sstevel@tonic-gate1: 7587c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 7597c478bd9Sstevel@tonic-gate membar #Sync 7607c478bd9Sstevel@tonic-gate FALIGN_D28 7617c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 7627c478bd9Sstevel@tonic-gate add %i0, 64, %i0 7637c478bd9Sstevel@tonic-gate add %i1, 64, %i1 7647c478bd9Sstevel@tonic-gate ba %ncc, blkd12 765*55fea89dSDan Cross sub %i2, 64, %i2 7667c478bd9Sstevel@tonic-gate 7677c478bd9Sstevel@tonic-gate#define FALIGN_D14 \ 7687c478bd9Sstevel@tonic-gate faligndata %d14, %d16, %d48 ;\ 7697c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d50 ;\ 7707c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d52 ;\ 7717c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d54 ;\ 7727c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d56 ;\ 7737c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d58 ;\ 7747c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d60 ;\ 7757c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d62 7767c478bd9Sstevel@tonic-gate 7777c478bd9Sstevel@tonic-gate#define FALIGN_D30 \ 7787c478bd9Sstevel@tonic-gate faligndata %d30, %d0, %d48 ;\ 7797c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d50 ;\ 7807c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d52 ;\ 7817c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d54 ;\ 7827c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d56 ;\ 7837c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d58 ;\ 7847c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d60 ;\ 7857c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d62 7867c478bd9Sstevel@tonic-gate 7877c478bd9Sstevel@tonic-gateseg7: 7887c478bd9Sstevel@tonic-gate FALIGN_D14 7897c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d0 7907c478bd9Sstevel@tonic-gate add %l7, 64, %l7 7917c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 7927c478bd9Sstevel@tonic-gate add %i0, 64, %i0 7937c478bd9Sstevel@tonic-gate add %i1, 64, %i1 7947c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 7957c478bd9Sstevel@tonic-gate bz,pn %ncc, 1f 796*55fea89dSDan Cross sub %i2, 64, %i2 7977c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 798*55fea89dSDan Cross 7997c478bd9Sstevel@tonic-gate FALIGN_D30 8007c478bd9Sstevel@tonic-gate ldda [%l7]ASI_BLK_P, %d16 8017c478bd9Sstevel@tonic-gate add %l7, 64, %l7 8027c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 8037c478bd9Sstevel@tonic-gate add %i0, 64, %i0 8047c478bd9Sstevel@tonic-gate add %i1, 64, %i1 8057c478bd9Sstevel@tonic-gate subcc %i3, 64, %i3 8067c478bd9Sstevel@tonic-gate bz,pn %ncc, 0f 807*55fea89dSDan Cross sub %i2, 64, %i2 8087c478bd9Sstevel@tonic-gate 8097c478bd9Sstevel@tonic-gate ba %ncc, seg7 8107c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 8117c478bd9Sstevel@tonic-gate 8127c478bd9Sstevel@tonic-gate0: 8137c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 8147c478bd9Sstevel@tonic-gate membar #Sync 8157c478bd9Sstevel@tonic-gate FALIGN_D14 8167c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 8177c478bd9Sstevel@tonic-gate add %i0, 64, %i0 8187c478bd9Sstevel@tonic-gate add %i1, 64, %i1 8197c478bd9Sstevel@tonic-gate ba %ncc, blkd30 820*55fea89dSDan Cross sub %i2, 64, %i2 8217c478bd9Sstevel@tonic-gate 8227c478bd9Sstevel@tonic-gate1: 8237c478bd9Sstevel@tonic-gate ldda [%i0]ASI_BLK_P, %d32 8247c478bd9Sstevel@tonic-gate membar #Sync 8257c478bd9Sstevel@tonic-gate FALIGN_D30 8267c478bd9Sstevel@tonic-gate FCMPNE32_D32_D48 8277c478bd9Sstevel@tonic-gate add %i0, 64, %i0 8287c478bd9Sstevel@tonic-gate add %i1, 64, %i1 8297c478bd9Sstevel@tonic-gate ba %ncc, blkd14 830*55fea89dSDan Cross sub %i2, 64, %i2 8317c478bd9Sstevel@tonic-gate 8327c478bd9Sstevel@tonic-gate 8337c478bd9Sstevel@tonic-gateblkd0: 8347c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 8357c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 8367c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8377c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d48 8387c478bd9Sstevel@tonic-gate ldd [%i0], %d32 8397c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 8407c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8417c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8427c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8437c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 8447c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8457c478bd9Sstevel@tonic-gate add %i0, 8, %i0 8467c478bd9Sstevel@tonic-gate add %i1, 8, %i1 8477c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 8487c478bd9Sstevel@tonic-gate 8497c478bd9Sstevel@tonic-gateblkd2: 8507c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 8517c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 8527c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8537c478bd9Sstevel@tonic-gate faligndata %d2, %d4, %d48 8547c478bd9Sstevel@tonic-gate ldd [%i0], %d32 8557c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 8567c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8577c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8587c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8597c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 8607c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8617c478bd9Sstevel@tonic-gate add %i0, 8, %i0 8627c478bd9Sstevel@tonic-gate add %i1, 8, %i1 8637c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 8647c478bd9Sstevel@tonic-gate 8657c478bd9Sstevel@tonic-gateblkd4: 8667c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 8677c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 8687c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8697c478bd9Sstevel@tonic-gate faligndata %d4, %d6, %d48 8707c478bd9Sstevel@tonic-gate ldd [%i0], %d32 8717c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 8727c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8737c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8747c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8757c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 8767c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8777c478bd9Sstevel@tonic-gate add %i0, 8, %i0 8787c478bd9Sstevel@tonic-gate add %i1, 8, %i1 8797c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 8807c478bd9Sstevel@tonic-gate 8817c478bd9Sstevel@tonic-gateblkd6: 8827c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 8837c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 8847c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8857c478bd9Sstevel@tonic-gate faligndata %d6, %d8, %d48 8867c478bd9Sstevel@tonic-gate ldd [%i0], %d32 8877c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 8887c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8897c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8907c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 8917c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 8927c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 8937c478bd9Sstevel@tonic-gate add %i0, 8, %i0 8947c478bd9Sstevel@tonic-gate add %i1, 8, %i1 8957c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 8967c478bd9Sstevel@tonic-gate 8977c478bd9Sstevel@tonic-gateblkd8: 8987c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 8997c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 9007c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9017c478bd9Sstevel@tonic-gate faligndata %d8, %d10, %d48 9027c478bd9Sstevel@tonic-gate ldd [%i0], %d32 9037c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 9047c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9057c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9067c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9077c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 9087c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9097c478bd9Sstevel@tonic-gate add %i0, 8, %i0 9107c478bd9Sstevel@tonic-gate add %i1, 8, %i1 9117c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 9127c478bd9Sstevel@tonic-gate 9137c478bd9Sstevel@tonic-gateblkd10: 9147c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 9157c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 9167c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9177c478bd9Sstevel@tonic-gate faligndata %d10, %d12, %d48 9187c478bd9Sstevel@tonic-gate ldd [%i0], %d32 9197c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 9207c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9217c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9227c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9237c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 9247c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9257c478bd9Sstevel@tonic-gate add %i0, 8, %i0 9267c478bd9Sstevel@tonic-gate add %i1, 8, %i1 9277c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 9287c478bd9Sstevel@tonic-gate 9297c478bd9Sstevel@tonic-gateblkd12: 9307c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 9317c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 9327c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9337c478bd9Sstevel@tonic-gate faligndata %d12, %d14, %d48 9347c478bd9Sstevel@tonic-gate ldd [%i0], %d32 9357c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 9367c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9377c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9387c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9397c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 9407c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9417c478bd9Sstevel@tonic-gate add %i0, 8, %i0 9427c478bd9Sstevel@tonic-gate add %i1, 8, %i1 9437c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 9447c478bd9Sstevel@tonic-gate 9457c478bd9Sstevel@tonic-gateblkd14: 9467c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 9477c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 9487c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9497c478bd9Sstevel@tonic-gate ba,pt %ncc, blkleft 9507c478bd9Sstevel@tonic-gate fmovd %d14, %d0 9517c478bd9Sstevel@tonic-gate 9527c478bd9Sstevel@tonic-gateblkd16: 9537c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 9547c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 9557c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9567c478bd9Sstevel@tonic-gate faligndata %d16, %d18, %d48 9577c478bd9Sstevel@tonic-gate ldd [%i0], %d32 9587c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 9597c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9607c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9617c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9627c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 9637c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9647c478bd9Sstevel@tonic-gate add %i0, 8, %i0 9657c478bd9Sstevel@tonic-gate add %i1, 8, %i1 9667c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 9677c478bd9Sstevel@tonic-gate 9687c478bd9Sstevel@tonic-gateblkd18: 9697c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 9707c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 9717c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9727c478bd9Sstevel@tonic-gate faligndata %d18, %d20, %d48 9737c478bd9Sstevel@tonic-gate ldd [%i0], %d32 9747c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 9757c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9767c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9777c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9787c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 9797c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9807c478bd9Sstevel@tonic-gate add %i0, 8, %i0 9817c478bd9Sstevel@tonic-gate add %i1, 8, %i1 9827c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 9837c478bd9Sstevel@tonic-gate 9847c478bd9Sstevel@tonic-gateblkd20: 9857c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 9867c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 9877c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9887c478bd9Sstevel@tonic-gate faligndata %d20, %d22, %d48 9897c478bd9Sstevel@tonic-gate ldd [%i0], %d32 9907c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 9917c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9927c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9937c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 9947c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 9957c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 9967c478bd9Sstevel@tonic-gate add %i0, 8, %i0 9977c478bd9Sstevel@tonic-gate add %i1, 8, %i1 9987c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 9997c478bd9Sstevel@tonic-gate 10007c478bd9Sstevel@tonic-gateblkd22: 10017c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 10027c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 10037c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10047c478bd9Sstevel@tonic-gate faligndata %d22, %d24, %d48 10057c478bd9Sstevel@tonic-gate ldd [%i0], %d32 10067c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 10077c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10087c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10097c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10107c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 10117c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10127c478bd9Sstevel@tonic-gate add %i0, 8, %i0 10137c478bd9Sstevel@tonic-gate add %i1, 8, %i1 10147c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 10157c478bd9Sstevel@tonic-gate 10167c478bd9Sstevel@tonic-gateblkd24: 10177c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 10187c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 10197c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10207c478bd9Sstevel@tonic-gate faligndata %d24, %d26, %d48 10217c478bd9Sstevel@tonic-gate ldd [%i0], %d32 10227c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 10237c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10247c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10257c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10267c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 10277c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10287c478bd9Sstevel@tonic-gate add %i0, 8, %i0 10297c478bd9Sstevel@tonic-gate add %i1, 8, %i1 10307c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 10317c478bd9Sstevel@tonic-gate 10327c478bd9Sstevel@tonic-gateblkd26: 10337c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 10347c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 10357c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10367c478bd9Sstevel@tonic-gate faligndata %d26, %d28, %d48 10377c478bd9Sstevel@tonic-gate ldd [%i0], %d32 10387c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 10397c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10407c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10417c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10427c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 10437c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10447c478bd9Sstevel@tonic-gate add %i0, 8, %i0 10457c478bd9Sstevel@tonic-gate add %i1, 8, %i1 10467c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 10477c478bd9Sstevel@tonic-gate 10487c478bd9Sstevel@tonic-gateblkd28: 10497c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 10507c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 10517c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10527c478bd9Sstevel@tonic-gate faligndata %d28, %d30, %d48 10537c478bd9Sstevel@tonic-gate ldd [%i0], %d32 10547c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d48, %l1 10557c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10567c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10577c478bd9Sstevel@tonic-gate fsrc1 %d32, %d32 10587c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 10597c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10607c478bd9Sstevel@tonic-gate add %i0, 8, %i0 10617c478bd9Sstevel@tonic-gate add %i1, 8, %i1 10627c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 10637c478bd9Sstevel@tonic-gate 10647c478bd9Sstevel@tonic-gateblkd30: 10657c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 10667c478bd9Sstevel@tonic-gate blu,a,pn %ncc, .remcmp 10677c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10687c478bd9Sstevel@tonic-gate fmovd %d30, %d0 10697c478bd9Sstevel@tonic-gate 10707c478bd9Sstevel@tonic-gate ! This loop handles doubles remaining that were not loaded(ldda`ed) 10717c478bd9Sstevel@tonic-gate ! in the Block Compare loop 10727c478bd9Sstevel@tonic-gateblkleft: 10737c478bd9Sstevel@tonic-gate ldd [%l7], %d2 10747c478bd9Sstevel@tonic-gate add %l7, 8, %l7 10757c478bd9Sstevel@tonic-gate faligndata %d0, %d2, %d8 10767c478bd9Sstevel@tonic-gate ldd [%i0], %d32 10777c478bd9Sstevel@tonic-gate fcmpne32 %d32, %d8, %l1 10787c478bd9Sstevel@tonic-gate fsrc1 %d2, %d0 10797c478bd9Sstevel@tonic-gate fsrc1 %d2, %d0 10807c478bd9Sstevel@tonic-gate fsrc1 %d2, %d0 10817c478bd9Sstevel@tonic-gate brnz,a %l1, .remcmp 10827c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10837c478bd9Sstevel@tonic-gate add %i0, 8, %i0 10847c478bd9Sstevel@tonic-gate add %i1, 8, %i1 10857c478bd9Sstevel@tonic-gate subcc %i4, 8, %i4 10867c478bd9Sstevel@tonic-gate bgeu,pt %ncc, blkleft 10877c478bd9Sstevel@tonic-gate sub %i2, 8, %i2 10887c478bd9Sstevel@tonic-gate 10897c478bd9Sstevel@tonic-gate ba %ncc, .remcmp 10907c478bd9Sstevel@tonic-gate sub %i1, %i0, %i1 ! i1 gets the difference 10917c478bd9Sstevel@tonic-gate 10927c478bd9Sstevel@tonic-gate6: ldub [%i0 + %i1], %i5 ! byte compare loop 10937c478bd9Sstevel@tonic-gate inc %i0 10947c478bd9Sstevel@tonic-gate cmp %i4, %i5 10957c478bd9Sstevel@tonic-gate bne %ncc, .bnoteq 10967c478bd9Sstevel@tonic-gate.remcmp: 10977c478bd9Sstevel@tonic-gate deccc %i2 10987c478bd9Sstevel@tonic-gate bgeu,a %ncc, 6b 10997c478bd9Sstevel@tonic-gate ldub [%i0], %i4 1100*55fea89dSDan Cross 1101*55fea89dSDan Crossexit: 11027c478bd9Sstevel@tonic-gate and %l5, 0x4, %l5 ! fprs.du = fprs.dl = 0 11037c478bd9Sstevel@tonic-gate wr %l5, %g0, %fprs ! fprs = l5 - restore fprs 11047c478bd9Sstevel@tonic-gate membar #StoreLoad|#StoreStore 11057c478bd9Sstevel@tonic-gate ret 11067c478bd9Sstevel@tonic-gate restore %g0, %g0, %o0 11077c478bd9Sstevel@tonic-gate 11087c478bd9Sstevel@tonic-gate 11097c478bd9Sstevel@tonic-gate.bnoteq: 11107c478bd9Sstevel@tonic-gate and %l5, 0x4, %l5 ! fprs.du = fprs.dl = 0 11117c478bd9Sstevel@tonic-gate wr %l5, %g0, %fprs ! fprs = l5 - restore fprs 11127c478bd9Sstevel@tonic-gate membar #StoreLoad|#StoreStore 11137c478bd9Sstevel@tonic-gate sub %i4, %i5, %i0 ! return(*s1 - *s2) 11147c478bd9Sstevel@tonic-gate ret ! strings aren't equal 11157c478bd9Sstevel@tonic-gate restore %i0, %g0, %o0 11167c478bd9Sstevel@tonic-gate 11177c478bd9Sstevel@tonic-gate 11187c478bd9Sstevel@tonic-gate 11197c478bd9Sstevel@tonic-gate SET_SIZE(memcmp) 1120