1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_CRIS_ARCH_CHECKSUM_H
3 #define _ASM_CRIS_ARCH_CHECKSUM_H
6 * Check values used in TCP/UDP headers.
8 * The gain of doing this in assembler instead of C, is that C doesn't
9 * generate carry-additions for the 32-bit components of the
10 * checksum. Which means it would be necessary to split all those into
11 * 16-bit components and then add.
14 csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
15 __u32 len, __u8 proto, __wsum sum)
19 __asm__ __volatile__ ("add.d %2, %0\n\t"
24 : "0" (sum), "r" (daddr), "r" (saddr), \
25 "r" ((len + proto) << 8));
30 #endif /* _ASM_CRIS_ARCH_CHECKSUM_H */