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); }
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); }
__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); }