| 347 | // Rotate bits. |
| 348 | template <typename T, bool left> |
| 349 | inline static T Rot(T opnd, int distance) { |
| 350 | int mask = BitSizeOf<T>() - 1; |
| 351 | int unsigned_right_shift = left ? (-distance & mask) : (distance & mask); |
| 352 | int signed_left_shift = left ? (distance & mask) : (-distance & mask); |
| 353 | using unsigned_type = typename std::make_unsigned<T>::type; |
| 354 | return (static_cast<unsigned_type>(opnd) >> unsigned_right_shift) | (opnd << signed_left_shift); |
| 355 | } |
| 356 | |
| 357 | // TUNING: use rbit for arm/arm64 |
| 358 | inline static uint32_t ReverseBits32(uint32_t opnd) { |
nothing calls this directly
no outgoing calls
no test coverage detected