所以我最终说服自己尝试学习/使用PowerPC (PPC)。一切进展顺利,大多数信息都是在网上找到的。然而,在查看一些示例时,我遇到了这样的情况:
rlwinm r3, r3, 0,1,1我该如何在C中做到这一点?我试着做了一些研究,但找不到任何对我有帮助的东西。提前感谢!
发布于 2015-06-18 00:23:25
rlwinm代表“将单词立即向左旋转”,然后是带掩码的aNd,它的正确用法是
rlwinm RA, RS, SH, MB, ME和
因此,在您的示例中,源和目标是相同的。移位量为0,所以没有移位。和MB=ME=1,所以第一种情况适用,当从MSB=0:0x40000000开始编号时,掩码变为全零,位编号为1作为1。
在C语言中,我们可以像这样简单地编写它
a &= 0x40000000;假设a是32位变量。
发布于 2017-04-28 18:35:58
rlwinm将寄存器的值向左旋转指定的数字,执行AND并将结果存储在寄存器中。
示例:rlwinm r3, r4, 5, 0, 31
r4是由5旋转的源寄存器,在将旋转结果放入r3之前,它还会被AND,位掩码仅为1秒,因为0与31之间的间隔是整个32位值。
取自here的例子。
对于C实现,您可能想看看how to rotate left和how to AND,现在一起构建它们应该很简单。下面这样的代码应该是有效的:
int rotateLeft(int input, int shift) {
return (input << shift) | ((input >> (32 - shift)) & ~(-1 << shift));
}
int rlwinm(int input, int shift, int mask) {
return rotateLeft(input, shift) & mask;
}https://stackoverflow.com/questions/30896622
复制相似问题