* [PATCH] net: code cleanups
@ 2010-09-30 2:24 Changli Gao
2010-09-30 2:49 ` Joe Perches
2010-09-30 5:16 ` Eric Dumazet
0 siblings, 2 replies; 7+ messages in thread
From: Changli Gao @ 2010-09-30 2:24 UTC (permalink / raw)
To: David S. Miller
Cc: Alexey Kuznetsov, Pekka Savola (ipv6), James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, netdev, Changli Gao
Compare operations are more readable, and compilers generate the same code
for the both.
Use the macros fl4_* to shrink the length of the lines.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
---
net/ipv4/af_inet.c | 7 +++----
net/ipv4/route.c | 27 ++++++++++++---------------
2 files changed, 15 insertions(+), 19 deletions(-)
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index f581f77..ef26640 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -1338,10 +1338,9 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
iph2 = ip_hdr(p);
- if ((iph->protocol ^ iph2->protocol) |
- (iph->tos ^ iph2->tos) |
- ((__force u32)iph->saddr ^ (__force u32)iph2->saddr) |
- ((__force u32)iph->daddr ^ (__force u32)iph2->daddr)) {
+ if (iph->protocol != iph2->protocol || iph->tos != iph2->tos ||
+ (__force u32)iph->saddr != (__force u32)iph2->saddr ||
+ (__force u32)iph->daddr != (__force u32)iph2->daddr) {
NAPI_GRO_CB(p)->same_flow = 0;
continue;
}
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 98beda4..6b00fde 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -683,19 +683,18 @@ static inline bool rt_caching(const struct net *net)
static inline bool compare_hash_inputs(const struct flowi *fl1,
const struct flowi *fl2)
{
- return ((((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
- ((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
- (fl1->iif ^ fl2->iif)) == 0);
+ return (__force u32)fl1->fl4_dst == (__force u32)fl2->fl4_dst &&
+ (__force u32)fl1->fl4_src == (__force u32)fl2->fl4_src &&
+ fl1->iif == fl2->iif;
}
static inline int compare_keys(struct flowi *fl1, struct flowi *fl2)
{
- return (((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
- ((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
- (fl1->mark ^ fl2->mark) |
- (*(u16 *)&fl1->nl_u.ip4_u.tos ^ *(u16 *)&fl2->nl_u.ip4_u.tos) |
- (fl1->oif ^ fl2->oif) |
- (fl1->iif ^ fl2->iif)) == 0;
+ return (__force u32)fl1->fl4_dst == (__force u32)fl2->fl4_dst &&
+ (__force u32)fl1->fl4_src == (__force u32)fl2->fl4_src &&
+ fl1->mark == fl2->mark &&
+ *(u16 *)&fl1->fl4_tos == *(u16 *)&fl2->fl4_tos &&
+ fl1->oif == fl2->oif && fl1->iif == fl2->iif;
}
static inline int compare_netns(struct rtable *rt1, struct rtable *rt2)
@@ -2286,12 +2285,10 @@ int ip_route_input_common(struct sk_buff *skb, __be32 daddr, __be32 saddr,
for (rth = rcu_dereference(rt_hash_table[hash].chain); rth;
rth = rcu_dereference(rth->dst.rt_next)) {
- if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
- ((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
- (rth->fl.iif ^ iif) |
- rth->fl.oif |
- (rth->fl.fl4_tos ^ tos)) == 0 &&
- rth->fl.mark == skb->mark &&
+ if ((__force u32)rth->fl.fl4_dst == (__force u32)daddr &&
+ (__force u32)rth->fl.fl4_src == (__force u32)saddr &&
+ rth->fl.iif == iif && rth->fl.oif == 0 &&
+ rth->fl.fl4_tos == tos && rth->fl.mark == skb->mark &&
net_eq(dev_net(rth->dst.dev), net) &&
!rt_is_expired(rth)) {
if (noref) {
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] net: code cleanups
2010-09-30 2:24 [PATCH] net: code cleanups Changli Gao
@ 2010-09-30 2:49 ` Joe Perches
2010-09-30 3:07 ` Changli Gao
2010-09-30 5:16 ` Eric Dumazet
1 sibling, 1 reply; 7+ messages in thread
From: Joe Perches @ 2010-09-30 2:49 UTC (permalink / raw)
To: Changli Gao
Cc: David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, netdev
On Thu, 2010-09-30 at 10:24 +0800, Changli Gao wrote:
> Compare operations are more readable, and compilers generate the same code
> for the both.
As far as I know, not all supported versions of gcc
generate the same code.
Also, you could probably now remove the (__force u32) casts.
> Use the macros fl4_* to shrink the length of the lines.
>
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
> ---
> net/ipv4/af_inet.c | 7 +++----
> net/ipv4/route.c | 27 ++++++++++++---------------
> 2 files changed, 15 insertions(+), 19 deletions(-)
> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
> index f581f77..ef26640 100644
> --- a/net/ipv4/af_inet.c
> +++ b/net/ipv4/af_inet.c
> @@ -1338,10 +1338,9 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
>
> iph2 = ip_hdr(p);
>
> - if ((iph->protocol ^ iph2->protocol) |
> - (iph->tos ^ iph2->tos) |
> - ((__force u32)iph->saddr ^ (__force u32)iph2->saddr) |
> - ((__force u32)iph->daddr ^ (__force u32)iph2->daddr)) {
> + if (iph->protocol != iph2->protocol || iph->tos != iph2->tos ||
> + (__force u32)iph->saddr != (__force u32)iph2->saddr ||
> + (__force u32)iph->daddr != (__force u32)iph2->daddr) {
> NAPI_GRO_CB(p)->same_flow = 0;
> continue;
> }
> diff --git a/net/ipv4/route.c b/net/ipv4/route.c
> index 98beda4..6b00fde 100644
> --- a/net/ipv4/route.c
> +++ b/net/ipv4/route.c
> @@ -683,19 +683,18 @@ static inline bool rt_caching(const struct net *net)
> static inline bool compare_hash_inputs(const struct flowi *fl1,
> const struct flowi *fl2)
> {
> - return ((((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
> - ((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
> - (fl1->iif ^ fl2->iif)) == 0);
> + return (__force u32)fl1->fl4_dst == (__force u32)fl2->fl4_dst &&
> + (__force u32)fl1->fl4_src == (__force u32)fl2->fl4_src &&
> + fl1->iif == fl2->iif;
> }
>
> static inline int compare_keys(struct flowi *fl1, struct flowi *fl2)
> {
> - return (((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
> - ((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
> - (fl1->mark ^ fl2->mark) |
> - (*(u16 *)&fl1->nl_u.ip4_u.tos ^ *(u16 *)&fl2->nl_u.ip4_u.tos) |
> - (fl1->oif ^ fl2->oif) |
> - (fl1->iif ^ fl2->iif)) == 0;
> + return (__force u32)fl1->fl4_dst == (__force u32)fl2->fl4_dst &&
> + (__force u32)fl1->fl4_src == (__force u32)fl2->fl4_src &&
> + fl1->mark == fl2->mark &&
> + *(u16 *)&fl1->fl4_tos == *(u16 *)&fl2->fl4_tos &&
> + fl1->oif == fl2->oif && fl1->iif == fl2->iif;
> }
>
> static inline int compare_netns(struct rtable *rt1, struct rtable *rt2)
> @@ -2286,12 +2285,10 @@ int ip_route_input_common(struct sk_buff *skb, __be32 daddr, __be32 saddr,
>
> for (rth = rcu_dereference(rt_hash_table[hash].chain); rth;
> rth = rcu_dereference(rth->dst.rt_next)) {
> - if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
> - ((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
> - (rth->fl.iif ^ iif) |
> - rth->fl.oif |
> - (rth->fl.fl4_tos ^ tos)) == 0 &&
> - rth->fl.mark == skb->mark &&
> + if ((__force u32)rth->fl.fl4_dst == (__force u32)daddr &&
> + (__force u32)rth->fl.fl4_src == (__force u32)saddr &&
> + rth->fl.iif == iif && rth->fl.oif == 0 &&
> + rth->fl.fl4_tos == tos && rth->fl.mark == skb->mark &&
> net_eq(dev_net(rth->dst.dev), net) &&
> !rt_is_expired(rth)) {
> if (noref) {
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] net: code cleanups
2010-09-30 2:49 ` Joe Perches
@ 2010-09-30 3:07 ` Changli Gao
2010-09-30 3:13 ` Joe Perches
0 siblings, 1 reply; 7+ messages in thread
From: Changli Gao @ 2010-09-30 3:07 UTC (permalink / raw)
To: Joe Perches, Eric Dumazet
Cc: David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, netdev
On Thu, Sep 30, 2010 at 10:49 AM, Joe Perches <joe@perches.com> wrote:
> On Thu, 2010-09-30 at 10:24 +0800, Changli Gao wrote:
>> Compare operations are more readable, and compilers generate the same code
>> for the both.
>
> As far as I know, not all supported versions of gcc
> generate the same code.
Is the former better for the compilers?
>
> Also, you could probably now remove the (__force u32) casts.
>
Maybe Eric doesn't think so.
--
Regards,
Changli Gao(xiaosuo@gmail.com)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] net: code cleanups
2010-09-30 3:07 ` Changli Gao
@ 2010-09-30 3:13 ` Joe Perches
0 siblings, 0 replies; 7+ messages in thread
From: Joe Perches @ 2010-09-30 3:13 UTC (permalink / raw)
To: Changli Gao
Cc: Eric Dumazet, David S. Miller, Alexey Kuznetsov,
Pekka Savola (ipv6), James Morris, Hideaki YOSHIFUJI,
Patrick McHardy, netdev
On Thu, 2010-09-30 at 11:07 +0800, Changli Gao wrote:
> On Thu, Sep 30, 2010 at 10:49 AM, Joe Perches <joe@perches.com> wrote:
> > On Thu, 2010-09-30 at 10:24 +0800, Changli Gao wrote:
> >> Compare operations are more readable, and compilers generate the same code
> >> for the both.
> > As far as I know, not all supported versions of gcc
> > generate the same code.
> Is the former better for the compilers?
Yes. I don't know how much it matters though.
> > Also, you could probably now remove the (__force u32) casts.
> Maybe Eric doesn't think so.
Comparisons of equal types don't need (__force u32) casts.
They needed to be cast to u32 for the bitwise or's to avoid
compiler warnings.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] net: code cleanups
2010-09-30 2:24 [PATCH] net: code cleanups Changli Gao
2010-09-30 2:49 ` Joe Perches
@ 2010-09-30 5:16 ` Eric Dumazet
2010-09-30 6:09 ` Changli Gao
1 sibling, 1 reply; 7+ messages in thread
From: Eric Dumazet @ 2010-09-30 5:16 UTC (permalink / raw)
To: Changli Gao
Cc: David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, netdev
Le jeudi 30 septembre 2010 à 10:24 +0800, Changli Gao a écrit :
> Compare operations are more readable, and compilers generate the same code
> for the both.
>
You have a buggy compiler then.
I know this code is ugly, but please keep it as is, dont add conditional
branches on hot paths.
Thanks
> Use the macros fl4_* to shrink the length of the lines.
>
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
> ---
> net/ipv4/af_inet.c | 7 +++----
> net/ipv4/route.c | 27 ++++++++++++---------------
> 2 files changed, 15 insertions(+), 19 deletions(-)
> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
> index f581f77..ef26640 100644
> --- a/net/ipv4/af_inet.c
> +++ b/net/ipv4/af_inet.c
> @@ -1338,10 +1338,9 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
>
> iph2 = ip_hdr(p);
>
> - if ((iph->protocol ^ iph2->protocol) |
> - (iph->tos ^ iph2->tos) |
> - ((__force u32)iph->saddr ^ (__force u32)iph2->saddr) |
> - ((__force u32)iph->daddr ^ (__force u32)iph2->daddr)) {
> + if (iph->protocol != iph2->protocol || iph->tos != iph2->tos ||
> + (__force u32)iph->saddr != (__force u32)iph2->saddr ||
> + (__force u32)iph->daddr != (__force u32)iph2->daddr) {
> NAPI_GRO_CB(p)->same_flow = 0;
> continue;
> }
> diff --git a/net/ipv4/route.c b/net/ipv4/route.c
> index 98beda4..6b00fde 100644
> --- a/net/ipv4/route.c
> +++ b/net/ipv4/route.c
> @@ -683,19 +683,18 @@ static inline bool rt_caching(const struct net *net)
> static inline bool compare_hash_inputs(const struct flowi *fl1,
> const struct flowi *fl2)
> {
> - return ((((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
> - ((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
> - (fl1->iif ^ fl2->iif)) == 0);
> + return (__force u32)fl1->fl4_dst == (__force u32)fl2->fl4_dst &&
> + (__force u32)fl1->fl4_src == (__force u32)fl2->fl4_src &&
> + fl1->iif == fl2->iif;
> }
>
> static inline int compare_keys(struct flowi *fl1, struct flowi *fl2)
> {
> - return (((__force u32)fl1->nl_u.ip4_u.daddr ^ (__force u32)fl2->nl_u.ip4_u.daddr) |
> - ((__force u32)fl1->nl_u.ip4_u.saddr ^ (__force u32)fl2->nl_u.ip4_u.saddr) |
> - (fl1->mark ^ fl2->mark) |
> - (*(u16 *)&fl1->nl_u.ip4_u.tos ^ *(u16 *)&fl2->nl_u.ip4_u.tos) |
> - (fl1->oif ^ fl2->oif) |
> - (fl1->iif ^ fl2->iif)) == 0;
> + return (__force u32)fl1->fl4_dst == (__force u32)fl2->fl4_dst &&
> + (__force u32)fl1->fl4_src == (__force u32)fl2->fl4_src &&
> + fl1->mark == fl2->mark &&
> + *(u16 *)&fl1->fl4_tos == *(u16 *)&fl2->fl4_tos &&
> + fl1->oif == fl2->oif && fl1->iif == fl2->iif;
> }
>
> static inline int compare_netns(struct rtable *rt1, struct rtable *rt2)
> @@ -2286,12 +2285,10 @@ int ip_route_input_common(struct sk_buff *skb, __be32 daddr, __be32 saddr,
>
> for (rth = rcu_dereference(rt_hash_table[hash].chain); rth;
> rth = rcu_dereference(rth->dst.rt_next)) {
> - if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
> - ((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
> - (rth->fl.iif ^ iif) |
> - rth->fl.oif |
> - (rth->fl.fl4_tos ^ tos)) == 0 &&
> - rth->fl.mark == skb->mark &&
> + if ((__force u32)rth->fl.fl4_dst == (__force u32)daddr &&
> + (__force u32)rth->fl.fl4_src == (__force u32)saddr &&
> + rth->fl.iif == iif && rth->fl.oif == 0 &&
> + rth->fl.fl4_tos == tos && rth->fl.mark == skb->mark &&
> net_eq(dev_net(rth->dst.dev), net) &&
> !rt_is_expired(rth)) {
> if (noref) {
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] net: code cleanups
2010-09-30 5:16 ` Eric Dumazet
@ 2010-09-30 6:09 ` Changli Gao
2010-09-30 6:31 ` Eric Dumazet
0 siblings, 1 reply; 7+ messages in thread
From: Changli Gao @ 2010-09-30 6:09 UTC (permalink / raw)
To: Eric Dumazet
Cc: David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, netdev
On Thu, Sep 30, 2010 at 1:16 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Le jeudi 30 septembre 2010 à 10:24 +0800, Changli Gao a écrit :
>> Compare operations are more readable, and compilers generate the same code
>> for the both.
>>
>
> You have a buggy compiler then.
gcc version 4.4.3 (Gentoo 4.4.3-r2 p1.2)
rth = rcu_dereference(rth->dst.rt_next)) {
if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
(rth->fl.iif ^ iif) |
2f12: 44 3b 80 dc 00 00 00 cmp 0xdc(%rax),%r8d
2f19: 0f 85 a2 00 00 00 jne 2fc1 <ip_route_input_common+0x145
>
rth->fl.oif |
2f1f: 83 b8 d8 00 00 00 00 cmpl $0x0,0xd8(%rax)
2f26: 0f 85 95 00 00 00 jne 2fc1 <ip_route_input_common+0x145
>
tos &= IPTOS_RT_MASK;
hash = rt_hash(daddr, saddr, iif, rt_genid(net));
for (rth = rcu_dereference(rt_hash_table[hash].chain); rth;
rth = rcu_dereference(rth->dst.rt_next)) {
if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
2f2c: 44 3b b8 e4 00 00 00 cmp 0xe4(%rax),%r15d
2f33: 0f 85 88 00 00 00 jne 2fc1
<ip_route_input_common+0x145>
((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
2f39: 44 3b b0 e8 00 00 00 cmp 0xe8(%rax),%r14d
2f40: 75 7f jne 2fc1
<ip_route_input_common+0x145>
>
> I know this code is ugly, but please keep it as is, dont add conditional
> branches on hot paths.
>
If the compiler doesn't generate conditional branches, we have to
touch every necessary field of all the cache entries in one hash
bucket. Is it better than condition branch? I think the compiler
developers know it better.
And the compiler reorders the conditional branches, is it expected?
--
Regards,
Changli Gao(xiaosuo@gmail.com)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] net: code cleanups
2010-09-30 6:09 ` Changli Gao
@ 2010-09-30 6:31 ` Eric Dumazet
0 siblings, 0 replies; 7+ messages in thread
From: Eric Dumazet @ 2010-09-30 6:31 UTC (permalink / raw)
To: Changli Gao
Cc: David S. Miller, Alexey Kuznetsov, Pekka Savola (ipv6),
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, netdev
Le jeudi 30 septembre 2010 à 14:09 +0800, Changli Gao a écrit :
> On Thu, Sep 30, 2010 at 1:16 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> > Le jeudi 30 septembre 2010 à 10:24 +0800, Changli Gao a écrit :
> >> Compare operations are more readable, and compilers generate the same code
> >> for the both.
> >>
> >
> > You have a buggy compiler then.
>
> gcc version 4.4.3 (Gentoo 4.4.3-r2 p1.2)
>
> rth = rcu_dereference(rth->dst.rt_next)) {
> if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
> ((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
> (rth->fl.iif ^ iif) |
> 2f12: 44 3b 80 dc 00 00 00 cmp 0xdc(%rax),%r8d
> 2f19: 0f 85 a2 00 00 00 jne 2fc1 <ip_route_input_common+0x145
> >
> rth->fl.oif |
> 2f1f: 83 b8 d8 00 00 00 00 cmpl $0x0,0xd8(%rax)
> 2f26: 0f 85 95 00 00 00 jne 2fc1 <ip_route_input_common+0x145
> >
> tos &= IPTOS_RT_MASK;
> hash = rt_hash(daddr, saddr, iif, rt_genid(net));
>
> for (rth = rcu_dereference(rt_hash_table[hash].chain); rth;
> rth = rcu_dereference(rth->dst.rt_next)) {
> if ((((__force u32)rth->fl.fl4_dst ^ (__force u32)daddr) |
> 2f2c: 44 3b b8 e4 00 00 00 cmp 0xe4(%rax),%r15d
> 2f33: 0f 85 88 00 00 00 jne 2fc1
> <ip_route_input_common+0x145>
> ((__force u32)rth->fl.fl4_src ^ (__force u32)saddr) |
> 2f39: 44 3b b0 e8 00 00 00 cmp 0xe8(%rax),%r14d
> 2f40: 75 7f jne 2fc1
> <ip_route_input_common+0x145>
>
>
> >
> > I know this code is ugly, but please keep it as is, dont add conditional
> > branches on hot paths.
> >
>
> If the compiler doesn't generate conditional branches, we have to
> touch every necessary field of all the cache entries in one hash
> bucket. Is it better than condition branch? I think the compiler
> developers know it better.
Last famous words.
Are you aware of cache lines (64 bytes at least on typical cpus), and
that all fields are already in CPU L1 cache ? I (and others) worked hard
in the past.
>
> And the compiler reorders the conditional branches, is it expected?
>
Your compiler added conditional branches on a code not wanting them,
only because on _your_ cpu, these conditional branches might be cheap.
Now, try to compile for an i686 target and see the difference.
If there was no difference, your compiler would be _buggy_, because not
generating optimal assembly.
Here I get :
c141dda9: 8b 55 e8 mov -0x18(%ebp),%edx
c141ddac: 8b 81 9c 00 00 00 mov 0x9c(%ecx),%eax
c141ddb2: 33 91 a0 00 00 00 xor 0xa0(%ecx),%edx
c141ddb8: 31 f0 xor %esi,%eax
c141ddba: 09 d0 or %edx,%eax
c141ddbc: 8b 55 e0 mov -0x20(%ebp),%edx
c141ddbf: 33 91 94 00 00 00 xor 0x94(%ecx),%edx
c141ddc5: 09 d0 or %edx,%eax
c141ddc7: 0f b6 55 e7 movzbl -0x19(%ebp),%edx
c141ddcb: 0b 81 90 00 00 00 or 0x90(%ecx),%eax
c141ddd1: 32 91 a4 00 00 00 xor 0xa4(%ecx),%dl
c141ddd7: 0f b6 d2 movzbl %dl,%edx
c141ddda: 09 d0 or %edx,%eax
c141dddc: 0f 85 9d 00 00 00 jne c141de7f <ip_route_input_common+0x1b4>
As you can see, only one conditional branch.
Your patch is not welcomed, thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-09-30 6:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-30 2:24 [PATCH] net: code cleanups Changli Gao
2010-09-30 2:49 ` Joe Perches
2010-09-30 3:07 ` Changli Gao
2010-09-30 3:13 ` Joe Perches
2010-09-30 5:16 ` Eric Dumazet
2010-09-30 6:09 ` Changli Gao
2010-09-30 6:31 ` Eric Dumazet
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).