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

 
 
> Вместо одной команды - две :(, MOV Reg, Imm (ARM)
GetSmart
сообщение Jun 3 2008, 18:23
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Есть у меня в проекте строчка:
Код
float *val = &AverageAngles[j][i];
if ((*(long *)val & 0x7f800000) != 0x7f800000)
  sum += *val;
Пытаюсь обезопаситься от Nan и бесконечности. Гляжу на систему команд ARM и вижу, что можно одной командой загрузить в регистр число до 8-ми рядом стоящих еденичных бит, сдвинутых на любой сдвиг. Вроде бы число 0x7f800000 как раз подходит под это правило, но компилятор EWARM 4.20 не хочет так делать. Он почему-то только 7 бит может в одной команде загрузить. Вот:
Код
0x00003E78 E3A0B440  MOV          R11, #0x40000000
0x00003E7C E38BB5FE  ORR          R11, R11, #0x3F800000
Кто знает, почему?

Сообщение отредактировал GetSmart - Jun 3 2008, 18:27


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post



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

 


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


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