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) #include "libgcc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) #define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) #define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #define umul_ppmm(w1, w0, u, v) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 	do {			   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) 		UWtype __x0, __x1, __x2, __x3;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 		UHWtype __ul, __vl, __uh, __vh; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 		__ul = __ll_lowpart(u);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 		__uh = __ll_highpart(u);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 		__vl = __ll_lowpart(v);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 		__vh = __ll_highpart(v);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 		__x0 = (UWtype) __ul * __vl;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 		__x1 = (UWtype) __ul * __vh;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 		__x2 = (UWtype) __uh * __vl;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 		__x3 = (UWtype) __uh * __vh;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 		__x1 += __ll_highpart(__x0);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 		__x1 += __x2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 		if (__x1 < __x2)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 			__x3 += __ll_B;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 		(w1) = __x3 + __ll_highpart(__x1);	       \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 		(w0) = __ll_lowpart(__x1) * __ll_B + __ll_lowpart(__x0); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define __umulsidi3(u, v) (			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 		{				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 			DWunion __w;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 			umul_ppmm(__w.s.high, __w.s.low, u, v);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 			__w.ll; }					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 		)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) DWtype __muldi3(DWtype u, DWtype v)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	const DWunion uu = {.ll = u};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	const DWunion vv = {.ll = v};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	DWunion w = {.ll = __umulsidi3(uu.s.low, vv.s.low)};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	w.s.high += ((UWtype) uu.s.low * (UWtype) vv.s.high
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 		     + (UWtype) uu.s.high * (UWtype) vv.s.low);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	return w.ll;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) }