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

 
 
> умножение для ARM7, long*long=long long
zhek
сообщение Oct 8 2009, 08:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 29-12-05
Из: Екатеринбург
Пользователь №: 12 692



Господа, знает кто-нибудь, как заставить компилятор (IAR) использовать команду SMULL? Пример такой:
long x, y;
long long z;

z = x*y;//генерится команда MUL, умножение делается в long, старшие 32 бита отбрасываются, потом дополняются до long long знаком, результат неправильный
z=(long long)x*y;//генерится набор команд для выполнения 64-битного умножения, результат правильный, но вычисления занимают большое время

А как бы использовать SMULL, тогда получим long*long = long long. И результат правильный, и время небольшое.
Можно написать свою ассемблерную функцию, но в ней нужно будет сохранять регистры в стеке, а это опять потери времени. Компилятор мог бы это сделать лучше, т. к. переменные уже лежат в регистрах.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 02:35
Рейтинг@Mail.ru


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