B.4.238. `PMULHRWC', `PMULHRIW': Multiply Packed 16-bit Integers With Rounding, and Store High Word
---------------------------------------------------------------------------------------------------
PMULHRWC mm1,mm2/m64 ; 0F 59 /r [CYRIX,MMX]
PMULHRIW mm1,mm2/m64 ; 0F 5D /r [CYRIX,MMX]
These instructions take two packed 16-bit integer inputs, multiply
the values in the inputs, round on bit 15 of each result, then store
bits 15-30 of each result to the corresponding position of the
destination register.
* For `PMULHRWC', the destination is the first source operand.
* For `PMULHRIW', the destination is an implied register (worked out
as described for `PADDSIW' (*Note Section B.4.200::)).
The operation of this instruction is:
dst[0-15] := (src1[0-15] *src2[0-15] + 0x00004000)[15-30]
dst[16-31] := (src1[16-31]*src2[16-31] + 0x00004000)[15-30]
dst[32-47] := (src1[32-47]*src2[32-47] + 0x00004000)[15-30]
dst[48-63] := (src1[48-63]*src2[48-63] + 0x00004000)[15-30]
See also `PMULHRWA' (*Note Section B.4.239::) for a 3DNow! version of
this instruction.