blob: 594093ecdde38bc2eafe19e6f4585f19fd8bd413 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-times "vpternlog" 6 } } */
/* { dg-final { scan-assembler-not "vpxor" } } */
/* { dg-final { scan-assembler-not "vpor" } } */
/* { dg-final { scan-assembler-not "vpand" } } */
#include<immintrin.h>
__m256d
__attribute__((noipa, target("avx512vl")))
copysign2_pd(__m256d from, __m256d to) {
__m256i a = _mm256_castpd_si256(from);
__m256d avx_signbit = _mm256_castsi256_pd(_mm256_slli_epi64(_mm256_cmpeq_epi64(a, a), 63));
/* (avx_signbit & from) | (~avx_signbit & to) */
return _mm256_or_pd(_mm256_and_pd(avx_signbit, from), _mm256_andnot_pd(avx_signbit, to));
}
__m256i
__attribute__((noipa, target("avx512vl")))
foo (__m256i src1, __m256i src2, __m256i src3)
{
return (src2 & ~src1) | (src3 & src1);
}
__m256i
__attribute__ ((noipa, target("avx512vl")))
foo1 (__m256i src1, __m256i src2, __m256i src3)
{
return (src2 & src1) | (src3 & ~src1);
}
__m256i
__attribute__ ((noipa, target("avx512vl")))
foo2 (__m256i src1, __m256i src2, __m256i src3)
{
return (src2 & src1) | (~src3 & src1);
}
__m256i
__attribute__ ((noipa, target("avx512vl")))
foo3 (__m256i src1, __m256i src2, __m256i src3)
{
return (~src2 & src1) | (src3 & src1);
}
__m256i
__attribute__ ((noipa, target("avx512vl")))
foo4 (__m256i src1, __m256i src2, __m256i src3)
{
return src3 & src2 ^ src1;
}