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

 
 
 
Reply to this topicStart new topic
> IAR, вопросы по дизасемблеру
Zelepuk
сообщение Mar 5 2011, 12:27
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Стало интересно посмотреть кол-во тактов на операцию из дизасемблера.
Сравнил плавучку, целочисленные вычисления.
Появились вопросы:

1) По дизасемблеру видно что умножение двух short занимает 4 такта,умножение двух long тоже 4 такта.
Такое возможно?

2) умножение двух float занимает тоже 4 инструкции. Но сколько тактов непонятно. Что означают интрисики в дизасемблере и сколько тактов они занимают (__aeabi_fmul, __aeabi_fadd ... и пр.)


Заранее признателен за коментарии.

Сообщение отредактировал Zelepuk - Mar 5 2011, 12:30
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
igorsk
сообщение Mar 7 2011, 22:58
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Умножение в Cortex-M3 обычно занимает один такт для 32х32->32, и до семи для 32х32->64. В более старых процах может быть больше. Использование байтовых и 16-битных переменных зачастую менее эффективно, т.к. компилятору приходится добавлять код для обрезания 32-битовых значений.

__aeabi это особые функции для поддержки компиляторов. fmul = float multiply, fadd = float add. Полный список см. в доках EABI. Реализация зависит от конкретной модели процессора. Для процов с VFP это обычно практически прямой вызов соответствующей инструкции, для тех что без - софтовая эмуляция.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 8 2011, 10:28
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Спасибо за информацию.

Процессор у меня AT91SAM9260.

Кстати а чем отличается для процессора умножение 32*32->64 от 32*32->32
Я всегда полагал что умножение 32-х разрядных операндов даёт всегда 64 разрядный результат и этот результат можно просто усеч до 32 в последствии. Следовательно 32*32->32 займёт больше времени потому что это фактически 32*32->64->32 ... разве не так?
Go to the top of the page
 
+Quote Post
igorsk
сообщение Mar 9 2011, 02:37
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Цитата(Zelepuk @ Mar 8 2011, 12:28) *
Кстати а чем отличается для процессора умножение 32*32->64 от 32*32->32
Я всегда полагал что умножение 32-х разрядных операндов даёт всегда 64 разрядный результат и этот результат можно просто усеч до 32 в последствии. Следовательно 32*32->32 займёт больше времени потому что это фактически 32*32->64->32 ... разве не так?

Математически-то оно так, но при грамотной реализации в железе можно верхние 32 бита не только не писать в регистр, а и вообще не рассчитывать.
Go to the top of the page
 
+Quote Post

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

 


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


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