.html -- Source
Maybe your like
☰
All crates
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 #[cfg(test)] use stdarch_test::assert_instr; #[allow(improper_ctypes)] extern "unadjusted" { #[link_name = "llvm.x86.addcarry.64"] fn llvm_addcarry_u64(a: u8, b: u64, c: u64) -> (u8, u64); #[link_name = "llvm.x86.addcarryx.u64"] fn llvm_addcarryx_u64(a: u8, b: u64, c: u64, d: *mut u8) -> u8; #[link_name = "llvm.x86.subborrow.64"] fn llvm_subborrow_u64(a: u8, b: u64, c: u64) -> (u8, u64); } /// Adds 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 } /// Adds 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")] pub unsafe fn _addcarryx_u64(c_in: u8, a: u64, b: u64, out: &mut u64) -> u8 { llvm_addcarryx_u64(c_in, a, b, out as *mut _ as *mut u8) } /// Adds 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 } #[cfg(test)] mod tests { use stdarch_test::simd_test; use crate::core_arch::x86_64::*; #[test] fn test_addcarry_u64() { unsafe { let a = u64::max_value(); let mut out = 0; let r = _addcarry_u64(0, a, 1, &mut out); assert_eq!(r, 1); assert_eq!(out, 0); let r = _addcarry_u64(0, a, 0, &mut out); assert_eq!(r, 0); assert_eq!(out, a); let r = _addcarry_u64(1, a, 1, &mut out); assert_eq!(r, 1); assert_eq!(out, 1); let r = _addcarry_u64(1, a, 0, &mut out); assert_eq!(r, 1); assert_eq!(out, 0); let r = _addcarry_u64(0, 3, 4, &mut out); assert_eq!(r, 0); assert_eq!(out, 7); let r = _addcarry_u64(1, 3, 4, &mut out); assert_eq!(r, 0); assert_eq!(out, 8); } } #[simd_test(enable = "adx")] unsafe fn test_addcarryx_u64() { let a = u64::max_value(); let mut out = 0; let r = _addcarry_u64(0, a, 1, &mut out); assert_eq!(r, 1); assert_eq!(out, 0); let r = _addcarry_u64(0, a, 0, &mut out); assert_eq!(r, 0); assert_eq!(out, a); let r = _addcarry_u64(1, a, 1, &mut out); assert_eq!(r, 1); assert_eq!(out, 1); let r = _addcarry_u64(1, a, 0, &mut out); assert_eq!(r, 1); assert_eq!(out, 0); let r = _addcarry_u64(0, 3, 4, &mut out); assert_eq!(r, 0); assert_eq!(out, 7); let r = _addcarry_u64(1, 3, 4, &mut out); assert_eq!(r, 0); assert_eq!(out, 8); } #[test] fn test_subborrow_u64() { unsafe { let a = u64::max_value(); let mut out = 0; let r = _subborrow_u64(0, 0, 1, &mut out); assert_eq!(r, 1); assert_eq!(out, a); let r = _subborrow_u64(0, 0, 0, &mut out); assert_eq!(r, 0); assert_eq!(out, 0); let r = _subborrow_u64(1, 0, 1, &mut out); assert_eq!(r, 1); assert_eq!(out, a - 1); let r = _subborrow_u64(1, 0, 0, &mut out); assert_eq!(r, 1); assert_eq!(out, a); let r = _subborrow_u64(0, 7, 3, &mut out); assert_eq!(r, 0); assert_eq!(out, 4); let r = _subborrow_u64(1, 7, 3, &mut out); assert_eq!(r, 0); assert_eq!(out, 3); } } } Help

Keyboard Shortcuts
?Show this help dialogSFocus the search field↑Move up in search results↓Move down in search results↹Switch tab⏎Go to active search result+Expand all sections-Collapse all sectionsSearch Tricks
Prefix searches with a type followed by a colon (e.g., fn:) to restrict the search to a given type.
Accepted types are: fn, mod, struct, enum, trait, type, macro, and const.
Search functions by type signature (e.g., vec -> usize or * -> vec)
Search multiple things at once by splitting your query with comma (e.g., str,u8 or String,struct:Vec,test)
Tag » _addcarry_u64 Clang
-
Visual C++ - _addcarry_u64 And _addcarryx_u64 With MSVC And ICC
-
_addcarry_u32(), _addcarry_u64() - Intel
-
Lib/Headers/adxintrin.h Source File - Clang
-
Add-with-carry And Subtract-with-borrow Support (x86_64 And Others)
-
Smhasher/PMP_Multilinear_64.h At Master - GitHub
-
Compile Issues On M1 Mac · Issue #87 · Albertobsd/keyhunt - GitHub
-
C++ - Producing Good Add With Carry Code From Clang
-
How To Access The Carry Flag While Adding Two 64 Bit Numbers Using ...
-
[Solved] Difference Between __builtin_addcll And _addcarry_u64
-
[Bug Target/105617] New: Regression In Code Generation For ...
-
使用MSVC和ICC添加Carry_u64和_addcarryx_u64 | 955Yes
-
Please Implement Integer Overflow Detection - Visual Studio Feedback
-
Compiler Explorer Privacy Policy