|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] [PATCH] Cleanup use of strlen() to check for empty strin
On 10/5/05, Petersson, Mats <mats.petersson@xxxxxxx> wrote:
> I created a function:
>
> int foo(char *s)
> {
> if (strlen(s)) return 1; else return 0;
> }
>
> Compiled with gcc 4.0.0 as:
> gcc -O3 -s x.c (or gcc -O2 ...)
> Gives the following code:
>
> foo:
> xorl %eax, %eax
> cmpb $(0), (%rdi)
> sete %al
> ret
Cool, I am surprised gcc4 is able to fix this. gcc 3.3.4 which I am
using is not, even with -O3. How does gcc4 behave without -O3?
foo:
push %ebp
mov %esp,%ebp
mov 0x8(%ebp),%edx
pop %ebp
cmpb $0x0,(%edx)
setne %dl
movzbl %dl,%eax
ret
I guess I only reacted to this because I have seen worse examples
resulting from the "strlen is constant-time" assumption (people
iterating over a string in a while(strlen(s)) loop), and because I was
bored with trying to get block devices running with xenbus. :-)
Jacob
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|