blob: 4742d59029ee3677d0a77cd121d4437bb823e151 [file] [log] [blame]
David S. Miller8695c372012-05-11 20:33:22 -07001#include <linux/linkage.h>
2
Linus Torvalds1da177e2005-04-16 15:20:36 -07003 .text
David S. Miller8695c372012-05-11 20:33:22 -07004ENTRY(ip_fast_csum) /* %o0 = iph, %o1 = ihl */
Linus Torvalds1da177e2005-04-16 15:20:36 -07005 sub %o1, 4, %g7
6 lduw [%o0 + 0x00], %o2
7 lduw [%o0 + 0x04], %g2
8 lduw [%o0 + 0x08], %g3
9 addcc %g2, %o2, %o2
10 lduw [%o0 + 0x0c], %g2
11 addccc %g3, %o2, %o2
12 lduw [%o0 + 0x10], %g3
13
14 addccc %g2, %o2, %o2
15 addc %o2, %g0, %o2
161: addcc %g3, %o2, %o2
17 add %o0, 4, %o0
18 addccc %o2, %g0, %o2
19 subcc %g7, 1, %g7
20 be,a,pt %icc, 2f
21 sll %o2, 16, %g2
22
23 lduw [%o0 + 0x10], %g3
24 ba,pt %xcc, 1b
25 nop
262: addcc %o2, %g2, %g2
27 srl %g2, 16, %o2
28 addc %o2, %g0, %o2
29 xnor %g0, %o2, %o2
30 set 0xffff, %o1
31 retl
32 and %o2, %o1, %o0
David S. Miller8695c372012-05-11 20:33:22 -070033ENDPROC(ip_fast_csum)