@@ -335,6 +335,9 @@ extern "C" {
335
335
336
336
#[ link_name = "llvm.ppc.altivec.vlogefp" ]
337
337
fn vlogefp ( a : vector_float ) -> vector_float ;
338
+
339
+ #[ link_name = "llvm.ppc.altivec.sll" ]
340
+ fn vsl ( a : vector_signed_int , b : vector_signed_int ) -> vector_signed_int ;
338
341
}
339
342
340
343
macro_rules! s_t_l {
@@ -2822,6 +2825,25 @@ mod sealed {
2822
2825
impl_vec_sld ! { vector_bool_short, vector_signed_short, vector_unsigned_short }
2823
2826
impl_vec_sld ! { vector_bool_int, vector_signed_int, vector_unsigned_int }
2824
2827
impl_vec_sld ! { vector_float }
2828
+
2829
+ macro_rules! impl_vec_sll {
2830
+ ( [ $Trait: ident $m: ident] ( $f: ident) ) => {
2831
+ impl_vec_trait!{ [ $Trait $m] + $f ( vector_unsigned_char, vector_unsigned_char) -> vector_unsigned_char }
2832
+ impl_vec_trait!{ [ $Trait $m] + $f ( vector_signed_char, vector_unsigned_char) -> vector_signed_char }
2833
+ impl_vec_trait!{ [ $Trait $m] + $f ( vector_unsigned_short, vector_unsigned_char) -> vector_unsigned_short }
2834
+ impl_vec_trait!{ [ $Trait $m] + $f ( vector_signed_short, vector_unsigned_char) -> vector_signed_short }
2835
+ impl_vec_trait!{ [ $Trait $m] + $f ( vector_unsigned_int, vector_unsigned_char) -> vector_unsigned_int }
2836
+ impl_vec_trait!{ [ $Trait $m] + $f ( vector_signed_int, vector_unsigned_char) -> vector_signed_int }
2837
+ } ;
2838
+ }
2839
+
2840
+ #[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
2841
+ pub trait VectorSll < Other > {
2842
+ type Result ;
2843
+ unsafe fn vec_sll ( self , b : Other ) -> Self :: Result ;
2844
+ }
2845
+
2846
+ impl_vec_sll ! { [ VectorSll vec_sll] ( vsl) }
2825
2847
}
2826
2848
2827
2849
/// Vector Merge Low
@@ -2954,6 +2976,21 @@ where
2954
2976
a. vec_sldw :: < UIMM2 > ( b)
2955
2977
}
2956
2978
2979
+ /// Vector Shift Left Long
2980
+ ///
2981
+ /// ## Endian considerations
2982
+ /// This intrinsic is not endian-neutral, so uses of vec_sll in big-endian
2983
+ /// code must be rewritten for little-endian targets.
2984
+ #[ inline]
2985
+ #[ target_feature( enable = "altivec" ) ]
2986
+ #[ unstable( feature = "stdarch_powerpc" , issue = "111145" ) ]
2987
+ pub unsafe fn vec_sll < T , U > ( a : T , b : U ) -> <T as sealed:: VectorSll < U > >:: Result
2988
+ where
2989
+ T : sealed:: VectorSll < U > ,
2990
+ {
2991
+ a. vec_sll ( b)
2992
+ }
2993
+
2957
2994
/// Vector Load Indexed.
2958
2995
#[ inline]
2959
2996
#[ target_feature( enable = "altivec" ) ]
0 commit comments