Skip to content

Conversation

@tim-one
Copy link

@tim-one tim-one commented Jul 25, 2018

There's no need for the bits variable here. The number of loop iterations can be cut in half by repeatedly shifting right by 2 so long as the last 2 bits are zeroes. If there were in fact an odd number of trailing zero bits in q0, that will leave tmp with a last bit of 0, and so it won't pass the later (tmp & 7) == 1 test. If there were an even number of trailing zero bits, tmp is left the same as before the change, and again the only real thing left to test is whether (tmp & 7) == 1.

Caution: I didn't test or even compile this code! I was just browsing this on the web, and am using the web UI to edit. I've used the same trick in other projects, and am sure it's sound (give it a little thought - it's obvious ;-) ). Apologies in advance for any typos.

There's no need for the `bits` variable here.  The number of loop iterations can be cut in half by repeatedly shifting right by 2 so long as the last 2 bits are zeroes.  If there were in fact an odd number of trailing zero bits in `q0`, that will leave `tmp` with a last bit of 0,  and so it won't pass the later `(tmp & 7) == 1` test.   If there were an even number of trailing zero bits, `tmp` is left the same as before the change, and again the only real thing left to test is whether `(tmp & 7) == 1`.

Caution:  I didn't test or even compile this code!  I was just browsing this on the web, and am using the web UI to edit.  I've used the same trick in other projects, and am sure it's sound (give it a little thought - it's obvious ;-) ).  Apologies in advance for any typos.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants