Skip to content

Commit 37ecc87

Browse files
committed
Try directly using intrinsics
1 parent 943ebe0 commit 37ecc87

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

crates/core_arch/src/s390x/vector.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ unsafe extern "unadjusted" {
114114
#[link_name = "llvm.s390.vsumqf"] fn vsumqf(a: vector_unsigned_int, b: vector_unsigned_int) -> u128;
115115
#[link_name = "llvm.s390.vsumqg"] fn vsumqg(a: vector_unsigned_long_long, b: vector_unsigned_long_long) -> u128;
116116

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+
117120
#[link_name = "llvm.s390.vscbiq"] fn vscbiq(a: u128, b: u128) -> u128;
118121
#[link_name = "llvm.s390.vsbiq"] fn vsbiq(a: u128, b: u128, c: u128) -> u128;
119122
#[link_name = "llvm.s390.vsbcbiq"] fn vsbcbiq(a: u128, b: u128, c: u128) -> u128;
@@ -4694,7 +4697,9 @@ pub unsafe fn vec_addc_u128(
46944697
) -> vector_unsigned_char {
46954698
let a: u128 = transmute(a);
46964699
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))
46984703
}
46994704

47004705
/// Vector Add With Carry unsigned 128-bits
@@ -4729,8 +4734,10 @@ pub unsafe fn vec_addec_u128(
47294734
let a: u128 = transmute(a);
47304735
let b: u128 = transmute(b);
47314736
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))
47344741
}
47354742

47364743
/// Vector Subtract with Carryout

0 commit comments

Comments
 (0)