5 ms·
So you can have bit arrays of any length in memory, rather than just 32 bits in a register.
by rep_lodsb 8mo ago
So you can have bit arrays of any length in memory, rather than just 32 bits in a register.
- cmovq 8mo agoThat makes sense. LLVM could probably do better here by using the memory operand version: https://godbolt.org/z/jeqbaPsMz https://godbolt.org/z/jeqbaPsMz
- jxors 8mo agoThe memory operand version tends to be as slow or slower than the manual implementation, so LLVM is right to avoid it.
- cmovq 8mo agoRight, it has much worse throughput: Memory: https://uica.uops.info/tmp/f022a3c0a70e4ae5ab3588ebe65fd2a5_trace.html https://uica.uops.info/tmp/f022a3c0a70e4ae5ab3588ebe65fd2a5_... Register: https://uica.uops.info/tmp/e80e60e0c4914955b11dc6590711c1b8_trace.html https://uica.uops.info/tmp/e80e60e0c4914955b11dc6590711c1b8_...
- ack_complete 8mo agoDon't think the memory operand version would work here. If I understand the x86 architectural manual description, the 32-bit operand form interprets the bit offset as signed. A 64-bit operand could work around that but then run into issues with over-read due to fetching 64 bits of data.