Как сдвинуть влево на сумму в регистре с Xtensa LX7

Как правильно сделать следующее в сборке Xtensa:

a4 = (1 << a5)

где a4 и a5 - регистры, а a5 может содержать значение от 0 до 3 (может быть от 0 до 7 в будущем, но сейчас не особо об этом беспокоиться).

Я уверен, что это должно быть просто, но кажется довольно сложным.

1 ответ

Согласно Xtensa ISA, вы должны загрузить сумму сдвига во внутренний регистр суммы сдвига (SAR) с помощью инструкции ssl (установить величину сдвига влево). Затем вы должны использовать инструкцию sll (логический сдвиг влево), которая принимает два регистра, регистр назначения и регистр, содержащий значение для сдвига. Эквивалент вашего выражения a4 = ( 1 << a5 )на ассемблере это:

      movi a4, 1
ssl a5
sll a4, a4
Другие вопросы по тегам