From e828c2dd40c661fc6c96db4e84faacf2764efcce Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 23 Mar 1999 23:06:42 +0000 Subject: SPARC optimized version of IP checksum header routine. Submitted by Jiri Gaisler . --- cpukit/libnetworking/rtems/rtems_glue.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'cpukit') diff --git a/cpukit/libnetworking/rtems/rtems_glue.c b/cpukit/libnetworking/rtems/rtems_glue.c index ab734c1aca..dae362f735 100644 --- a/cpukit/libnetworking/rtems/rtems_glue.c +++ b/cpukit/libnetworking/rtems/rtems_glue.c @@ -697,6 +697,36 @@ kmem_malloc (vm_map_t *map, vm_size_t size, boolean_t waitflag) /* * IP header checksum routine for processors which don't have an inline version */ + +#ifdef (defined(__GNUC__) && defined(sparc)) + + asm(" + .text + .global _in_cksum_hdr +_in_cksum_hdr: + + ld [%o0], %o1 + ld [%o0+4], %o2 + addcc %o1, %o2, %o1 + ld [%o0+8], %o2 + addxcc %o1, %o2, %o1 + ld [%o0+12], %o2 + addxcc %o1, %o2, %o1 + ld [%o0+16], %o2 + addxcc %o1, %o2, %o1 + set 0x0ffff, %o3 + srl %o1, 16, %o2 + and %o1, %o3, %o1 + addx %o1, %o2, %o1 + srl %o1, 16, %o1 + add %o1, %g0, %o1 + neg %o1 + retl + and %o1, %o3, %o0 + + "); +#else + u_int in_cksum_hdr (const void *ip) { @@ -713,6 +743,8 @@ in_cksum_hdr (const void *ip) return ~sum & 0xFFFF; } +#endif + /* * Manipulate routing tables */ -- cgit v1.2.3