Messages in this thread | | | Date | Sat, 22 Jan 2005 20:22:41 -0800 | From | Matt Mackall <> | Subject | Re: [patch 1/13] Qsort |
| |
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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |