Hacker News new | ask | show | jobs
by damianknz 4124 days ago
At first I thought the super-optimizer had made a mistake because the results are not the same but I think the error is in the original where line 6 should be

return -1;

Anyway, using assembler for CPU I made up in my head just now, how about

shl r0,1

and r0,1

3 comments

I don't think that'll work. Consider the positive integer 0b01: the shift yields 0b10, then the and yields 0.

I've actually tried to come up with a simpler example. It's tougher than you'd think, and you pretty much have to do weird stuff with flags. The superoptimiser trick is pretty neat.

Do you mean (r0 << 1) & 1? That would always yield zero.
Faster code for same end result is:

xor r0, r0