了解PowerPC rlwinm指令

use*_*771 5 c powerpc

所以我终于说服自己尝试学习/使用PowerPC(PPC).一切进展顺利,大多数信息都是在网上找到的.但是,在查看一些示例时,我发现了这个:

rlwinm    r3, r3, 0,1,1
Run Code Online (Sandbox Code Playgroud)

我怎么用C做这个?我尝试做一些研究,但找不到任何帮助我的东西.提前致谢!

Eug*_*Sh. 6

rlwinm 代表"旋转左字立即然后aNd with Mask,它的正确用法是

rlwinm  RA, RS, SH, MB, ME
Run Code Online (Sandbox Code Playgroud)

根据描述页面:

  • RA指定存储操作结果的目标通用寄存器.
  • RS指定用于操作的源通用寄存器.
  • SH指定操作的移位值.
  • MB指定操作的掩码的开始值.
  • ME指定操作的掩码的结束值.
  • BM指定32位掩码的值.

  • 如果MB值小于ME值+ 1,则在起点和终点之间并包括起点和终点的掩码位被设置为1.所有其他位都设置为零.
  • 如果MB值与ME值+ 1相同,则所有32个掩码位都设置为1.
  • 如果MB值大于ME值+ 1,则将ME值+1和MB值-1之间的所有掩码位设置为零.所有其他位都设置为1.

因此在您的示例中,源和目标是相同的.转移量是0,所以没有转移.并且MB=ME=1,因此第一种情况适用,使得掩码变为全0,位号为1 1,同时编号为MSB=0:0x40000000.

在C中我们可以像写一样简单

a &= 0x40000000;
Run Code Online (Sandbox Code Playgroud)

假设a是32位变量.