Skip to content

Commit 061470d

Browse files
committed
Try directly using intrinsics
1 parent 943ebe0 commit 061470d

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

crates/core_arch/src/s390x/vector.rs

Lines changed: 15 additions & 8 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: vector_unsigned_char, b: vector_unsigned_char) -> vector_unsigned_char;
118+
#[link_name = "llvm.s390.vacccq"] fn vacccq(a: vector_unsigned_char, b: vector_unsigned_char, c: vector_unsigned_char) -> vector_unsigned_char;
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;
@@ -4692,9 +4695,11 @@ pub unsafe fn vec_addc_u128(
46924695
a: vector_unsigned_char,
46934696
b: vector_unsigned_char,
46944697
) -> vector_unsigned_char {
4695-
let a: u128 = transmute(a);
4696-
let b: u128 = transmute(b);
4697-
transmute(a.overflowing_add(b).1 as u128)
4698+
// FIXME(llvm) https://github.com/llvm/llvm-project/pull/153557
4699+
// let a: u128 = transmute(a);
4700+
// let b: u128 = transmute(b);
4701+
// transmute(a.overflowing_add(b).1 as u128)
4702+
vaccq(a, b)
46984703
}
46994704

47004705
/// Vector Add With Carry unsigned 128-bits
@@ -4726,11 +4731,13 @@ pub unsafe fn vec_addec_u128(
47264731
b: vector_unsigned_char,
47274732
c: vector_unsigned_char,
47284733
) -> vector_unsigned_char {
4729-
let a: u128 = transmute(a);
4730-
let b: u128 = transmute(b);
4731-
let c: u128 = transmute(c);
4732-
let (_d, carry) = a.carrying_add(b, c & 1 != 0);
4733-
transmute(carry as u128)
4734+
// FIXME(llvm) https://github.com/llvm/llvm-project/pull/153557
4735+
// let a: u128 = transmute(a);
4736+
// let b: u128 = transmute(b);
4737+
// let c: u128 = transmute(c);
4738+
// let (_d, carry) = a.carrying_add(b, c & 1 != 0);
4739+
// transmute(carry as u128)
4740+
vacccq(a, b, c)
47344741
}
47354742

47364743
/// Vector Subtract with Carryout

0 commit comments

Comments
 (0)