This is the mail archive of the libc-alpha@sourceware.org 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: [GLIBC][PATCH] Remove strcmp inlines


LGTM.

On 12/12/2016 10:11, Wilco Dijkstra wrote:
> Remove the str(n)cmp inlines from string/bits/string2.h.  The strncmp
> optimization seems unlikely to ever be useful, but if it occurs in
> real code it should be added to GCC.  Expanding strcmp of small strings
> does appear useful (benchmarking shows it is 2-3x faster), so this would
> be useful to implement in GCC.
> 
> ChangeLog:
> 2015-12-12  Wilco Dijkstra  <wdijkstr@arm.com>
> 
> 	* string/bits/string2.h (strcmp): Remove define.
> 	(__strcmp_cg): Likewise.
> 	(strncmp): Likewise.
> --
> 
> diff --git a/string/bits/string2.h b/string/bits/string2.h
> index b0be5f6a49024a0bedfc37e9ec2c0356e0e4fa09..5e0339223697256fff7eba4cc32d2eb618f07713 100644
> --- a/string/bits/string2.h
> +++ b/string/bits/string2.h
> @@ -60,64 +60,6 @@
>  # define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
>  #endif
>  
> -/* Compare characters of S1 and S2.  */
> -#ifndef strcmp
> -# define strcmp(s1, s2) \
> -  __extension__								      \
> -  ({ size_t __s1_len, __s2_len;						      \
> -     (__builtin_constant_p (s1) && __builtin_constant_p (s2)		      \
> -      && (__s1_len = strlen (s1), __s2_len = strlen (s2),		      \
> -	  (!__string2_1bptr_p (s1) || __s1_len >= 4)			      \
> -	  && (!__string2_1bptr_p (s2) || __s2_len >= 4))		      \
> -      ? __builtin_strcmp (s1, s2)					      \
> -      : (__builtin_constant_p (s1) && __string2_1bptr_p (s1)		      \
> -	 && (__s1_len = strlen (s1), __s1_len < 4)			      \
> -	 ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2)		      \
> -	    ? __builtin_strcmp (s1, s2)					      \
> -	    : __strcmp_cg (s1, s2, __s1_len))				      \
> -	 : (__builtin_constant_p (s2) && __string2_1bptr_p (s2)		      \
> -	    && (__s2_len = strlen (s2), __s2_len < 4)			      \
> -	    ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1)	      \
> -	       ? __builtin_strcmp (s1, s2)				      \
> -	       : -__strcmp_cg (s2, s1, __s2_len))			      \
> -            : __builtin_strcmp (s1, s2)))); })
> -
> -# define __strcmp_cg(s1, s2, l1) \
> -  (__extension__ ({ const unsigned char *__s2 =				      \
> -		      (const unsigned char *) (const char *) (s2);	      \
> -		    int __result =					      \
> -		      (((const unsigned char *) (const char *) (s1))[0]	      \
> -		       - __s2[0]);					      \
> -		    if (l1 > 0 && __result == 0)			      \
> -		      {							      \
> -			__result = (((const unsigned char *)		      \
> -				     (const char *) (s1))[1] - __s2[1]);      \
> -			if (l1 > 1 && __result == 0)			      \
> -			  {						      \
> -			    __result = (((const unsigned char *)	      \
> -					 (const char *) (s1))[2] - __s2[2]);  \
> -			    if (l1 > 2 && __result == 0)		      \
> -			      __result = (((const unsigned char *)	      \
> -					  (const char *)  (s1))[3]	      \
> -					  - __s2[3]);			      \
> -			  }						      \
> -		      }							      \
> -		    __result; }))
> -#endif
> -
> -
> -/* Compare N characters of S1 and S2.  */
> -#ifndef strncmp
> -# define strncmp(s1, s2, n)						      \
> -  (__extension__ (__builtin_constant_p (n)				      \
> -		  && ((__builtin_constant_p (s1)			      \
> -		       && strlen (s1) < ((size_t) (n)))			      \
> -		      || (__builtin_constant_p (s2)			      \
> -			  && strlen (s2) < ((size_t) (n))))		      \
> -		  ? strcmp (s1, s2) : strncmp (s1, s2, n)))
> -#endif
> -
> -
>  #ifndef _FORCE_INLINES
>  # undef __STRING_INLINE
>  #endif
> 
> 
> 
> 


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