This is the mail archive of the newlib@sourceware.org mailing list for the newlib 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: [PATCH] Add strchrnul


On Mar 28 05:12, Yaakov (Cygwin/X) wrote:
> On Mon, 2011-03-28 at 10:10 +0200, Corinna Vinschen wrote:
> > Isn't this implementation a bit simple?  It's as fast as the underlying
> > strchr function in case of a hit, but it suffers quite a performance hit
> > in case of a miss, because the string has to be scanned twice.
> > 
> > So I'm wondering, shouldn't we better adapt the strchr implementation
> > and just return a pointer to s where strchr returns NULL?
> 
> There's always a tradeoff, simplicity vs. code duplication.  I presume
> you mean something like the attached.  I'm just not sure about the !
> PREFER_SIZE_OVER_SPEED block of the code.

It looks ok to me.  On second thought, I'm opting for your original
solution for two reaason.

- We have explicit target-specific strchr and strlen implementations
  in newlib.

- We have implicit target-specific strchr and strlen implementations
  in the form of GCC builtin functions.

Both types of target-specific optimized code would never be used if we
implement strchrnul always as a generically optimized C function.

So I applied your first implementation.  Maybe, in the long run, we
should provide target-specific optimized strchnul implementations and
implement strchr generically like this?

  strchr(s, c)
  {
    char *se = strchrnul();
    return *se || !c ? se : NULL;
  }


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat


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