https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66727

            Bug ID: 66727
           Summary: Example artificial dependency incorrect
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: inline-asm
          Assignee: unassigned at gcc dot gnu.org
          Reporter: T.E.Baldwin99 at members dot leeds.ac.uk
  Target Milestone: ---

The in the section on extended asm the manual states:

The compiler may move the addition back before the volatile asm. To make it
work as expected, add an artificial dependency to the asm by referencing a
variable in the subsequent code, for example:

     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
     sum = x + y;

However this addition does not depend on the asm and the code is permitted to
be reordered to:

     sum = x + y;
     asm volatile ("mtfsf 255,%1" : "=X" (sum1) : "f" (fpenv));

The example should perhaps pass x or y though the asm:

     asm volatile ("mtfsf 255,%1" : "+g" (x) : "f" (fpenv));
     sum = x + y;

Reply via email to