diff options
author | David LeGare <legare@google.com> | 2022-03-02 20:58:57 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-03-02 20:58:57 +0000 |
commit | cb3a79b6fa1b5dcb2dbe2fffb7660b299c58f072 (patch) | |
tree | 9d5d34cf03ff4a0a72031dd8d130711376118825 /src/d2s_small_table.rs | |
parent | 8a4c9cbb78ab5898135aca5570e0a1d0799243ba (diff) | |
parent | b179551c5558d60200bd51e1be068e10a71527c9 (diff) | |
download | ryu-cb3a79b6fa1b5dcb2dbe2fffb7660b299c58f072.tar.gz |
Update ryu to 1.0.9 am: 7461d20f36 am: 2e006056b3 am: b179551c55t_frc_odp_330442040t_frc_odp_330442000t_frc_ase_330444010android-13.0.0_r83android-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android-13.0.0_r57android-13.0.0_r56android-13.0.0_r55android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android-13.0.0_r30android-13.0.0_r29android-13.0.0_r28android-13.0.0_r27android-13.0.0_r24android-13.0.0_r23android-13.0.0_r22android-13.0.0_r21android-13.0.0_r20android-13.0.0_r19android-13.0.0_r18android-13.0.0_r17android-13.0.0_r16aml_go_odp_330912000aml_go_ads_330915100aml_go_ads_330915000aml_go_ads_330913000android13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-releaseandroid13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-releaseandroid13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-qpr1-s8-releaseandroid13-qpr1-s7-releaseandroid13-qpr1-s6-releaseandroid13-qpr1-s5-releaseandroid13-qpr1-s4-releaseandroid13-qpr1-s3-releaseandroid13-qpr1-s2-releaseandroid13-qpr1-s1-releaseandroid13-qpr1-releaseandroid13-mainline-go-adservices-releaseandroid13-frc-odp-releaseandroid13-devandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-releaseandroid13-d3-s1-releaseandroid13-d2-release
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/ryu/+/2004176
Change-Id: Icbf7f84e7114ee17a51a860ba54738b5b366cb63
Diffstat (limited to 'src/d2s_small_table.rs')
-rw-r--r-- | src/d2s_small_table.rs | 71 |
1 files changed, 4 insertions, 67 deletions
diff --git a/src/d2s_small_table.rs b/src/d2s_small_table.rs index 08519a2..262fc04 100644 --- a/src/d2s_small_table.rs +++ b/src/d2s_small_table.rs @@ -19,10 +19,8 @@ // KIND, either express or implied. use crate::common::*; -#[cfg(not(integer128))] -use crate::d2s_intrinsics::*; -pub static DOUBLE_POW5_INV_SPLIT2: [(u64, u64); 13] = [ +pub static DOUBLE_POW5_INV_SPLIT2: [(u64, u64); 15] = [ (1, 2305843009213693952), (5955668970331000884, 1784059615882449851), (8982663654677661702, 1380349269358112757), @@ -36,6 +34,8 @@ pub static DOUBLE_POW5_INV_SPLIT2: [(u64, u64); 13] = [ (12533209867169019542, 1418129833677084982), (5577825024675947042, 2194449627517475473), (11006974540203867551, 1697873161311732311), + (10313493231639821582, 1313665730009899186), + (12701016819766672773, 2032799256770390445), ]; pub static POW5_INV_OFFSETS: [u32; 19] = [ @@ -96,7 +96,6 @@ pub static DOUBLE_POW5_TABLE: [u64; 26] = [ ]; // Computes 5^i in the form required by Ryū. -#[cfg(integer128)] #[cfg_attr(feature = "no-panic", inline)] pub unsafe fn compute_pow5(i: u32) -> (u64, u64) { let base = i / DOUBLE_POW5_TABLE.len() as u32; @@ -112,7 +111,7 @@ pub unsafe fn compute_pow5(i: u32) -> (u64, u64) { let b0 = m as u128 * mul.0 as u128; let b2 = m as u128 * mul.1 as u128; let delta = pow5bits(i as i32) - pow5bits(base2 as i32); - debug_assert!(base < POW5_OFFSETS.len() as u32); + debug_assert!(i / 16 < POW5_OFFSETS.len() as u32); let shifted_sum = (b0 >> delta) + (b2 << (64 - delta)) + ((*POW5_OFFSETS.get_unchecked((i / 16) as usize) >> ((i % 16) << 1)) & 3) as u128; @@ -120,7 +119,6 @@ pub unsafe fn compute_pow5(i: u32) -> (u64, u64) { } // Computes 5^-i in the form required by Ryū. -#[cfg(integer128)] #[cfg_attr(feature = "no-panic", inline)] pub unsafe fn compute_inv_pow5(i: u32) -> (u64, u64) { let base = (i + DOUBLE_POW5_TABLE.len() as u32 - 1) / DOUBLE_POW5_TABLE.len() as u32; @@ -142,64 +140,3 @@ pub unsafe fn compute_inv_pow5(i: u32) -> (u64, u64) { + ((*POW5_INV_OFFSETS.get_unchecked((i / 16) as usize) >> ((i % 16) << 1)) & 3) as u128; (shifted_sum as u64, (shifted_sum >> 64) as u64) } - -// Computes 5^i in the form required by Ryū, and stores it in the given pointer. -#[cfg(not(integer128))] -#[cfg_attr(feature = "no-panic", inline)] -pub unsafe fn compute_pow5(i: u32) -> (u64, u64) { - let base = i / DOUBLE_POW5_TABLE.len() as u32; - let base2 = base * DOUBLE_POW5_TABLE.len() as u32; - let offset = i - base2; - debug_assert!(base < DOUBLE_POW5_SPLIT2.len() as u32); - let mul = *DOUBLE_POW5_SPLIT2.get_unchecked(base as usize); - if offset == 0 { - return mul; - } - debug_assert!(offset < DOUBLE_POW5_TABLE.len() as u32); - let m = *DOUBLE_POW5_TABLE.get_unchecked(offset as usize); - let (low1, mut high1) = umul128(m, mul.1); - let (low0, high0) = umul128(m, mul.0); - let sum = high0 + low1; - if sum < high0 { - high1 += 1; // overflow into high1 - } - // high1 | sum | low0 - let delta = pow5bits(i as i32) - pow5bits(base2 as i32); - debug_assert!(base < POW5_OFFSETS.len() as u32); - ( - shiftright128(low0, sum, delta as u32) - + ((*POW5_OFFSETS.get_unchecked((i / 16) as usize) >> ((i % 16) << 1)) & 3) as u64, - shiftright128(sum, high1, delta as u32), - ) -} - -// Computes 5^-i in the form required by Ryū, and stores it in the given pointer. -#[cfg(not(integer128))] -#[cfg_attr(feature = "no-panic", inline)] -pub unsafe fn compute_inv_pow5(i: u32) -> (u64, u64) { - let base = (i + DOUBLE_POW5_TABLE.len() as u32 - 1) / DOUBLE_POW5_TABLE.len() as u32; - let base2 = base * DOUBLE_POW5_TABLE.len() as u32; - let offset = base2 - i; - debug_assert!(base < DOUBLE_POW5_INV_SPLIT2.len() as u32); - let mul = *DOUBLE_POW5_INV_SPLIT2.get_unchecked(base as usize); // 1/5^base2 - if offset == 0 { - return mul; - } - debug_assert!(offset < DOUBLE_POW5_TABLE.len() as u32); - let m = *DOUBLE_POW5_TABLE.get_unchecked(offset as usize); - let (low1, mut high1) = umul128(m, mul.1); - let (low0, high0) = umul128(m, mul.0 - 1); - let sum = high0 + low1; - if sum < high0 { - high1 += 1; // overflow into high1 - } - // high1 | sum | low0 - let delta = pow5bits(base2 as i32) - pow5bits(i as i32); - debug_assert!(base < POW5_INV_OFFSETS.len() as u32); - ( - shiftright128(low0, sum, delta as u32) - + 1 - + ((*POW5_INV_OFFSETS.get_unchecked((i / 16) as usize) >> ((i % 16) << 1)) & 3) as u64, - shiftright128(sum, high1, delta as u32), - ) -} |