@@ -641,16 +641,14 @@ pub unsafe fn _mm256_broadcastd_epi32(a: __m128i) -> __m256i {
641
641
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_broadcastq_epi64)
642
642
#[ inline]
643
643
#[ 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) ) ]
645
646
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
646
647
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 ] ) ;
649
649
transmute :: < i64x2 , _ > ( ret)
650
650
}
651
651
652
- // N.B. `simd_shuffle4` with integer data types for `a` and `b` is
653
- // often compiled to `vbroadcastsd`.
654
652
/// Broadcasts the low packed 64-bit integer from `a` to all elements of
655
653
/// the 256-bit returned value.
656
654
///
@@ -660,8 +658,7 @@ pub unsafe fn _mm_broadcastq_epi64(a: __m128i) -> __m128i {
660
658
#[ cfg_attr( test, assert_instr( vbroadcastsd) ) ]
661
659
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
662
660
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 ] ) ;
665
662
transmute :: < i64x4 , _ > ( ret)
666
663
}
667
664
0 commit comments