@@ -147,25 +147,28 @@ _mm_shuffle_epi8(__m128i __a, __m128i __b)
147147static __inline__ __m128i __attribute__((__always_inline__ , __nodebug__ ))
148148_mm_sign_epi8 (__m128i __a , __m128i __b )
149149{
150- __m128i __mask = (__m128i )wasm_i8x16_shr ((v128_t )__b , 7 );
151- __m128i __zeromask = _mm_cmpeq_epi8 (__b , _mm_setzero_si128 ());
152- return _mm_andnot_si128 (__zeromask , _mm_xor_si128 (_mm_add_epi8 (__a , __mask ), __mask ));
150+ const __m128i __zero = _mm_setzero_si128 ();
151+ __a = _mm_andnot_si128 (_mm_cmpeq_epi8 (__b , __zero ), __a );
152+ const __m128i __mask = _mm_cmpgt_epi8 (__zero , __b );
153+ return _mm_xor_si128 (_mm_add_epi8 (__a , __mask ), __mask );
153154}
154155
155156static __inline__ __m128i __attribute__((__always_inline__ , __nodebug__ ))
156157_mm_sign_epi16 (__m128i __a , __m128i __b )
157158{
158- __m128i __mask = _mm_srai_epi16 (__b , 15 );
159- __m128i __zeromask = _mm_cmpeq_epi16 (__b , _mm_setzero_si128 ());
160- return _mm_andnot_si128 (__zeromask , _mm_xor_si128 (_mm_add_epi16 (__a , __mask ), __mask ));
159+ const __m128i __zero = _mm_setzero_si128 ();
160+ __a = _mm_andnot_si128 (_mm_cmpeq_epi16 (__b , __zero ), __a );
161+ const __m128i __mask = _mm_cmpgt_epi16 (__zero , __b );
162+ return _mm_xor_si128 (_mm_add_epi16 (__a , __mask ), __mask );
161163}
162164
163165static __inline__ __m128i __attribute__((__always_inline__ , __nodebug__ ))
164166_mm_sign_epi32 (__m128i __a , __m128i __b )
165167{
166- __m128i __mask = _mm_srai_epi32 (__b , 31 );
167- __m128i __zeromask = _mm_cmpeq_epi32 (__b , _mm_setzero_si128 ());
168- return _mm_andnot_si128 (__zeromask , _mm_xor_si128 (_mm_add_epi32 (__a , __mask ), __mask ));
168+ const __m128i __zero = _mm_setzero_si128 ();
169+ __a = _mm_andnot_si128 (_mm_cmpeq_epi32 (__b , __zero ), __a );
170+ const __m128i __mask = _mm_cmpgt_epi32 (__zero , __b );
171+ return _mm_xor_si128 (_mm_add_epi32 (__a , __mask ), __mask );
169172}
170173
171174// Unavailable functions:
0 commit comments