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

 
 
> Про 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

Сообщений в этой теме
- 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
- - Dopler   А вообще, компилятор действительно не плох, он цеп...   Feb 9 2007, 23:32
|- - MALLOY2   Вот что у меня получилось IAR 4.41 оптимизция полн...   Feb 20 2007, 00:07
- - 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:21
Рейтинг@Mail.ru


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