summaryrefslogtreecommitdiffstats
path: root/generic/tclStrToD.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2025-05-09 18:13:17 (GMT)
committerdgp <dgp@users.sourceforge.net>2025-05-09 18:13:17 (GMT)
commit0e8128247f4e30a8267d342c323765b6bf6cd644 (patch)
tree178ac8dfc9bc556dc9b906db4b10fbec1d068146 /generic/tclStrToD.c
parent9c7449fb49496cf68c0eef7452e0ad2bb3fac931 (diff)
downloadtcl-0e8128247f4e30a8267d342c323765b6bf6cd644.zip
tcl-0e8128247f4e30a8267d342c323765b6bf6cd644.tar.gz
tcl-0e8128247f4e30a8267d342c323765b6bf6cd644.tar.bz2
[fd1585e2a1] Adopt efficient internal indexing calculation utility TclMSB().
Diffstat (limited to 'generic/tclStrToD.c')
-rw-r--r--generic/tclStrToD.c28
1 files changed, 2 insertions, 26 deletions
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index d4843e7..69aafaa 100644
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -2352,33 +2352,9 @@ static int
RequiredPrecision(
Tcl_WideUInt w) /* Number to interrogate. */
{
- int rv;
- unsigned int wi;
+ /* assert(sizeof(Tcl_WideUInt) <= sizeof(long long)) */
- if (w & ((Tcl_WideUInt)0xFFFFFFFF << 32)) {
- wi = (unsigned int)(w >> 32); rv = 32;
- } else {
- wi = (unsigned int)w; rv = 0;
- }
- if (wi & 0xFFFF0000) {
- wi >>= 16; rv += 16;
- }
- if (wi & 0xFF00) {
- wi >>= 8; rv += 8;
- }
- if (wi & 0xF0) {
- wi >>= 4; rv += 4;
- }
- if (wi & 0xC) {
- wi >>= 2; rv += 2;
- }
- if (wi & 0x2) {
- wi >>= 1; ++rv;
- }
- if (wi & 0x1) {
- ++rv;
- }
- return rv;
+ return w ? 1 + TclMSB((unsigned long long) w) : 0;
}
/*