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