Itanium Architecture for Software Developers

During our examination of the integer arithmetic in Chapter 6, we indicated that the floating-point unit performs the integer multiplication operation. Integer multiplication is performed on data resident in the floating-point registers with an instruction known as the fixed-point multiply ( xmpy) instruction. Just like floating-point division, the integer division operation must be performed in software.
Table 9.20 shows the formats of the xmpy instruction. This instruction treats the values in source operand registers f3 and f4 as either 64-bit signed or unsigned integers. That is, the sign and exponent fields of the data in the floating-point registers are ignored. These 64-bit numbers are multiplied to produce a 128-bit product; however, only the upper or lower 64 bits of the result are placed in destination operand register f1. For example, the following instruction multiplies the unsigned 64-bit numbers in Fr 5 and Fr 6 and places the upper 64-bits of this product in Fr 10.
(p0) xmpy.hu f10=f5,f6
| Mnemonic | Operation | Format |
|---|---|---|
| xmpy | Floating-point multiply | (qp) xmpy.l f1=f3,f4 |
| (qp) xmpy.lu f1=f3,f4 | ||
| (qp) xmpy.h f1=f3,f4 | ||
| (qp) xmpy.hu f1=f3,f4 | ||
| xma | Fixed-point multiply add | (qp) xma.l f1=f3,f4,f2 |
| (qp) xma.lu f1=f3,f4,f2 | ||
| (qp) xma.h f1=f3,f4,f2 | ||
| (qp) xma.hu f1=f3,f4,f2 |
This result is expressed as an integer in floating-point register format. Therefore, the exponent field of Fr 10 is set to the integer-biased exponent value...