@@ -1641,6 +1641,52 @@ mod sealed {
1641
1641
vmulesh ( a, b)
1642
1642
}
1643
1643
1644
+ #[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
1645
+ pub trait VectorMul {
1646
+ unsafe fn vec_mul ( self , b : Self ) -> Self ;
1647
+ }
1648
+
1649
+ #[ inline]
1650
+ #[ target_feature( enable = "altivec" ) ]
1651
+ #[ cfg_attr( test, assert_instr( vmuluwm) ) ]
1652
+ unsafe fn vec_vmuluwm ( a : vector_signed_int , b : vector_signed_int ) -> vector_signed_int {
1653
+ transmute ( simd_mul :: < i32x4 > ( transmute ( a) , transmute ( b) ) )
1654
+ }
1655
+
1656
+ #[ inline]
1657
+ #[ target_feature( enable = "altivec" ) ]
1658
+ #[ cfg_attr( test, assert_instr( xvmulsp) ) ]
1659
+ unsafe fn vec_xvmulsp ( a : vector_float , b : vector_float ) -> vector_float {
1660
+ transmute ( simd_mul :: < f32x4 > ( transmute ( a) , transmute ( b) ) )
1661
+ }
1662
+
1663
+ #[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
1664
+ impl VectorMul for vector_signed_int {
1665
+ #[ inline]
1666
+ #[ target_feature( enable = "altivec" ) ]
1667
+ unsafe fn vec_mul ( self , b : Self ) -> Self {
1668
+ vec_vmuluwm ( self , b)
1669
+ }
1670
+ }
1671
+
1672
+ #[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
1673
+ impl VectorMul for vector_unsigned_int {
1674
+ #[ inline]
1675
+ #[ target_feature( enable = "altivec" ) ]
1676
+ unsafe fn vec_mul ( self , b : Self ) -> Self {
1677
+ transmute ( simd_mul :: < u32x4 > ( transmute ( self ) , transmute ( b) ) )
1678
+ }
1679
+ }
1680
+
1681
+ #[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
1682
+ impl VectorMul for vector_float {
1683
+ #[ inline]
1684
+ #[ target_feature( enable = "altivec" ) ]
1685
+ unsafe fn vec_mul ( self , b : Self ) -> Self {
1686
+ vec_xvmulsp ( self , b)
1687
+ }
1688
+ }
1689
+
1644
1690
#[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
1645
1691
pub trait VectorMule < Result > {
1646
1692
unsafe fn vec_mule ( self , b : Self ) -> Result ;
@@ -4047,6 +4093,23 @@ mod endian {
4047
4093
}
4048
4094
}
4049
4095
4096
+ /// Vector Multiply
4097
+ ///
4098
+ /// ## Purpose
4099
+ /// Compute the products of corresponding elements of two vectors.
4100
+ ///
4101
+ /// ## Result value
4102
+ /// Each element of r receives the product of the corresponding elements of a and b.
4103
+ #[ inline]
4104
+ #[ target_feature( enable = "altivec" ) ]
4105
+ #[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
4106
+ pub unsafe fn vec_mul < T > ( a : T , b : T ) -> T
4107
+ where
4108
+ T : sealed:: VectorMul ,
4109
+ {
4110
+ a. vec_mul ( b)
4111
+ }
4112
+
4050
4113
/// Vector Multiply Add Saturated
4051
4114
#[ inline]
4052
4115
#[ target_feature( enable = "altivec" ) ]
0 commit comments