On 01/26/18 03:08, Peter Dimov via Boost wrote:
if (a.sub_and_test(1))
Also, the generated code for these operations can potentially be more efficient.
While we're on the subject, on what architectures would opaque_sub be more efficient than sub_and_test?
On x86 and gcc < 7 opaque_sub allows to use "lock sub" or "lock dec" without setting the bool according to the zero flag, i.e. it saves a register and an instruction. Gcc 7 introduced the ability to return flags from the asm statement, so the code can be written the same way. Although I noticed that the compiler tends to save the flag into a register early unless it is tested immediately, so in some cases opaque_sub might still be preferable where it suits. AFAIK, other compilers, including clang, don't support this feature.