Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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