|
Эффективность кода WinAVR |
|
|
|
 |
Ответов
|
Apr 21 2008, 14:43
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Я в шоке. Какой код можно сгенерировать на такую строку: Код if(v & F0BIT) Вот результат: Код if(v & F0BIT) +0000003B: 2F24 MOV R18,R20 Copy register +0000003C: 2733 CLR R19 Clear Register +0000003D: 2F93 MOV R25,R19 Copy register +0000003E: 2F82 MOV R24,R18 Copy register +0000003F: E063 LDI R22,0x03 Load immediate +00000040: 9596 LSR R25 Logical shift right +00000041: 9587 ROR R24 Rotate right through carry +00000042: 956A DEC R22 Decrement +00000043: F7E1 BRNE PC-0x03 Branch if not equal +00000044: 7081 ANDI R24,0x01 Logical AND with immediate +00000045: 7090 ANDI R25,0x00 Logical AND with immediate +00000046: 2388 TST R24 Test for Zero or Minus +00000047: F011 BREQ PC+0x03 Branch if equal А все потому, что константа F0BIT описана следующим образом: Код const int F0BIT = (1<<F0); const int F1BIT = (1<<F1); И вот вместо того, чтобы на этапе компиляции вычислить это выражение и сделать логическое И с переменной, компилятор решает сдвинуть переменную на F0 битов! Особенно порадовала строка ANDI R25,0x00. Впрочем, CLR R19 с последующей MOV R25,R19 тоже ничего... А я уж было обрадовался что компилятор заработал...
|
|
|
|
|
Apr 21 2008, 16:44
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Палыч @ Apr 21 2008, 19:48)  Что, тоже сдвигает?  А, если так: #define F0BIT (1<<F0) То же самое. Впрочем, я уже скачал новую версию, 20080411 (4.3.0), там это место генерируется весьма эффективно, через SBRS, но там в другом месте глюк - часть кода не транслируется вообще, завтра буду разбираться.
|
|
|
|
Сообщений в этой теме
777777 Эффективность кода WinAVR Apr 21 2008, 07:06 Kuzmi4 2 777777 - какие ключи использовали ??
..
там в пр... Apr 21 2008, 07:07 777777 Цитата(Kuzmi4 @ Apr 21 2008, 11:07) 2 777... Apr 21 2008, 07:12  Палыч -O0 - Do not optimize
Ключи описаны в файле gcc.p... Apr 21 2008, 07:18   Obama Цитата(Палыч @ Apr 21 2008, 11:18) -O0 - ... Apr 21 2008, 09:48 777777 Цитата(Kuzmi4 @ Apr 21 2008, 11:07) там в... Apr 21 2008, 07:21  MrYuran Цитата(777777 @ Apr 21 2008, 11:21) Класс... Apr 21 2008, 07:28   Палыч Цитата(MrYuran @ Apr 21 2008, 10:28) надо... Apr 21 2008, 08:06   777777 Цитата(MrYuran @ Apr 21 2008, 11:28) надо... Apr 21 2008, 08:54    Палыч Цитата(777777 @ Apr 21 2008, 11:54) Э, эт... Apr 21 2008, 09:03     mse Цитата(Палыч @ Apr 21 2008, 13:03) И, зач... Apr 21 2008, 09:24 Палыч gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc.pdf
P.S. Све... Apr 21 2008, 09:59    singlskv Цитата(777777 @ Apr 21 2008, 19:42) Тот ж... Apr 21 2008, 15:46 Qwertty GCC 3.4.6
Код#define F0 5
const int F0BIT = (1... Apr 21 2008, 17:11 777777 Цитата(Qwertty @ Apr 21 2008, 21:11) GCC ... Apr 22 2008, 04:31  Qwertty Цитата(777777 @ Apr 22 2008, 08:31) У мен... Apr 22 2008, 07:05   777777 Цитата(Qwertty @ Apr 22 2008, 11:05) Нико... Apr 22 2008, 07:30    IgorKossak Цитата(777777 @ Apr 22 2008, 10:30) Правд... Apr 22 2008, 07:39 Aesthete Animus Вопрос конечно совсем не в тему... Но не скажите к... Apr 21 2008, 17:36 Qwertty Цитата(Aesthete Animus @ Apr 21 2008, 21... Apr 21 2008, 17:50  Aesthete Animus Цитата(Qwertty @ Apr 21 2008, 21:50) Я за... Apr 21 2008, 18:24 west329_ извеняюсь за оффтоп, что ето значит volatile, встр... Apr 22 2008, 07:17
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|