[PATCH] libbb/last_char_is: rewrite for smaller and faster code

Jody Bruchon jody at jodybruchon.com
Fri Jul 3 14:57:34 UTC 2020


This is what I love about coding. We'll play with optimizing some of the simplest and least important things on a whim. May the winds of hackerdom ever be in your favor.

On July 3, 2020 3:34:23 AM EDT, Bernd Petrovitsch <bernd at petrovitsch.priv.at> wrote:
>On Fri, 2020-07-03 at 08:12 +0200, Tito wrote:
>[...]
>> Improved version:
>> 
>> char* last_char_is(const char *s, int c)  {
>> 	if (!s || !*s) return NULL;
>> 	while (*(s + 1))s++;
>> 	return (c == *s) ? (char *)s : NULL;
>> }
>
>I like that;-)
>
>> or if you like gotos:
>> 
>> char* FAST_FUNC last_char_is(const char *s, int c)
>> {
>> 	if (!s || !*s) goto OUT;
>> 	while (*(s + 1))s++;
>> 	if (c == *s) return (char *) s;
>> OUT:
>> 	return NULL;
>> }
>> 
>> bloatcheck is same for both:
>
>Both produce probably the sam asm output anyways ...
>
>> function                                             old     new  
>delta
>> last_char_is                                          53      42    
>-11
>>
>------------------------------------------------------------------------------
>> (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-11)             Total:
>-11 bytes
>>    text    data     bss     dec     hex filename
>>  980860   16891    1872  999623   f40c7 busybox_old
>>  980849   16891    1872  999612   f40bc busybox_unstripped
>
>MfG,
>	Bernd


More information about the busybox mailing list