-# elif defined(USE_MMX)
- __m64 sumLo = _mm_cvtsi32_si64(biases[i]);
- __m64 sumHi = Zeros;
- const auto row = reinterpret_cast<const __m64*>(&weights[offset]);
- for (IndexType j = 0; j < NumChunks; ++j) {
- __m64 row_j = row[j];
- __m64 input_j = inputVector[j];
- __m64 extendedRowLo = _mm_srai_pi16(_mm_unpacklo_pi8(row_j, row_j), 8);
- __m64 extendedRowHi = _mm_srai_pi16(_mm_unpackhi_pi8(row_j, row_j), 8);
- __m64 extendedInputLo = _mm_unpacklo_pi8(input_j, Zeros);
- __m64 extendedInputHi = _mm_unpackhi_pi8(input_j, Zeros);
- __m64 productLo = _mm_madd_pi16(extendedRowLo, extendedInputLo);
- __m64 productHi = _mm_madd_pi16(extendedRowHi, extendedInputHi);
- sumLo = _mm_add_pi32(sumLo, productLo);
- sumHi = _mm_add_pi32(sumHi, productHi);
- }
- __m64 sum = _mm_add_pi32(sumLo, sumHi);
- sum = _mm_add_pi32(sum, _mm_unpackhi_pi32(sum, sum));
- output[i] = _mm_cvtsi64_si32(sum);
-