aboutsummaryrefslogtreecommitdiff
path: root/src/d2s_small_table.rs
diff options
context:
space:
mode:
authorDavid LeGare <legare@google.com>2022-03-02 20:58:57 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-03-02 20:58:57 +0000
commitcb3a79b6fa1b5dcb2dbe2fffb7660b299c58f072 (patch)
tree9d5d34cf03ff4a0a72031dd8d130711376118825 /src/d2s_small_table.rs
parent8a4c9cbb78ab5898135aca5570e0a1d0799243ba (diff)
parentb179551c5558d60200bd51e1be068e10a71527c9 (diff)
downloadryu-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.rs71
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),
- )
-}