The 8-Byte Two-Step
zinascii.com
The 8-Byte Two-Step
1–10 of 34 posts
Re: The 8-Byte Two-Step
#2Re: The 8-Byte Two-Step
#3Re: The 8-Byte Two-Step
#4I've done this before, but usually take modulo 8 rather than bitwise-and negative 7 as the final step.
Re: The 8-Byte Two-Step
#5Re: The 8-Byte Two-Step
#6I'd agree with his last sentence: "My guess, this was done more as an idiom of systems programming than as an optimization."
Re: The 8-Byte Two-Step
#7I'd agree with his last sentence: "My guess, this was done more as an idiom of systems programming than as an optimization."
I was further stunned by the seeming naivety of the author's align_2() implementation, but then it does get the job done, eventually. My naive approach would've been roughly align_3(), but using integer math and modulus.
On the other hand, younger team members were recently stunned by code I did for translation of a binary protocol into more easily handled pieces using what I think of as typical idioms, so this article might get sent around Monday morning.
Re: The 8-Byte Two-Step
#8Holy shit, mind blown. I've done this before, but usually take modulo 8 rather than bitwise-and negative 7 as the final step.
Re: The 8-Byte Two-Step
#9If we want to avoid bit twiddling, how about this:
(mqhp->mq_maxsz + MQ_ALIGNSIZE - 1) / MQ_ALIGNSIZE * MQ_ALIGNSIZE;
I would expect a compiler to emit the same instructions as the original, but at worst you would have an add and two shifts rather than jumps or complex float operations.
Re: The 8-Byte Two-Step
#10I'd agree with his last sentence: "My guess, this was done more as an idiom of systems programming than as an optimization."
Doubly agreed -- similar patterns appear elsewhere to avoid off-by-one errors and bitmasking is fairly intuitive to anyone regularly working at that level. I was surprised at the author not recognizing this idiom, but you have to learn it sometime! I was further stunned by the seeming naivety of the author's align_2() implementation, but then it does get the job done, eventually. My naive approach would've been rough…
But you are right, this is indeed a very obvious line of code once you understand it. Thank you for your comments.