64-Bit CPUs: What You Need to Know - Page 12

Bizarrely, Itaniums two floating-point units cant multiply two numbers together. They cant add, either. The FPU is designed for multiply-accumulate (MAC) operations, so if you want a conventional FP MUL you program it as an FP MAC with an adder of zero. Likewise, if you want a simple FP ADD youre forced to use a multiplier of 1.0 along with the value you want to add.

Stranger still, Itanium has no integer multiply function at all. Any multiplication, whether its integer or floating-point, has to happen in the FP MAC unit. Unfortunately, that means transferring a pair of integers from the general-purpose registers to the floating-point registers, then transferring the result back again. Fortunately, IA-64 includes a few instructions specifically for this eventuality. What were they thinking?