On Tue, Oct 30, 2007 at 10:03:31AM -1000, Juli Mallett wrote: > * "Andrey A. Chernov" <[EMAIL PROTECTED]> [ 2007-10-27 ] > [ cvs commit: src/include _ctype.h ] > > ache 2007-10-27 22:32:28 UTC > > > > FreeBSD src repository > > > > Modified files: > > include _ctype.h > > Log: > > Micro-optimization of prev. commit, change > > (_c < 0 || _c >= 128) to (_c & ~0x7F) > > Isn't that a non-optimization in code and a minor pessimization of > readability? > Maybe I'm getting rusty, but those seem to result in nearly identical code on > i386 with a relatively modern GCC. Did you look at the compiler output for > this > optimization? Is there a specific expensive instruction you're trying to > avoid? > For such thoroughyl bit-aligned range checks, you shouldn't even get a branch > for the former case. Is there a platform other than i386 I should look at > where > the previous expression is more clearly pessimized? Or a different compiler > than GCC?
For ones who doubts there two tests compiled with -O2. As you may see the result is almost identical (andl vs cmpl): -------------------- a.c -------------------- main () { int c; return (c & ~0x7f) ? 0 : c * 2; } -------------------- a.s -------------------- .file "a.c" .text .p2align 4,,15 .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) movl %eax, %edx andl $-128, %edx addl %eax, %eax cmpl $1, %edx sbbl %edx, %edx pushl %ebp andl %edx, %eax movl %esp, %ebp pushl %ecx popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (GNU) 4.2.1 20070719 [FreeBSD]" -------------------- a1.c -------------------- main () { int c; return (c < 0 || c >= 128) ? 0 : c * 2; } -------------------- a1.s -------------------- .file "a1.c" .text .p2align 4,,15 .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) addl %eax, %eax cmpl $128, %eax sbbl %edx, %edx andl %edx, %eax pushl %ebp movl %esp, %ebp pushl %ecx popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (GNU) 4.2.1 20070719 [FreeBSD]" -- http://ache.pp.ru/ _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "[EMAIL PROTECTED]"