分类: 嵌入式
2012-05-19 21:09:34
XER寄存器存放整数运算操作的进位、溢出信息以及特殊的加载和存储指令,lswx和stswx指令中传输的字节数。XER寄存器共有3个有效位和一个有效字段,分别为SO(Summary Overflow,第32位),OV(Overflow,第33位),CA(Carry,第34位)和No. of Bytes字段(第57~63位)。
其中,SO位为1表示某条算术运算指令曾经将OV位置1,CR寄存器中的SO位就是复制了XER寄存器的SO位,SO位一旦被设置为有效,将不会被清除,直到程序使用mtspr或者mcrxr指令进行清除。
OV位为1表示有符号数的算术运算出现溢出。PowerPC处理器使用补码表示有符号数,并且使用双符号位(对应PowerPC处理器Carry out的32和33位)表示算术运算的结果是正数还是负数。如果双符号位为00表示算术运算的结果是正数;为11表示算术运算的结果是负数;01表示算术运算的结果出现正溢出;10表示算术运算的结果出现负溢出。当计算结果出现正溢出或负溢出时,OV位被置1;如果计算结果没有出现溢出,OV位被置0。
CA位为1(即Carry out的32位为1)表示无符号算术运算产生了进位。
Note:进位与溢出是完全不同的概念。进位标志表示无符号数的运算结果超出了范围,但是运算结果依然正确;而溢出标志表示有符号数的运算结果超出了范围,运算结果已经不正确了。具体地说,如果参加算术运算的操作数是无符号数,程序员应该关心进位位;如果参加算术运算的操作数是有符号数,程序员应该关心溢出位。
No. of Byte字段用来存放lswx和stswx指令中传送的字节数。
6 ACC寄存器
该寄存器是一个4位寄存器,用来保存E500内核SPE指令的乘加指令MAC(Multiply Accumulate)的计算结果。