Messages in this thread | | | Date | Wed, 17 Feb 2010 14:29:34 -0800 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH] x86 rwsem optimization extreme |
| |
On 02/17/2010 02:10 PM, Linus Torvalds wrote: > > > On Wed, 17 Feb 2010, Zachary Amsden wrote: >> >> The x86 instruction set provides the ability to add an additional >> bit into addition or subtraction by using the carry flag. >> It also provides instructions to directly set or clear the >> carry flag. By forcibly setting the carry flag, we can then >> represent one particular 64-bit constant, namely >> >> 0xffffffff + 1 = 0x100000000 >> >> using only 32-bit values. In particular we can optimize the rwsem >> write lock release by noting it is of exactly this form. > > Don't do this. > > Just shift the constants down by two, and suddenly you don't need any > clever tricks, because all the constants fit in 32 bits anyway, > regardless of sign issues. >
Why bother at all? I thought it mattered when I saw __downgrade_write() as an inline, but in fact it is only ever used inside the downgrade_write() out-of-line function, so we're talking about saving *five bytes* across the whole kernel in the best case. I vote for leaving it the way it is, and get the very slight extra readability. There is no point in moving bits around, either.
-hpa
| |