This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: strcmp is too heavy for its everyday usage...


Richard Henderson <rth@twiddle.net> writes:

> 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;
>> }
>>
>> 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...

 Fair enough, but...

extern int
s(const unsigned char a[static 4], const unsigned char b[static 4])
{
    int r;
    (r= a[0] - b[0]) &&
    (r= a[1] - b[1]) &&
    (r= a[2] - b[2]) &&
    (r= a[3] - b[3]);
    return r;
}

...produces the same code.

-- 
# James Antill -- james@and.org
:0:
* ^From: .*james@and\.org
/dev/null


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]