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) // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) .macro	GET_FRONT_BITS rx y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #ifdef	__cskyLE__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 	lsri	\rx, \y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 	lsli	\rx, \y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) .macro	GET_AFTER_BITS rx y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #ifdef	__cskyLE__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	lsli	\rx, \y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	lsri	\rx, \y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) /* void *memcpy(void *dest, const void *src, size_t n); */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) ENTRY(memcpy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	mov	r7, r2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	bt	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	mov	r6, r2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	andi	r6, 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	cmpnei	r6, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	jbt	.L_dest_not_aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	mov	r6, r3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	andi	r6, 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	cmpnei	r6, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	jbt	.L_dest_aligned_but_src_not_aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) .L0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	jbt	.L_aligned_and_len_less_16bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	subi	sp, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	stw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) .L_aligned_and_len_larger_16bytes:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	ldw	r1, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	ldw	r5, (r3, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	ldw	r8, (r3, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	stw	r1, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	ldw	r1, (r3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	stw	r5, (r7, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	stw	r8, (r7, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	stw	r1, (r7, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	subi	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	addi	r3, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	addi	r7, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	jbf	.L_aligned_and_len_larger_16bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	ldw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	addi	sp, 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	cmpnei	r4, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	jbf	.L_return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) .L_aligned_and_len_less_16bytes:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	bt	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) .L1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	ldw	r1, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	stw	r1, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	subi	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	addi	r3, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	addi	r7, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	jbf	.L1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	br	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) .L_return:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) .L_copy_by_byte:                      /* len less than 4 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	cmpnei	r4, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	jbf	.L_return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) .L4:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	ldb	r1, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	stb	r1, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	addi	r3, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	addi	r7, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	decne	r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	jbt	.L4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)  * If dest is not aligned, just copying some bytes makes the dest align.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)  * Afther that, we judge whether the src is aligned.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) .L_dest_not_aligned:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	mov	r5, r3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	rsub	r5, r5, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	abs	r5, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	cmplt	r5, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	bt	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	mov	r5, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	sub	r5, r3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	cmphs	r5, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	bf	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	mov	r5, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) .L5:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	ldb	r1, (r3, 0)              /* makes the dest align. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	stb	r1, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	addi	r5, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	subi	r4, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	addi	r3, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	addi	r7, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	cmpnei	r5, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	jbt	.L5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	jbt	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	mov	r6, r3                   /* judge whether the src is aligned. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	andi	r6, 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	cmpnei	r6, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	jbf	.L0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) /* Judge the number of misaligned, 1, 2, 3? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) .L_dest_aligned_but_src_not_aligned:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	mov	r5, r3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	rsub	r5, r5, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	abs	r5, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	cmplt	r5, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	bt	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	bclri	r3, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	bclri	r3, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	ldw	r1, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	addi	r3, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	cmpnei	r6, 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	bf	.L_dest_aligned_but_src_not_aligned_2bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	cmpnei	r6, 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	bf	.L_dest_aligned_but_src_not_aligned_3bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) .L_dest_aligned_but_src_not_aligned_1byte:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	mov	r5, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	sub	r5, r3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	cmphs	r5, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	bf	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	bf	.L11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) .L10:                                     /* If the len is less than 16 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	GET_FRONT_BITS r1 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	mov	r5, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	ldw	r6, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	mov	r1, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	GET_AFTER_BITS r6 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	or	r5, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	stw	r5, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	subi	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	addi	r3, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	addi	r7, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	bf	.L10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	subi	r3, 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	br	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) .L11:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	subi	sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	stw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	stw	r9, (sp, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	stw	r10, (sp, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	stw	r11, (sp, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) .L12:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	ldw	r5, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	ldw	r11, (r3, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	ldw	r8, (r3, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	ldw	r9, (r3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	GET_FRONT_BITS r1 8               /* little or big endian? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	mov	r10, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	GET_AFTER_BITS r5 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	or	r5, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	GET_FRONT_BITS r10 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	mov	r1, r11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	GET_AFTER_BITS r11 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	or	r11, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	GET_FRONT_BITS r1 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	mov	r10, r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	GET_AFTER_BITS r8 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	or	r8, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	GET_FRONT_BITS r10 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	mov	r1, r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	GET_AFTER_BITS r9 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	or	r9, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	stw	r5, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	stw	r11, (r7, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	stw	r8, (r7, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	stw	r9, (r7, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	subi	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	addi	r3, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	addi	r7, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	jbf	.L12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	ldw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	ldw	r9, (sp, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	ldw	r10, (sp, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	ldw	r11, (sp, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	addi	sp , 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	bf	.L10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	subi	r3, 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	br	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) .L_dest_aligned_but_src_not_aligned_2bytes:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	bf	.L21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) .L20:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	GET_FRONT_BITS r1 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	mov	r5, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	ldw	r6, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	mov	r1, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	GET_AFTER_BITS r6 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	or	r5, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	stw	r5, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	subi	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	addi	r3, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	addi	r7, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	bf	.L20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	subi	r3, 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	br	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) .L21:	/* n > 16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	subi 	sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	stw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	stw	r9, (sp, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	stw	r10, (sp, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	stw	r11, (sp, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) .L22:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	ldw	r5, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	ldw	r11, (r3, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	ldw	r8, (r3, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	ldw	r9, (r3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	GET_FRONT_BITS r1 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	mov	r10, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	GET_AFTER_BITS r5 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	or	r5, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	GET_FRONT_BITS r10 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	mov	r1, r11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	GET_AFTER_BITS r11 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	or	r11, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	GET_FRONT_BITS r1 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	mov	r10, r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	GET_AFTER_BITS r8 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	or	r8, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	GET_FRONT_BITS r10 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	mov	r1, r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	GET_AFTER_BITS r9 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	or	r9, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	stw	r5, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	stw	r11, (r7, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	stw	r8, (r7, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	stw	r9, (r7, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	subi	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	addi	r3, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	addi	r7, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	jbf	.L22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	ldw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	ldw	r9, (sp, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	ldw	r10, (sp, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	ldw	r11, (sp, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	addi	sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	bf	.L20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	subi	r3, 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	br	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) .L_dest_aligned_but_src_not_aligned_3bytes:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	bf	.L31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) .L30:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	GET_FRONT_BITS r1 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	mov	r5, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	ldw	r6, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	mov	r1, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	GET_AFTER_BITS r6 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	or	r5, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	stw	r5, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	subi	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	addi	r3, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	addi	r7, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	bf	.L30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	subi	r3, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	br	.L_copy_by_byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) .L31:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	subi	sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	stw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	stw	r9, (sp, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	stw	r10, (sp, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	stw	r11, (sp, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) .L32:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	ldw	r5, (r3, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	ldw	r11, (r3, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	ldw	r8, (r3, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	ldw	r9, (r3, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	GET_FRONT_BITS r1 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	mov	r10, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	GET_AFTER_BITS r5 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	or	r5, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	GET_FRONT_BITS r10 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	mov	r1, r11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	GET_AFTER_BITS r11 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	or	r11, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	GET_FRONT_BITS r1 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	mov	r10, r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	GET_AFTER_BITS r8 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	or	r8, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	GET_FRONT_BITS r10 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	mov	r1, r9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	GET_AFTER_BITS r9 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	or	r9, r10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	stw	r5, (r7, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	stw	r11, (r7, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	stw	r8, (r7, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 	stw	r9, (r7, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	subi	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	addi	r3, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	addi	r7, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	cmplti	r4, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 	jbf	.L32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	ldw	r8, (sp, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	ldw	r9, (sp, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	ldw	r10, (sp, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	ldw	r11, (sp, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	addi	sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	cmplti	r4, 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	bf	.L30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	subi	r3, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	br	.L_copy_by_byte