-
Notifications
You must be signed in to change notification settings - Fork 695
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bit reversing instructions #1382
Comments
I second this. SHR, SHR, AND, and BSWAP will be of help on the X86 implementation. Bit reversal is really useful, but really expensive in the absence of a competent primitive. |
@MaxGraey Are you still there? Perhaps we should propose a discussion of this at a future community group meeting. Related: register exchange instructions. Let's double check that these are already well supported. |
That's will be great. |
@MaxGraey Cool, care to pick a date? Ideally one with little or nothing already slated for discussion. |
If you have the opportunity, could you take it upon yourself? In the near future, I will be too busy to participate in meeting calls and try to propose this to WG as post-MVP op codes. |
@MaxGraey I'll see what I can do. It would be after May 11. |
which may 11th? ;) |
Future features mentioned a nice set for instruction set future improvements. For example
bswap
andbswap16
but missingbireverse
/bitrev
/rbit
operations which I think quite important due to it could be useful for wide range of compression algorithms, Cooley–Tukey's FFT, FHT, dyadic rational numbers and etc.Clang has builtins for that:
__builtin_bitreverse8
__builtin_bitreverse16
__builtin_bitreverse32
__builtin_bitreverse64
which quite useful due to implement bit reversing is quite challenging and some architectures like ARM64 could be lowered to single instruction
RBIT
.So it would be interesting to hear your opinion on whether to add
bitrev
to post-MVP?Proposed unary instructions:
Implementation details for runtimes
For x64 / ARMv7 / RISCV / MIPS / POWER and etc:
one read from 8-bit lookup table
two reads from 8-bit lookup table
four reads from 8-bit lookup table
use Knuth's method from Hacker's delight or 8 lookups if it faster on target architecture.
For more modern x64 architecture like Zen3 and Skylake bit reversing could be implemented via PDEP / PEXT instructions.
For ARM64:
The text was updated successfully, but these errors were encountered: