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-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *  linux/arch/arm/lib/csumpartialcopygeneric.S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *  Copyright (C) 1995-2001 Russell King
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #include <asm/assembler.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * unsigned int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * csum_partial_copy_xxx(const char *src, char *dst, int len, int sum, )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  *  r0 = src, r1 = dst, r2 = len, r3 = sum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  *  Returns : r0 = checksum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  * Note that 'tst' and 'teq' preserve the carry flag.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) src	.req	r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) dst	.req	r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) len	.req	r2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) sum	.req	r3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) .Lzero:		mov	r0, sum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 		load_regs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 		 * Align an unaligned destination pointer.  We know that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 		 * we have >= 8 bytes here, so we don't need to check
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 		 * the length.  Note that the source pointer hasn't been
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 		 * aligned yet.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) .Ldst_unaligned:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 		tst	dst, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 		beq	.Ldst_16bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 		load1b	ip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 		sub	len, len, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 		adcs	sum, sum, ip, put_byte_1	@ update checksum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 		strb	ip, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 		tst	dst, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 		reteq	lr			@ dst is now 32bit aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) .Ldst_16bit:	load2b	r8, ip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 		sub	len, len, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 		adcs	sum, sum, r8, put_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 		strb	r8, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 		adcs	sum, sum, ip, put_byte_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 		strb	ip, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 		ret	lr			@ dst is now 32bit aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 		 * Handle 0 to 7 bytes, with any alignment of source and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 		 * destination pointers.  Note that when we get here, C = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) .Lless8:	teq	len, #0			@ check for zero count
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 		beq	.Lzero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 		/* we must have at least one byte. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 		tst	dst, #1			@ dst 16-bit aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 		beq	.Lless8_aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 		/* Align dst */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 		load1b	ip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 		sub	len, len, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 		adcs	sum, sum, ip, put_byte_1	@ update checksum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 		strb	ip, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 		tst	len, #6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 		beq	.Lless8_byteonly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 1:		load2b	r8, ip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 		sub	len, len, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 		adcs	sum, sum, r8, put_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 		strb	r8, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 		adcs	sum, sum, ip, put_byte_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 		strb	ip, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) .Lless8_aligned:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 		tst	len, #6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 		bne	1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) .Lless8_byteonly:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 		tst	len, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 		beq	.Ldone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 		load1b	r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 		adcs	sum, sum, r8, put_byte_0	@ update checksum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 		strb	r8, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 		b	.Ldone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) FN_ENTRY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 		save_regs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 		mov	sum, #-1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 		cmp	len, #8			@ Ensure that we have at least
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 		blo	.Lless8			@ 8 bytes to copy.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 		adds	sum, sum, #0		@ C = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 		tst	dst, #3			@ Test destination alignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 		blne	.Ldst_unaligned		@ align destination, return here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 		 * Ok, the dst pointer is now 32bit aligned, and we know
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		 * that we must have more than 4 bytes to copy.  Note
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 		 * that C contains the carry from the dst alignment above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 		tst	src, #3			@ Test source alignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 		bne	.Lsrc_not_aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 		/* Routine for src & dst aligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 		bics	ip, len, #15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 		beq	2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 1:		load4l	r4, r5, r6, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 		stmia	dst!, {r4, r5, r6, r7}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 		adcs	sum, sum, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 		adcs	sum, sum, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 		sub	ip, ip, #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 		teq	ip, #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 		bne	1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 2:		ands	ip, len, #12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 		tst	ip, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 		beq	3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 		load2l	r4, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 		stmia	dst!, {r4, r5}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 		tst	ip, #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 3:		load1l	r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 		str	r4, [dst], #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 4:		ands	len, len, #3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 		beq	.Ldone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 		load1l	r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 		tst	len, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 		mov	r5, r4, get_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 		beq	.Lexit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 		adcs	sum, sum, r4, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 		mov	r5, r4, get_byte_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 		mov	r5, r4, get_byte_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) .Lexit:		tst	len, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 		strbne	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 		andne	r5, r5, #255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 		adcsne	sum, sum, r5, put_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 		 * If the dst pointer was not 16-bit aligned, we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 		 * need to rotate the checksum here to get around
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 		 * the inefficient byte manipulations in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 		 * architecture independent code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) .Ldone:		adc	r0, sum, #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 		ldr	sum, [sp, #0]		@ dst
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 		tst	sum, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 		movne	r0, r0, ror #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 		load_regs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) .Lsrc_not_aligned:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 		adc	sum, sum, #0		@ include C from dst alignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 		and	ip, src, #3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 		bic	src, src, #3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 		load1l	r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 		cmp	ip, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 		beq	.Lsrc2_aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 		bhi	.Lsrc3_aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 		mov	r4, r5, lspull #8		@ C = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 		bics	ip, len, #15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 		beq	2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 1:		load4l	r5, r6, r7, r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 		orr	r4, r4, r5, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 		mov	r5, r5, lspull #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 		orr	r5, r5, r6, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 		mov	r6, r6, lspull #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 		orr	r6, r6, r7, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 		mov	r7, r7, lspull #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 		orr	r7, r7, r8, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 		stmia	dst!, {r4, r5, r6, r7}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 		adcs	sum, sum, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 		adcs	sum, sum, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 		mov	r4, r8, lspull #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 		sub	ip, ip, #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 		teq	ip, #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 		bne	1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 2:		ands	ip, len, #12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 		tst	ip, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 		beq	3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 		load2l	r5, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 		orr	r4, r4, r5, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 		mov	r5, r5, lspull #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 		orr	r5, r5, r6, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 		stmia	dst!, {r4, r5}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 		mov	r4, r6, lspull #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 		tst	ip, #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 3:		load1l	r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 		orr	r4, r4, r5, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 		str	r4, [dst], #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 		mov	r4, r5, lspull #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 4:		ands	len, len, #3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 		beq	.Ldone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 		mov	r5, r4, get_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 		tst	len, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 		beq	.Lexit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 		adcs	sum, sum, r4, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 		mov	r5, r4, get_byte_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 		mov	r5, r4, get_byte_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 		b	.Lexit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) .Lsrc2_aligned:	mov	r4, r5, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 		adds	sum, sum, #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 		bics	ip, len, #15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 		beq	2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 1:		load4l	r5, r6, r7, r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 		orr	r4, r4, r5, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 		mov	r5, r5, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 		orr	r5, r5, r6, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 		mov	r6, r6, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 		orr	r6, r6, r7, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 		mov	r7, r7, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 		orr	r7, r7, r8, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 		stmia	dst!, {r4, r5, r6, r7}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 		adcs	sum, sum, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 		adcs	sum, sum, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 		mov	r4, r8, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 		sub	ip, ip, #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 		teq	ip, #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 		bne	1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 2:		ands	ip, len, #12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 		tst	ip, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 		beq	3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 		load2l	r5, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 		orr	r4, r4, r5, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 		mov	r5, r5, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 		orr	r5, r5, r6, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 		stmia	dst!, {r4, r5}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 		mov	r4, r6, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 		tst	ip, #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 3:		load1l	r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 		orr	r4, r4, r5, lspush #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 		str	r4, [dst], #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 		mov	r4, r5, lspull #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 4:		ands	len, len, #3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 		beq	.Ldone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 		mov	r5, r4, get_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 		tst	len, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 		beq	.Lexit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 		mov	r5, r4, get_byte_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 		tst	len, #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 		beq	.Ldone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 		load1b	r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 		b	.Lexit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) .Lsrc3_aligned:	mov	r4, r5, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 		adds	sum, sum, #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 		bics	ip, len, #15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 		beq	2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 1:		load4l	r5, r6, r7, r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 		orr	r4, r4, r5, lspush #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 		mov	r5, r5, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 		orr	r5, r5, r6, lspush #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 		mov	r6, r6, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 		orr	r6, r6, r7, lspush #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 		mov	r7, r7, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 		orr	r7, r7, r8, lspush #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 		stmia	dst!, {r4, r5, r6, r7}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 		adcs	sum, sum, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 		adcs	sum, sum, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 		mov	r4, r8, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 		sub	ip, ip, #16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 		teq	ip, #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 		bne	1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 2:		ands	ip, len, #12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 		tst	ip, #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 		beq	3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 		load2l	r5, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 		orr	r4, r4, r5, lspush #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 		mov	r5, r5, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 		orr	r5, r5, r6, lspush #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 		stmia	dst!, {r4, r5}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 		adcs	sum, sum, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 		mov	r4, r6, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 		tst	ip, #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 		beq	4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 3:		load1l	r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 		orr	r4, r4, r5, lspush #8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 		str	r4, [dst], #4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 		mov	r4, r5, lspull #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 4:		ands	len, len, #3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 		beq	.Ldone
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 		mov	r5, r4, get_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 		tst	len, #2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 		beq	.Lexit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 		adcs	sum, sum, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 		load1l	r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 		mov	r5, r4, get_byte_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 		strb	r5, [dst], #1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 		adcs	sum, sum, r4, lspush #24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 		mov	r5, r4, get_byte_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 		b	.Lexit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) FN_EXIT