[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <adaeiy5ahza.fsf@cisco.com>
Date: Tue, 10 Feb 2009 17:18:49 -0800
From: Roland Dreier <rdreier@...co.com>
To: David Miller <davem@...emloft.net>
Cc: swise@...ngridcomputing.com, randy.dunlap@...cle.com,
linux-next@...r.kernel.org, linux-kernel@...r.kernel.org,
general@...ts.openfabrics.org
Subject: Re: [ofa-general] [PATCH 2.6.30] RDMA/cxgb3: Remove modulo math.
> > Is this required? Strength reduction optimization should do this
> > automatically (and the code has been there for quite a while, so
> > obviously it isn't causing problems)
> GCC won't optimize that modulus the way you expect, try for yourself
> and look at the assembler if you don't believe me. :-)
Are you thinking of the case when there are signed integers involved and
so "% modulus" might produce a different result than "& (modulus - 1)"
(because the compiler can't know that things are never negative)?
Because in this case the compiler seems to do what I thought it would;
the relevant part of the i386 assembly for
wqe->recv.sgl[i].to = cpu_to_be64(((u32) wr->sg_list[i].addr) %
(1UL << (12 + page_size[i])));
is
movl %eax, 28(%edi,%ebx) # <variable>.length,
<variable>.len
movzbl 28(%esp,%esi), %ecx # page_size, tmp89
movl $1, %eax #, tmp92
addl $12, %ecx #, tmp90
sall %cl, %eax # tmp90, tmp92
movl (%esp), %ecx # wr,
decl %eax # tmp93
movl 12(%ecx), %edx # <variable>.sg_list, <variable>.sg_list
andl (%edx,%ebx), %eax # <variable>.addr, tmp93
ie the compiler computes the modulus, then does decl to compute
modulus-1 and then &s with it.
Or am I misunderstanding your point?
- R.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists