From 1e2f5932e6d144338799a38255b622c5fdc09df4 Mon Sep 17 00:00:00 2001 From: Pavel P Date: Wed, 9 Mar 2022 17:26:43 +0300 Subject: [PATCH] Do not redefine _mm_cvtsi128_si16 when building with VS 2022 Fixes the following warnings/errors when building: ``` 1>bitutil.h(193,31): warning C4391: 'uint16_t _mm_cvtsi128_si16(__m128i)': incorrect return type for intrinsic function, expected 'short' (compiling source file ..\..\bitpack.c) 1>bitutil.h(193,60): error C2169: '_mm_cvtsi128_si16': intrinsic function, cannot be defined (compiling source file ..\..\bitpack.c) ``` --- bitutil.c | 6 +++--- bitutil.h | 6 +++--- fp.c | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bitutil.c b/bitutil.c index 0fb846d..5edca0a 100644 --- a/bitutil.c +++ b/bitutil.c @@ -122,7 +122,7 @@ uint16_t bitd16(uint16_t *in, unsigned n, uint16_t *px, uint16_t start) { vo1 = _mm_or_si128(vo1, v1); vx0 = _mm_or_si128(vx0, _mm_xor_si128(v0, vb0)); vx1 = _mm_or_si128(vx1, _mm_xor_si128(v1, vb0)); - } start = _mm_cvtsi128_si16(_mm_srli_si128(vs,14)); + } start = mm_cvtsi128_si16(_mm_srli_si128(vs,14)); vo0 = _mm_or_si128(vo0, vo1); o = mm_hor_epi16(vo0); vx0 = _mm_or_si128(vx0, vx1); x = mm_hor_epi16(vx0); #else @@ -443,7 +443,7 @@ uint16_t bitz16(uint16_t *in, unsigned n, uint16_t *px, uint16_t start) { vo1 = _mm_or_si128(vo1, v1); vx0 = _mm_or_si128(vx0, _mm_xor_si128(v0, vb0)); vx1 = _mm_or_si128(vx1, _mm_xor_si128(v1, vb0)); - } start = _mm_cvtsi128_si16(_mm_srli_si128(vs,14)); + } start = mm_cvtsi128_si16(_mm_srli_si128(vs,14)); vo0 = _mm_or_si128(vo0, vo1); o = mm_hor_epi16(vo0); vx0 = _mm_or_si128(vx0, vx1); x = mm_hor_epi16(vx0); #else @@ -488,7 +488,7 @@ uint32_t bitz32(unsigned *in, unsigned n, uint32_t *px, unsigned start) { vo1 = _mm_or_si128(vo1, v1); vx0 = _mm_or_si128(vx0, _mm_xor_si128(v0, vb0)); vx1 = _mm_or_si128(vx1, _mm_xor_si128(v1, vb0)); - } start = _mm_cvtsi128_si16(_mm_srli_si128(vs,12)); + } start = mm_cvtsi128_si16(_mm_srli_si128(vs,12)); vo0 = _mm_or_si128(vo0, vo1); o = mm_hor_epi32(vo0); vx0 = _mm_or_si128(vx0, vx1); x = mm_hor_epi32(vx0); #else diff --git a/bitutil.h b/bitutil.h index 7428060..e311b41 100644 --- a/bitutil.h +++ b/bitutil.h @@ -187,9 +187,9 @@ static ALWAYS_INLINE uint64_t mm_hor_epi64( __m128i v) { v = _mm_or_si128( v, _m #define ADDI16x8(_v_, _sv_, _vi_) _sv_ = _mm_add_epi16(_mm_add_epi16(_sv_, _vi_),_v_) #define ADDI32x4(_v_, _sv_, _vi_) _sv_ = _mm_add_epi32(_mm_add_epi32(_sv_, _vi_),_v_) -//---------------- Convert _mm_cvtsi128_siXX ------------------------------------------- -static ALWAYS_INLINE uint8_t _mm_cvtsi128_si8 (__m128i v) { return (uint8_t )_mm_cvtsi128_si32(v); } -static ALWAYS_INLINE uint16_t _mm_cvtsi128_si16(__m128i v) { return (uint16_t)_mm_cvtsi128_si32(v); } +//---------------- Convert mm_cvtsi128_siXX ------------------------------------------- +static ALWAYS_INLINE uint8_t mm_cvtsi128_si8 (__m128i v) { return (uint8_t )_mm_cvtsi128_si32(v); } +static ALWAYS_INLINE uint16_t mm_cvtsi128_si16(__m128i v) { return (uint16_t)_mm_cvtsi128_si32(v); } #endif //--------- memset ----------------------------------------- diff --git a/fp.c b/fp.c index e181d58..36f4852 100644 --- a/fp.c +++ b/fp.c @@ -155,7 +155,7 @@ size_t TEMPLATE2(fpxenc,USIZE)(uint_t *in, size_t n, unsigned char *out, uint_t sv = TEMPLATE2(mm_xore_epi, USIZE)(v0,sv); bv = _mm_or_si128(bv, sv); _mm_storeu_si128((__m128i *) p, sv); sv = v0; sv = TEMPLATE2(mm_xore_epi, USIZE)(v1,sv); bv = _mm_or_si128(bv, sv); _mm_storeu_si128((__m128i *)(p+16/(USIZE/8)), sv); sv = v1; } - start = (uint_t)TEMPLATE2(_mm_cvtsi128_si,USIZE)(_mm_srli_si128(sv,16-USIZE/8)); + start = (uint_t)TEMPLATE2(mm_cvtsi128_si,USIZE)(_mm_srli_si128(sv,16-USIZE/8)); b = TEMPLATE2(mm_hor_epi, USIZE)(bv); #else for(p = _p; p != &_p[VSIZE]; p+=4,ip+=4) { FE(0,USIZE); FE(1,USIZE); FE(2,USIZE); FE(3,USIZE); } @@ -240,7 +240,7 @@ size_t TEMPLATE2(fpxdec,USIZE)(unsigned char *in, size_t n, uint_t *out, uint_t _mm_storeu_si128((__m128i *) op, v0); _mm_storeu_si128((__m128i *)(op+16/(USIZE/8)), sv); } - start = (uint_t)TEMPLATE2(_mm_cvtsi128_si,USIZE)(_mm_srli_si128(sv,16-USIZE/8)); + start = (uint_t)TEMPLATE2(mm_cvtsi128_si,USIZE)(_mm_srli_si128(sv,16-USIZE/8)); #else for(p = _p; p != &_p[VSIZE]; p+=4,op+=4) { FD(0,USIZE); FD(1,USIZE); FD(2,USIZE); FD(3,USIZE); } #endif