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