@@ -147,25 +147,28 @@ _mm_shuffle_epi8(__m128i __a, __m128i __b)
147
147
static __inline__ __m128i __attribute__((__always_inline__ , __nodebug__ ))
148
148
_mm_sign_epi8 (__m128i __a , __m128i __b )
149
149
{
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 );
153
154
}
154
155
155
156
static __inline__ __m128i __attribute__((__always_inline__ , __nodebug__ ))
156
157
_mm_sign_epi16 (__m128i __a , __m128i __b )
157
158
{
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 );
161
163
}
162
164
163
165
static __inline__ __m128i __attribute__((__always_inline__ , __nodebug__ ))
164
166
_mm_sign_epi32 (__m128i __a , __m128i __b )
165
167
{
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 );
169
172
}
170
173
171
174
// Unavailable functions:
0 commit comments