inline
    double operator[](int i) const
    {
        __m128d buf0;
        if (i < 4) {
            if (i < 2) {
                buf0 = _mm512_extractf64x2_pd(val, 0);
            } else {
                buf0 = _mm512_extractf64x2_pd(val, 1);
            }
        } else {
            if (i < 6) {
                buf0 = _mm512_extractf64x2_pd(val, 2);
            } else {
                buf0 = _mm512_extractf64x2_pd(val, 3);
            }
        }

        i &= 1;

        if (i == 0) {
            return _mm_cvtsd_f64(buf0);
        }

        buf0 = _mm_shuffle_pd(buf0, buf0, 1);
        return _mm_cvtsd_f64(buf0);
    }
Ejemplo n.º 2
0
void extern
avx512dq_test (void)
{
  y = _mm512_extractf64x2_pd (x1, 3);
  y = _mm512_mask_extractf64x2_pd (y, 2, x1, 3);
  y = _mm512_maskz_extractf64x2_pd (2, x1, 3);
  y = _mm256_extractf64x2_pd (x2, 1);
  y = _mm256_mask_extractf64x2_pd (y, 2, x2, 1);
  y = _mm256_maskz_extractf64x2_pd (2, x2, 1);
}
Ejemplo n.º 3
0
__m128d test_mm512_extractf64x2_pd(__m512d __A) {
  // CHECK-LABEL: @test_mm512_extractf64x2_pd
  // CHECK: @llvm.x86.avx512.mask.vextractf64x2
  return _mm512_extractf64x2_pd(__A, 3); 
}