@@ -87,6 +87,10 @@ unsafe extern "unadjusted" {
87
87
#[ link_name = "llvm.s390.vsrl" ] fn vsrl ( a : vector_signed_char , b : vector_signed_char ) -> vector_signed_char ;
88
88
#[ link_name = "llvm.s390.vsl" ] fn vsl ( a : vector_signed_char , b : vector_signed_char ) -> vector_signed_char ;
89
89
90
+ #[ link_name = "llvm.s390.vsrab" ] fn vsrab ( a : vector_signed_char , b : vector_signed_char ) -> vector_signed_char ;
91
+ #[ link_name = "llvm.s390.vsrlb" ] fn vsrlb ( a : vector_signed_char , b : vector_signed_char ) -> vector_signed_char ;
92
+ #[ link_name = "llvm.s390.vslb" ] fn vslb ( a : vector_signed_char , b : vector_signed_char ) -> vector_signed_char ;
93
+
90
94
#[ link_name = "llvm.fshl.v16i8" ] fn fshlb ( a : vector_unsigned_char , b : vector_unsigned_char , c : vector_unsigned_char ) -> vector_unsigned_char ;
91
95
#[ link_name = "llvm.fshl.v8i16" ] fn fshlh ( a : vector_unsigned_short , b : vector_unsigned_short , c : vector_unsigned_short ) -> vector_unsigned_short ;
92
96
#[ link_name = "llvm.fshl.v4i32" ] fn fshlf ( a : vector_unsigned_int , b : vector_unsigned_int , c : vector_unsigned_int ) -> vector_unsigned_int ;
@@ -778,6 +782,55 @@ mod sealed {
778
782
779
783
impl_vec_shift ! { [ VectorSra vec_sra] ( vesravb, vesravh, vesravf, vesravg) }
780
784
785
+ macro_rules! impl_vec_shift_byte {
786
+ ( [ $trait: ident $m: ident] ( $f: ident) ) => {
787
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_char, vector_signed_char) -> vector_unsigned_char }
788
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_char, vector_unsigned_char) -> vector_unsigned_char }
789
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_char, vector_signed_char) -> vector_signed_char }
790
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_char, vector_unsigned_char) -> vector_signed_char }
791
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_short, vector_signed_short) -> vector_unsigned_short }
792
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_short, vector_unsigned_short) -> vector_unsigned_short }
793
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_short, vector_signed_short) -> vector_signed_short }
794
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_short, vector_unsigned_short) -> vector_signed_short }
795
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_int, vector_signed_int) -> vector_unsigned_int }
796
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_int, vector_unsigned_int) -> vector_unsigned_int }
797
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_int, vector_signed_int) -> vector_signed_int }
798
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_int, vector_unsigned_int) -> vector_signed_int }
799
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_long_long, vector_signed_long_long) -> vector_unsigned_long_long }
800
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_long_long, vector_unsigned_long_long) -> vector_unsigned_long_long }
801
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_long_long, vector_signed_long_long) -> vector_signed_long_long }
802
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_signed_long_long, vector_unsigned_long_long) -> vector_signed_long_long }
803
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_float, vector_signed_int) -> vector_float }
804
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_float, vector_unsigned_int) -> vector_float }
805
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_double, vector_signed_long_long) -> vector_double }
806
+ impl_vec_trait!{ [ $trait $m] + $f ( vector_double, vector_unsigned_long_long) -> vector_double }
807
+ } ;
808
+ }
809
+
810
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
811
+ pub trait VectorSlb < Other > {
812
+ type Result ;
813
+ unsafe fn vec_slb ( self , b : Other ) -> Self :: Result ;
814
+ }
815
+
816
+ impl_vec_shift_byte ! { [ VectorSlb vec_slb] ( vslb) }
817
+
818
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
819
+ pub trait VectorSrab < Other > {
820
+ type Result ;
821
+ unsafe fn vec_srab ( self , b : Other ) -> Self :: Result ;
822
+ }
823
+
824
+ impl_vec_shift_byte ! { [ VectorSrab vec_srab] ( vsrab) }
825
+
826
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
827
+ pub trait VectorSrb < Other > {
828
+ type Result ;
829
+ unsafe fn vec_srb ( self , b : Other ) -> Self :: Result ;
830
+ }
831
+
832
+ impl_vec_shift_byte ! { [ VectorSrb vec_srb] ( vsrlb) }
833
+
781
834
macro_rules! impl_vec_shift_long {
782
835
( [ $trait: ident $m: ident] ( $f: ident) ) => {
783
836
impl_vec_trait!{ [ $trait $m] + $f ( vector_unsigned_char, vector_unsigned_char) -> vector_unsigned_char }
@@ -1205,6 +1258,39 @@ where
1205
1258
a. vec_sra ( b)
1206
1259
}
1207
1260
1261
+ /// Vector Shift Left by Byte
1262
+ #[ inline]
1263
+ #[ target_feature( enable = "vector" ) ]
1264
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
1265
+ pub unsafe fn vec_slb < T , U > ( a : T , b : U ) -> <T as sealed:: VectorSlb < U > >:: Result
1266
+ where
1267
+ T : sealed:: VectorSlb < U > ,
1268
+ {
1269
+ a. vec_slb ( b)
1270
+ }
1271
+
1272
+ /// Vector Shift Right by Byte
1273
+ #[ inline]
1274
+ #[ target_feature( enable = "vector" ) ]
1275
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
1276
+ pub unsafe fn vec_srb < T , U > ( a : T , b : U ) -> <T as sealed:: VectorSrb < U > >:: Result
1277
+ where
1278
+ T : sealed:: VectorSrb < U > ,
1279
+ {
1280
+ a. vec_srb ( b)
1281
+ }
1282
+
1283
+ /// Vector Shift Right Algebraic by Byte
1284
+ #[ inline]
1285
+ #[ target_feature( enable = "vector" ) ]
1286
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
1287
+ pub unsafe fn vec_srab < T , U > ( a : T , b : U ) -> <T as sealed:: VectorSrab < U > >:: Result
1288
+ where
1289
+ T : sealed:: VectorSrab < U > ,
1290
+ {
1291
+ a. vec_srab ( b)
1292
+ }
1293
+
1208
1294
/// Vector Element Rotate Left
1209
1295
#[ inline]
1210
1296
#[ target_feature( enable = "vector" ) ]
0 commit comments