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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Запрет использования регистров дляя своих нужд, IAR ARM 4.42A
SpiritDance
сообщение Jun 2 2009, 04:49
Сообщение #1


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Подскажите есть ли возможность запрета использования компилятором некоторых регистров процессора? В avr помнится было такое есть ли в арме? Поиском по форуму и в доке не нашел, надеюсь что плохо искал.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jun 2 2009, 05:22
Сообщение #2


Знающий
****

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



нет такого
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 2 2009, 06:21
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(SpiritDance @ Jun 2 2009, 07:49) *
В avr помнится было такое ...

Это потому, что у AVR регистров явный избыток. Полемика на эту тему уже была на форуме неоднократно.
У ARM регистров не так много и они более функциональны. Если же необходимость выделения регистра связана с нехваткой быстродействия, то Вы, на мой взгляд, ошиблись камнем, выбирайте что-нибудь побыстрее.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 2 2009, 06:50
Сообщение #4


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Вообще-то актуальность отнятия регистров возникает в основном для быстрой работы процедур обработки прерывания. Стоит вспомнить, что в архитектуре ARM7/9 в режиме FIQ банкируются регистры R8-R14. Стек FIQ можно не пользовать (освобождается R13), R14 хранит адрес возврата (так уж и быть, пусть будет занят), итого есть 6 регистров. Вполне.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 2 2009, 07:21
Сообщение #5


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Вообще очень странно что у IAR для ARM нет блокирования регистров.
У RVCT и GCC есть. Причем если взять родной ARM документ по calling conversion, там есть рекомендации какие регистры можно блокировать и сколько.
Например для ARM7 Atmel использовать режим ARM смысла нет ( из-за медленной флеш), а регистры R8-R11 IAR обычно не использует вообще в режиме THUMB их было бы удобно зарезервировать для контекста или ...
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 2 2009, 07:43
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Вообще очень странно что у IAR для ARM нет блокирования регистров.


Да ничего странного. Слишком мало регистров.

Цитата
Например для ARM7 Atmel использовать режим ARM смысла нет ( из-за медленной флеш)


Очень спорное утверждение.

Цитата
Причем если взять родной ARM документ по calling conversion, там есть рекомендации какие регистры можно блокировать и сколько.


Вы имеете в виду этот документ - http://infocenter.arm.com/help/topic/com.a...0042C_aapcs.pdf ?

Что-то в нем не видать рекомендаций по блокированию регистров. Ну кроме platform-specific R9 usage.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 2 2009, 07:57
Сообщение #7


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Rst7 @ Jun 2 2009, 11:43) *
Очень спорное утверждение.

На максимальной частоте для ARM режима один WAIT state у атмела.
получается при опреациях с регистрами инструкция THUMB будет выполняться в 2 раза быстрее!
У NXP где то видел что в среднем ARM код процентов на 30 быстрее, но THUMB код процентов на 70 плотнее.
Но у NXP флеш не вносит задержки.
В свое время IAR компилер генерировал самый лучший THUMB код и atmel рекомендовал сам THUMB использовать что бы задержек не было.

Цитата(Rst7 @ Jun 2 2009, 11:43) *
Вы имеете в виду этот документ - http://infocenter.arm.com/help/topic/com.a...0042C_aapcs.pdf ?
Что-то в нем не видать рекомендаций по блокированию регистров. Ну кроме platform-specific R9 usage.

Ну да там только названия регистров, и про R9 написано. его надо вместе с докой на RVCT читать там написано сколько регистров для какого режима можно заблокировать.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 2 2009, 07:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Rst7 @ Jun 2 2009, 10:43) *
Да ничего странного. Слишком мало регистров.

Ну, если учесть их 4x ширину, то не очень-то и мало smile.gif. Но основная причина это именно наличие банков регистров.
Цитата
Очень спорное утверждение.

Да. Просто Автор смотрит через призму работы c восьмью битами sad.gif данными и видит много "лишнего" в 32bit формате команды.



Цитата(KRS @ Jun 2 2009, 10:57) *
На максимальной частоте для ARM режима один WAIT state у атмела.
получается при опреациях с регистрами инструкция THUMB будет выполняться в 2 раза быстрее!

Только таких инструкций будет в 3 раза больше smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 2 2009, 08:07
Сообщение #9


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(zltigo @ Jun 2 2009, 11:58) *
Только таких инструкций будет в 3 раза больше smile.gif.

Если брать обычный код - то по статистике не в 3 раза больше, а менее чем в 1.5

У всех разная статистика. Вот например отсюда:
http://winarm.scienceprog.com/arm-mcu-type...of-arm-mcu.html

Цитата
Some interesting facts about using Thumb:

The Thumb code requires 70% of the space of the ARM code.

The Thumb code uses 40% more instructions than the ARM code.

With 32-bit memory, the ARM code is 40% faster than the Thumb code.

With 16-bit memory, the Thumb code is 45% faster than the ARM code.

Thumb code uses 30% less external memory power than ARM code.


Сообщение отредактировал KRS - Jun 2 2009, 08:14
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 2 2009, 08:22
Сообщение #10


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Ну, если учесть их 4x ширину, то не очень-то и мало


Как более-менее атомарной единицы хранения данных - маловато. Извраты типа 4 переменных типа uint8 в одном регистре рассматривать смысла нет.

Цитата
Ну да там только названия регистров, и про R9 написано. его надо вместе с докой на RVCT читать там написано сколько регистров для какого режима можно заблокировать.


Дык правильно тогда формулируйте. Ваш исходный посыл:
Цитата
Причем если взять родной ARM документ по calling conversion, там есть рекомендации какие регистры можно блокировать и сколько.

Причем тут дока на RVCT к официальному документу ARM? Другое дело, что компилятор RVCT позволяет отнять столько-то таких-то регистров.

Цитата
Если брать обычный код - то по статистике не в 3 раза больше, а менее чем в 1.5


Обычный код - это написанный левой ногой без оглядки на архитектуру Load/Store? Не возражаю smile.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 2 2009, 08:27
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(KRS @ Jun 2 2009, 11:07) *
Если брать обычный код...

Я уже намекал - обычный для восьмибитовика. Как только алгоритм начинает работать с размерностями более 8bit - шеснадцатибитовые ограничения начинают сказываться очень сильно. Попробуйте, например, просто загрузить в регистр значение 0x100 и посмотрите на результат в разных режимах. Да и сложные констукции
Код
if( z )
a = b +  c *  4;

компиляторы уже умееют укладывать в что-то типа одной команды
eqadds r1, r2, r3, lsl #2
В свое время лично подробно проверял - портировал с 16битовиков несколько исходников - пролет у TUMB полный. Если изначельно сильно заточенное под 8bit портировать, то картина много благостнее. Но если писать именно в рассчете на 32bit контроллеры, то бессмысленно - выигрыш по размеру стремится к полному 0, а производительнось падает отнюдь не "незначительно".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 2 2009, 08:33
Сообщение #12


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Rst7 @ Jun 2 2009, 12:22) *
Причем тут дока на RVCT к официальному документу ARM? Другое дело, что компилятор RVCT позволяет отнять столько-то таких-то регистров.

дока на RVCT - тоже официальный документ ARM и в ней не указаны имена регистров ( как R0, R8....) а указаны как a1, v5...

Цитата(Rst7 @ Jun 2 2009, 12:22) *
Обычный код - это написанный левой ногой без оглядки на архитектуру Load/Store? Не возражаю smile.gif

обычный - это, например, не расчет какого нибудь фильтра...
В том то и дело что у ARM архитектура Load/Store и все компилеры это учитывают.
И есть официальная статисика из разных источников.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 2 2009, 08:41
Сообщение #13


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
обычный - это, например, не расчет какого нибудь фильтра...


Кого тогда трогает оптимизация?

Цитата
В том то и дело что у ARM архитектура Load/Store и все компилеры это учитывают.


Да, только программеры не учитывают. Вместо того, чтобы, например, в начале функции (или функционального блока) загрузить все в локальные переменные, а потом в конце выгрузить - занимаются онанизмом по месту хранения переменных.

Цитата
дока на RVCT - тоже официальный документ ARM


На компилятор, но не на ядро!


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 2 2009, 08:52
Сообщение #14


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Одно радует - THUMB2 решает эти проблемы с выбором режима.

Но если вернуться к теме топика. Очень странно что у IAR нет блокировки регистров! Потому что и у GCC и у RCVT они есть и переменную в заблокированном регистре можно объявить.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 2 2009, 08:56
Сообщение #15


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Очень странно что у IAR нет блокировки регистров! Потому что и у GCC и у RCVT они есть и переменную в заблокированном регистре можно объявить.


Можно. Но не нужно smile.gif Нужно курить про банки регистров в режиме FIQ и крепко думать, зачем нужна переменная в регистре для обычного режима.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

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

 


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


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