> > 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-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html