A.5.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 (section A.5.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 (section A.5.239) for a 3DNow! version of this
instruction.