* Re: [PATCH] x86: bpf_jit_comp: simplify trivial boolean return
@ 2014-11-26 17:23 Alexei Starovoitov
2014-11-26 18:02 ` Joe Perches
2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
0 siblings, 2 replies; 13+ messages in thread
From: Alexei Starovoitov @ 2014-11-26 17:23 UTC (permalink / raw)
To: Joe Perches
Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
H. Peter Anvin, x86, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
On Wed, Nov 26, 2014 at 8:58 AM, Joe Perches <joe@perches.com> wrote:
> On Wed, 2014-11-26 at 08:42 -0800, Alexei Starovoitov wrote:
>> On Wed, Nov 26, 2014 at 1:18 AM, Quentin Lambert
>> <lambert.quentin@gmail.com> wrote:
>> > Remove if then else statements preceding
>> > boolean return.
> []
>> > diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
> []
>> > @@ -135,11 +135,9 @@ static const int reg2hex[] = {
>> > */
>> > static inline bool is_ereg(u32 reg)
>> > {
>> > - if (reg == BPF_REG_5 || reg == AUX_REG ||
>> > - (reg >= BPF_REG_7 && reg <= BPF_REG_9))
>> > - return true;
>> > - else
>> > - return false;
>> > + return (reg == BPF_REG_5 ||
>> > + reg == AUX_REG ||
>> > + (reg >= BPF_REG_7 && reg <= BPF_REG_9));
>>
>> please remove extra () around the whole expression, and
>> align in properly, and
>> don't move reg==AUX_REG check to a different line.
>> Subject is not warranted. I don't think it's a simplification.
>
> It's not really a simplification,
> gcc should emit the same object code.
exactly.
>> imo existing code is fine and I don't think the time spent
>> reviewing such changes is worth it when there is no
>> improvement in readability.
>
> Is there any value in reordering these tests for frequency
> or maybe using | instead of || to avoid multiple jumps?
probably not. It's not a critical path.
compiler may fuse conditions depending on values anyway.
If it was a critical path, we could have used
(1 << reg) & mask trick.
I picked explicit 'return true' else 'return false' here,
because it felt easier to read. Just a matter of taste.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: simplify trivial boolean return
2014-11-26 17:23 [PATCH] x86: bpf_jit_comp: simplify trivial boolean return Alexei Starovoitov
@ 2014-11-26 18:02 ` Joe Perches
2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
1 sibling, 0 replies; 13+ messages in thread
From: Joe Perches @ 2014-11-26 18:02 UTC (permalink / raw)
To: Alexei Starovoitov
Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
H. Peter Anvin, x86, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
On Wed, 2014-11-26 at 09:23 -0800, Alexei Starovoitov wrote:
> On Wed, Nov 26, 2014 at 8:58 AM, Joe Perches <joe@perches.com> wrote:
> > Is there any value in reordering these tests for frequency
> > or maybe using | instead of || to avoid multiple jumps?
>
> probably not. It's not a critical path.
> compiler may fuse conditions depending on values anyway.
> If it was a critical path, we could have used
> (1 << reg) & mask trick.
> I picked explicit 'return true' else 'return false' here,
> because it felt easier to read. Just a matter of taste.
There is a size difference though: (allyesconfig)
$ size arch/x86/net/built-in.o*
text data bss dec hex filename
12999 1012 4336 18347 47ab arch/x86/net/built-in.o.new
13177 1076 4592 18845 499d arch/x86/net/built-in.o.old
---
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 3f62734..09e2cea 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -135,11 +135,11 @@ static const int reg2hex[] = {
*/
static inline bool is_ereg(u32 reg)
{
- if (reg == BPF_REG_5 || reg == AUX_REG ||
- (reg >= BPF_REG_7 && reg <= BPF_REG_9))
- return true;
- else
- return false;
+ return (1 << reg) & (BIT(BPF_REG_5) |
+ BIT(AUX_REG) |
+ BIT(BPF_REG_7) |
+ BIT(BPF_REG_8) |
+ BIT(BPF_REG_9));
}
/* add modifiers if 'reg' maps to x64 registers r8..r15 */
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
2014-11-26 17:23 [PATCH] x86: bpf_jit_comp: simplify trivial boolean return Alexei Starovoitov
2014-11-26 18:02 ` Joe Perches
@ 2014-12-04 23:00 ` Joe Perches
2014-12-04 23:12 ` Alexei Starovoitov
` (2 more replies)
1 sibling, 3 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-04 23:00 UTC (permalink / raw)
To: Alexei Starovoitov
Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
H. Peter Anvin, x86, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Use the (1 << reg) & mask trick to reduce code size.
x86-64 size difference -O2 without profiling for various
gcc versions:
$ size arch/x86/net/bpf_jit_comp.o*
text data bss dec hex filename
9266 4 0 9270 2436 arch/x86/net/bpf_jit_comp.o.4.4.new
10042 4 0 10046 273e arch/x86/net/bpf_jit_comp.o.4.4.old
9109 4 0 9113 2399 arch/x86/net/bpf_jit_comp.o.4.6.new
9717 4 0 9721 25f9 arch/x86/net/bpf_jit_comp.o.4.6.old
8789 4 0 8793 2259 arch/x86/net/bpf_jit_comp.o.4.7.new
10245 4 0 10249 2809 arch/x86/net/bpf_jit_comp.o.4.7.old
9671 4 0 9675 25cb arch/x86/net/bpf_jit_comp.o.4.9.new
10679 4 0 10683 29bb arch/x86/net/bpf_jit_comp.o.4.9.old
Signed-off-by: Joe Perches <joe@perches.com>
---
compiled, untested by me, but per Alexei Starovoitov this passes
the test_bpf suite
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 3f62734..09e2cea 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -135,11 +135,11 @@ static const int reg2hex[] = {
*/
static inline bool is_ereg(u32 reg)
{
- if (reg == BPF_REG_5 || reg == AUX_REG ||
- (reg >= BPF_REG_7 && reg <= BPF_REG_9))
- return true;
- else
- return false;
+ return (1 << reg) & (BIT(BPF_REG_5) |
+ BIT(AUX_REG) |
+ BIT(BPF_REG_7) |
+ BIT(BPF_REG_8) |
+ BIT(BPF_REG_9));
}
/* add modifiers if 'reg' maps to x64 registers r8..r15 */
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
@ 2014-12-04 23:12 ` Alexei Starovoitov
2014-12-04 23:14 ` Eric Dumazet
2014-12-09 19:57 ` David Miller
2 siblings, 0 replies; 13+ messages in thread
From: Alexei Starovoitov @ 2014-12-04 23:12 UTC (permalink / raw)
To: Joe Perches, Daniel Borkmann
Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
H. Peter Anvin, x86@kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
On Thu, Dec 4, 2014 at 3:00 PM, Joe Perches <joe@perches.com> wrote:
> Use the (1 << reg) & mask trick to reduce code size.
>
> x86-64 size difference -O2 without profiling for various
> gcc versions:
>
> $ size arch/x86/net/bpf_jit_comp.o*
> text data bss dec hex filename
> 9266 4 0 9270 2436 arch/x86/net/bpf_jit_comp.o.4.4.new
> 10042 4 0 10046 273e arch/x86/net/bpf_jit_comp.o.4.4.old
> 9109 4 0 9113 2399 arch/x86/net/bpf_jit_comp.o.4.6.new
> 9717 4 0 9721 25f9 arch/x86/net/bpf_jit_comp.o.4.6.old
> 8789 4 0 8793 2259 arch/x86/net/bpf_jit_comp.o.4.7.new
> 10245 4 0 10249 2809 arch/x86/net/bpf_jit_comp.o.4.7.old
> 9671 4 0 9675 25cb arch/x86/net/bpf_jit_comp.o.4.9.new
> 10679 4 0 10683 29bb arch/x86/net/bpf_jit_comp.o.4.9.old
>
> Signed-off-by: Joe Perches <joe@perches.com>
probably it was worth noting in comment that
reg is 4-bit value and AUX_REG==12, so it won't overflow.
Dave, it's for net-next of course.
Suggested-by: Alexei Starovoitov <ast@plumgrid.com>
Tested-by: Alexei Starovoitov <ast@plumgrid.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
2014-12-04 23:12 ` Alexei Starovoitov
@ 2014-12-04 23:14 ` Eric Dumazet
2014-12-04 23:31 ` Alexei Starovoitov
2014-12-04 23:35 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
2014-12-09 19:57 ` David Miller
2 siblings, 2 replies; 13+ messages in thread
From: Eric Dumazet @ 2014-12-04 23:14 UTC (permalink / raw)
To: Joe Perches
Cc: Alexei Starovoitov, Quentin Lambert, David S. Miller,
Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
Patrick McHardy, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
x86, netdev@vger.kernel.org, linux-kernel@vger.kernel.org
On Thu, 2014-12-04 at 15:00 -0800, Joe Perches wrote:
> Use the (1 << reg) & mask trick to reduce code size.
>
> x86-64 size difference -O2 without profiling for various
> gcc versions:
>
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
>
> compiled, untested by me, but per Alexei Starovoitov this passes
> the test_bpf suite
Really, the root cause of this is the 'inline' abuse in non fast paths
for non trivial functions.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
2014-12-04 23:14 ` Eric Dumazet
@ 2014-12-04 23:31 ` Alexei Starovoitov
2014-12-05 0:46 ` Eric Dumazet
2014-12-04 23:35 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
1 sibling, 1 reply; 13+ messages in thread
From: Alexei Starovoitov @ 2014-12-04 23:31 UTC (permalink / raw)
To: Eric Dumazet
Cc: Joe Perches, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
Ingo Molnar, H. Peter Anvin, x86@kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
On Thu, Dec 4, 2014 at 3:14 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Thu, 2014-12-04 at 15:00 -0800, Joe Perches wrote:
>> Use the (1 << reg) & mask trick to reduce code size.
>>
>> x86-64 size difference -O2 without profiling for various
>> gcc versions:
>
>>
>> Signed-off-by: Joe Perches <joe@perches.com>
>> ---
>>
>> compiled, untested by me, but per Alexei Starovoitov this passes
>> the test_bpf suite
>
> Really, the root cause of this is the 'inline' abuse in non fast paths
> for non trivial functions.
well, it is a trivial function even from compiler point of view.
Dropping inline keyword doesn't help. gcc still inlines them.
Changing all 3 functions to _noinline_ doesn't help either.
So I think this patch is actually quite helpful to reduce code size.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
2014-12-04 23:14 ` Eric Dumazet
2014-12-04 23:31 ` Alexei Starovoitov
@ 2014-12-04 23:35 ` Joe Perches
1 sibling, 0 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-04 23:35 UTC (permalink / raw)
To: Eric Dumazet
Cc: Alexei Starovoitov, Quentin Lambert, David S. Miller,
Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
Patrick McHardy, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
x86, netdev@vger.kernel.org, linux-kernel@vger.kernel.org
On Thu, 2014-12-04 at 15:14 -0800, Eric Dumazet wrote:
> On Thu, 2014-12-04 at 15:00 -0800, Joe Perches wrote:
> > Use the (1 << reg) & mask trick to reduce code size.
[]
> Really, the root cause of this is the 'inline' abuse in non fast paths
> for non trivial functions.
There is no object size change with is_ereg()
defined "static inline" or "static"
Curiously, if you mark it noinline, the size increases.
gcc 4.9.1, x86-64, -O2 no profiling support
$ size arch/x86/net/bpf_jit_comp.o.st*
text data bss dec hex filename
10679 4 0 10683 29bb arch/x86/net/bpf_jit_comp.o.static_inline
11535 4 0 11539 2d13 arch/x86/net/bpf_jit_comp.o.static_noinline
10679 4 0 10683 29bb arch/x86/net/bpf_jit_comp.o.static_without_inline
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
2014-12-04 23:31 ` Alexei Starovoitov
@ 2014-12-05 0:46 ` Eric Dumazet
2014-12-05 1:01 ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
0 siblings, 1 reply; 13+ messages in thread
From: Eric Dumazet @ 2014-12-05 0:46 UTC (permalink / raw)
To: Alexei Starovoitov
Cc: Joe Perches, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
Ingo Molnar, H. Peter Anvin, x86@kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
On Thu, 2014-12-04 at 15:31 -0800, Alexei Starovoitov wrote:
> well, it is a trivial function even from compiler point of view.
> Dropping inline keyword doesn't help. gcc still inlines them.
> Changing all 3 functions to _noinline_ doesn't help either.
> So I think this patch is actually quite helpful to reduce code size.
Well, again this might depend on CONFIG_CC_OPTIMIZE_FOR_SIZE
I guess people trying to get very small kernels are using this option.
My point was : If we care about code size, we should also remove these
inline keywords at the same time, to increase SNR of netdev/lkml lists.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
2014-12-05 0:46 ` Eric Dumazet
@ 2014-12-05 1:01 ` Joe Perches
2014-12-05 1:21 ` Alexei Starovoitov
2014-12-09 19:57 ` David Miller
0 siblings, 2 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-05 1:01 UTC (permalink / raw)
To: Eric Dumazet
Cc: Alexei Starovoitov, Quentin Lambert, David S. Miller,
Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
Patrick McHardy, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
x86@kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Let the compiler decide instead.
No change in object size x86-64 -O2 no profiling
Signed-off-by: Joe Perches <joe@perches.com>
Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
---
On Thu, 2014-12-04 at 16:46 -0800, Eric Dumazet wrote:
> On Thu, 2014-12-04 at 15:31 -0800, Alexei Starovoitov wrote:
>
> > well, it is a trivial function even from compiler point of view.
> > Dropping inline keyword doesn't help. gcc still inlines them.
> > Changing all 3 functions to _noinline_ doesn't help either.
> > So I think this patch is actually quite helpful to reduce code size.
>
> Well, again this might depend on CONFIG_CC_OPTIMIZE_FOR_SIZE
-Os has a different size delta, but it's still
smaller using this new function.
> I guess people trying to get very small kernels are using this option.
>
> My point was : If we care about code size, we should also remove these
> inline keywords at the same time, to increase SNR of netdev/lkml lists.
Because there's no object change here, inline removals
would probably be a good thing for this file.
arch/x86/net/bpf_jit_comp.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 09e2cea..626e013 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -24,7 +24,7 @@ extern u8 sk_load_byte_positive_offset[];
extern u8 sk_load_word_negative_offset[], sk_load_half_negative_offset[];
extern u8 sk_load_byte_negative_offset[];
-static inline u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len)
+static u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len)
{
if (len == 1)
*ptr = bytes;
@@ -52,12 +52,12 @@ static inline u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len)
#define EMIT4_off32(b1, b2, b3, b4, off) \
do {EMIT4(b1, b2, b3, b4); EMIT(off, 4); } while (0)
-static inline bool is_imm8(int value)
+static bool is_imm8(int value)
{
return value <= 127 && value >= -128;
}
-static inline bool is_simm32(s64 value)
+static bool is_simm32(s64 value)
{
return value == (s64) (s32) value;
}
@@ -94,7 +94,7 @@ static int bpf_size_to_x86_bytes(int bpf_size)
#define X86_JGE 0x7D
#define X86_JG 0x7F
-static inline void bpf_flush_icache(void *start, void *end)
+static void bpf_flush_icache(void *start, void *end)
{
mm_segment_t old_fs = get_fs();
@@ -133,7 +133,7 @@ static const int reg2hex[] = {
* which need extra byte of encoding.
* rax,rcx,...,rbp have simpler encoding
*/
-static inline bool is_ereg(u32 reg)
+static bool is_ereg(u32 reg)
{
return (1 << reg) & (BIT(BPF_REG_5) |
BIT(AUX_REG) |
@@ -143,14 +143,14 @@ static inline bool is_ereg(u32 reg)
}
/* add modifiers if 'reg' maps to x64 registers r8..r15 */
-static inline u8 add_1mod(u8 byte, u32 reg)
+static u8 add_1mod(u8 byte, u32 reg)
{
if (is_ereg(reg))
byte |= 1;
return byte;
}
-static inline u8 add_2mod(u8 byte, u32 r1, u32 r2)
+static u8 add_2mod(u8 byte, u32 r1, u32 r2)
{
if (is_ereg(r1))
byte |= 1;
@@ -160,13 +160,13 @@ static inline u8 add_2mod(u8 byte, u32 r1, u32 r2)
}
/* encode 'dst_reg' register into x64 opcode 'byte' */
-static inline u8 add_1reg(u8 byte, u32 dst_reg)
+static u8 add_1reg(u8 byte, u32 dst_reg)
{
return byte + reg2hex[dst_reg];
}
/* encode 'dst_reg' and 'src_reg' registers into x64 opcode 'byte' */
-static inline u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
+static u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
{
return byte + reg2hex[dst_reg] + (reg2hex[src_reg] << 3);
}
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
2014-12-05 1:01 ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
@ 2014-12-05 1:21 ` Alexei Starovoitov
2014-12-05 1:43 ` Joe Perches
2014-12-09 19:57 ` David Miller
1 sibling, 1 reply; 13+ messages in thread
From: Alexei Starovoitov @ 2014-12-05 1:21 UTC (permalink / raw)
To: Joe Perches
Cc: Eric Dumazet, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
Ingo Molnar, H. Peter Anvin, x86@kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
On Thu, Dec 4, 2014 at 5:01 PM, Joe Perches <joe@perches.com> wrote:
> Let the compiler decide instead.
>
> No change in object size x86-64 -O2 no profiling
>
> Signed-off-by: Joe Perches <joe@perches.com>
> Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
Acked-by: Alexei Starovoitov <ast@plumgrid.com>
Dave, this is on top of previous patch:
http://patchwork.ozlabs.org/patch/417960/
Joe, please mention dependencies next time.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
2014-12-05 1:21 ` Alexei Starovoitov
@ 2014-12-05 1:43 ` Joe Perches
0 siblings, 0 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-05 1:43 UTC (permalink / raw)
To: Alexei Starovoitov
Cc: Eric Dumazet, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
Ingo Molnar, H. Peter Anvin, x86@kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
On Thu, 2014-12-04 at 17:21 -0800, Alexei Starovoitov wrote:
> Joe, please mention dependencies next time.
No real need here.
It's in the same thread.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
2014-12-04 23:12 ` Alexei Starovoitov
2014-12-04 23:14 ` Eric Dumazet
@ 2014-12-09 19:57 ` David Miller
2 siblings, 0 replies; 13+ messages in thread
From: David Miller @ 2014-12-09 19:57 UTC (permalink / raw)
To: joe
Cc: alexei.starovoitov, lambert.quentin, kuznet, jmorris, yoshfuji,
kaber, tglx, mingo, hpa, x86, netdev, linux-kernel
From: Joe Perches <joe@perches.com>
Date: Thu, 04 Dec 2014 15:00:48 -0800
> Use the (1 << reg) & mask trick to reduce code size.
>
> x86-64 size difference -O2 without profiling for various
> gcc versions:
>
> $ size arch/x86/net/bpf_jit_comp.o*
> text data bss dec hex filename
> 9266 4 0 9270 2436 arch/x86/net/bpf_jit_comp.o.4.4.new
> 10042 4 0 10046 273e arch/x86/net/bpf_jit_comp.o.4.4.old
> 9109 4 0 9113 2399 arch/x86/net/bpf_jit_comp.o.4.6.new
> 9717 4 0 9721 25f9 arch/x86/net/bpf_jit_comp.o.4.6.old
> 8789 4 0 8793 2259 arch/x86/net/bpf_jit_comp.o.4.7.new
> 10245 4 0 10249 2809 arch/x86/net/bpf_jit_comp.o.4.7.old
> 9671 4 0 9675 25cb arch/x86/net/bpf_jit_comp.o.4.9.new
> 10679 4 0 10683 29bb arch/x86/net/bpf_jit_comp.o.4.9.old
>
> Signed-off-by: Joe Perches <joe@perches.com>
Applied.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
2014-12-05 1:01 ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
2014-12-05 1:21 ` Alexei Starovoitov
@ 2014-12-09 19:57 ` David Miller
1 sibling, 0 replies; 13+ messages in thread
From: David Miller @ 2014-12-09 19:57 UTC (permalink / raw)
To: joe
Cc: eric.dumazet, alexei.starovoitov, lambert.quentin, kuznet,
jmorris, yoshfuji, kaber, tglx, mingo, hpa, x86, netdev,
linux-kernel
From: Joe Perches <joe@perches.com>
Date: Thu, 04 Dec 2014 17:01:24 -0800
> Let the compiler decide instead.
>
> No change in object size x86-64 -O2 no profiling
>
> Signed-off-by: Joe Perches <joe@perches.com>
> Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
Applied.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-12-09 19:57 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-26 17:23 [PATCH] x86: bpf_jit_comp: simplify trivial boolean return Alexei Starovoitov
2014-11-26 18:02 ` Joe Perches
2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
2014-12-04 23:12 ` Alexei Starovoitov
2014-12-04 23:14 ` Eric Dumazet
2014-12-04 23:31 ` Alexei Starovoitov
2014-12-05 0:46 ` Eric Dumazet
2014-12-05 1:01 ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
2014-12-05 1:21 ` Alexei Starovoitov
2014-12-05 1:43 ` Joe Perches
2014-12-09 19:57 ` David Miller
2014-12-04 23:35 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
2014-12-09 19:57 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).