HailMary, your results are extremely interesting.
I can guess that all Opteron registers are 64 bit inside, so when you multiply 2 32 bit numbers and want 32 bit result, it will spend one more cycle to mask upper 32 bits with zeroes. Does it sound reasonable?
As I said, as I work in a group with 500 production servers all trading stocks for hundreds of clients, and I have access to all 4 million lines of code we wrote to do that, I know that the most popular math operation is HashTable lookup. That's where we loose cycles.
HashTable lookups happens in several breeds: we have custom C hashmap implementaion, we use STL coming with GCC, we use MFC coming with Visual C and we use Java and C#, which also have HashTable's.
That could be the most useful benchmark for us, even though the code will be no more than 50 lines :-)))