Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Zelepuk
Стало интересно посмотреть кол-во тактов на операцию из дизасемблера.
Сравнил плавучку, целочисленные вычисления.
Появились вопросы:

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

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


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

__aeabi это особые функции для поддержки компиляторов. fmul = float multiply, fadd = float add. Полный список см. в доках EABI. Реализация зависит от конкретной модели процессора. Для процов с VFP это обычно практически прямой вызов соответствующей инструкции, для тех что без - софтовая эмуляция.
Zelepuk
Спасибо за информацию.

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

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

Математически-то оно так, но при грамотной реализации в железе можно верхние 32 бита не только не писать в регистр, а и вообще не рассчитывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.