所以我终于说服自己尝试学习/使用PowerPC(PPC).一切进展顺利,大多数信息都是在网上找到的.但是,在查看一些示例时,我发现了这个:
rlwinm r3, r3, 0,1,1
Run Code Online (Sandbox Code Playgroud)
我怎么用C做这个?我尝试做一些研究,但找不到任何帮助我的东西.提前致谢!
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位变量.