src/codegen/ia32/macro-assembler-ia32.cc
void TurboAssembler::I32x4ExtMul(XMMRegister dst, XMMRegister src1,
                                 XMMRegister src2, XMMRegister scratch,
                                 bool low, bool is_signed) {
  if (CpuFeatures::IsSupported(AVX)) {
    CpuFeatureScope avx_scope(this, AVX);
    vpmullw(scratch, src1, src2);
    is_signed ? vpmulhw(dst, src1, src2) : vpmulhuw(dst, src1, src2);
    low ? vpunpcklwd(dst, scratch, dst) : vpunpckhwd(dst, scratch, dst);
  } else {
    DCHECK_EQ(dst, src1);
    movdqu(scratch, src1);
    pmullw(dst, src2);
    is_signed ? pmulhw(scratch, src2) : pmulhuw(scratch, src2);
    low ? punpcklwd(dst, scratch) : punpckhwd(dst, scratch);
  }
}
// 1. Multiply low word into scratch.
// 2. Multiply high word (can be signed or unsigned) into dst.
// 3. Unpack and interleave scratch and dst into dst.
1. Multiply low word into scratch.
2. Multiply high word (can be signed or unsigned) into dst.
3. Unpack and interleave scratch and dst into dst.
1 . Multiply low word into scratch . 2 . Multiply high word ( can be signed or unsigned ) into dst . 3 . Unpack and interleave scratch and dst into dst .
void TurboAssembler::I32x4ExtMul(XMMRegister dst, XMMRegister src1,
                                 XMMRegister src2, XMMRegister scratch,
                                 bool low, bool is_signed) {
  if (CpuFeatures::IsSupported(AVX)) {
    CpuFeatureScope avx_scope(this, AVX);
    vpmullw(scratch, src1, src2);
    is_signed ? vpmulhw(dst, src1, src2) : vpmulhuw(dst, src1, src2);
    low ? vpunpcklwd(dst, scratch, dst) : vpunpckhwd(dst, scratch, dst);
  } else {
    DCHECK_EQ(dst, src1);
    movdqu(scratch, src1);
    pmullw(dst, src2);
    is_signed ? pmulhw(scratch, src2) : pmulhuw(scratch, src2);
    low ? punpcklwd(dst, scratch) : punpckhwd(dst, scratch);
  }
}
void TurboAssembler :: I32x4ExtMul ( XMMRegister dst , XMMRegister src1 , XMMRegister src2 , XMMRegister scratch , bool low , bool is_signed ) { if ( CpuFeatures :: IsSupported ( AVX ) ) { CpuFeatureScope avx_scope ( this , AVX ) ; vpmullw ( scratch , src1 , src2 ) ; is_signed ? vpmulhw ( dst , src1 , src2 ) : vpmulhuw ( dst , src1 , src2 ) ; low ? vpunpcklwd ( dst , scratch , dst ) : vpunpckhwd ( dst , scratch , dst ) ; } else { DCHECK_EQ ( dst , src1 ) ; movdqu ( scratch , src1 ) ; pmullw ( dst , src2 ) ; is_signed ? pmulhw ( scratch , src2 ) : pmulhuw ( scratch , src2 ) ; low ? punpcklwd ( dst , scratch ) : punpckhwd ( dst , scratch ) ; } }
1.
1 .