[PATCH] Inline assembly division needs __volatile__
Niels Möller
nisse at lysator.liu.se
Wed Oct 25 18:19:10 UTC 2017
Ximin Luo <infinity0 at pwned.gg> writes:
> Ximin Luo:
>> Because division assembly instructions can raise processor
>> exceptions, these need __volatile__ annotations. Otherwise, this can
>> result in unintended optimisations that cause spurious SIGFPEs,
>> e.g.: https://github.com/fredrik-johansson/arb/issues/194
>>
>> See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82677 for details.
Ouch, that's subtle. If I may summarize: If we have code like
if (d != 0)
__asm__ (...);
gcc might generate code which unconditionally evaluates the __asm__
expression, followed by code to ignore the outputs if the condition is
false. E.g., using conditional move instructions.
And that breaks if the __asm__ might raise a divide-by-zero exceptions
if the condition is false.
Adding a volatile declaration to the asm expression seems to be the
documented way to tell gcc it shouldn't do that.
Regards,
/Niels
--
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.
More information about the gmp-bugs
mailing list