@@ -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" ) ]
646647pub 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" ) ]
662660pub 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