无知关于insrwi指令

时间:2014-10-24 07:12:55

标签: powerpc

我查了一下,没有什么能解释清楚。它说rlwimi可以用来代替它,但我也不知道那个指令。

在那里编写代码:

 andi.     r0, r6, 3     # while(r6 != 3)
 bdnzf     eq, loc_90014730 # if(CTR != 0) loc_90014730();
 insrwi    r4, r4, 8,16  # ????
 srwi.     r0, r5, 4     # r0 = r5 >> 4;
 insrwi    r4, r4, 16,0

(r4 == 0)

我已经被困在这条指令上一段时间了。请不要给我结果,请给我一个详细的解释。

2 个答案:

答案 0 :(得分:3)

我认为你需要用rlwimi做一些实验来向自己完全解释,但这是我觉得有用的。

rlwimi的Power PC编程手册第1册中有一个编程说明,它提供了有关inslwi和insrwi的更多细节:

  

rlwimi可用于插入左对齐的n位字段   寄存器RS的低32位,从位开始进入RAL   位置b,通过设置SH = 32-b,MB = b,并且ME =(b + n)-1。它可以使用   插入在低位32中右对齐的n位字段   寄存器RS的位,通过设置从位位置b开始进入RAL   SH = 32-(b + n),MB = b,ME =(b + n)-1。

它还有助于比较insrwi和inslwi的结果。以下是跟踪rlwimi过程的两个示例,其中r4 = 0x12345678。

insrwi r4,r4,8,16相当于rlwimi r4,r4,8,16,23

  1. 向左旋转8位并注意它将原始r4的最后8位放在与生成的掩码匹配的位置:0x34567812
  2. 生成掩码:0x0000FF00
  3. 在生成的掩码的控制下插入最后8位,即在r4中右对齐的8位:0x12347878
  4. 因此insrwi从右侧获取n位(从第32位开始)并从位b开始将它们插入目标寄存器。

    inslwi r4,r4,8,16相当于rlwimi r4,r4,16,16,23

    1. 向左旋转16位并注意它将原始r4的前8位置于与生成的掩码匹配的位置:0x56781234
    2. 生成掩码:0x0000FF00
    3. 在生成的掩码的控制下,插入前8位,即在r4中左对齐的8位:0x12341278
    4. 因此inslwi从左侧获取n位(从位0开始)并从位b开始将它们插入目标寄存器。

答案 1 :(得分:0)

PowerISA 2.07 [1]声明insrwi是rlwimi的延伸助记符,具有相同的rlwimi指令以及它们是如何相关的。 PowerISA可能具有您想要的细节级别。 :)

[1] https://www.power.org/documentation/power-isa-version-2-07/(或google,pdf)