<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <font face="Helvetica, Arial, sans-serif">Rozdelovani na vic radku a
      dokonce ani vkladani ruznych meziinstrukci nepomaha...<br>
      <br>
      Protoze se nemuzu spolehnout na to, ze to priste nezoptimalizuje
      jinak, zkusil jsem pouzit inline assembler.<br>
      <br>
                __asm {LDR data,[addr,#0]}<br>
                test_send (data, 4); // LDR r0,[r5,#0] works well...<br>
                addr += 4;<br>
      <br>
      <br>
                data = test_receive (4, 0);<br>
                __asm volatile {STR data,[addr,#0]}<br>
                addr += 4;<br>
      <br>
      Prvni pripad je IMHO jasny - volani funkce zafunguje jako
      dostatecna bariera pro optimalizaci, takze LDR se pouzije (na to
      jsem prisel uz na zacatku).<br>
      <br>
      V druhem pripade kompilator tvrdosijne ukazuje vlastni
      inteligenci: i pres explicitni zapsani instrukce je ve vyslednem
      kodu opet STM.<br>
      <br>
      Po rade ruznych (vice ci mene zmatenych pokusu:-) nakonec
      zafungovalo:<br>
                __asm volatile {<br>
                  STR data,[addr,#0]<br>
                  ADDS addr,addr,#4<br>
                }<br>
      I kdyz je mozne, ze po pripadnem upgradu na novou verzi prekladace
      to zas prestane fungovat...<br>
      <br>
      Hynek<br>
      <br>
      <br>
    </font>
    <div class="moz-cite-prefix">Dne 8.7.2015 14:31, Tomáš Hamouz
      napsal(a):<br>
    </div>
    <blockquote cite="mid:1223881964.20150708143155@divesoft.cz"
      type="cite">
      <pre wrap="">Zkuste mu vnutit rozdělení těch operací.
Na starších ARMech funguje

   *ptr = data;
   asm volatile ("");      // ano, opravdu prazdny kus assembleru
   ptr++;

   pripadne tam ten nop vnutit

   *ptr = data;
   asm volatile ("nop\r\n");
   ptr++;


Na Cortexech jsou na to nějaké pseudoindstrukce.
Prostudujte také toto <a class="moz-txt-link-freetext" href="http://www.efton.sk/sk/volatile.htm">http://www.efton.sk/sk/volatile.htm</a>

Tomáš
</pre>
    </blockquote>
  </body>
</html>