For the optimization cases Graham was proposing, how does this perform
on your test setup? Looking for both absmatches, case mismatches and
proper vs lowercase comparisons...
int ap_casecmpstr_2(const char *s1, const char *s2)
{
size_t i;
const unsigned char *ps1 = (const unsigned char *) s1;
const unsigned char *ps2 = (const unsigned char *) s2;
for (i = 0; ; ++i) {
const int c1 = ucharmap[ps1[i]];
const int c2 = ucharmap[ps2[i]];
/* Above lookups are optimized away if first test below succeeds */
if ((ps1[i] != ps2[i]) && (c1 != c2)) {
return c1 - c2;
}
if (!c1) {
break;
}
}
return (0);
}
On Tue, Nov 24, 2015 at 12:43 PM, Yann Ylavic <[email protected]> wrote:
> On Tue, Nov 24, 2015 at 7:39 PM, Mikhail T. <[email protected]>
> wrote:
> > On 24.11.2015 13:04, Yann Ylavic wrote:
> >
> > int ap_casecmpstr_2(const char *s1, const char *s2)
> > {
> > size_t i;
> > const unsigned char *ps1 = (const unsigned char *) s1;
> > const unsigned char *ps2 = (const unsigned char *) s2;
> >
> > for (i = 0; ; ++i) {
> > const int c1 = ps1[i];
> > const int c2 = ps2[i];
> >
> > if (c1 != c2) {
> > return c1 - c2;
> > }
> > if (!c1) {
> > break;
> > }
> > }
> > return (0);
> > }
> >
> > Sorry, but would not the above declare "A" and "a" to be different?
>
> Yeah, forgot the translation, I went too fast :)
>