PowerPC 体系结构之 ULR 和 ABI

PowerPC 体系结构之 ULR 和 ABI


当前版本: 1.0
完成日期: 2008-7-20
作者: Jack Tan
Email: jiankemeng@gmail.com
版权声明: 转载请注明出处,商业用途请联系作者

A. 以下取 Book E 之 ULR 精要

ULR (User Level Register) 即用户态程序能用的寄存器,包括只读的和可读写的。

最常用的 ULR 包括以下寄存器:

1. GRP (General Purpose Register) 通用寄存器,即用于定点运算的寄存器,共 32 个

2. CR (Condition Register) 指令状态寄存器,其格式如下所示:


注意:Book E 对寄存器的位编号与通常不同,因其支持 PowerPC 64,故其将 64 位寄存器从最高位 (MSB) 到最低位 (LSB) 编号为 0 ~ 63,32 位寄存器则编号为 32 ~ 63。

CR 以4位为单位分成 8 个域,每个域能描述 4 种状态。

2.1 CR0 用于存放 RC 位为1 的整数指令执行后的状态。CR[32:35] 依次表示小于、大于、等于和溢出。当指令执行的结果小于、大于或等于 0 时则置相应的CR[32:34] 的位;CR[35] 的值则直接复制自XER 的 SO (Summary Overflow)位。

2.2 CR1用于存放 RC 位为 1 的所有浮点指令执行后的浮点异常状态。其内容直接复制于浮点状态与控制寄存器 (FPSCR),CR[36:39] 依次对应于浮点异常 (FX)、浮点使能异常 (FEX)、浮点非法操作异常 (VX) 和浮点溢出异常 (OX)。

RC 位为 1 的指令,其助记符的最后有一个 ‘.‘ ,如 addic./divw./mullw./neg./and./or./xor./nand./nor.

2.3 对于比较指令(整数和浮点),可以通过操作数 BF 指定比较结果所存储的 CR 域:

cmp   3, 0, r3, r4        (cmp    BF, L, RA, RB)

操作数 L = 0,表示此为 32 位比较,即只比较 r3, r4 的 32 ~ 63 位。若 r3 > r4,则将 CR3[gt] (CR[45]) 置位。浮点比较类似,但域内第 4 位含义与整数不同,整数依然表示溢出 (SO),且其值拷贝自 XER[SO];而对浮点比较,若该位被置,则表示某一浮点操作数不是数值。

2.4 此外 RC 位为 1 的条件存储指令 (stwcx./stwcxe./stdcxe.),在存储操作成功时置 CR0[2] (EQ 位) 为 1。

3. LR (Link Register) 链接寄存器,用于存放返回地址
Branch and Link 类指令(如 bl,指令内 LK 位为 1)会将下条指令的地址自动写入 LR。bl 用于调用子过程,则置入 LR 的即为返回地址
Branch Conditional to Link Register 类指令(如 bclr)则使用 LR 作为跳转的目标地址,该类指令通常用于子过程返回

4. CTR (Count Register) 计数寄存器,常用于存放跳转目标地址,与 Branch Conditional to Count Register 类指令配合使用;亦可存放循环变量与条件分支指令 (Branch Conditional) 配合,实现循环

CR,LR 和 CTR 是与分支指令紧密联系的,在实现基本程序结构之判断、循环以及过程调用方面作用巨大。

5. XER (Integer eXception Register) 整数异常寄存器,用于置整数运算的溢出 (Overflow)、进位 (Carry Out) 以及批量加载和存储指令要操作的字节数

6. E500 ULR

下图为 e500 之 ULR 概览:

可以看到 e500 没有浮点寄存器,其没有浮点部件。

7. E600 ULR

下图为 e600 之 ULR 概览:

e600 则含32个浮点寄存器,且含 32 个向量寄存器 (VR0 ~ VR31) 用于支持向量计算。

B. ABI

ABI 即 Application Binary Interface。其主要规定通用寄存器的使用约定,以及过程调用的栈的组织。一般最常用的就是通用寄存器的使用约定。Linux 下常用SYS V ABI。

以下是比较诸多 PowerPC ABI 版本后的一个交集:

GPR1: Stack Pointer
GPR3 ~ GPR4: 参数1 ~ 2,同时复用之,置 2 个返回值
GPR5 ~ GPR10: 参数 3 ~ 8

e500 ABI 继承于 System V ABI PowerPC Processor Supplement

以较为常用的 System V ABI 为准,其他寄存器的约定如下:

GPR0: volatile, may be used by function linkage
GPR2: reserved for system
GPR11 ~ 12: volatile, may be used by function linkage
GPR13: small data area pointer
GPR14 ~ 31: saved

C. Reference

[1] Book E: Enhanced PowerPC Architecture, v1.0, 2002.7
[2] PowerPC e500 Core Family Reference Manual, Rev. 1, 2005.4
[3] e600 PowerPC Core Reference Manual, Rev. 0, 2006.3
[4] SYSTEM V APPLICATION BINARY INTERFACE PowerPC Processor Supplement (SYS V ABI), Rev. A, 1995.9
[5] PowerPC Embedded Application Binary Interface (EABI), v1.0, 1995.1
[6] PowerPC e500 Application Binary Interface User’s Guide, Rev. 1.0, 2003.3

发表评论

5 + 2 = ?