Itanium Architecture for Software Developers

In Chapter 8, we examined the operation of the parallel data arrangement instructions. The instruction set provides other instructions that rearrange data, but they process floating-point data in the floating-point registers. Table 9.22 lists the six floating-point data arrangement instructions and their instruction formats. Note that each instruction performs its respective data arrangement operation merge, mix, pack, swap, or sign extend on the significands of the floating-point numbers in source registers specified by f2 and f3 and places the result in the significand of the destination register identified by f1. If either source operand of the data arrangement instruction equals NaTVal, the result produced in the destination operand is NaTVal, not the computed result.
| Mnemonic | Operation | Format |
|---|---|---|
| fmerge | Floating-point merge | (qp) fmerge.ns f1=f2,f3 (qp) fmerge.s f1=f2,f3 (qp) fmerge.se f1=f2,f3 |
| fpmerge | Floating-point parallel merge | (qp) fpmerge.ns f1=f2,f3 (qp) fpmerge.s f1=f2,f3 (qp) fpmerge.se f1=f2,f3 |
| fmix.l | Floating-point parallel mix | (qp) fmix.l f1=f2,f3 (qp) fmix.r f1=f2,f3 (qp) fmix.lr f1=f2,f3 |
| fpack | Floating-point pack | (qp) fpack f1=f2,f3 |
| fswap | Floating-point swap | (qp) fswap f1=f2,f3 (qp) fswap.nl f1=f2,f3 (qp) fswap.nr f1=f2,f3 |
| fsxt | Floating-point sign extend | (qp) fsxt.l f1=f2,f3 (qp) fsxt.r f1=f2,f3 |
Let us begin by examining the operations performed by the floating-point merge ( fmerge) and floating-point parallel merge ( fpmerge) instructions. The formats in Table 9.22 identify three different merge operations, which are selected by appending the instruction mnemonic with the completers