分类: 嵌入式
2012-05-19 20:53:16
E500内核共定义了32个64位的GPR,GPR0~GPR31。其中GPR的高32位只能由E500内核的SPE使用,而E500内核的其他指令只能使用GPR的低32位,即第32~63位。
E500内核的大多数指令都可以使用通用寄存器作为操作数。E500内核使用指令集为32位,在这些指令中,通用寄存器将占用5位,用来表示GPR0~31。
2 CR寄存器
E500内核中的IAR寄存器组是用来保存指令执行结果或控制指令执行的一组寄存器,在IAR寄存器组中包括CR(Conditional Register)寄存器,CTR(Counter Register)寄存器,LR(Link Register)寄存器,XER(Integer Exception Register)寄存器和ACC(Accumulator)寄存器。
CR寄存器用来存放指令执行后的状态,该寄存器分为8个字段,分别为CR0~7,其中每个字段由4位组成。这些字段被用来表示指令操作的结果。
其中整型运算指令,如整型数的加减及逻辑运算,使用CR0保存结果状态。
l CR0[0],用于表示LT(小于,当整型指令运算结果为负时置1)。
l CR0[1],用于表示GT(大于,当整型指令运算结果为正时置1)。
l CR0[2],用于表示EQ(等于,当整型指令运算结果为0时置1)。
l CR0[3],用于表示SO(溢出,当整型指令运算结果溢出时置1)。
浮点运算指令使用CR1保存结果状态。
l CR1[0],用于表示LT(小于,当浮点指令运算结果为负时置1)。
l CR1[1],用于表示GT(大于,当浮点指令运算结果为正时置1)。
l CR1[2],用于表示EQ(等于,当浮点指令运算结果为0时置1)。
l CR1[3],用于表示SO(溢出,当浮点指令运算结果溢出时置1)。
E500内核的比较指令可以使用CR寄存器的全部CRn字段(n从0到7)保存比较指令的结束状态。在比较指令如cmp指令后,一般会紧跟着一条跳转指令,如bc指令。其中cmp指令可以选择使用CR寄存器的指定的CRn字段存放比较指令的结果状态,bc指令也可以选择使用CR寄存器的指定的CRn中的状态进行跳转,一般来说bc指令选择的CRn和cmp中指定的CRn相同。比较指令使用的CRn字段的定义如下所示。
l CRn[0],用于表示LT(小于,当比较结果结果为负时置1)。
l CRn[1],用于表示GT(大于,当比较结果结果为正时置1)。
l CRn[2],用于表示EQ(等于,当比较结果结果为0时置1)。
l CRn[3],用于表示SO(溢出,当比较结果溢出时置1)。
比较指令和跳转指令通常由编译器从CR寄存器中选择合适的CRn字段,程序员也可以书写汇编语言,在CR寄存器中选择合适的CRn。如果在比较指令和跳转指令不选择CR寄存器的CRn字段时,这些指令将使用CR0。