strcmp is too heavy for its everyday usage...
Richard Henderson
rth@twiddle.net
Fri Jan 9 08:12:00 GMT 2004
On Fri, Jan 09, 2004 at 10:11:45AM +0500, Denis Zaitsev wrote:
> (r= a[0] - b[0]) &&
> (r= a[1] - b[1]) &&
> (r= a[2] - b[2]) &&
> (r= a[3] - b[3]);
> return r;
> }
>
> It's a typical inline code for compare 4-byte of mem. When it is
> used, say, in such a context
>
> s(a,b) ? A() : B();
>
> GCC discards the value of r perfectly, leaving the only code needed
> for compare bytes for eq/neq. But GCC doesn't merge the 4 byte
> comparing into single word comparing. And, as I understand, it will
> never do that, as it's not asked to. Or this kind of optimization is
> assumed ok for compiler, but just still unimplemented?
Certainly it's ok if it converts.
However, on most targets you'd have to know that a and b are aligned.
Worse, even for targets like x86 that support unaligned loads you have
to know for certain that neither a[3] nor b[3] could possibly segv
when a[0] and b[0] won't. That condition is trivial when a and b are
aligned, but otherwise...
Adding compensation code to deal with the extra conditions that must
be satisfied will probably negate whatever you're hoping to gain here.
r~
More information about the Libc-alpha
mailing list