Remove all user-space asUint/toUint in the libraries. #5194
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Instead, we use
Integer.toUnsignedLong(x).toDouble
, which is semantically equivalent. The only remaining use ofx >>> 0
is in the JS-only runtime libraries, notablyRuntimeLong
.We add some optimizations to generate the best possible code on all targets.
For JS with
RuntimeLong
, we need to markRuntimeLong.toDouble
as fully inline. That is fine, as its body is actually very short (shorter than most methods ofRuntimeLong
). Moreover, we need a tailored rewrite in the optimizer to get rid of aDouble
addition of0.0 + y
wheny
is provably non-negative.For JS with
bigint
s, we directly fold(double) <toLongUnsigned>(x)
intox >>> 0
. Otherwise, we unnecessarily go through abigint
withNumber(BigInt(x >>> 0))
.For Wasm, we fold the same shape into a single operation
f64.convert_i32_u
, which we add inWasmTransients
.