Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: циклический сдвиг влево lrotl(word A, char n)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
FormatCft
Доброго времени суток!

Возникла потребность крутонуть слово влево.
Есть ли стандартная фукция или макрос в cw?
Знаю, что в армах есть асм команда для этого, но не хочется велосипед делать.

Спасибо!
Rst7
(A<<n)|(A>>(32-n)) уже не годится?
FormatCft
Цитата(Rst7 @ Apr 26 2009, 22:26) *
(A<<n)|(A>>(32-n)) уже не годится?


Ух ты! Чудеса! 
Спасибо огромное! 
Rst7
Цитата
Есть ли стандартная фукция или макрос в cw?


Кстати, не знаю, что такое cw, но IAR вполне справился (только чуть наоборот):
Код
uint32_t foo3(uint32_t a, uint32_t n)
{
  return (a>>n)|(a<<(32-n));
}

преобразовал в
Код
   \                                 In segment CODE, align 4, keep-with-next
    113          uint32_t foo3(uint32_t a, uint32_t n)
    114          {
    115            return (a>>n)|(a<<(32-n));
   \                     foo3:
   \   00000000   7001A0E1           MOV      R0,R0, ROR R1
   \   00000004   0EF0A0E1           MOV      PC,LR           ;; return
    116            
    117          }


Правда, это правый сдвиг. Левый требует инверсии операнда по модулю 32. Так что 2 команды получится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.