Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
406852a
Resolve overflow behavior for RangeFrom
CAD97 May 20, 2020
a8ed9aa
impl From<[T; N]> for Box<[T]>
pickfire Apr 13, 2020
96f3879
impl Step for char
CAD97 May 21, 2020
c25b82f
Use Step::forward_unchecked in RangeInclusive::next
CAD97 May 21, 2020
34b5118
Suggest using std::mem::drop function instead of explicit destructor …
stanislav-tkach May 20, 2020
27d1cd8
Add safety annotations in iter::range
CAD97 May 21, 2020
b1d1f25
Add a test for char ranges
CAD97 May 21, 2020
a9199de
Merge spans for the suggestion
stanislav-tkach May 22, 2020
68bab3e
Add total_cmp to f32 and f64, plus tests
golddranks May 22, 2020
b6eec22
Fix typo in src/libcore/num/f32.rs
golddranks May 25, 2020
d6650e0
Fix typo in src/libcore/num/f32.rs
golddranks May 25, 2020
bd68de8
remove unneeded and unidiomatic must_use
golddranks May 25, 2020
6973fd7
Add bit twiddling
golddranks May 25, 2020
8bc31ff
Fix the same typos again orz
golddranks May 25, 2020
c3dc8c4
Rename upvar_list to closure_captures
May 25, 2020
66da735
Add tracing issue for total_cmp
golddranks May 26, 2020
ca722b9
Add test for #56445
JohnTitor May 25, 2020
125f0ab
Add test for #68532
JohnTitor May 25, 2020
4b87f97
Add test for #70121
JohnTitor May 25, 2020
6315d0c
Add test for #71042
JohnTitor May 26, 2020
6ddbef1
Simplify suggestion
stanislav-tkach May 26, 2020
822ad87
Add Peekable::next_if
jyn514 May 18, 2020
709ddba
Allow types (with lifetimes/generics) in impl_lint_pass
flip1995 May 27, 2020
b124892
Add test for {impl,declare}_lint_pass macros
flip1995 May 27, 2020
cd6a8ca
FIx off-by-one in char::steps_between
CAD97 May 28, 2020
52ed89a
from_u32_unchecked: check validity when debug assertions are enabled
RalfJung May 28, 2020
ce81d15
Add test to make sure -Wunused-crate-dependencies works with tests
jsgf May 28, 2020
d5e6bda
Make remote-test-client and remote-test-server compatible with windows
seritools May 27, 2020
2adbfa9
Unify temp path generation for non-android
seritools May 28, 2020
36d6791
Fix `set_permissions` call for non-windows
seritools May 29, 2020
03fe603
Rollup merge of #71095 - pickfire:box-from-array, r=dtolnay
Dylan-DPC May 29, 2020
ee1a4bc
Rollup merge of #72310 - jyn514:peekable-next-if, r=dtolnay
Dylan-DPC May 29, 2020
077383d
Rollup merge of #72368 - CAD97:rangeto, r=dtolnay
Dylan-DPC May 29, 2020
b08978e
Rollup merge of #72383 - DarkEld3r:issue-72322, r=matthewjasper
Dylan-DPC May 29, 2020
b88dc2e
Rollup merge of #72413 - CAD97:char-range, r=dtolnay
Dylan-DPC May 29, 2020
bc61a5f
Rollup merge of #72568 - golddranks:add_total_cmp_to_floats, r=sfackler
Dylan-DPC May 29, 2020
5109c96
Rollup merge of #72572 - JohnTitor:add-tests, r=matthewjasper
Dylan-DPC May 29, 2020
343ea07
Rollup merge of #72591 - sexxi-goose:rename_upvar_list-to-closure_cap…
Dylan-DPC May 29, 2020
a3d1c79
Rollup merge of #72657 - flip1995:impl_lint_pass-ty, r=matthewjasper
Dylan-DPC May 29, 2020
9279a6a
Rollup merge of #72672 - seritools:remote-test-windows, r=Mark-Simula…
Dylan-DPC May 29, 2020
793967b
Rollup merge of #72683 - RalfJung:char-debug-check, r=Mark-Simulacrum
Dylan-DPC May 29, 2020
ebac81e
Rollup merge of #72710 - jsgf:unused-deps-test, r=jsgf
Dylan-DPC May 29, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add bit twiddling
  • Loading branch information
golddranks committed May 25, 2020
commit 6973fd716b51b01debf39edd8e43f0059be3d053
18 changes: 10 additions & 8 deletions src/libcore/num/f32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -857,7 +857,7 @@ impl f32 {
let mut left = self.to_bits() as i32;
let mut right = other.to_bits() as i32;

// In case of negatives, flip all the bits except the sign
// In case of negatives, flip all the bits expect the sign
// to achieve a similar layout as two's complement integers
//
// Why does this work? IEEE 754 floats consist of three fields:
Expand All @@ -872,13 +872,15 @@ impl f32 {
// To easily compare the floats as signed integers, we need to
// flip the exponent and mantissa bits in case of negative numbers.
// We effectively convert the numbers to "two's complement" form.
if left < 0 {
// i32::MAX corresponds the bit pattern of "all ones except for the sign bit"
left ^= i32::MAX
};
if right < 0 {
right ^= i32::MAX
};
//
// To do the flipping, we construct a mask and XOR against it.
// We branchlessly calculate an "all-ones expect for the sign bit"
// mask from negative-signed values: right shifting sign-extends
// the integer, so we "fill" the mask with sign bits, and then
// convert to unsigned to push one more zero bit.
// On positive values, the mask is all zeros, so it's a no-op.
left ^= (((left >> 31) as u32) >> 1) as i32;
right ^= (((right >> 31) as u32) >> 1) as i32;

left.cmp(&right)
}
Expand Down
16 changes: 9 additions & 7 deletions src/libcore/num/f64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -886,13 +886,15 @@ impl f64 {
// To easily compare the floats as signed integers, we need to
// flip the exponent and mantissa bits in case of negative numbers.
// We effectively convert the numbers to "two's complement" form.
if left < 0 {
// i64::MAX corresponds the bit pattern of "all ones expect for the sign bit"
left ^= i64::MAX
};
if right < 0 {
right ^= i64::MAX
};
//
// To do the flipping, we construct a mask and XOR against it.
// We branchlessly calculate an "all-ones expect for the sign bit"
// mask from negative-signed values: right shifting sign-extends
// the integer, so we "fill" the mask with sign bits, and then
// convert to unsigned to push one more zero bit.
// On positive values, the mask is all zeros, so it's a no-op.
left ^= (((left >> 63) as u64) >> 1) as i64;
right ^= (((right >> 63) as u64) >> 1) as i64;

left.cmp(&right)
}
Expand Down