Skip to content

Commit

Permalink
Rollup merge of rust-lang#56855 - nikic:remove-cttz-hack, r=nagisa
Browse files Browse the repository at this point in the history
Remove u8 cttz hack

This issue has since been fixed in LLVM: llvm-mirror/llvm@1886c8e

Furthermore this code doesn't actually work, because the 8 literal does not match the $BITS provided from the macro invocation, so effectively this was just dead code. Ref rust-lang#43024.

What LLVM does is still not ideal for CPUs that only have bsf but not tzcnt, will create a patch for that later.

r? @nagisa
  • Loading branch information
Centril authored Dec 16, 2018
2 parents 8662946 + c0ed771 commit a777754
Showing 1 changed file with 1 addition and 14 deletions.
15 changes: 1 addition & 14 deletions src/libcore/num/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2150,19 +2150,6 @@ impl isize {
"[0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x34, 0x56]" }
}

// Emits the correct `cttz` call, depending on the size of the type.
macro_rules! uint_cttz_call {
// As of LLVM 3.6 the codegen for the zero-safe cttz8 intrinsic
// emits two conditional moves on x86_64. By promoting the value to
// u16 and setting bit 8, we get better code without any conditional
// operations.
// FIXME: There's a LLVM patch (http://reviews.llvm.org/D9284)
// pending, remove this workaround once LLVM generates better code
// for cttz8.
($value:expr, 8) => { intrinsics::cttz($value as u16 | 0x100) };
($value:expr, $_BITS:expr) => { intrinsics::cttz($value) }
}

// `Int` + `UnsignedInt` implemented for unsigned integers
macro_rules! uint_impl {
($SelfT:ty, $ActualT:ty, $BITS:expr, $MaxV:expr, $Feature:expr, $EndFeature:expr,
Expand Down Expand Up @@ -2306,7 +2293,7 @@ assert_eq!(n.trailing_zeros(), 3);", $EndFeature, "
#[rustc_const_unstable(feature = "const_int_ops")]
#[inline]
pub const fn trailing_zeros(self) -> u32 {
unsafe { uint_cttz_call!(self, $BITS) as u32 }
unsafe { intrinsics::cttz(self) as u32 }
}
}

Expand Down

0 comments on commit a777754

Please sign in to comment.