OSDN Git Service

Merge tag 'perf-urgent-2023-09-10' of git://git.kernel.org/pub/scm/linux/kernel/git...
[tomoyo/tomoyo-test1.git] / arch / sparc / lib / ipcsum.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #include <linux/export.h>
3 #include <linux/linkage.h>
4
5         .text
6 ENTRY(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
18 1:      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
28 2:      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
35 ENDPROC(ip_fast_csum)
36 EXPORT_SYMBOL(ip_fast_csum)