^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* memcpy.S: Sparc optimized memcpy and memmove code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Hand optimized from GNU libc's memcpy and memmove
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (C) 1991,1996 Free Software Foundation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 1995 Linus Torvalds (Linus.Torvalds@helsinki.fi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <asm/export.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define FUNC(x) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) .globl x; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) .type x,@function; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) .align 4; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) x:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /* Both these macros have to start with exactly the same insn */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ldd [%src + (offset) + 0x00], %t0; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) ldd [%src + (offset) + 0x08], %t2; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) ldd [%src + (offset) + 0x10], %t4; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ldd [%src + (offset) + 0x18], %t6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) st %t0, [%dst + (offset) + 0x00]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) st %t1, [%dst + (offset) + 0x04]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) st %t2, [%dst + (offset) + 0x08]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) st %t3, [%dst + (offset) + 0x0c]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) st %t4, [%dst + (offset) + 0x10]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) st %t5, [%dst + (offset) + 0x14]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) st %t6, [%dst + (offset) + 0x18]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) st %t7, [%dst + (offset) + 0x1c];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define MOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) ldd [%src + (offset) + 0x00], %t0; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) ldd [%src + (offset) + 0x08], %t2; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) ldd [%src + (offset) + 0x10], %t4; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) ldd [%src + (offset) + 0x18], %t6; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) std %t0, [%dst + (offset) + 0x00]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) std %t2, [%dst + (offset) + 0x08]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) std %t4, [%dst + (offset) + 0x10]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) std %t6, [%dst + (offset) + 0x18];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define MOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) ldd [%src - (offset) - 0x10], %t0; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ldd [%src - (offset) - 0x08], %t2; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) st %t0, [%dst - (offset) - 0x10]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) st %t1, [%dst - (offset) - 0x0c]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) st %t2, [%dst - (offset) - 0x08]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) st %t3, [%dst - (offset) - 0x04];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define MOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ldd [%src - (offset) - 0x10], %t0; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) ldd [%src - (offset) - 0x08], %t2; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) std %t0, [%dst - (offset) - 0x10]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) std %t2, [%dst - (offset) - 0x08];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define MOVE_SHORTCHUNK(src, dst, offset, t0, t1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) ldub [%src - (offset) - 0x02], %t0; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) ldub [%src - (offset) - 0x01], %t1; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) stb %t0, [%dst - (offset) - 0x02]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) stb %t1, [%dst - (offset) - 0x01];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) .align 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) FUNC(memmove)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) EXPORT_SYMBOL(memmove)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) cmp %o0, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) mov %o0, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) bleu 9f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) sub %o0, %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) add %o1, %o2, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) cmp %o3, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) bleu 0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) andcc %o4, 3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) add %o1, %o2, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) add %o0, %o2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) sub %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) sub %o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 1: /* reverse_bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) ldub [%o1], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) subcc %o2, 1, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) stb %o4, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) sub %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) bne 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) sub %o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) mov %g7, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) /* NOTE: This code is executed just for the cases,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) where %src (=%o1) & 3 is != 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) We need to align it to 4. So, for (%src & 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) 1 we need to do ldub,lduh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) 2 lduh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 3 just ldub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) so even if it looks weird, the branches
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) are correct here. -jj
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 78: /* dword_align */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) andcc %o1, 1, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) be 4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) andcc %o1, 2, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) add %o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) stb %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) sub %o2, 1, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) bne 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) add %o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 4:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) lduh [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) add %o1, 2, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) sth %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) sub %o2, 2, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) b 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) add %o0, 2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) FUNC(memcpy) /* %o0=dst %o1=src %o2=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) EXPORT_SYMBOL(memcpy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) sub %o0, %o1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) mov %o0, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 9:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) andcc %o4, 3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) bne 86f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) cmp %o2, 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) bleu 90f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) andcc %o1, 3, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) bne 78b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) andcc %o1, 4, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) be 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) mov %o2, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ld [%o1], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) sub %g1, 4, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) st %o4, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) add %o1, 4, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) add %o0, 4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) andcc %g1, 0xffffff80, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) be 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) andcc %o0, 4, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) be 82f + 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 5:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) MOVE_BIGCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) MOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) MOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) MOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) sub %g1, 128, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) add %o1, 128, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) cmp %g1, 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) bge 5b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) add %o0, 128, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) andcc %g1, 0x70, %g4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) be 80f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) andcc %g1, 8, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) sethi %hi(80f), %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) srl %g4, 1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) add %g4, %o4, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) add %o1, %g4, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) sub %o5, %o4, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) jmpl %o5 + %lo(80f), %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) add %o0, %g4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 79: /* memcpy_table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 80: /* memcpy_table_end */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) be 81f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) andcc %g1, 4, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) ldd [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) add %o0, 8, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) st %g2, [%o0 - 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) add %o1, 8, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) st %g3, [%o0 - 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 81: /* memcpy_last7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) andcc %g1, 2, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) ld [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) add %o1, 4, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) st %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) add %o0, 4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) andcc %g1, 1, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) lduh [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) add %o1, 2, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) sth %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) add %o0, 2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) stb %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) mov %g7, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 82: /* ldd_std */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) MOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) MOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) MOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) MOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) subcc %g1, 128, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) add %o1, 128, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) cmp %g1, 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) bge 82b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) add %o0, 128, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) andcc %g1, 0x70, %g4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) be 84f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) andcc %g1, 8, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) sethi %hi(84f), %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) add %o1, %g4, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) sub %o5, %g4, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) jmpl %o5 + %lo(84f), %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) add %o0, %g4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 83: /* amemcpy_table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 84: /* amemcpy_table_end */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) be 85f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) andcc %g1, 4, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) ldd [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) add %o0, 8, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) std %g2, [%o0 - 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) add %o1, 8, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 85: /* amemcpy_last7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) andcc %g1, 2, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) ld [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) add %o1, 4, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) st %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) add %o0, 4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) andcc %g1, 1, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) lduh [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) add %o1, 2, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) sth %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) add %o0, 2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) stb %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) mov %g7, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 86: /* non_aligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) cmp %o2, 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) bleu 88f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) save %sp, -96, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) andcc %i0, 3, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) be 61f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) andcc %i0, 1, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) be 60f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) andcc %i0, 2, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) ldub [%i1], %g5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) add %i1, 1, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) stb %g5, [%i0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) sub %i2, 1, %i2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) bne 61f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) add %i0, 1, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 60:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) ldub [%i1], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) add %i1, 2, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) stb %g3, [%i0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) sub %i2, 2, %i2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) ldub [%i1 - 1], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) add %i0, 2, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) stb %g3, [%i0 - 1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 61:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) and %i1, 3, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) and %i2, 0xc, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) and %i1, -4, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) cmp %g3, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) sll %g2, 3, %g4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) mov 32, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) be 4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) sub %g2, %g4, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) blu 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) cmp %g3, 0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) be 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) srl %i2, 2, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) ld [%i1], %i3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) add %i0, -8, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) ld [%i1 + 4], %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) b 8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) add %g3, 1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) ld [%i1], %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) add %i0, -12, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) ld [%i1 + 4], %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) add %g3, 2, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) b 9f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) add %i1, -4, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) ld [%i1], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) add %i0, -4, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) ld [%i1 + 4], %i3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) srl %i2, 2, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) b 7f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) add %i1, 4, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 4:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) ld [%i1], %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) cmp %i2, 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) ld [%i1 + 4], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) srl %i2, 2, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) bleu 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) add %i1, 8, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) ld [%i1], %i3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) add %g3, -1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 5:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) sll %i5, %g4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) srl %g1, %l0, %g5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) or %g2, %g5, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) st %g2, [%i0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 7:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) ld [%i1 + 4], %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) sll %g1, %g4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) srl %i3, %l0, %g5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) or %g2, %g5, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) st %g2, [%i0 + 4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) ld [%i1 + 8], %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) sll %i3, %g4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) srl %i4, %l0, %g5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) or %g2, %g5, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) st %g2, [%i0 + 8]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 9:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) ld [%i1 + 12], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) sll %i4, %g4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) srl %i5, %l0, %g5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) addcc %g3, -4, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) or %g2, %g5, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) add %i1, 16, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) st %g2, [%i0 + 12]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) add %i0, 16, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) bne,a 5b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) ld [%i1], %i3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 10:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) sll %i5, %g4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) srl %g1, %l0, %g5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) srl %l0, 3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) or %g2, %g5, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) sub %i1, %g3, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) andcc %i2, 2, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) st %g2, [%i0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) andcc %i2, 1, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) ldub [%i1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) add %i1, 2, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) stb %g2, [%i0 + 4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) add %i0, 2, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) ldub [%i1 - 1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) stb %g2, [%i0 + 3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) ldub [%i1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) stb %g2, [%i0 + 4]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) restore %g7, %g0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 88: /* short_end */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) and %o2, 0xe, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 20:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) sethi %hi(89f), %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) sll %o3, 3, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) add %o0, %o3, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) sub %o5, %o4, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) add %o1, %o3, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) jmpl %o5 + %lo(89f), %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) andcc %o2, 1, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) MOVE_SHORTCHUNK(o1, o0, 0x0c, g2, g3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) MOVE_SHORTCHUNK(o1, o0, 0x0a, g2, g3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) MOVE_SHORTCHUNK(o1, o0, 0x08, g2, g3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) MOVE_SHORTCHUNK(o1, o0, 0x06, g2, g3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) MOVE_SHORTCHUNK(o1, o0, 0x04, g2, g3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) MOVE_SHORTCHUNK(o1, o0, 0x02, g2, g3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) MOVE_SHORTCHUNK(o1, o0, 0x00, g2, g3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 89: /* short_table_end */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) ldub [%o1], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) stb %g2, [%o0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) mov %g7, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 90: /* short_aligned_end */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) bne 88b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) andcc %o2, 8, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) andcc %o2, 4, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) ld [%o1 + 0x00], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) ld [%o1 + 0x04], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) add %o1, 8, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) st %g2, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) st %g3, [%o0 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) add %o0, 8, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) b 81b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) mov %o2, %g1