18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#include <linux/linkage.h>
38c2ecf20Sopenharmony_ci#include <asm/export.h>
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci	.text
68c2ecf20Sopenharmony_ciENTRY(ip_fast_csum) /* %o0 = iph, %o1 = ihl */
78c2ecf20Sopenharmony_ci	sub	%o1, 4, %g7
88c2ecf20Sopenharmony_ci	lduw	[%o0 + 0x00], %o2
98c2ecf20Sopenharmony_ci	lduw	[%o0 + 0x04], %g2
108c2ecf20Sopenharmony_ci	lduw	[%o0 + 0x08], %g3
118c2ecf20Sopenharmony_ci	addcc	%g2, %o2, %o2
128c2ecf20Sopenharmony_ci	lduw	[%o0 + 0x0c], %g2
138c2ecf20Sopenharmony_ci	addccc	%g3, %o2, %o2
148c2ecf20Sopenharmony_ci	lduw	[%o0 + 0x10], %g3
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci	addccc	%g2, %o2, %o2
178c2ecf20Sopenharmony_ci	addc	%o2, %g0, %o2
188c2ecf20Sopenharmony_ci1:	addcc	%g3, %o2, %o2
198c2ecf20Sopenharmony_ci	add	%o0, 4, %o0
208c2ecf20Sopenharmony_ci	addccc	%o2, %g0, %o2
218c2ecf20Sopenharmony_ci	subcc	%g7, 1, %g7
228c2ecf20Sopenharmony_ci	be,a,pt	%icc, 2f
238c2ecf20Sopenharmony_ci	 sll	%o2, 16, %g2
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	lduw	[%o0 + 0x10], %g3
268c2ecf20Sopenharmony_ci	ba,pt	%xcc, 1b
278c2ecf20Sopenharmony_ci	 nop
288c2ecf20Sopenharmony_ci2:	addcc	%o2, %g2, %g2
298c2ecf20Sopenharmony_ci	srl	%g2, 16, %o2
308c2ecf20Sopenharmony_ci	addc	%o2, %g0, %o2
318c2ecf20Sopenharmony_ci	xnor	%g0, %o2, %o2
328c2ecf20Sopenharmony_ci	set	0xffff, %o1
338c2ecf20Sopenharmony_ci	retl
348c2ecf20Sopenharmony_ci	 and	%o2, %o1, %o0
358c2ecf20Sopenharmony_ciENDPROC(ip_fast_csum)
368c2ecf20Sopenharmony_ciEXPORT_SYMBOL(ip_fast_csum)
37