分类: 嵌入式
2012-05-20 15:06:08
M-Form类指令的主要作用是对选定的字段进行循环左移并做一些相应的掩码操作。该类指令是PowerPC指令集的精华,包含了一组非常强大的指令集。
在这类指令中,rlwimi指令最为常用,该指令格式如下所示:
0~5 |
6~10 |
11~15 |
16~20 |
21~25 |
26~30 |
31 |
OPCD |
RS |
RA |
SH |
MB |
ME |
Rc |
该指令的使用格式是:“rlwimi RA,RS,SH,MB,ME”,功能描述如下:
n <— SH
r <— ROTL32((RS)32:63,n)
m <— MASK(MB+32,ME+32)
RA <— r & m | (RA) & ~m
该段代码的详解如下:
l rlwimi指令首先将存放在RS寄存器中的数据循环左移SH位,并将此结果赋予r。
l 之后使用MASK函数计算掩码m,MASK(MB+32,ME+32)表示将一个数据的32~63位中的第MB+32~ME+32字段置1,其他字段置0,然后再将此数值赋予m。
l 如果ME的数值小于MB,则将第ME+32与MB+32之间的字段置0(不包括ME+32和MB+32位),其他字段置1。最后将r & m | (RA) & ~m的结果赋予RA。
当ME大于或者等于MB时,rlwimi指令的执行流程,即将RS寄存器中的阴影部分平移到RA寄存器中,RA寄存器不在阴影部分的字段保持不变。
M-Form类指令还包含另一条重要的指令rlwimn。其指令格式,使用方法与rlwimi指令完全相同。这两条指令的主要区别在于指令运行结束后对RA寄存器的赋值不同。
rlwimn指令最后将RA寄存器赋值为r & m而不是r & m | (RA) & ~m 。该指令的主要作用是提取RS寄存器中的某些字段,然后将这一字段方法RA寄存器中的某个位置中。
M-Form类指令还包含一条指令rlwnm,该指令与rlwinm指令的区别自爱与该指令将左移位数保存在寄存器RB中而不是立即数SH中。
PowerPC体系结构中还定义了对双字进行操作的MD-Form和MDS-Form类指令,但是这类指令没有在E500内核中实现。