lkml.org 
[lkml]   [2005]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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/

    \
     
     \ /
      Last update: 2005-03-22 14:09    [W:0.026 / U:91.552 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site