There are a few things that I wanted to reorganize for a while:
- the loop that incrementally goes through classes on failure looked horrible in assembly, mostly because of LIKELY/UNLIKELY within the loop. So remove those, we are already in an unlikely scenario
- hooks are not used by default on Android/Fuchsia/etc so mark the tests for the existence of the weak functions as unlikely
- mark of couple of conditions as likely/unlikely
- in reallocate, the old size was computed again while we already have it in a variable. So just use the one we have.
- remove the bitwise OR trick and use a logical OR, that has one less test by using a purposeful underflow when Size is 0 (I actually looked at the assembly of the previous code to steal that trick)
- move the read of the options closer to where they are used, mark them as const
Overall this makes things a tiny bit faster, but cleaner.
Isn't this changing the condition? i.e. it should be Size - 1 > QuarantineMaxChunkSize - 1 now.
Does the assembly still look bad if we just have logical OR here with the original clauses?