Skip to content

Commit a2a7fdd

Browse files
committed
White-list new codegen for _mm_broadcastq_epi64
Opened #791 .
1 parent 52271f4 commit a2a7fdd

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

crates/core_arch/src/x86/avx2.rs

+4-7
Original file line numberDiff line numberDiff line change
@@ -641,16 +641,14 @@ pub unsafe fn _mm256_broadcastd_epi32(a: __m128i) -> __m256i {
641641
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_broadcastq_epi64)
642642
#[inline]
643643
#[target_feature(enable = "avx2")]
644-
#[cfg_attr(test, assert_instr(vpbroadcastq))]
644+
// FIXME: https://github.com/rust-lang/stdarch/issues/791
645+
#[cfg_attr(test, assert_instr(vmovddup))]
645646
#[stable(feature = "simd_x86", since = "1.27.0")]
646647
pub unsafe fn _mm_broadcastq_epi64(a: __m128i) -> __m128i {
647-
let zero = _mm_setzero_si128().as_i64x2();
648-
let ret = simd_shuffle2(a.as_i64x2(), zero, [0_u32; 2]);
648+
let ret = simd_shuffle2(a.as_i64x2(), a.as_i64x2(), [0_u32; 2]);
649649
transmute::<i64x2, _>(ret)
650650
}
651651

652-
// N.B. `simd_shuffle4` with integer data types for `a` and `b` is
653-
// often compiled to `vbroadcastsd`.
654652
/// Broadcasts the low packed 64-bit integer from `a` to all elements of
655653
/// the 256-bit returned value.
656654
///
@@ -660,8 +658,7 @@ pub unsafe fn _mm_broadcastq_epi64(a: __m128i) -> __m128i {
660658
#[cfg_attr(test, assert_instr(vbroadcastsd))]
661659
#[stable(feature = "simd_x86", since = "1.27.0")]
662660
pub unsafe fn _mm256_broadcastq_epi64(a: __m128i) -> __m256i {
663-
let zero = _mm_setzero_si128();
664-
let ret = simd_shuffle4(a.as_i64x2(), zero.as_i64x2(), [0_u32; 4]);
661+
let ret = simd_shuffle4(a.as_i64x2(), a.as_i64x2(), [0_u32; 4]);
665662
transmute::<i64x4, _>(ret)
666663
}
667664

0 commit comments

Comments
 (0)