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 <ylavic....@gmail.com> wrote:

> On Tue, Nov 24, 2015 at 7:39 PM, Mikhail T. <mi+t...@aldan.algebra.com>
> 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 :)
>

Reply via email to