On Mon, Apr 30, 2012 at 9:38 AM, Thomas Rast <trast@xxxxxxxxxxxxxxx> wrote: > Hi Brian > > I can reproduce this. The problem is that __WORDSIZE is not defined, > either because it's Darwin or because the GCC is too old. It winds up > compiling the 32-bit case, which of course doesn't work for 64-bit > builds. > > Perhaps we can rewrite it in terms of sizeof(long) like this? > > diff --git i/xdiff/xutils.c w/xdiff/xutils.c > index e05b5c9..1b3b471 100644 > --- i/xdiff/xutils.c > +++ w/xdiff/xutils.c > @@ -290,39 +290,33 @@ static inline unsigned long has_zero(unsigned long a) > return ((a - ONEBYTES) & ~a) & HIGHBITS; > } > > -#if __WORDSIZE == 64 > - > -/* > - * Jan Achrenius on G+: microoptimized version of > - * the simpler "(mask & ONEBYTES) * ONEBYTES >> 56" > - * that works for the bytemasks without having to > - * mask them first. > - */ > static inline long count_masked_bytes(unsigned long mask) > { > - return mask * 0x0001020304050608 >> 56; > -} > - > -#else /* 32-bit case */ > - > -/* Modified Carl Chatfield G+ version for 32-bit */ > -static inline long count_masked_bytes(long mask) > -{ > - /* > - * (a) gives us > - * -1 (0, ff), 0 (ffff) or 1 (ffffff) > - * (b) gives us > - * 0 for 0, 1 for (ff ffff ffffff) > - * (a+b+1) gives us > - * correct 0-3 bytemask count result > - */ > - long a = (mask - 256) >> 23; > - long b = mask & 1; > - return a + b + 1; > + if (sizeof(long) == 8) { Isn't the whole point of this code to be fast? This should be a compile-time check... conditionals hurt perf. -- David -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html