From 2d9878845f8dc0b4da8050f2a2140a77a211084a Mon Sep 17 00:00:00 2001 From: Marat Dukhan Date: Tue, 29 Sep 2020 12:54:20 -0700 Subject: [PATCH] Implement _mm_abs_epi* with wasm_*_abs --- site/source/docs/porting/simd.rst | 6 +++--- system/include/SSE/tmmintrin.h | 9 +++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/site/source/docs/porting/simd.rst b/site/source/docs/porting/simd.rst index 8b67950753612..60fddf47fdbcc 100644 --- a/site/source/docs/porting/simd.rst +++ b/site/source/docs/porting/simd.rst @@ -783,11 +783,11 @@ The following table highlights the availability and expected performance of diff * - Intrinsic name - WebAssembly SIMD support * - _mm_abs_epi8 - - ⚠️ emulated with a SIMD shift+xor+add + - ✅ wasm_i8x16_abs * - _mm_abs_epi16 - - ⚠️ emulated with a SIMD shift+xor+add + - ✅ wasm_i16x8_abs * - _mm_abs_epi32 - - ⚠️ emulated with a SIMD shift+xor+add + - ✅ wasm_i32x4_abs * - _mm_alignr_epi8 - ⚠️ emulated with a SIMD or+two shifts * - _mm_hadd_epi16 diff --git a/system/include/SSE/tmmintrin.h b/system/include/SSE/tmmintrin.h index 1a663fe9e0fe1..fae862acb5e1a 100644 --- a/system/include/SSE/tmmintrin.h +++ b/system/include/SSE/tmmintrin.h @@ -16,22 +16,19 @@ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_abs_epi8(__m128i __a) { - __m128i __mask = (__m128i)wasm_i8x16_shr((v128_t)__a, 7); - return _mm_xor_si128(_mm_add_epi8(__a, __mask), __mask); + return (__m128i)wasm_i8x16_abs((v128_t)__a); } static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_abs_epi16(__m128i __a) { - __m128i __mask = _mm_srai_epi16(__a, 15); - return _mm_xor_si128(_mm_add_epi16(__a, __mask), __mask); + return (__m128i)wasm_i16x8_abs((v128_t)__a); } static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_abs_epi32(__m128i __a) { - __m128i __mask = _mm_srai_epi32(__a, 31); - return _mm_xor_si128(_mm_add_epi32(__a, __mask), __mask); + return (__m128i)wasm_i32x4_abs((v128_t)__a); } #define _mm_alignr_epi8(__a, __b, __count) \