首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解PowerPC rlwinm指令

了解PowerPC rlwinm指令
EN

Stack Overflow用户
提问于 2015-06-17 23:56:51
回答 2查看 3.2K关注 0票数 6

所以我最终说服自己尝试学习/使用PowerPC (PPC)。一切进展顺利,大多数信息都是在网上找到的。然而,在查看一些示例时,我遇到了这样的情况:

代码语言:javascript
复制
rlwinm    r3, r3, 0,1,1

我该如何在C中做到这一点?我试着做了一些研究,但找不到任何对我有帮助的东西。提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2015-06-18 00:23:25

rlwinm代表“将单词立即向左旋转”,然后是带掩码的aNd,它的正确用法是

代码语言:javascript
复制
rlwinm  RA, RS, SH, MB, ME

根据description page

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

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

因此,在您的示例中,源和目标是相同的。移位量为0,所以没有移位。和MB=ME=1,所以第一种情况适用,当从MSB=00x40000000开始编号时,掩码变为全零,位编号为1作为1

在C语言中,我们可以像这样简单地编写它

代码语言:javascript
复制
a &= 0x40000000;

假设a是32位变量。

票数 7
EN

Stack Overflow用户

发布于 2017-04-28 18:35:58

rlwinm将寄存器的值向左旋转指定的数字,执行AND并将结果存储在寄存器中。

示例:rlwinm r3, r4, 5, 0, 31

r4是由5旋转的源寄存器,在将旋转结果放入r3之前,它还会被AND,位掩码仅为1秒,因为031之间的间隔是整个32位值。

取自here的例子。

对于C实现,您可能想看看how to rotate lefthow to AND,现在一起构建它们应该很简单。下面这样的代码应该是有效的:

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30896622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档