реклама на сайте
подробности

 
 
> Про IAR компилятор С
Dopler
сообщение Feb 6 2007, 14:45
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Здравствуйте.

Раньше никогда на C под железо не писал, только на ассемблере. Но жизнь показывает, что для ARM писать все на asm не актуально. Начал смотреть, какой код генерирует компилятор. Вот для примера две строки на C:

Код
      for(waiting_time = 1999; waiting_time >= 0; waiting_time--);

      for(waiting_time = 0; waiting_time <= 2000; waiting_time++);


Обе эти строки эквивалентны с точки зрения выполнения программы на С (т.е. будет 2000 шагов). Компилятор генерирует следующий код:

\ main:
\ ??main_0:
\ 00000000 CF00A0E3 MOV R0,#+207
\ 00000004 700E80E3 ORR R0,R0,#0x700
\ 00000008 000000EA B ??main_1
\ ??main_2:
\ 0000000C 010040E2 SUB R0,R0,#+1
\ ??main_1:
\ 00000010 000050E3 CMP R0,#+0
\ 00000014 FCFFFF5A BPL ??main_2
19
20 //AT91C_BASE_PIOB->PIO_CODR = 1 << 22;
21 for(waiting_time = 0; waiting_time < 2000; waiting_time++) ;
\ 00000018 0000A0E3 MOV R0,#+0
\ ??main_3:
\ 0000001C 7D0E50E3 CMP R0,#+2000
\ 00000020 F6FFFFAA BGE ??main_0
\ 00000024 010080E2 ADD R0,R0,#+1
\ 00000028 FBFFFFEA B ??main_3



Мне кажется, что выделенная строка явно лишняя, так как флаг нулевого значения выставляется и в предыдущей команде. Во-вторых, при декременте (в первом варианте) есть лишний переход. Таким образом, эквивалентность циклов на С достигнута искуственно. Возможно, это сделано специально (а возможно, человек пока способен генерировать все же лучший код)? Возможно, это где-то описанно или отключается?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dopler
сообщение Feb 9 2007, 23:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



А вообще, компилятор действительно не плох, он цепляется за любую мелочь. Например, если 2000 выходит за ранг MOV, он понимает, что можно загрузить 250 и сдвинуть на 4. А вот если пользователь захочет 1999, тогда уж лучше завести константу в памяти. Конечно, про расчет времени выполнения программы по тактам можно забыть.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Feb 20 2007, 00:07
Сообщение #3


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Вот что у меня получилось IAR 4.41 оптимизция полная по скорости

Код
void delay(long tmp)
{
while(--tmp);
}



результат
Код
   In segment CODE, align 4, keep-with-next
                void delay(long tmp)
                {
                 while(--tmp);
                  delay:
                  ??delay_0:
                   00000000   010050E2           SUBS     R0,R0,#+1
                   00000004   FDFFFF1A            BNE      ??delay_0
                 }
                   00000008   1EFF2FE1            BX       LR              ;; return



при этом он пытается ее инлайнить всегда, но от этого можно легко избавится при желании
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dopler   Про IAR компилятор С   Feb 6 2007, 14:45
- - Newegor   Поиграйтесь с настройками оптимизации. При различн...   Feb 6 2007, 15:08
- - VAI   я, обычно, смотрю листинг, что у меня получилось, ...   Feb 6 2007, 16:58
|- - scifi   Забавно, а у меня комилятор в обоих случаях сгенер...   Feb 8 2007, 15:26
|- - Dopler   Цитата(scifi @ Feb 8 2007, 15:26) Приме...   Feb 8 2007, 16:02
|- - Сергей Борщ   Цитата(Dopler @ Feb 8 2007, 15:02) Если у...   Feb 8 2007, 17:28
- - scifi   ЦитатаСледующий вопрос, а как-нибудь вообще можно ...   Feb 8 2007, 20:49
|- - Dopler   Цитата(scifi @ Feb 8 2007, 20:49) Попробу...   Feb 8 2007, 22:21
|- - zltigo   Цитата(Dopler @ Feb 8 2007, 21:21) И при ...   Feb 8 2007, 22:50
- - Dopler   Похоже самый надежный способ, это тот, который рек...   Feb 9 2007, 08:51
- - scifi   Если я правильно понял, нужно получить малые задер...   Feb 9 2007, 11:37
|- - Dopler   Цитата(scifi @ Feb 9 2007, 11:37) Если я ...   Feb 9 2007, 12:36
||- - MrYuran   Цитата(Dopler @ Feb 9 2007, 15:36) Просто...   Mar 19 2008, 08:37
||- - IgorKossak   Цитата(MrYuran @ Mar 19 2008, 10:37) А фу...   Mar 19 2008, 08:48
|- - zltigo   Цитата(scifi @ Feb 9 2007, 10:37) Время в...   Feb 9 2007, 13:13
|- - Dopler   Цитата(zltigo @ Feb 9 2007, 13:13) Цитата...   Feb 9 2007, 14:40
|- - zltigo   Цитата(Dopler @ Feb 9 2007, 13:40) Я имел...   Feb 9 2007, 15:09
- - Dopler   Так #pragma optimize не позволяет повысить уровень...   Feb 9 2007, 13:02
- - Dopler   Вернемся к поиску оптимального кода. Приведенный в...   Feb 9 2007, 23:21
- - aspID   дабы не открывать новую ветку... Помогите понять,...   Mar 19 2008, 07:03
- - IgorKossak   Цитата(aspID @ Mar 19 2008, 09:03) дабы н...   Mar 19 2008, 08:03
- - aspID   Цитата(IgorKossak @ Mar 19 2008, 14:03) Н...   Mar 19 2008, 08:08
- - IgorKossak   Цитата(aspID @ Mar 19 2008, 10:08) Да, им...   Mar 19 2008, 08:13


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016