mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
simplify/debloat radix point alignment code in floatscan
now that this is the first operation, it can rely on the circular buffer contents not being wrapped when it begins. we limit the number of digits read slightly in the initial parsing loops too so that this code does not have to consider the case where it might cause the circular buffer to wrap; this is perfectly fine because KMAX is chosen as a power of two for circular-buffer purposes and is much larger than it otherwise needs to be, anyway. these changes should not affect performance at all.
This commit is contained in:
parent
1bdd5c8b98
commit
5837a0bb6b
1 changed files with 4 additions and 9 deletions
|
@ -77,7 +77,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
|
|||
if (c == '.') {
|
||||
if (lrp!=-1) break;
|
||||
lrp = dc;
|
||||
} else if (k < KMAX) {
|
||||
} else if (k < KMAX-2) {
|
||||
dc++;
|
||||
if (j) x[k] = x[k]*10 + c-'0';
|
||||
else x[k] = c-'0';
|
||||
|
@ -88,7 +88,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
|
|||
gotdig=1;
|
||||
} else {
|
||||
dc++;
|
||||
x[KMAX-1] |= c-'0';
|
||||
if (c!='0') x[KMAX-3] |= 1;
|
||||
}
|
||||
}
|
||||
if (lrp==-1) lrp=dc;
|
||||
|
@ -146,7 +146,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
|
|||
int rpm9 = rp>=0 ? rp%9 : rp%9+9;
|
||||
int p10 = p10s[rpm9-1];
|
||||
uint32_t carry = 0;
|
||||
for (k=a; k!=z; k=(k+1 & MASK)) {
|
||||
for (k=a; k!=z; k++) {
|
||||
uint32_t tmp = x[k] % p10;
|
||||
x[k] = x[k]/p10 + carry;
|
||||
carry = 1000000000/p10 * tmp;
|
||||
|
@ -155,12 +155,7 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
|
|||
rp -= 9;
|
||||
}
|
||||
}
|
||||
if (carry) {
|
||||
if ((z+1 & MASK) != a) {
|
||||
x[z] = carry;
|
||||
z = (z+1 & MASK);
|
||||
} else x[z-1 & MASK] |= 1;
|
||||
}
|
||||
if (carry) x[z++] = carry;
|
||||
rp += 9-rpm9;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue