forked from OSchip/llvm-project
xopintrin.h: Add wrappers for all flavors of _mm_com.
GCC defines only the wrappers, MSVC defines both, we define both now too. PR15844. llvm-svn: 181514
This commit is contained in:
parent
fd57b195a3
commit
4baf67a61b
|
|
@ -342,6 +342,399 @@ _mm_sha_epi64(__m128i __A, __m128i __B)
|
|||
__m128i __B = (B); \
|
||||
(__m128i)__builtin_ia32_vpcomq((__v2di)__A, (__v2di)__B, (N)); })
|
||||
|
||||
#define _MM_PCOMCTRL_LT 0
|
||||
#define _MM_PCOMCTRL_LE 1
|
||||
#define _MM_PCOMCTRL_GT 2
|
||||
#define _MM_PCOMCTRL_GE 3
|
||||
#define _MM_PCOMCTRL_EQ 4
|
||||
#define _MM_PCOMCTRL_NEQ 5
|
||||
#define _MM_PCOMCTRL_FALSE 6
|
||||
#define _MM_PCOMCTRL_TRUE 7
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epu8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epu16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epu32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epu64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epi8(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epi16(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epi32(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comlt_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comle_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comgt_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comge_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comeq_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comneq_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comfalse_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_comtrue_epi64(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE);
|
||||
}
|
||||
|
||||
#define _mm_permute2_pd(X, Y, C, I) __extension__ ({ \
|
||||
__m128d __X = (X); \
|
||||
__m128d __Y = (Y); \
|
||||
|
|
|
|||
|
|
@ -0,0 +1,91 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -ffreestanding %s -verify
|
||||
// RUN: %clang_cc1 -fsyntax-only -ffreestanding -fno-lax-vector-conversions %s -verify
|
||||
// RUN: %clang_cc1 -fsyntax-only -ffreestanding -x c++ %s -verify
|
||||
// expected-no-diagnostics
|
||||
|
||||
#if defined(i386) || defined(__x86_64__)
|
||||
|
||||
// Pretend to enable all features.
|
||||
#ifndef __3dNOW__
|
||||
#define __3dNOW__
|
||||
#endif
|
||||
#ifndef __BMI__
|
||||
#define __BMI__
|
||||
#endif
|
||||
#ifndef __BMI2__
|
||||
#define __BMI2__
|
||||
#endif
|
||||
#ifndef __LZCNT__
|
||||
#define __LZCNT__
|
||||
#endif
|
||||
#ifndef __POPCNT__
|
||||
#define __POPCNT__
|
||||
#endif
|
||||
#ifndef __RDSEED__
|
||||
#define __RDSEED__
|
||||
#endif
|
||||
#ifndef __PRFCHW__
|
||||
#define __PRFCHW__
|
||||
#endif
|
||||
#ifndef __SSE4A__
|
||||
#define __SSE4A__
|
||||
#endif
|
||||
#ifndef __FMA4__
|
||||
#define __FMA4__
|
||||
#endif
|
||||
#ifndef __XOP__
|
||||
#define __XOP__
|
||||
#endif
|
||||
#ifndef __F16C__
|
||||
#define __F16C__
|
||||
#endif
|
||||
#ifndef __MMX__
|
||||
#define __MMX__
|
||||
#endif
|
||||
#ifndef __SSE__
|
||||
#define __SSE__
|
||||
#endif
|
||||
#ifndef __SSE2__
|
||||
#define __SSE2__
|
||||
#endif
|
||||
#ifndef __SSE3__
|
||||
#define __SSE3__
|
||||
#endif
|
||||
#ifndef __SSSE3__
|
||||
#define __SSSE3__
|
||||
#endif
|
||||
#ifndef __SSE4_1__
|
||||
#define __SSE4_1__
|
||||
#endif
|
||||
#ifndef __SSE4_2__
|
||||
#define __SSE4_2__
|
||||
#endif
|
||||
#ifndef __AES__
|
||||
#define __AES__
|
||||
#endif
|
||||
#ifndef __AVX__
|
||||
#define __AVX__
|
||||
#endif
|
||||
#ifndef __AVX2__
|
||||
#define __AVX2__
|
||||
#endif
|
||||
#ifndef __BMI__
|
||||
#define __BMI__
|
||||
#endif
|
||||
#ifndef __BMI2__
|
||||
#define __BMI2__
|
||||
#endif
|
||||
#ifndef __LZCNT__
|
||||
#define __LZCNT__
|
||||
#endif
|
||||
#ifndef __FMA__
|
||||
#define __FMA__
|
||||
#endif
|
||||
#ifndef __RDRND__
|
||||
#define __RDRND__
|
||||
#endif
|
||||
|
||||
// Now include the metaheader that includes all x86 intrinsic headers.
|
||||
#include <x86intrin.h>
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue