Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / metag / lib / ip_fast_csum.S
1
2         .text
3 /*
4  * This is a version of ip_compute_csum() optimized for IP headers,
5  * which always checksum on 4 octet boundaries.
6  *
7  * extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl);
8  *
9  */
10         .global _ip_fast_csum
11         .type   _ip_fast_csum,function
12 _ip_fast_csum:
13         !! TXRPT needs loops - 1
14         SUBS    TXRPT,D0Ar2,#1
15         MOV     D0Re0,#0
16         BLO     $Lfast_csum_exit
17 $Lfast_csum_loop:
18         GETD    D1Ar3,[D1Ar1++]
19         ADDS    D0Re0,D0Re0,D1Ar3
20         ADDCS   D0Re0,D0Re0,#1
21         BR      $Lfast_csum_loop
22         LSR     D0Ar4,D0Re0,#16
23         AND     D0Re0,D0Re0,#0xffff
24         AND     D0Ar4,D0Ar4,#0xffff
25         ADD     D0Re0,D0Re0,D0Ar4
26         LSR     D0Ar4,D0Re0,#16
27         ADD     D0Re0,D0Re0,D0Ar4
28         XOR     D0Re0,D0Re0,#-1
29         AND     D0Re0,D0Re0,#0xffff
30 $Lfast_csum_exit:
31         MOV     PC,D1RtP
32         .size _ip_fast_csum,.-_ip_fast_csum