ipcsum.S (707B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#include <linux/linkage.h> 3#include <asm/export.h> 4 5 .text 6ENTRY(ip_fast_csum) /* %o0 = iph, %o1 = ihl */ 7 sub %o1, 4, %g7 8 lduw [%o0 + 0x00], %o2 9 lduw [%o0 + 0x04], %g2 10 lduw [%o0 + 0x08], %g3 11 addcc %g2, %o2, %o2 12 lduw [%o0 + 0x0c], %g2 13 addccc %g3, %o2, %o2 14 lduw [%o0 + 0x10], %g3 15 16 addccc %g2, %o2, %o2 17 addc %o2, %g0, %o2 181: addcc %g3, %o2, %o2 19 add %o0, 4, %o0 20 addccc %o2, %g0, %o2 21 subcc %g7, 1, %g7 22 be,a,pt %icc, 2f 23 sll %o2, 16, %g2 24 25 lduw [%o0 + 0x10], %g3 26 ba,pt %xcc, 1b 27 nop 282: addcc %o2, %g2, %g2 29 srl %g2, 16, %o2 30 addc %o2, %g0, %o2 31 xnor %g0, %o2, %o2 32 set 0xffff, %o1 33 retl 34 and %o2, %o1, %o0 35ENDPROC(ip_fast_csum) 36EXPORT_SYMBOL(ip_fast_csum)