Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Sure, in Rust:

  fn sign_extend_u11(x: u32) -> u32 {
    (((x as i32) << (32-11)) >> (32-11)) as u32
  }
Doesn't have any of the C++ issues he mentions. And it will be faster than the alternative since it's just two instructions. (Ok this is never going to matter in practice but still...)


Shifts run on less ports than xor/sub, so should be avoided if possible when performance is important, especially when using SIMD where the shifts are often quite subpar.


Isn’t the alternative also two instructions:

  x ^ 0x400 - 0x400


But the C++20 code doesn't have this issue. That's my point. C++20 is 4 years old by this point.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: