如何使用 Xtensa LX7 在寄存器中左移一定量

How to left shift by an amount in a register with Xtensa LX7

在 Xtensa 程序集中执行以下操作的正确方法是什么:

a4 = ( 1 << a5 )

其中 a4 和 a5 是寄存器,a5 可以包含值 0 到 3(将来可能是 0 到 7,但现在不太担心。)

我相信这一定很简单,但它似乎很棘手。

根据 Xtensa ISA,您必须使用 ssl 指令(设置左移量)将移位量加载到内部移位量寄存器 (SAR)。然后你必须使用 sll(逻辑左移)指令,它需要两个寄存器,目标寄存器和包含要移位的值的寄存器。 a4 = ( 1 << a5 ) 在汇编程序中的等效表达式是:

movi a4, 1
ssl a5
sll a4, a4