[AVX512] Add some of the FP cast intrinsics

Part of <rdar://problem/17688758>

llvm-svn: 214315
This commit is contained in:
Adam Nemet 2014-07-30 16:51:24 +00:00
parent f42e7a274a
commit c871ff95f3
2 changed files with 34 additions and 0 deletions

View File

@ -117,6 +117,33 @@ _mm512_set1_epi64(long long __d)
return (__m512i)(__v8di){ __d, __d, __d, __d, __d, __d, __d, __d };
}
/* Cast between vector types */
static __inline __m512d __attribute__((__always_inline__, __nodebug__))
_mm512_castpd256_pd512(__m256d __a)
{
return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, -1, -1, -1, -1);
}
static __inline __m512 __attribute__((__always_inline__, __nodebug__))
_mm512_castps256_ps512(__m256 __a)
{
return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, 4, 5, 6, 7,
-1, -1, -1, -1, -1, -1, -1, -1);
}
static __inline __m128d __attribute__((__always_inline__, __nodebug__))
_mm512_castpd512_pd128(__m512d __a)
{
return __builtin_shufflevector(__a, __a, 0, 1);
}
static __inline __m128 __attribute__((__always_inline__, __nodebug__))
_mm512_castps512_ps128(__m512 __a)
{
return __builtin_shufflevector(__a, __a, 0, 1, 2, 3);
}
/* Arithmetic */
static __inline __m512d __attribute__((__always_inline__, __nodebug__))

View File

@ -102,3 +102,10 @@ __m512d test_mm512_set1_pd(double d)
// CHECK: insertelement <8 x double> {{.*}}, i32 7
return _mm512_set1_pd(d);
}
__m512d test_mm512_castpd256_pd512(__m256d a)
{
// CHECK-LABEL: @test_mm512_castpd256_pd512
// CHECK: shufflevector <4 x double> {{.*}} <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
return _mm512_castpd256_pd512(a);
}