On Thursday 08 February 2007 16:02, Graham Stott wrote: > All, > > Not a bug in GCC the result is correct as you've only asked for a 32-bit > multiply.
Hi again, The problem was not that "mull" is used, but that "gcc 3.4.6" generates highly un-optimized code when I for example multiply a 16-bit integer by a 64-bit integer. It actually generates code where three multiplications are used instead of two. That has a speed impact. Code: #include <stdio.h> #include <sys/types.h> int main() { int64_t temp; int16_t x; temp *= x; printf("%lld\n", temp); return 0; } objdump -D ./a.out 8048507: 89 4d e8 mov %ecx,0xffffffe8(%ebp) 804850a: 31 c0 xor %eax,%eax 804850c: 89 55 ec mov %edx,0xffffffec(%ebp) 804850f: f7 65 e8 mull 0xffffffe8(%ebp) 8048512: 6b 7d ec 00 imul $0x0,0xffffffec(%ebp),%edi 8048516: 89 d6 mov %edx,%esi 8048518: 89 c1 mov %eax,%ecx 804851a: 01 fe add %edi,%esi 804851c: 6b 45 e8 00 imul $0x0,0xffffffe8(%ebp),%eax 8048520: 83 e4 f0 and $0xfffffff0,%esp 8048523: 83 ec 14 sub $0x14,%esp 8048526: 8d 1c 06 lea (%esi,%eax,1),%ebx --HPS