]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
x86: bpf_jit_comp: Reduce is_ereg() code size
authorJoe Perches <joe@perches.com>
Thu, 4 Dec 2014 23:00:48 +0000 (15:00 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2014 19:56:41 +0000 (14:56 -0500)
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>
Tested-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/x86/net/bpf_jit_comp.c

index 3f627345d51cbd1a3dd453bb37cc82d7f75d5bb0..09e2ceaf13cb4121a38a9dedc366aa0b42f25dc0 100644 (file)
@@ -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 */