core,render: Improve performance of "round to nearest, ties to even" float operations #16250
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.
This patch improves performance of
ecma_conversions::round_to_even()
andmatrix::round_to_i32()
:f64::round_ties_even()
/f32::round_ties_even()
, which have been stable since 1.77.0, instead of a custom algorithm; andi32::MIN
, as casting a float to an integer automatically saturates values smaller than the minimum integer value to the minimum value of the integer type.A primitive benchmark shows around 20% faster execution of these operations. In the case of
matrix::round_to_i32()
we can potentially expect noticeable improvements in overall performance as this operation is quite commonly used.ecma_conversions::round_to_even()
f64
ecma_conversions::round_to_even()
f64
matrix::round_to_i32()
f32
matrix::round_to_i32()
f32
Those functions have been covered by tests to ensure the behavior hasn't changed.