On 2/25/22 19:37, Giovanni Mascellani wrote:
v2:
- Handle alignments that are not powers of 2 minus 1. According to my tests, this result in the alignment being increased to the smalles power of 2 minus 1 bigger than the requested alignment. I can add tests if it is wanted.
Please do, if such tests pass reliably.
- /* Saturate bits to the right, so that alignment is a power of 2
* minus 1. */
- for (i = 1; i < 8 * sizeof(alignment); i *= 2)
alignment |= alignment >> i;
This looks like it would loop longer than it has it.
I think it should loop until remaining alignment is not zero, like this (untested):
while (alignment) { // accumulate result here alignment = alignment >> 1; }
Also it's not clear if alignment == 0 should work at all.