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

 
 
> Как отключить оптимизацию switch() ?
GetSmart
сообщение Jan 29 2012, 07:40
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Перепробовал все прагмы типа
#pragma optimize=high/medium/low size/balanced/speed no_cse no_unroll no_tbaa no_inline no_code_motion

Всё равно switch() оптимизирует и тратит из-за этого DPL,DPH & B в прерывании MCS-51.

Мне надо чтобы switch из четырёх элементов сделался как через if () ...

Ну неужели придётся делать ручками через if
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
Xenia
сообщение Jan 29 2012, 08:03
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(GetSmart @ Jan 29 2012, 11:40) *
Мне надо чтобы switch из четырёх элементов сделался как через if () ...

Тогда и пишите 4 ифа вместо свича sm.gif.

Во всех реализациях языков программирования (с которыми я встречалась) switch - это выбор из списка адресов, каковыми могут быть либо адреса безусловных переходов, либо адреса подпрограмм. Поэтому и реализация его такова, что где-то такой список составляется, а конкретные реализации различается между собой лишь способом вычисления смещения от начала списка с последующим переходом на этот адрес.

Впервые слышу, чтобы switch оптимизировали путем замены на батарею if-ов. Если какие-то компиляторы на это способны, то хотелось бы услышать их названия.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 29 2012, 08:18
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Xenia @ Jan 29 2012, 12:03) *
...хотелось бы услышать их названия.

Keil
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 29 2012, 08:24
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Да и тот же IAR для ARM.
Switch из 15 case компилируется в простейший, но длинный список инструкций cmp - branch на максимальной оптимизации.
Вероятно, так будет экономнее по размеру памяти, по сравнению с таблицей адресов.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 29 2012, 08:40
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Неужели в самом деле родители ИАРа решили, что их детищу лучше знать всегда когда и где?

Цитата(sonycman @ Jan 29 2012, 13:24) *
Да и тот же IAR для ARM.
Switch из 15 case компилируется в простейший, но длинный список инструкций cmp - branch на максимальной оптимизации.

Именно енто я и хочу. Не знаю как его заставить.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 29 2012, 10:15
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Нда.
Переделал на if-ы.
Стало на 11 байт короче самого оптимизированного варианта со свичём. Плюс в 2 раза меньше стека юзает 5 vs 10 байт. Оптимизаторы, рационализаторы sm.gif
При этом в каждом if-е перечитывает переменную заново, хотя мог бы в акке держать и XOR-ить от варианта к варианту.

IAR 7.60, оптимизация high/size.

Ну а чего он читая битовую переменную (__bit || __bdata || sfr bit) анализирует её через флаг C, а не сразу в JB bit,label тоже вопрос к гениальным разработчикам.

Сообщение отредактировал GetSmart - Jan 29 2012, 11:48


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 29 2012, 11:55
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Xenia @ Jan 29 2012, 11:03) *
Впервые слышу, чтобы switch оптимизировали путем замены на батарею if-ов. Если какие-то компиляторы на это способны, то хотелось бы услышать их названия.

Я Вас умоляю... для MCS-51 команда CJNE <reg>, #immediate, offset как раз для этого случая. Может, кейл не понимайт, что выражение под свитчем не int, a char ?

Цитата(GetSmart @ Jan 29 2012, 13:15) *
Ну а чего он читая битовую переменную (__bit || __bdata || sfr bit) анализирует её через флаг C, а не сразу в JB bit,label тоже вопрос к гениальным разработчикам.

Ну да, ну да sm.gif А выражение куда девать? И что там с lazy evaluation, если sfr bit у нас volatile? Я думаю, курить их хелп-не перекурить. Или избегать стрёмных ситуаций.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 29 2012, 12:00
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(_Pasha @ Jan 29 2012, 16:55) *
Может, кейл не понимайт, что выражение под свитчем не int, a char ?

Какой Кейл? Подфорум об ИАРе. И не выражение, а переменная u08. Нету там promotion.

Цитата(_Pasha @ Jan 29 2012, 16:55) *
Ну да, ну да sm.gif А выражение куда девать? И что там с lazy evaluation, если sfr bit у нас volatile? Я думаю, курить их хелп-не перекурить. Или избегать стрёмных ситуаций.

Вот и волатил и неволатил делает одинаково. (Upd. с неволатилом ещё не проверил, оказалось везде был волатил)
lazy evaluation не знаю, куда притянуть.
Я наткнулся на таких и подобных командах
Код
if (SCON0_bit.TI0)
{ SCON_bit.TI0 = 0;     // хорошо хоть в этой команде не сдурил и сделал её битовой в одну команду
                        // а был бы умным, поставил вообще jbc bit,label


Сообщение отредактировал GetSmart - Jan 29 2012, 16:41


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 29 2012, 12:09
Сообщение #9


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Кейл sad.gif огорчил.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 29 2012, 13:16
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Вот ещё что:
Цитата(Xenia @ Jan 29 2012, 11:03) *
Во всех реализациях языков программирования (с которыми я встречалась) switch - это выбор из списка адресов, каковыми могут быть либо адреса безусловных переходов, либо адреса подпрограмм.

А где это так? ПП - это ведь дороговатая операция. Не видел, или не обращал внимания. Может, там где ближние переходы переходят в дальние? Типа для однородности
???
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 29 2012, 13:23
Сообщение #11


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Давно хотел спросить. Xenia, куда замылили ветку с новыми выкидышами от ИАР? sm.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 29 2012, 20:21
Сообщение #12


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(GetSmart @ Jan 29 2012, 17:23) *
Давно хотел спросить. Xenia, куда замылили ветку с новыми выкидышами от ИАР? sm.gif

Она на старом месте - http://electronix.ru/forum/index.php?showt...7015&st=195 в разделе (подфоруме) "Программное обеспечение - Soft, FTP", куда пускают только своих. Вы же его не видите потому, что вы не наш! sm.gif
Go to the top of the page
 
+Quote Post
arttab
сообщение Jan 30 2012, 01:09
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



iar #pragma optimize=none


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 30 2012, 01:48
Сообщение #14


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(arttab @ Jan 30 2012, 06:09) *
iar #pragma optimize=none

Делает по-прежнему.
Начинаю думать, что в 7.60 это единственный вариант кодирования свичей. Надо бы на 8-ой проверить.
На картинке вторая часть того, во что ИАР превращает свич из 4-ёх вариантов. Тихий ужас.

Цитата(Xenia @ Jan 30 2012, 01:21) *
...куда пускают только своих. Вы же его не видите потому, что вы не наш! sm.gif

Ага. Кто не с нами, тот против нас. Так и запишем в протокол.
А ведь до НГ я её видел. СОПУ испугались что ли.

Сообщение отредактировал GetSmart - Jan 30 2012, 05:01
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 30 2012, 07:15
Сообщение #15


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(GetSmart @ Jan 30 2012, 05:48) *
Тихий ужас.

Если все идут не в ногу, значит у Вас - какой-то косяг в определении данных.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:20
Рейтинг@Mail.ru


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