diff mbox

[ovs-dev] csum: Inline csum_add16(), csum_add32().

Message ID 1448942414-26194-1-git-send-email-blp@ovn.org
State Accepted
Headers show

Commit Message

Ben Pfaff Dec. 1, 2015, 4 a.m. UTC
These two functions are really simple, to the point that inlining them
yields less code than calling them: with GCC 4.9 on i386, this change
reduces the code generated for packet_csum_pseudoheader() from 112 bytes
to 100 bytes.

Signed-off-by: Ben Pfaff <blp@ovn.org>
---
 lib/csum.c | 22 +---------------------
 lib/csum.h | 27 ++++++++++++++++++++++++---
 2 files changed, 25 insertions(+), 24 deletions(-)

Comments

Thadeu Lima de Souza Cascardo Dec. 1, 2015, 4:30 p.m. UTC | #1
On Mon, Nov 30, 2015 at 08:00:14PM -0800, Ben Pfaff wrote:
> These two functions are really simple, to the point that inlining them
> yields less code than calling them: with GCC 4.9 on i386, this change
> reduces the code generated for packet_csum_pseudoheader() from 112 bytes
> to 100 bytes.
> 
> Signed-off-by: Ben Pfaff <blp@ovn.org>
> ---
>  lib/csum.c | 22 +---------------------
>  lib/csum.h | 27 ++++++++++++++++++++++++---
>  2 files changed, 25 insertions(+), 24 deletions(-)
> 

Acked-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Ben Pfaff Dec. 1, 2015, 6:15 p.m. UTC | #2
On Tue, Dec 01, 2015 at 02:30:44PM -0200, Thadeu Lima de Souza Cascardo wrote:
> On Mon, Nov 30, 2015 at 08:00:14PM -0800, Ben Pfaff wrote:
> > These two functions are really simple, to the point that inlining them
> > yields less code than calling them: with GCC 4.9 on i386, this change
> > reduces the code generated for packet_csum_pseudoheader() from 112 bytes
> > to 100 bytes.
> > 
> > Signed-off-by: Ben Pfaff <blp@ovn.org>
> > ---
> >  lib/csum.c | 22 +---------------------
> >  lib/csum.h | 27 ++++++++++++++++++++++++---
> >  2 files changed, 25 insertions(+), 24 deletions(-)
> > 
> 
> Acked-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>

Thanks, applied to master.
diff mbox

Patch

diff --git a/lib/csum.c b/lib/csum.c
index c87c8dd..a0e9967 100644
--- a/lib/csum.c
+++ b/lib/csum.c
@@ -1,5 +1,5 @@ 
 /*
- * Copyright (c) 2008, 2009, 2010, 2011, 2013 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2013, 2015 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@ 
 #include "unaligned.h"
 
 #ifndef __CHECKER__
-
 /* Returns the IP checksum of the 'n' bytes in 'data'.
  *
  * The return value has the same endianness as the data.  That is, if 'data'
@@ -32,25 +31,6 @@  csum(const void *data, size_t n)
     return csum_finish(csum_continue(0, data, n));
 }
 
-/* Adds the 16 bits in 'new' to the partial IP checksum 'partial' and returns
- * the updated checksum.  (To start a new checksum, pass 0 for 'partial'.  To
- * obtain the finished checksum, pass the return value to csum_finish().) */
-uint32_t
-csum_add16(uint32_t partial, ovs_be16 new)
-{
-    return partial + new;
-}
-
-/* Adds the 32 bits in 'new' to the partial IP checksum 'partial' and returns
- * the updated checksum.  (To start a new checksum, pass 0 for 'partial'.  To
- * obtain the finished checksum, pass the return value to csum_finish().) */
-uint32_t
-csum_add32(uint32_t partial, ovs_be32 new)
-{
-    return partial + (new >> 16) + (new & 0xffff);
-}
-
-
 /* Adds the 'n' bytes in 'data' to the partial IP checksum 'partial' and
  * returns the updated checksum.  (To start a new checksum, pass 0 for
  * 'partial'.  To obtain the finished checksum, pass the return value to
diff --git a/lib/csum.h b/lib/csum.h
index 293339d..fc52086 100644
--- a/lib/csum.h
+++ b/lib/csum.h
@@ -1,5 +1,5 @@ 
 /*
- * Copyright (c) 2008, 2011 Nicira, Inc.
+ * Copyright (c) 2008, 2011, 2015 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,8 +22,6 @@ 
 #include "openvswitch/types.h"
 
 ovs_be16 csum(const void *, size_t);
-uint32_t csum_add16(uint32_t partial, ovs_be16);
-uint32_t csum_add32(uint32_t partial, ovs_be32);
 uint32_t csum_continue(uint32_t partial, const void *, size_t);
 ovs_be16 csum_finish(uint32_t partial);
 ovs_be16 recalc_csum16(ovs_be16 old_csum, ovs_be16 old_u16, ovs_be16 new_u16);
@@ -33,4 +31,27 @@  ovs_be16 recalc_csum48(ovs_be16 old_csum, const struct eth_addr old_mac,
 ovs_be16 recalc_csum128(ovs_be16 old_csum, ovs_16aligned_be32 old_u32[4],
                         const ovs_be32 new_u32[4]);
 
+#ifndef __CHECKER__
+/* Adds the 16 bits in 'new' to the partial IP checksum 'partial' and returns
+ * the updated checksum.  (To start a new checksum, pass 0 for 'partial'.  To
+ * obtain the finished checksum, pass the return value to csum_finish().) */
+static inline uint32_t
+csum_add16(uint32_t partial, ovs_be16 new)
+{
+    return partial + new;
+}
+
+/* Adds the 32 bits in 'new' to the partial IP checksum 'partial' and returns
+ * the updated checksum.  (To start a new checksum, pass 0 for 'partial'.  To
+ * obtain the finished checksum, pass the return value to csum_finish().) */
+static inline uint32_t
+csum_add32(uint32_t partial, ovs_be32 new)
+{
+    return partial + (new >> 16) + (new & 0xffff);
+}
+#else
+uint32_t csum_add16(uint32_t partial, ovs_be16);
+uint32_t csum_add32(uint32_t partial, ovs_be32);
+#endif
+
 #endif /* csum.h */