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) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  * This file is subject to the terms and conditions of the GNU General Public
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * License.  See the file COPYING in the main directory of this archive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <linux/string.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) void *memmove(void *dest, const void *src, size_t n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 	void *xdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 	size_t temp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	if (!n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 		return xdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	if (dest < src) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 		if ((long)dest & 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 			char *cdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 			const char *csrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 			*cdest++ = *csrc++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 			dest = cdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 			src = csrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 			n--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 		if (n > 2 && (long)dest & 2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 			short *sdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 			const short *ssrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 			*sdest++ = *ssrc++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 			dest = sdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 			src = ssrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 			n -= 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 		temp = n >> 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 		if (temp) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 			long *ldest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 			const long *lsrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 			temp--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 			do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 				*ldest++ = *lsrc++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 			while (temp--);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 			dest = ldest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 			src = lsrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 		if (n & 2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 			short *sdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 			const short *ssrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 			*sdest++ = *ssrc++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 			dest = sdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 			src = ssrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 		if (n & 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 			char *cdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 			const char *csrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 			*cdest = *csrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 		dest = (char *)dest + n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 		src = (const char *)src + n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 		if ((long)dest & 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 			char *cdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 			const char *csrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 			*--cdest = *--csrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 			dest = cdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 			src = csrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 			n--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 		if (n > 2 && (long)dest & 2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 			short *sdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 			const short *ssrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 			*--sdest = *--ssrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 			dest = sdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 			src = ssrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 			n -= 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 		temp = n >> 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 		if (temp) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 			long *ldest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 			const long *lsrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 			temp--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 			do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 				*--ldest = *--lsrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 			while (temp--);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 			dest = ldest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 			src = lsrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 		if (n & 2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 			short *sdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 			const short *ssrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 			*--sdest = *--ssrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 			dest = sdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 			src = ssrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 		if (n & 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 			char *cdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 			const char *csrc = src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 			*--cdest = *--csrc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	return xdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) EXPORT_SYMBOL(memmove);