ARM Cortex-M0+ a rozdil LDM a LDR

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Středa Červenec 8 14:51:11 CEST 2015


Zajimavy spek, ze LDM bude implementovana jen pro oblast pameti je asi 
mozne, nakonec je to predpokladane pouziti, chyba je asi na strane 
kompilatoru nebo absence nejake option ktera mu rekne, pro co to ma 
kompilovat.
Zas se mi nezda, ze by Keil mel nejake takove chyby.
Neda se zakazat optimalizace pro konkretni funkci, ze bytato provedla 
pozadovane LDR/STR v asm a prekladac ji nechal, jak je?

Dne 8. 7. 2015 v 14:46 Hynek Sladky napsal(a):
> Rozdelovani na vic radku a dokonce ani vkladani ruznych meziinstrukci 
> nepomaha...
>
> Protoze se nemuzu spolehnout na to, ze to priste nezoptimalizuje 
> jinak, zkusil jsem pouzit inline assembler.
>
>           __asm {LDR data,[addr,#0]}
>           test_send (data, 4); // LDR r0,[r5,#0] works well...
>           addr += 4;
>
>
>           data = test_receive (4, 0);
>           __asm volatile {STR data,[addr,#0]}
>           addr += 4;
>
> Prvni pripad je IMHO jasny - volani funkce zafunguje jako dostatecna 
> bariera pro optimalizaci, takze LDR se pouzije (na to jsem prisel uz 
> na zacatku).
>
> V druhem pripade kompilator tvrdosijne ukazuje vlastni inteligenci: i 
> pres explicitni zapsani instrukce je ve vyslednem kodu opet STM.
>
> Po rade ruznych (vice ci mene zmatenych pokusu:-) nakonec zafungovalo:
>           __asm volatile {
>             STR data,[addr,#0]
>             ADDS addr,addr,#4
>           }
> I kdyz je mozne, ze po pripadnem upgradu na novou verzi prekladace to 
> zas prestane fungovat...
>
> Hynek
>
>
> Dne 8.7.2015 14:31, Tomáš Hamouz napsal(a):
>> 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é totohttp://www.efton.sk/sk/volatile.htm
>>
>> Tomáš
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150708/93fd3c51/attachment.html>


Další informace o konferenci Hw-list