[AVX512] Add FMA intrinsics
Part of <rdar://problem/17688758> llvm-svn: 215666
This commit is contained in:
parent
241c3252c3
commit
2278fcbf0c
|
@ -655,7 +655,7 @@ BUILTIN(__builtin_ia32_sha256rnds2, "V4iV4iV4iV4i", "")
|
|||
BUILTIN(__builtin_ia32_sha256msg1, "V4iV4iV4i", "")
|
||||
BUILTIN(__builtin_ia32_sha256msg2, "V4iV4iV4i", "")
|
||||
|
||||
// FMA4
|
||||
// FMA
|
||||
BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "")
|
||||
BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "")
|
||||
BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "")
|
||||
|
@ -688,6 +688,12 @@ BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "")
|
|||
BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "")
|
||||
BUILTIN(__builtin_ia32_vfmsubaddps256, "V8fV8fV8fV8f", "")
|
||||
BUILTIN(__builtin_ia32_vfmsubaddpd256, "V4dV4dV4dV4d", "")
|
||||
BUILTIN(__builtin_ia32_vfmaddpd512_mask, "V8dV8dV8dV8dUci", "")
|
||||
BUILTIN(__builtin_ia32_vfmsubpd512_mask, "V8dV8dV8dV8dUci", "")
|
||||
BUILTIN(__builtin_ia32_vfnmaddpd512_mask, "V8dV8dV8dV8dUci", "")
|
||||
BUILTIN(__builtin_ia32_vfmaddps512_mask, "V16fV16fV16fV16fUsi", "")
|
||||
BUILTIN(__builtin_ia32_vfmsubps512_mask, "V16fV16fV16fV16fUsi", "")
|
||||
BUILTIN(__builtin_ia32_vfnmaddps512_mask, "V16fV16fV16fV16fUsi", "")
|
||||
|
||||
// XOP
|
||||
BUILTIN(__builtin_ia32_vpmacssww, "V8sV8sV8sV8s", "")
|
||||
|
|
|
@ -507,6 +507,72 @@ _mm512_roundscale_pd(__m512d __A, const int __imm)
|
|||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
|
||||
_mm512_fmadd_pd(__m512d __A, __m512d __B, __m512d __C)
|
||||
{
|
||||
return (__m512d)
|
||||
__builtin_ia32_vfmaddpd512_mask(__A,
|
||||
__B,
|
||||
__C,
|
||||
(__mmask8) -1,
|
||||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
|
||||
_mm512_fmsub_pd(__m512d __A, __m512d __B, __m512d __C)
|
||||
{
|
||||
return (__m512d)
|
||||
__builtin_ia32_vfmsubpd512_mask(__A,
|
||||
__B,
|
||||
__C,
|
||||
(__mmask8) -1,
|
||||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
static __inline__ __m512d __attribute__((__always_inline__, __nodebug__))
|
||||
_mm512_fnmadd_pd(__m512d __A, __m512d __B, __m512d __C)
|
||||
{
|
||||
return (__m512d)
|
||||
__builtin_ia32_vfnmaddpd512_mask(__A,
|
||||
__B,
|
||||
__C,
|
||||
(__mmask8) -1,
|
||||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
|
||||
_mm512_fmadd_ps(__m512 __A, __m512 __B, __m512 __C)
|
||||
{
|
||||
return (__m512)
|
||||
__builtin_ia32_vfmaddps512_mask(__A,
|
||||
__B,
|
||||
__C,
|
||||
(__mmask16) -1,
|
||||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
|
||||
_mm512_fmsub_ps(__m512 __A, __m512 __B, __m512 __C)
|
||||
{
|
||||
return (__m512)
|
||||
__builtin_ia32_vfmsubps512_mask(__A,
|
||||
__B,
|
||||
__C,
|
||||
(__mmask16) -1,
|
||||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
static __inline__ __m512 __attribute__((__always_inline__, __nodebug__))
|
||||
_mm512_fnmadd_ps(__m512 __A, __m512 __B, __m512 __C)
|
||||
{
|
||||
return (__m512)
|
||||
__builtin_ia32_vfnmaddps512_mask(__A,
|
||||
__B,
|
||||
__C,
|
||||
(__mmask16) -1,
|
||||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
/* Vector permutations */
|
||||
|
||||
static __inline __m512i __attribute__ ((__always_inline__, __nodebug__))
|
||||
|
|
|
@ -151,3 +151,10 @@ __m512d test_mm512_broadcastsd_pd(__m128d a)
|
|||
// CHECK: insertelement <8 x double> {{.*}}, i32 7
|
||||
return _mm512_broadcastsd_pd(a);
|
||||
}
|
||||
|
||||
__m512i test_mm512_fmadd_pd(__m512d a, __m512d b, __m512d c)
|
||||
{
|
||||
// CHECK-LABEL: @test_mm512_fmadd_pd
|
||||
// CHECK: @llvm.x86.fma.mask.vfmadd.pd.512
|
||||
return _mm512_fmadd_pd(a, b, c);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue