------- Comment #6 from vda dot linux at googlemail dot com 2006-07-30 13:38 ------- Patched versus stock gcc-4.1.1 on this code
unsigned v; void f9188_mul365384439_shift27(unsigned A) { v = A/(unsigned)1577682821; } is: # diff -u suboptimal-411-O2.s suboptimal-411-O2-fixed.s --- suboptimal-411-O2.s 2006-07-29 19:34:09.000000000 +0200 +++ suboptimal-411-O2-fixed.s 2006-07-29 19:37:14.000000000 +0200 @@ -19,21 +19,10 @@ f9188_mul365384439_shift27: pushl %ebp movl %esp, %ebp - pushl %edi - pushl %esi - pushl %ebx - movl 8(%ebp), %ebx - movl $1551183727, %ecx - movl %ebx, %eax - mull %ecx - subl %edx, %ebx - shrl %ebx - leal (%ebx,%edx), %eax - shrl $30, %eax - movl %eax, v - popl %ebx - popl %esi - popl %edi + movl $365384439, %eax + mull 8(%ebp) + shrl $27, %edx + movl %edx, v leave ret ... -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28417