@@ -114,6 +114,9 @@ unsafe extern "unadjusted" {
114
114
#[ link_name = "llvm.s390.vsumqf" ] fn vsumqf ( a : vector_unsigned_int , b : vector_unsigned_int ) -> u128 ;
115
115
#[ link_name = "llvm.s390.vsumqg" ] fn vsumqg ( a : vector_unsigned_long_long , b : vector_unsigned_long_long ) -> u128 ;
116
116
117
+ #[ link_name = "llvm.s390.vaccq" ] fn vaccq ( a : u128 , b : u128 ) -> u128 ;
118
+ #[ link_name = "llvm.s390.vacccq" ] fn vacccq ( a : u128 , b : u128 , c : u128 ) -> u128 ;
119
+
117
120
#[ link_name = "llvm.s390.vscbiq" ] fn vscbiq ( a : u128 , b : u128 ) -> u128 ;
118
121
#[ link_name = "llvm.s390.vsbiq" ] fn vsbiq ( a : u128 , b : u128 , c : u128 ) -> u128 ;
119
122
#[ link_name = "llvm.s390.vsbcbiq" ] fn vsbcbiq ( a : u128 , b : u128 , c : u128 ) -> u128 ;
@@ -4694,7 +4697,9 @@ pub unsafe fn vec_addc_u128(
4694
4697
) -> vector_unsigned_char {
4695
4698
let a: u128 = transmute ( a) ;
4696
4699
let b: u128 = transmute ( b) ;
4697
- transmute ( a. overflowing_add ( b) . 1 as u128 )
4700
+ // FIXME(llvm) https://github.com/llvm/llvm-project/pull/153557
4701
+ // transmute(a.overflowing_add(b).1 as u128)
4702
+ transmute ( vaccq ( a, b) )
4698
4703
}
4699
4704
4700
4705
/// Vector Add With Carry unsigned 128-bits
@@ -4729,8 +4734,10 @@ pub unsafe fn vec_addec_u128(
4729
4734
let a: u128 = transmute ( a) ;
4730
4735
let b: u128 = transmute ( b) ;
4731
4736
let c: u128 = transmute ( c) ;
4732
- let ( _d, carry) = a. carrying_add ( b, c & 1 != 0 ) ;
4733
- transmute ( carry as u128 )
4737
+ // FIXME(llvm) https://github.com/llvm/llvm-project/pull/153557
4738
+ // let (_d, carry) = a.carrying_add(b, c & 1 != 0);
4739
+ // transmute(carry as u128)
4740
+ transmute ( vacccq ( a, b, c) )
4734
4741
}
4735
4742
4736
4743
/// Vector Subtract with Carryout
0 commit comments