114 lines
1.8 KiB
ArmAsm
114 lines
1.8 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Contributed by Richard Henderson <rth@tamu.edu>
|
|
*
|
|
* unsigned short csum_ipv6_magic(struct in6_addr *saddr,
|
|
* struct in6_addr *daddr, __u32 len,
|
|
* unsigned short proto, unsigned int csum);
|
|
*
|
|
* Misalignment handling (which costs 16 instructions / 8 cycles)
|
|
* added by Ivan Kokshaysky <ink@jurassic.park.msu.ru>
|
|
*/
|
|
#include <asm/export.h>
|
|
.globl csum_ipv6_magic
|
|
.align 4
|
|
.ent csum_ipv6_magic
|
|
.frame $30, 0, $26, 0
|
|
csum_ipv6_magic:
|
|
.prologue 0
|
|
|
|
ldl_u $0, 0($16)
|
|
zapnot $20, 15, $20
|
|
exthl $18, 1, $4
|
|
ldl_u $21, 7($16)
|
|
|
|
extlb $18, 1, $5
|
|
ldl_u $1, 8($16)
|
|
extlb $18, 2, $6
|
|
ldl_u $22, 15($16)
|
|
|
|
extlb $18, 3, $18
|
|
ldl_u $2, 0($17)
|
|
sra $4, 32, $4
|
|
ldl_u $23, 7($17)
|
|
|
|
extll $0, $16, $0
|
|
ldl_u $3, 8($17)
|
|
exthl $21, $16, $21
|
|
ldl_u $24, 15($17)
|
|
|
|
sll $5, 16, $5
|
|
or $0, $21, $0
|
|
extll $1, $16, $1
|
|
addl $20, $0, $20
|
|
|
|
exthl $22, $16, $22
|
|
cmpult $20, $0, $0
|
|
sll $6, 8, $6
|
|
or $1, $22, $1
|
|
|
|
extll $2, $17, $2
|
|
or $4, $18, $18
|
|
exthl $23, $17, $23
|
|
or $5, $6, $5
|
|
|
|
extll $3, $17, $3
|
|
or $2, $23, $2
|
|
exthl $24, $17, $24
|
|
or $18, $5, $18
|
|
|
|
exthh $19, 7, $7
|
|
or $3, $24, $3
|
|
extlb $19, 1, $19
|
|
addl $20, $1, $20
|
|
|
|
or $19, $7, $19
|
|
cmpult $20, $1, $1
|
|
sll $19, 48, $19
|
|
|
|
sra $19, 32, $19
|
|
addl $20, $2, $20
|
|
cmpult $20, $2, $2
|
|
addl $20, $3, $20
|
|
|
|
cmpult $20, $3, $3
|
|
addl $20, $18, $20
|
|
cmpult $20, $18, $18
|
|
addl $20, $19, $20
|
|
|
|
cmpult $20, $19, $19
|
|
addl $0, $1, $0
|
|
addl $2, $3, $2
|
|
addl $18, $19, $18
|
|
|
|
addl $0, $2, $0
|
|
addl $20, $18, $20
|
|
addl $0, $20, $0
|
|
unop
|
|
|
|
extlh $0, 2, $2
|
|
zapnot $0, 3, $3
|
|
extlh $0, 4, $1
|
|
addl $2, $3, $3
|
|
|
|
extlh $0, 6, $0
|
|
addl $3, $1, $3
|
|
addl $0, $3, $0
|
|
unop
|
|
|
|
extlh $0, 2, $1
|
|
zapnot $0, 3, $0
|
|
addl $0, $1, $0
|
|
unop
|
|
|
|
extlh $0, 2, $1
|
|
zapnot $0, 3, $0
|
|
addl $0, $1, $0
|
|
not $0, $0
|
|
|
|
zapnot $0, 3, $0
|
|
ret
|
|
|
|
.end csum_ipv6_magic
|
|
EXPORT_SYMBOL(csum_ipv6_magic)
|