@@ -281,6 +281,12 @@ unsafe extern "unadjusted" {
281281 #[ link_name = "llvm.s390.vfenezbs" ] fn vfenezbs ( a : i8x16 , b : i8x16 ) -> PackedTuple < i8x16 , i32 > ;
282282 #[ link_name = "llvm.s390.vfenezhs" ] fn vfenezhs ( a : i16x8 , b : i16x8 ) -> PackedTuple < i16x8 , i32 > ;
283283 #[ link_name = "llvm.s390.vfenezfs" ] fn vfenezfs ( a : i32x4 , b : i32x4 ) -> PackedTuple < i32x4 , i32 > ;
284+
285+ #[ link_name = "llvm.s390.vclfnhs" ] fn vclfnhs ( a : vector_signed_short , immarg : i32 ) -> vector_float ;
286+ #[ link_name = "llvm.s390.vclfnls" ] fn vclfnls ( a : vector_signed_short , immarg : i32 ) -> vector_float ;
287+ #[ link_name = "llvm.s390.vcfn" ] fn vcfn ( a : vector_signed_short , immarg : i32 ) -> vector_signed_short ;
288+ #[ link_name = "llvm.s390.vcnf" ] fn vcnf ( a : vector_signed_short , immarg : i32 ) -> vector_signed_short ;
289+ #[ link_name = "llvm.s390.vcrnfs" ] fn vcrnfs ( a : vector_float , b : vector_float , immarg : i32 ) -> vector_signed_short ;
284290}
285291
286292impl_neg ! { i8x16 : 0 }
@@ -5873,6 +5879,74 @@ pub unsafe fn vec_promote<T: sealed::VectorPromote>(a: T::ElementType, b: i32) -
58735879 T :: vec_promote ( a, b)
58745880}
58755881
5882+ /// Converts the left-most half of `a` to a vector of single-precision numbers.
5883+ /// The format of the source vector elements is specified by `B`.
5884+ #[ inline]
5885+ #[ target_feature( enable = "nnp-assist" ) ]
5886+ #[ cfg_attr( test, assert_instr( vclfnh, IMM2 = 0 ) ) ]
5887+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
5888+ pub unsafe fn vec_extend_to_fp32_hi < const B : i32 > ( a : vector_signed_short ) -> vector_float {
5889+ // On processors implementing the IBM z16 architecture, only the value 0 is supported.
5890+ static_assert_uimm_bits ! ( B , 0 ) ;
5891+
5892+ vclfnhs ( a, B )
5893+ }
5894+
5895+ /// Converts the right-most half of `a` to a vector of single-precision numbers.
5896+ /// The format of the source vector elements is specified by `B`.
5897+ #[ inline]
5898+ #[ target_feature( enable = "nnp-assist" ) ]
5899+ #[ cfg_attr( test, assert_instr( vclfnl, B = 0 ) ) ]
5900+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
5901+ pub unsafe fn vec_extend_to_fp32_lo < const B : i32 > ( a : vector_signed_short ) -> vector_float {
5902+ // On processors implementing the IBM z16 architecture, only the value 0 is supported.
5903+ static_assert_uimm_bits ! ( B , 0 ) ;
5904+
5905+ vclfnls ( a, B )
5906+ }
5907+
5908+ /// Converts the elements of vector `a` to the 16-bit IEEE floating point format.
5909+ /// The format of the source vector elements is specified by `B`.
5910+ #[ inline]
5911+ #[ target_feature( enable = "nnp-assist" ) ]
5912+ #[ cfg_attr( test, assert_instr( vcfn, B = 0 ) ) ]
5913+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
5914+ pub unsafe fn vec_convert_to_fp16 < const B : i32 > ( a : vector_signed_short ) -> vector_signed_short {
5915+ // On processors implementing the IBM z16 architecture, only the value 0 is supported.
5916+ static_assert_uimm_bits ! ( B , 0 ) ;
5917+
5918+ vcfn ( a, B )
5919+ }
5920+
5921+ /// Converts the elements of vector `a` to an internal floating point format.
5922+ /// The format of the target vector elements is specified by `B`.
5923+ #[ inline]
5924+ #[ target_feature( enable = "nnp-assist" ) ]
5925+ #[ cfg_attr( test, assert_instr( vcnf, B = 0 ) ) ]
5926+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
5927+ pub unsafe fn vec_convert_from_fp16 < const B : i32 > ( a : vector_signed_short ) -> vector_signed_short {
5928+ // On processors implementing the IBM z16 architecture, only the value 0 is supported.
5929+ static_assert_uimm_bits ! ( B , 0 ) ;
5930+
5931+ vcnf ( a, B )
5932+ }
5933+
5934+ /// Converts the elements of single-precision vectors `a` and `b` to an internal floating point
5935+ /// format with 16-bit sized elements. The format of the target vector elements is specified by `C`.
5936+ #[ inline]
5937+ #[ target_feature( enable = "nnp-assist" ) ]
5938+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
5939+ #[ cfg_attr( test, assert_instr( vcrnf, C = 0 ) ) ]
5940+ pub unsafe fn vec_round_from_fp32 < const C : i32 > (
5941+ a : vector_float ,
5942+ b : vector_float ,
5943+ ) -> vector_signed_short {
5944+ // On processors implementing the IBM z16 architecture, only the value 0 is supported.
5945+ static_assert_uimm_bits ! ( C , 0 ) ;
5946+
5947+ vcrnfs ( a, b, C )
5948+ }
5949+
58765950#[ cfg( test) ]
58775951mod tests {
58785952 use super :: * ;
0 commit comments