* 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: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: 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
* 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: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
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).