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