Page 1 of 1

Компиляция С на АРМе

PostPosted: 02 Jul 2012, 02:11
by TS-Labs
Кто тут шарит в АРМах? Скажите, нафига компилер вставляет вот этот ноп:

103: __inline void AY_Tick_tone(int n) {
0x00000B60 F04F0C00 MOV r12,#0x00
0x00000B64 2E00 CMP r6,#0x00
0x00000B66 F34080FC BLE.W 0x00000D62
104: if (AY[n].ctr_tn0 < AY[n].TF0.h)
0x00000B6A BF00 NOP
0x00000B6C EB08108C ADD r0,r8,r12,LSL #6
0x00000B70 8983 LDRH r3,[r0,#0x0C]
0x00000B72 8884 LDRH r4,[r0,#0x04]
0x00000B74 42A3 CMP r3,r4

В дальнейшем переход в цикле происходит на адрес после НОПа:
0x00000D5C 45B4 CMP r12,r6
0x00000D5E F6FFAF05 BLT.W 0x00000B6C

Компилятор армовский 4.1.
Выставлена оптимизация О3, по скорости, межмодульная.
Проц STM32F407VGT6 (Cortex-M4F).

Мои предположения:
1. Херово оптимизирует. Глупый вариант, для статистики.
2. Что то связанное с выравниванием по адресам на 4. Но джампы работают и на адреса кратные 2.
3. Какая-то фича для внутреннего фетчера/бранч предиктора.

Re: Компиляция С на АРМе

PostPosted: 02 Jul 2012, 02:34
by lvd
Говно*ЦЦ же, компилит в говне*ЦЦо, чо тут думать, ы?

Кстати, что за "Компилятор армовский 4.1.", гугел не знает, зато...
1.png

И почему-то, готов согласиться...

Re: Компиляция С на АРМе

PostPosted: 02 Jul 2012, 09:17
by DimkaM
я за второй пункт первого варианта.
16bit или 8bit статика.
может даже 2х8бит, хотя незнаю 32бит процы наверно неумеют так.

Re: Компиляция С на АРМе

PostPosted: 02 Jul 2012, 11:12
by lvd
DimkaM wrote:я за второй пункт первого варианта.
16bit или 8bit статика.
может даже 2х8бит, хотя незнаю 32бит процы наверно неумеют так.

Нераспарсил ни всё вместе, ни каждое пердложение в отдельности.

Re: Компиляция С на АРМе

PostPosted: 02 Jul 2012, 13:21
by DimkaM
статичные переменные

Re: Компиляция С на АРМе

PostPosted: 02 Jul 2012, 13:24
by TS-Labs
lvd wrote:И почему-то, готов согласиться...

Ну типа родился новый мем. Спасибо за раскрутку.
Не знаю, как используя русский язык и образование прилагательных, назвать компилер скачанный с сцайта арм.ком.
Спасибо за точный и содержательный ответ, мой непиздабольный друг. Ответ твой совершенно точен и никому нахуй не нужен.
Датошит поцказал, что таки выбиратор из флэша заалайнен на адрес кратный 4 байтам.