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) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * memscan.S: Optimized memscan for Sparc64.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (C) 1997,1998 Jakub Jelinek (jj@ultra.linux.cz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * Copyright (C) 1998 David S. Miller (davem@redhat.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 	#include <asm/export.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #define HI_MAGIC	0x8080808080808080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define LO_MAGIC	0x0101010101010101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define ASI_PL		0x88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	.text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	.globl		__memscan_zero, __memscan_generic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	.type		__memscan_zero,#function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	.type		__memscan_generic,#function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	.globl		memscan
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	EXPORT_SYMBOL(__memscan_zero)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	EXPORT_SYMBOL(__memscan_generic)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) __memscan_zero:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	/* %o0 = bufp, %o1 = size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	brlez,pn	%o1, szzero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	 andcc		%o0, 7, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	be,pt		%icc, we_are_aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	 sethi		%hi(HI_MAGIC), %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	ldub		[%o0], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 1:	subcc		%o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	brz,pn		%o5, 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	 add		%o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	be,pn		%xcc, szzero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	 andcc		%o0, 7, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	bne,a,pn	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	 ldub		[%o0], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) we_are_aligned:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	ldxa		[%o0] ASI_PL, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	or		%o4, %lo(HI_MAGIC), %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	sllx		%o3, 32, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	or		%o4, %o3, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	srlx		%o3, 7, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) msloop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	sub		%o1, 8, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	add		%o0, 8, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	sub		%o5, %o2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	xor		%o4, %o5, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	andcc		%o4, %o3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	bne,pn		%xcc, check_bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	 srlx		%o4, 32, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	brgz,a,pt	%o1, msloop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	 ldxa		[%o0] ASI_PL, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) check_bytes:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	bne,a,pn	%icc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	 andcc		%o5, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	add		%o0, -5, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	ba,pt		%xcc, 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	 srlx		%o5, 32, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 2:	srlx		%o5, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	 add		%o0, -8, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	andcc		%g7, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	srlx		%g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	 inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	andcc		%g7, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	srlx		%g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	 inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	andcc		%g7, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	srlx		%g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	 inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	andcc		%g3, %o3, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	be,a,pn		%icc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	 mov		%o0, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 3:	andcc		%g7, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	srlx		%g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	 inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	andcc		%g7, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	srlx		%g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	 inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	andcc		%g7, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	srlx		%g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	 inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	andcc		%g7, 0xff, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	srlx		%g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	be,pn		%icc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	 inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 2:	brgz,a,pt	%o1, msloop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	 ldxa		[%o0] ASI_PL, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	inc		%g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 1:	add		%o0, %o1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	cmp		%g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	 movle		%xcc, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 10:	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	 sub		%o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) szzero:	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) memscan:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) __memscan_generic:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	/* %o0 = addr, %o1 = c, %o2 = size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	brz,pn		%o2, 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	 add		%o0, %o2, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	ldub		[%o0], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	sub		%g0, %o2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	cmp		%o5, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	be,pn		%icc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	 addcc		%o4, 1, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	bne,a,pt 	%xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	 ldub		[%o3 + %o4], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	/* The delay slot is the same as the next insn, this is just to make it look more awful */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	 add		%o3, %o4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	 sub		%o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	 nop