Как сдвинуть влево на сумму в регистре с 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