On Sun, Jan 23, 2005 at 03:03:32AM +0100, Felipe Alfaro Solana wrote: > On 22 Jan 2005, at 22:00, vlobanov wrote: > > >Hi, > > > >I was just reading over the patch, and had a quick question/comment > >upon > >the SWAP macro defined below. I think it's possible to do a tiny bit > >better (better, of course, being subjective), as follows: > > > >#define SWAP(a, b, size) \ > > do { \ > > register size_t __size = (size); \ > > register char * __a = (a), * __b = (b); \ > > do { \ > > *__a ^= *__b; \ > > *__b ^= *__a; \ > > *__a ^= *__b; \ > > __a++; \ > > __b++; \ > > } while ((--__size) > 0); \ > > } while (0) > > > >What do you think? :) > > AFAIK, XOR is quite expensive on IA32 when compared to simple MOV > operatings. Also, since the original patch uses 3 MOVs to perform the > swapping, and your version uses 3 XOR operations, I don't see any > gains. > > Am I missing something?
No temporary variable needed in the xor version. mov and xor are roughly the same speed, but xor modifies flags. -- Mathematics is the supreme nostalgia of our time. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/