1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -mavx512vl" } */
       3  /* { dg-additional-options "-fno-PIE" { target ia32 } } */
       4  /* { dg-final { scan-assembler-times "vpternlog" 4 } } */
       5  /* { dg-final { scan-assembler-times "\\\{1to4\\\}" 4 } } */
       6  #include<immintrin.h>
       7  extern long long C;
       8  __m256d
       9  copysign2_pd(__m256d from, __m256d to) {
      10    __m256i a = _mm256_castpd_si256(from);
      11    __m256d avx_signbit = _mm256_castsi256_pd(_mm256_slli_epi64(_mm256_cmpeq_epi64(a, a), 63));
      12    /* (avx_signbit & from) | (~avx_signbit & to)  */
      13    return _mm256_or_pd(_mm256_and_pd(avx_signbit, from), _mm256_andnot_pd(avx_signbit, to));
      14  }
      15  
      16  __m256i
      17  mask_pternlog (__m256i A, __m256i B, __mmask8 U)
      18  {
      19    return _mm256_mask_ternarylogic_epi64 (A, U, B, _mm256_set1_epi64x (C) ,202);
      20  }
      21  
      22  __m256i
      23  maskz_pternlog (__m256i A, __m256i B, __mmask8 U)
      24  {
      25    return _mm256_maskz_ternarylogic_epi64 (U, A, B, _mm256_set1_epi64x (C) ,202);
      26  }
      27  
      28  __m256i
      29  none_pternlog (__m256i A, __m256i B)
      30  {
      31    return _mm256_ternarylogic_epi64 (A, B, _mm256_set1_epi64x (C) ,202);
      32  }