|
Запрет использования регистров дляя своих нужд, IAR ARM 4.42A |
|
|
|
Jun 2 2009, 07:43
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 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.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jun 2 2009, 07:57
|

Профессионал
    
Группа: Модераторы
Сообщений: 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 читать там написано сколько регистров для какого режима можно заблокировать.
|
|
|
|
|
Jun 2 2009, 07:58
|

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

|
Цитата(Rst7 @ Jun 2 2009, 10:43)  Да ничего странного. Слишком мало регистров. Ну, если учесть их 4x ширину, то не очень-то и мало  . Но основная причина это именно наличие банков регистров. Цитата Очень спорное утверждение. Да. Просто Автор смотрит через призму работы c восьмью битами  данными и видит много "лишнего" в 32bit формате команды. Цитата(KRS @ Jun 2 2009, 10:57)  На максимальной частоте для ARM режима один WAIT state у атмела. получается при опреациях с регистрами инструкция THUMB будет выполняться в 2 раза быстрее! Только таких инструкций будет в 3 раза больше  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 2 2009, 08:07
|

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

|
Цитата(zltigo @ Jun 2 2009, 11:58)  Только таких инструкций будет в 3 раза больше  . Если брать обычный код - то по статистике не в 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
|
|
|
|
|
Jun 2 2009, 08:22
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 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? Не возражаю
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jun 2 2009, 08:27
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jun 2 2009, 08:33
|

Профессионал
    
Группа: Модераторы
Сообщений: 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? Не возражаю  обычный - это, например, не расчет какого нибудь фильтра... В том то и дело что у ARM архитектура Load/Store и все компилеры это учитывают. И есть официальная статисика из разных источников.
|
|
|
|
|
Jun 2 2009, 08:41
|

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

|
Цитата обычный - это, например, не расчет какого нибудь фильтра... Кого тогда трогает оптимизация? Цитата В том то и дело что у ARM архитектура Load/Store и все компилеры это учитывают. Да, только программеры не учитывают. Вместо того, чтобы, например, в начале функции (или функционального блока) загрузить все в локальные переменные, а потом в конце выгрузить - занимаются онанизмом по месту хранения переменных. Цитата дока на RVCT - тоже официальный документ ARM На компилятор, но не на ядро!
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|