forked from rust-lang/stdarch
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
8 changed files
with
118 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
#[cfg(test)] | ||
use stdsimd_test::assert_instr; | ||
|
||
#[allow(improper_ctypes)] | ||
extern "unadjusted" { | ||
#[link_name = "llvm.x86.addcarry.u32"] | ||
fn llvm_addcarry_u32(a: u8, b: u32, c: u32) -> (u8, u32); | ||
#[link_name = "llvm.x86.subborrow.u32"] | ||
fn llvm_subborrow_u32(a: u8, b: u32, c: u32) -> (u8, u32); | ||
} | ||
|
||
/// Add unsigned 32-bit integers a and b with unsigned 8-bit carry-in c_in | ||
/// (carry flag), and store the unsigned 32-bit result in out, and the carry-out | ||
/// is returned (carry or overflow flag). | ||
#[inline] | ||
#[cfg_attr(test, assert_instr(adc))] | ||
#[stable(feature = "simd_x86_adx", since = "1.33.0")] | ||
pub unsafe fn _addcarry_u32(c_in: u8, a: u32, b: u32, out: &mut u32) -> u8 { | ||
let (a, b) = llvm_addcarry_u32(c_in, a, b); | ||
*out = b; | ||
a | ||
} | ||
|
||
/// Add unsigned 32-bit integers a and b with unsigned 8-bit carry-in c_in | ||
/// (carry or overflow flag), and store the unsigned 32-bit result in out, and | ||
/// the carry-out is returned (carry or overflow flag). | ||
#[inline] | ||
#[target_feature(enable = "adx")] | ||
#[cfg_attr(test, assert_instr(adc))] | ||
#[stable(feature = "simd_x86_adx", since = "1.33.0")] | ||
#[cfg(not(stage0))] | ||
pub unsafe fn _addcarryx_u32(c_in: u8, a: u32, b: u32, out: &mut u32) -> u8 { | ||
_addcarry_u32(c_in, a, b, out) | ||
} | ||
|
||
/// Add unsigned 32-bit integers a and b with unsigned 8-bit carry-in c_in | ||
/// (carry or overflow flag), and store the unsigned 32-bit result in out, and | ||
/// the carry-out is returned (carry or overflow flag). | ||
#[inline] | ||
#[cfg_attr(test, assert_instr(sbb))] | ||
#[stable(feature = "simd_x86_adx", since = "1.33.0")] | ||
pub unsafe fn _subborrow_u32(c_in: u8, a: u32, b: u32, out: &mut u32) -> u8 { | ||
let (a, b) = llvm_subborrow_u32(c_in, a, b); | ||
*out = b; | ||
a | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
#[cfg(test)] | ||
use stdsimd_test::assert_instr; | ||
|
||
#[allow(improper_ctypes)] | ||
extern "unadjusted" { | ||
#[link_name = "llvm.x86.addcarry.u64"] | ||
fn llvm_addcarry_u64(a: u8, b: u64, c: u64) -> (u8, u64); | ||
#[link_name = "llvm.x86.subborrow.u64"] | ||
fn llvm_subborrow_u64(a: u8, b: u64, c: u64) -> (u8, u64); | ||
} | ||
|
||
/// Add unsigned 64-bit integers a and b with unsigned 8-bit carry-in c_in | ||
/// (carry flag), and store the unsigned 64-bit result in out, and the carry-out | ||
/// is returned (carry or overflow flag). | ||
#[inline] | ||
#[cfg_attr(test, assert_instr(adc))] | ||
#[stable(feature = "simd_x86_adx", since = "1.33.0")] | ||
pub unsafe fn _addcarry_u64(c_in: u8, a: u64, b: u64, out: &mut u64) -> u8 { | ||
let (a, b) = llvm_addcarry_u64(c_in, a, b); | ||
*out = b; | ||
a | ||
} | ||
|
||
/// Add unsigned 64-bit integers a and b with unsigned 8-bit carry-in c_in | ||
/// (carry or overflow flag), and store the unsigned 64-bit result in out, and | ||
/// the carry-out is returned (carry or overflow flag). | ||
#[inline] | ||
#[target_feature(enable = "adx")] | ||
#[cfg_attr(test, assert_instr(adc))] | ||
#[stable(feature = "simd_x86_adx", since = "1.33.0")] | ||
#[cfg(not(stage0))] | ||
pub unsafe fn _addcarryx_u64(c_in: u8, a: u64, b: u64, out: &mut u64) -> u8 { | ||
_addcarry_u64(c_in, a, b, out) | ||
} | ||
|
||
/// Add unsigned 64-bit integers a and b with unsigned 8-bit carry-in c_in | ||
/// (carry or overflow flag), and store the unsigned 64-bit result in out, and | ||
/// the carry-out is returned (carry or overflow flag). | ||
#[inline] | ||
#[cfg_attr(test, assert_instr(sbb))] | ||
#[stable(feature = "simd_x86_adx", since = "1.33.0")] | ||
pub unsafe fn _subborrow_u64(c_in: u8, a: u64, b: u64, out: &mut u64) -> u8 { | ||
let (a, b) = llvm_subborrow_u64(c_in, a, b); | ||
*out = b; | ||
a | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -41,3 +41,6 @@ pub use self::rdrand::*; | |
|
||
mod cmpxchg16b; | ||
pub use self::cmpxchg16b::*; | ||
|
||
mod adx; | ||
pub use self::adx::*; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters