Skip to content

Commit 91510a0

Browse files
committed
Avoid scalarization in _mm_madd_epi16
When compiling with `-munimplemented-simd128`.
1 parent 2a9cef1 commit 91510a0

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

system/include/compat/emmintrin.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,9 @@ _mm_avg_epu16(__m128i __a, __m128i __b)
669669
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
670670
_mm_madd_epi16(__m128i __a, __m128i __b)
671671
{
672+
#ifdef __wasm_unimplemented_simd128__
673+
return (__m128i)__builtin_wasm_dot_s_i32x4_i16x8((v128_t)__a, (v128_t)__b);
674+
#else
672675
// TODO: optimize
673676
union {
674677
signed short x[8];
@@ -683,6 +686,7 @@ _mm_madd_epi16(__m128i __a, __m128i __b)
683686
for(int i = 0; i < 4; ++i)
684687
dst.x[i] = src.x[i*2] * src2.x[i*2] + src.x[i*2+1] * src2.x[i*2+1];
685688
return dst.m;
689+
#endif
686690
}
687691

688692
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))

0 commit comments

Comments
 (0)