指令集架构中的变量寄存器和立即数字段编码的制作方法

文档序号:6602757阅读:334来源:国知局
专利名称:指令集架构中的变量寄存器和立即数字段编码的制作方法
指令集架构中的变量寄存器和立即数字段编码相关申请的交叉引用本申请涉及于2008年5月8日提交的题为“紧凑的指令集架构”的第61/051,642 号申请,该申请的全部内容通过引用并入本文。
背景技术
本发明通常涉及微处理器的指令集架构(ISA)。更具体地,本发明公开用于减少存 储可执行代码所需的存储器数量并且保持与未压缩遗留汇编码(legacy assembly code) 兼容的方法和装置。由于RISC微处理器的尺寸以及存储可执行代码所需的存储器增加,因此制造成 本也增加。尤其对于嵌入式应用,需要降低装置的硅面积。降低面积的一种方法是减少存 储包括典型应用代码的微处理器指令所需的存储器。需要在不牺牲功能或不影响性能或设计复杂度的情况下,减少指令代码尺寸。

发明内容
本发明提供方法和装置,用于减少被编译以在RISC架构的微处理器中执行的应 用的代码尺寸。在一个实施方式中,以16、32或48位对指令进行编码,第一指令子集具有 16位紧凑编码长度和32位常规编码长度,第二指令子集具有32位常规编码长度和48位 扩展编码长度。对于尺寸受到可用存储器数量限制的应用,可使用紧凑和常规形式的指令。 对于要求高性能的应用,可使用常规和扩展形式的指令。通过对应用的不同部分实现编码 长度的明智选择,应用可被调谐用于特定成本、代码尺寸和性能特征。例如,具有从昂贵的 闪存操作的启动代码和从便宜的RAM执行的应用代码的装置可为其启动代码使用紧凑形 式编码长度指令,而通过为应用代码指令使用常规或扩展形式使应用性能最大。另外,提供 编译器、汇编器和连接器以通过16、32和48位形式的RISC架构指令生成可执行形式的软 件应用。在另一个实施方式中,RISC架构的指令以单独的遗留编码进行编码,遗留编码包 括仅以32位长度进行编码的指令。提供编译器、汇编器和连接器以通过遗留形式的指令编 译软件对象,并将遗留编码的软件对象与通过16、32和48位编码长度编译的软件对象结 合。进一步,提供装置和方法以确定微处理器能够解码和执行的编码。还提供装置和方法 以当微处理器能够执行一个以上的编码时,选择性地控制由执行软件的微处理器使用的编 码。下面参照附图详细描述本发明的进一步的特点和优点、以及本发明不同实施方式 的结构和操作。


结合附图根据以下详细描述,本发明的特征和优点将变得更加显而易见,其中相 同标号表示相同或功能相似的元件。
图1为利用本发明的单指令集架构(ISA)微处理器系统的框图;图2更详细地示出了图1的系统存储器的一部分;图3列出了来自本发明ISA的具有16位和32位长度编码的指令子集;图4是使本发明的6 位主操作码(major opcode)的二进制位编码与其相关联的 助记符(mnemonics)相关的表格;图5A至图5D是使编码的寄存器字段值与其相关联的解码值相关的表格;图6A至图6G是使编码的立即数字段值与其相关联的解码值相关的表格;图7A至图7C示出了本发明的ISA中指令的示例性序列的存储器中的大端 (big-endian)禾口小端(little-endian)布局;图8A示出了来自本发明ISA的具有16位和32位两种编码长度的指令子集的16 位编码;图8B示出来自本发明ISA的具有16位和32位两种编码长度的指令子集的32位编码。
具体实施例方式本发明提供用于减少在RISC架构的微处理器中执行的软件的指令代码尺寸的方 法和装置。本发明的方法实施方式被编码到指令中,该指令可作为计算机程序的一部分而 被有效地存储。本发明的装置实施方式执行根据本发明的指令。如在此所描述的,根据本 发明的指令可由能够对RISC架构指令的一个编码进行解码的微处理器执行,或者可由能 够对RISC架构指令的一个以上编码进行解码的微处理器执行。实现本发明的RISC架构的微处理器被设计为以几种不同的安全模式操作。每种 安全模式均定义和控制在该安全模式中执行的软件应用可访问的微处理器资源和特征。 在一个实施方式中,微处理器具有至少两种操作模式,称为“特许(privileged)”或“核心 (kernel) ”模式、以及“用户”模式。当微处理器上电或重启时,微处理器开始操作在特许模 式中。这意味着执行的初始指令集可以访问微处理器的所有资源,并且可定义微处理器如 何操作、如何为当前环境配置微处理器等。在微处理器配置完成之后,操作模式可切换至用 户模式。在用户模式中,允许软件访问通用寄存器,但是不允许其访问对微处理器操作或配 置进行控制的特许架构寄存器。这种双模式架构为计算机系统提供了安全性,确保操作环 境的可靠性,并且防止用户模式指令访问或修改特许资源。在一个实施方式中,本发明的RISC架构具有三个元素(1)指令集架构(ISA),(2) 特许资源架构,以及(3)特定架构延伸(Architecture Specific Extensions,ASE)。ISA 定义了包括编码的指令,指令将在该架构的微处理器实施方式上执行。特许资源架构定义 了 ISA操作的环境和能力集,提供必要的机制来管理RISC架构的微处理器实施的资源,例 如安全模式、虚拟存储器、高速缓冲存储器、异常、用户上下文等。ASE为可选的特定应用扩 展(application specificextension)提供指令禾口架构支持。在一个实施方式中,ISA提供四个协处理器,命名为CPO、CPl、CP2和CP3。CPUCP2 和CP3是可选的。CPO是必需的。CP0、即系统协处理器将软件接口提供给特许资源架构。 特定的特许模式指令用于访问和修改协处理器。在一个实施方式中,包含在CPO中的寄存器提供对配置信息和配置管理的访问,并且提供必要的控制功能以使得微处理器可通过基于软件的应用来操作。例如,特定寄存 器用于配置高速缓冲存储器,定义如何处理异常,以及配置存储器管理。在一个实施方式 中,CPO包含多达256个寄存器,256个寄存器分为32组,每组8个寄存器。32组寄存器标 记为协处理器0、寄存器n,其中η从0至31,而每组中的寄存器标记为选择寄存器m,其中 m从0至7。例如,CPO寄存器0、选择3指位于CPO中的第3个寄存器(0X8+3),而CPO寄 存器16、选择3指位于CPO中的第131个寄存器(16X8+3)。在一个实施方式中,架构包括下述的CPU寄存器32个通用寄存器(GPR),其中的3个通用寄存器中具有分配的功能并且用于执行 特定的软件操作寄存器RO也标记为0。寄存器RO硬连线(hardwired)至0值,并且可用作结果将 被舍弃的任何指令的目标寄存器。当需要0值时,RO还可用作源。寄存器29 (R29)也标记为堆栈指针寄存器SP。SP的功能稍后介绍。寄存器31 (R31)也标记为返回寄存器RA。RA的功能稍后介绍。一对专用寄存器(HI和L0),保存整数乘法、除法以及累积乘法(multiply-accumulate) 运算的结果。专用程序计数器(PC),保存当前正在执行的指令的地址。通过在当前指令执行 期间为PC分配一个值来确定接下来将要执行的指令的地址。如果在当前指令执行期间没 有给PC分配值,则PC自动增至下一顺序指令的地址。在跳转/转移(jump/branch)指令 的特殊情况下,需要额外时间来计算跳转或获取转移目标地址。在执行该“延迟槽(delay slot),,指令期间执行存储器中的下一顺序指令并其将所获取的跳转/转移目标地址分配 给PC,而不是让微处理器暂停(stall)以等待计算完成。ISA模式寄存器是1位寄存器,ISA模式寄存器对微处理器解码的指令编码进行控 制。稍后介绍ISA模式寄存器的操作,下文称为ISA模式位(Mode bit)。图1示出了本发明实施的示例性环境。特别地,图1示出了实施本发明的微处理器 系统100。系统100包括执行单元110、系统协处理器115、乘/除单元120、存储器管理单 元130、高速缓冲存储器控制器140、高速缓冲存储器142、总线接口单元150、微处理器存储 器总线155以及存储器160。总线接口单元150将高速缓冲存储器控制器140连接至总线 接口单元150。系统存储器总线155执行单元将总线接口单元150连接至系统存储器160。 执行单元110具有算术逻辑单元112和寄存器文件116。微处理器系统100是示例性的,不 限制本发明。例如,在其他的实施方式中,微处理器100可省略高速缓冲存储器142和高速 缓冲存储器控制器140。在一个实施方式中,寄存器文件116具有32个通用寄存器(GPR),标记为R0-R31。 在其他实施方式中,寄存器文件116可具有多于或少于32个GPR。寄存器29和31具有除 了它们常规的GPR功能之外的功能。因此,GPR 29也标记为堆栈指针寄存器SP,GPR 31也 标记为返回地址寄存器RA。这些标记将在下文中用到以进一步描述本发明,本领域技术人 员将理解这些标记只作为示例并且不限制本发明。图2更详细地示出了系统存储器160的一部分。系统存储器160包括用户存储器 202和操作系统存储器(未示出)。用户存储器202包括5个感兴趣的区域。这些区域是 程序代码区域204、数据区域206A、堆区域206B、堆栈区域208、以及未使用或可用的空间区域(space region) 210o从图2中可以看出,堆栈区域208通常包括用于经由存储器104将 值传给子程序的区域212和用于将传给子程序的值存储在寄存器中的保留空间。堆栈指针 (SP) 216表示存储器104的寄存器210中下一个可用存储器位置的地址。
程序代码区域204用于存储正由系统100执行的程序的指令。将由微处理器执行 的程序指令必须从主存储器104中的程序代码区域204中读入微处理器系统100中。堆206B用于全局意义或长期(long-lived)的动态数据,而堆栈208用于局部重 要(locally significant)和短期(short-lived)的动态数据。堆存储器206B的分配包 括存储器中数据结构的软件操作,该软件操作控制堆存储器的显式分配。通过更新堆栈指 针216、以及通过记住每次分配的数据项的堆栈指针偏移,简单地进行堆栈208上的动态数 据的分配。如图2所示,堆栈208从较高的存储器地址向较低的存储器地址增加。在本发 明的其他实施方式中,堆栈208可从较低的存储器地址向较高的存储器地址增加。数据区 域206A用于存储静态数据。现在参照系统100的特征描述本发明,系统100提供本发明实施的示例性环境。然 而,本领域技术人员可以理解,本发明可在其他微处理器环境中实施。在一个实施方式中,RISC架构是MIPS架构。上面所列已经通过引用并入本文的 文档详细描述了 MIPS32 和MIPS64 架构。在一个实施方式中,在MIPS32 架构手册的卷 III中描述了特许资源架构。在另一个实施方式中,在MIPS64 架构手册的卷III中描述了 特许资源架构。在MIPS架构文档的对应卷III中描述了用于每个实施方式的CPO寄存器。 现在参照MIPS32 架构进一步描述本发明,MIPS32 架构提供了本发明实施的示例性环境。 然而,本领域技术人员应理解,本发明可在其他微处理器环境中实施。在一个实施方式中,本发明具有MIPS32 架构的特许资源架构、和指令集,该指令 集包含在之前通过引用并入本文的MIPS架构手册卷ΙΙ-b中所列的指令。一些指令具有16 位和32位两种编码长度。图3,表300列出了具有双重编码(dual encoding)的指令。表 300中的列310列出16位指令的助记符。列320列出了具有32位编码长度的指令的助记 符。列330提供了指令操作的概要,这些指令的助记符与包含指令概要的行相关联。其中 适当地,表示指令中的数位的数字16附于助记符的后面,以对具有与两种不同编码长度相 关联的相同助记符的指令进行区分。指令编码(instruction encodings)由多个字段构成。每个指令编码具有在指令 编码中左对齐的6位主操作码字段。主操作码字段二进制值表示指令宽度,从而便于通过 实施本发明实施方式的微处理器获取和执行指令。指令编码中例如寄存器字段、立即数字 段和副操作码(minor opcode)字段的其他字段的数量、构成、长度以及对齐取决于指令。图4中的表400示出了将本发明主操作码助记符映射到它们相关联的6位二进制 编码。方框410包含主操作码助记符。与每个助记符相关联的指令的长度由位于助记符结 尾的数字16、32、48表示。例如,主操作码P00L16A涉及16位指令,主操作码P00L48A涉及 48位指令。包含星号的方框410保留用于指令集的将来扩展。当执行具有与包含星号的 方框相对应的主操作码的指令时,能够执行根据本发明指令的微处理器必然导致保留指令 异常。方框415的行包含助记符的3个最高有效位(Most Significant Bits,MSB)的二进 制位值。方框420的行包含助记符的其余3位的二进制位值。通过在表格400中定位操作 码、以及通过将与包含操作码的列相关联的方框415的内容与包含操作码的行相关联的方框420的内容连在一起,获得具体操作码的编码。作为确定具体操作码的二进制值的方法 的示例,考虑主操作码BEQ32。相关联的方框415包含二进制值100 ;相关联的方框420包 含二进制值101。将两个二进制值连在一起产生与BEQ32相关联的6位操作码100101。注意,图4的表格400示出了将用于16位指令的全部主操作码分到3个相邻的行 中。主操作码的最低有效位(Least Significant Bit)分组允许将指令容易地分为具有16 位长度的指令和不具有16位长度的指令。例如,如果A表示LSB位2的二进制值,B为LSB 位1的值且C为LSB位0的值,那么布尔表达式(NOT A) AND (B OR C)为16位操作码产生 ‘1’,为所有其他操作码产生‘0’。通过操作码对指令长度的容易分离便于实施本发明一个 实施方式的微处理器获取和执行指令。每个指令编码可具有0至4个寄存器字段。将指令寄存器字段命名为rsl、rs2、 rs3、以及rd。3个rs字段是对保存将在指令执行中使用的信息的微处理器寄存器进行指 定的操作数字段(operand field),rd是对接收指令执行结果的微处理器寄存器进行指定 的操作数字段。用于32位和48位指令的寄存器字段长度是5位。由于长度取决于主操作 码,因此用于16位指令的寄存器字段长度是5位或3位。多数5位字段是线性编码,即寄存 器字段中包含的值是在指令执行中使用的GPR的数量。3位寄存器字段和一些5位寄存器 字段具有特定指令寄存器编码(instruction specific register encoding),即寄存器字 段中的值用作返回将在指令执行中使用的实际GPR或GPR列表的表中的偏移。通过解码寄 存器字段选择的GI3R对应于在032MIPS应用二进制接口(Application Binary Interface, ABI)中定义的寄存器约定。在之前列出的看MIPS运行Linux (See MIPS Run Linux)手册 的第十一章描述了 032 MIPS ABI0根据图5A、5B或5D中所示的表格对3位寄存器字段中 的内容进行解码。根据图5C中所示的表格对编码的5位寄存器字段中的内容进行解码。图 5A中的表格500和图5B中的表格520将行505中包含的线性编码寄存器字段十六进制值 映射到行510中包含的十进制GPR值。行510的表格条目中所列举的GI^R是由在子程序调 用中使用的ABI定义的GPR。图5C中的表格540和图5D中的表格560连接包含在寄存器 列表(reglist)寄存器字段中的十六位进制值和GI^R列表。列550的表格条目中的十六位 进制值作为行545所示的GPR的可变长度列表的指针。在列表中列出的GPR由ABI定义, 该ABI用于保存必须跨子程序调用保留的变量。考虑利用图5C中表格540的映射的示例 如果LWM指令(稍后介绍)的5位寄存器字段保存值4,那么GPR 16、17、18和19将用于 LWM指令的执行。因此,对寄存器字段值的内容进行解码,以表示通过表格5A、5B、5C或5D 中的一个进行的解码。并不是所有指令都具有立即数字段或副操作码字段。指令编码中的副操作码字段 长度和位置取决于指令。这里使用的术语“立即数字段”包括用于转移和加载/存储指令 的地址偏移字段以及跳转目标字段。指令编码中的立即数字段长度和位置取决于指令。一 些指令具有被分为几个区域的立即数字段。一些16位指令具有立即数字段,其内容必须以 非线性模式解码以产生在指令执行中使用的立即数。图6A、6B、6C、6D、6E、6F和6G示出了 表示由不同指令使用的非线性解码的表格。图6A中的表格600示出了应用于4位立即数 字段的非线性解码,图6B中的表格620示出了用于7位立即数字段的解码,以及图6C中的 表格640示出了用于9位立即数字段的解码。表格6A、6B和6C的行610中的表格条目包 含位于立即数字段中的编码的十六进制值;表格6A、6B和6C的行615中的表格条目包含与
9行610中相应表格条目相关联的解码的十进制值。图6D、6E、6F和6G示出了表示由指令使 用的非线性解码的表格,该指令的助记符包含在表格650、660、670和680的行652中。这 四个表格的行655中的十六进制条目是在这四个表格的行652中命名的指令的立即数字段 中的十六进制值。这四个表格的行657中的内容是在这四个表格的行652中命名的指令的 立即数字段的解码值。图6F中的表格660的行657中的解码值以十六进制格式表示;其余 三个表格中的行657中的解码值以十进制格式表示。根据系统字节顺序(endianess)将指令置于微处理器存储器中。以16位为一组 的形式获取或存储指令。在大端模式的具有32位存储器的32位微处理器上,16位指令首 先以位31-16 (字节0和1,半字1)、然后以位15-0 (字节2和3,半字0)的半字顺序存储。 在小端模式的32位微处理器上,16位指令首先以位15-0 (字节1和0)、然后以位31-16 (字 节3和2)的半字顺序存储。将32位指令存储为2个16位半字;将48位指令存储为3个 16位半字。将指令置于存储器中使得指令关于地址顺序排列。考虑下面在图7A、7B和7C 中示出的实施方式。图7A示出了具有5个指令的假设序列700 —个16位指令,接下来是 一个32位指令,然后是3个16位指令。单元710包含16位指令,单元715包含32位指令。 单元705的内容表示32位存储器的半字0的存储器中的位顺序(bit order);单元706的 内容表示32位存储器的半字1的存储器中的位顺序。存储器中的位顺序独立于字节顺序 (endian order)。图7B中的存储布局(memory layout) 720示出了包括根据本发明的指令 的半字710按照大端顺序置于存储器中的顺序。图7B的存储布局720的行725中的单元 表示存储器中字节的寻址顺序。注意,32位AND (与)指令包括分配在两个32位存储器位 置上的两个最高有效半字(msh)和最低有效半字(Ish)。图7C中的存储布局730示出了根 据本发明指令的32位存储器中的小端布置。在一个实施方式中,微处理器能够执行来自本发明ISA和第二 ISA的指令。第二 ISA例如可以是包括遗留指令的ISA。第二 ISA可用于开发由第二 ISA的指令构成的程序。 在下文中,第二 ISA称为遗留ISA。在一个实施方式中,遗留ISA可以是MIPS32 ISA。例 如,这两个ISA微处理器可提供一种将软件应用成本有效地从遗留ISA迁移至本发明更有 效的ISA的方式。也就是,可逐渐地迁移程序,该程序的一部分执行遗留指令而其他部分执 行来自本发明ISA的指令。在这种状态下,当应用可包含来自两个不同ISA的指令时,微处 理器能够对其指令在应用的不同部分中使用的ISA进行检测和控制。在一个实施方式中,CPO包含用于ISA检测和控制的寄存器。在微处理器上激活 的(enabled) ISA的数量由CPO寄存器16、选择3的位15 (下面表示为Config3[15])表 示。在一个实施方式中,可执行来自两个ISA的指令的微处理器具有永久设置为值‘1’ 的Config3 [15],而仅能执行来自单个ISA的指令的微处理器具有永久设置为值‘0’的 config3[15]。在一个实施方式中,能够使用两个ISA的微处理器可选择ISA用于操作的特 许模式和用户模式两种模式中的指令执行。随后参照JALX指令描述对其指令在用户模式 指令执行期间执行的ISA进行选择的方法。按如下方式对其指令当微处理器在特许模式 中操作时执行的ISA进行选择。有四个事件引起微处理器操作在特许模式中(1)微处理 器重启/上电或接收到不可屏蔽中断(匪I),(2)微处理器外部的一些事件发出中断信号, (3)生成作为指令执行的副产品的异常,例如运算溢出,(4)执行系统调用或陷阱指令。事 件(2)、(3)和(4)是软件执行过程中可能发生的所有异常。异常必须在特许模式中处理,但是当异常处理完成时,软件执行和当异常发生时其指令正在执行的ISA可在该模式下继 续正常工作,即微处理器不需要初始化或重新初始化。在一个实施方式中,设置为值‘1’ 的Config3[16]选择本发明的ISA作为处理异常时其指令被执行的ISA,而设置为值‘O’ 的Config3[16]选择遗留ISA作为处理异常时其指令被执行的ISA。在一个实施方式中, config3[16]可设置恒定值。在其他实施方式中,Config3[16]可由在微处理器上执行的软 件的控制下设置和清零,或由微处理器外部的信号控制,该信号例如为 通过改变安装在主 板上的硬件开关的位置而生成的信号。事件⑴的发生不同于事件(2)、(3)或(4),因为 事件(1)需要微处理器被初始化(“启动(boot)”)或者被重新初始化(“重新启动”),即 进行例如高速缓冲存储器设置、内存管理单元配置、以及禁止或启用中断的操作。在一个实 施方式中,下文表示为Config3[14]且设为值‘1’的CPO寄存器16、选择3的位14选择本 发明的ISA作为其指令被执行以进行初始化的ISA,而设置为值‘0’的Config3[14]选择遗 留ISA作为其指令必须被执行以进行初始化的ISA。在一个实施方式中,Config3[14]可设 置为恒定值。在其他实施方式中,Config3[14]可由在微处理器上执行的软件的控制下设 置和清零,或者可由微处理器外部的信号控制,该信号例如为通过改变安装在主板上的硬 件开关的位置而生成的信号。在一个实施方式中,能够执行来自两个ISA的指令的微处理器利用ISA模式位的 值来确定其指令被执行的ISA。特定指令的执行使ISA模式位的值改变。特别地,JALX指 令的执行,总是改变ISA模式位的值,JRADDIUSP、JRC、JALR或JR指令的执行可能改变ISA 模式位的值。下面将结合关于JALX和JRADDIUSP指令操作的描述,给出导致ISA模式位改 变的步骤的顺序。如果在指令执行期间发生异常,那么微处理器将ISA模式位和表示最后 成功执行的指令的位置的地址保存到由异常类型确定的CPO寄存器中。在异常处理结束 时,微处理器可恢复所保存的值,并在该地址处和通过异常发生时操作的ISA继续执行。可 选地,可通过异常处理软件修改保存的值,以在不同的地址处和通过其他ISA的指令继续 执行。在另一个实施方式中,微处理器能够仅执行本发明ISA的指令。在这种情况下,下 文称为Config3[15]的CPO寄存器16、选择3的位15固定为‘0’,conf ig3 [14]固定为‘1’, config3[16]固定为‘1’,以及ISA模式位固定为‘1’。在又一个实施方式中,微处理器能够仅执行遗留ISA的指令。在这种情况下, config3[15]固定为 ‘0,,config3[14]固定为 ‘0,,config3[16]固定为 ‘0,,以及 ISA 模式 位固定为0。在一个实施方式中,本发明的ISA的指令以16、32或48位编码,第一指令子集具 有16位紧凑编码长度和32位常规(normal)编码长度,第二指令子集按照32位常规编码 长度和48位扩展编码长度进行编码。选择具有扩展编码长度的指令,以通过合并比具有常 规编码长度的可能指令更大的立即数字段来提供高性能。基于三种标准选择具有紧凑编码 长度的指令(1)成本,(2)发生的统计频率,以及(3)必要性或便利性。通过计算对MIPS32ISA中单独指令的所有操作数和参数进行编码所需的位的数 量,以及通过基于所计算的位的数量分配编码成本值,确定编码成本。例如,给从Hi移出 (Move From Hi, MFHI)和从Lo移出(MFLO)指令分配低编码成本,因为这两个指令可最低 限度地以12或13位编码,即该指令仅需要6位主操作码、少量的副操作码(minor opcode)位、和一个5位寄存器字段。另一方面,给小于无符号立即数(Less Than Immediate Unsigned, SLTIU)指令的集分配高编码成本,因为其需要6位主操作码字段、16位立即数字 段和两个5位寄存器字段。一旦完成成本分配,则执行统计分析以确定用于16位编码的最 可能的候选者,以及基于逐个指令确定用于减小操作数字段尺寸的可能策略。通过分析利用多种优化选择的MIPS编译器对多种应用的源代码进行编译产生的 MIPS32和MIPS64的目标文件和二进制的现存遗留编码,生成统计分析的统计信息。该分析 包括确定指令的发生频率以及与指令相关联的操作数字段值(例如,寄存器字段和立即数 字段值)。分析结果用于通过指令的发生频率对指令评级(rank)以及选择最常用的操作数 字段值。最频繁使用的指令通过其成本评级,成本最低、发生频率最高的指令以16位长度 重新编码。在某些情况中,通过用于选择字段值的统计分析,减少寄存器字段和/或立即数 字段的功能以适合16位编码。例如,通过参照最通常使用的寄存器或寄存器组合选择特定 转换表的字段值,将寄存器字段减少至3位,而通过选择包含具有统计高发生率的偏移值 的特定转换表的字段值,减少立即数字段长度。应该注意到,编译器设计导致最常用的寄存 器成为MIPS软件应用二进制接口(MIPS ABI)中的规定的寄存器。最后,在一些情况下,因 为指令具有被认为重要或便利的特定功能,例如,设置调试断点(SDBBP16)和BREAK16的调 试指令,因此这些指令仅以16位进行编码。通过用相应的16位紧凑编码长度指令替换第一子集的32位常规编码长度指令来 实现代码尺寸的减少。对于具有代码尺寸限制的应用软件,使用紧凑和常规形式的指令编 码。对于具有性能要求的应用软件,使用常规和扩展形式的指令编码。特别地,增强和调谐 的编译器和汇编器用于自动实现替换。可为编译器和汇编器提供预选择的代码尺寸和性能 要求,以控制编译和/或汇编过程中执行的调谐。例如,表示代码尺寸或性能优化的不同等 级的标记(flag)可附于命令行信息的后面,命令行信息通常提供给编译器/汇编器作为常 规编译/汇编过程的一部分。而且,增强的汇编器和连接器具有生成软件对象并将该对象 组合到模块中的装置,其中软件对象包括来自本发明ISA和遗留ISA两者的指令,模块可在 能够执行来自两个ISA的指令的微处理器上执行。图8A和图8B示出了具有16位和32位编码的、本发明ISA的指令编码。图8A的 表格800列出了 16位指令及其编码。图8b的表格850列出了 32位指令及其编码。表格 800和表格850的行根据指令格式进行分组。每组的首行示出了用于该组的指令格式和该 格式组的名字。通常,格式组名字描述了该组中寄存器的数量和该组中立即数字段的长度。 另外,16位组名以字母“S”开头,其后为表示指令中寄存器字段的宽度的数字。作为示例, 考虑表格800中的组名S3R2I0和S5R1I5。组名S3R2I0表示该组中的指令具有2个3位 寄存器字段而没有立即数字段,而S5R1I5表示该组中的指令具有1个5位寄存器字段和5 位立即数字段。指令包括可具有多种定义的字段,其包括被定义为没有立即数字段的立即 数字段定义。标有‘X’的位字段通常保留且未定义。一些缩写用于适应位字段,例如图800 中的1位(singlebit)副操作码字段缩写为字母‘M’。说明本发明持征的代表件指令JALX-跳转和连接交换图8B中示出了 32位JALX指令的格式。在一个实施方式中,当能够执行来自本发 明ISA和来自遗留ISA的两种指令的微处理器执行JALX指令时,JALX指令将返回地址连接
12(return address link)置于RA中,在转移延迟槽(branch delay slot)中执行该指令,将 ISA模式位改变为其相反值(即从1变为0,或从0变为1),并跳转至有效目标地址。返回 地址连接是延迟槽指令之后的指令的地址,在形成返回地址时将地址的位0设置为ISA模 式位的值。通过为PC加上一个数字来形成延迟槽指令后面的指令的地址,该数字等于4加 上转移延迟槽指令中字节的数量。通过将返回地址连接的位31-28中的内容与目标字段左 移两位后的内容连在一起,来形成有效目标地址。该转移是具有由返回地址位31-28限定 的256M对齐区域中的有效目标地址的PC区域转移(不是相对PC)。注意,这种有效地址的 定义产生边界条件,其中当JALX指令是其256M区域的最后一个字时,转移是JALX指令之 后的256M区域。如果由能够仅执行来自单个ISA的指令的微处理器执行JALX,则生成保留 指令异常。JRADDIUSP-跳转寄存器,跳转堆栈指针在图8A中示出了 JRADDIUSP指令的格式。在一个实施方式中,当由能够执行来 自本发明ISA和来自遗留ISA的两种指令的微处理器执行JRADDIUSP指令时,JRADDIUSP 将ISA模式位设置为包含在RA的位0中的值,对RA位0清零,跳转至包含在RA中的16位 对齐地址,并且利用立即数字段的内容调节SP的值。通过将立即数字段左移两位、零扩展 (zero extending)所移的值、将扩展后的所移值加至SP的值并且将结果置于SP中,从而获 得调节的SP的值。当由能够仅执行来自本发明ISA的指令的微处理器执行JRADDIUSP时, 省去将ISA模式位设置为包含在RA的位0中的值以及对RA位0清零的动作。在这种情况 下,如果RA的位0与ISA模式位不同,则在目标指令获取时生成地址异常。在一个实施方 式中,该指令不具有转移延迟槽并且在多个CPU周期中执行。当从执行期间发生的任何异 常返回时,该指令全面重启。LWM-装载多字图8B中示出了 32位LWM指令的格式。在一个实施方式中,当由能够执行来自本 发明ISA指令的微处理器执行LWM时,LWM从在微处理器存储器中的有效地址开始装载一序 列的字,并将其存储在选择的GPR中。通过将立即数字段的内容左移两位、零扩展GPR长度 的结果、将零扩展结果加至GI^R基址(base),以及执行任何需要的虚拟地址向物理地址的 转换,从而形成有效的地址。如果有效地址不是32位对齐的,即如果有效地址的两个最低 有效位为非零,则出现地址错误异常。通过对根据图5C中表格540的寄存器字段寄存器列 表的内容进行解码,确定所选择的微处理器目标寄存器。保留未列在该表中的编码。表格 540中所列的GPR 16-23在032 ABI中被称为子程序寄存器变量;GPR 30被称为第八个子 程序寄存器和帧指针;GPR 31是RA。通过表中所列的、从列表上最左侧的寄存器开始到列 表上最右侧的寄存器结束的顺序,使寄存器的数量与有效地址相关联。对于列表上的每下 一个寄存器,有效地址增加。该指令可执行可变数量的周期,并且可执行来自存储器的可变 数量的装载。当从该指令执行期间发生的任何异常返回时,执行操作序列的完全重启。如果 GI^R基址是目标寄存器中的一个,则该指令的行为是未定义的,因为这可防止如果发生异常 时操作的完全重启。LWM16-装载多字在图8A中示出了 LWM16指令的格式。在一个实施方式中,当由能够执行来自本发 明ISA指令的微处理器执行LWM16时,LWM16从在微处理器存储器中的有效地址开始装载一序列的字,并且将其存储在选择的GI^R中。通过将4位偏移字段的内容左移两位、零扩展 GPR长度的结果、将零扩展结果加至SP的内容,以及执行任何需要的虚拟地址向物理地址 的转换,从而形成有效的地址。如果有效地址不是32位对齐的,则出现地址错误异常。通 过对根据图5D中表格560的两位列表字段的内容进行解码,确定所选择的微处理器目标 寄存器。表格560中列出的GPR 16-19在032 ABI中被称为子程序寄存器变量;GPR 31是 RA。通过表中所列的、从列表上最左侧的寄存器开始到列表上最右侧的寄存器结束的顺序, 使寄存器的数量与有效地址相关联。对于列表上的每下一个寄存器,有效地址增加。该指 令可执行可变数量的周期,并且可执行来自存储器的可变数量的装载。当从该指令执行期 间发生的任何异常返回时,将执行操作顺序的完全重启。SWM-存储多字图8B中示出了 SWM指令的格式。在一个实施方式中,当由能够执行来自本发明ISA 指令的微处理器执行SWM时,SWM将一列GPR的内容置于从有效地址开始的连续顺序存储 器位置中。通过对根据图5C中表格540的字段寄存器列表进行解码,找到这列GPR。保留 未列在该表中的编码。表格540中列出的GPR 16-23在032 ABI中被称为子程序寄存器变 量;GPR 30被称为第八个子程序寄存器和帧指针;GPR 31是RA。通过将无符号12位立即 数字段的内容左移、零扩展GPR长度的结果、将零扩展结果加至GPR基址,以及执行任何需 要的虚拟地址向物理地址的转换,从而形成有效的地址。如果有效地址不是32位对齐的, 即如果有效地址的两个最低有效位为非零,则发生地址错误异常。通过表中所列的、从列表 上最左侧的寄存器开始到列表上最右侧的寄存器结束的顺序,使寄存器的数量与有效地址 相关联。将列表中的第一寄存器置于有效地址中。对于列表上的每下一个寄存器,有效地 址增加。该指令可执行可变数量的周期,并且可执行存到存储器的可变数量的存储。当从 该指令执行期间发生的任何异常返回时,执行操作顺序的完全重启。SWM16-存储多字图8A中示出了 SWM16指令的格式。在一个实施方式中,当由能够执行来自本发明 ISA指令的微处理器执行SWM16时,SWM16将一列GPR的内容置于从有效地址开始的连续 顺序存储器位置。通过对根据图5D中表格560的两位列表字段的内容进行解码,找到这列 GPR0表格560中列出的GPR 16-19在032 ABI中被称为子程序寄存器变量;GI3R 31是RA。 通过将无符号4位立即数字段的内容左移两位、零扩展GI^R长度的结果、将零扩展值加至SP 内容,以及执行任何需要的虚拟向物理地址的转换,从而形成有效的地址。如果有效地址不 是32位对齐的,则发生地址错误异常。通过表中所列的、从列表上最左侧的寄存器开始到 列表上最右侧的寄存器结束的顺序,使寄存器的数量与有效地址相关联。将列表中的第一 寄存器存储在有效地址中。对于列表上的每下一个寄存器,有效地址增加。该指令可执行 可变数量的周期,并且可执行存到存储器的可变数量的存储。当从该指令执行期间发生的 任何异常返回时,将执行操作顺序的完全重启。ANDI16-与立即数图8A中示出了 ANDI16指令的格式。在一个实施方式中,当由能够执行来自本发 明ISA指令的微处理器执行ANDI16时,ANDI16执行常量与置于通过图5A中表格500对3 位寄存器字段rsl的内容进行解码而确定的GI^R中的值的按位逻辑与(AND),并且将结果存 储在通过图5S中表格500对3位指令字段rd的内容进行解码而确定的GPR中。通过根据图6E中表格600解码立即数值,以及通过将结果零扩展至微处理器寄存器长度,确定用于逻辑与运算的常量。虽然以上描述了本发明的不同实施方式,但是应该理解这仅是通过示例性而非限 制性的方式给出的。对于相关计算机领域的技术人员而言显而易见的是,在不偏离本发明 精神和范围的前提下可进行形式和细节的各种改变。例如,除通过硬件(例如,位于中央处 理单元(“CPU”)内或连接至CPU、微处理器、微控制器、数字信号处理器、处理器核、片上系 统(SOC)或任何其他可编程或电子装置)实施之外,还可在置于被配置为存储软件的计算 机可用(例如,可读)介质中的软件(例如,计算机可读代码、程序代码,和/或以例如源语 言、目标语言、机器语言的任何形式的指令)中实施。这样的软件可启动例如在此描述的方 法和装置的功能、制造、建模、仿真、描述、和/或测试。例如,这可通过使用通用编程语言 (例如C、C++)、包括VerilogHDL、VHDL等的硬件描述语言(HDL)来完成。软件还可置于计 算机可用(例如,可读)介质内,计算机可用介质包括半导体、磁盘或光盘(例如,⑶-ROM、 DVD-ROM等)。软件还可作为在计算机可用(例如,可读)传输介质(例如,载波、或包括数 字、光或基于模拟的介质的任何其他介质)内实施的计算机数据信号。本发明的实施方式 可包括方法,该方法通过提供描述装置的软件并且将软件作为计算机数据信号在包括因特 网和内部网的通信网络上传输,提供在此描述的装置。应该理解在此描述的装置和方法的实施方式包括在半导体知识产权核心中,例如 微处理器核心(例如,在HDL中实现),并且转换为生成集成电路的硬件。另外,在此描述的 装置和方法可实现为硬件和软件的结合。因此,本发明不应受到任何上述示例性实施方式 的限制,而是仅由下述权利要求及其等同限定。
权利要求
一种操作处理器的方法如果将由所述处理器执行的代码与由第一指令集定义的第一编码兼容,则将第一位设置为第一值;如果将由所述处理器执行的所述代码与由第二指令集定义的第二编码兼容,则将所述第一位设置为第二值;以及根据所述第一位执行所述代码。
2.如权利要求1所述的方法,其中,所述第一位的设置在所述处理器上电之前执行。
3.如权利要求2所述的方法,其中,所述第一位是通过改变硬件开关的位置而设置的。
4.如权利要求1所述的方法,其中,所述第一位是通过改变寄存器的值而设置的。
5.如权利要求1所述的方法,其中,所述位存储在与所述处理器协同操作的协处理器中。
6.如权利要求1所述的方法,进一步包括将第二位设置为第一值,以使所述处理器根据所述第一指令集处理异常/中断请求; 将所述第二位设置为第二值,以使所述处理器根据所述第二指令集处理异常/中断请 求;以及根据所述第二位执行所述代码。
7.如权利要求6所述的方法,其中,所述第二位是通过改变硬件开关的位置而设置的。
8.如权利要求6所述的方法,其中,所述第二位是通过改变寄存器的值而设置的。
9.如权利要求6所述的方法,其中,所述第二位存储在与所述处理器协同操作的协处理器中。
10.如权利要求6所述的方法,其中,所述第一指令集包括使所述处理器将执行从所述 第一编码切换至所述第二编码的至少一个指令,所述第二指令集包括使所述处理器将执行 从所述第二编码切换至所述第一编码的至少一个指令。
11.如权利要求6所述的方法,其中,所述第一指令集包括遗留指令,所述第二指令集 包括可变长度的指令。
12.一种适于执行代码的计算机系统,所述计算机系统包括 存储单元;处理器如果第一值存储在所述存储单元中,则所述处理器适于根据第一指令集的编码执行所 述代码;如果第二值存储在所述存储单元中,则所述处理器适于根据第二指令集的编码执行所 述代码。
13.如权利要求12所述的计算机系统,其中,在所述处理器上电之前,所述第一值或所 述第二值存储在所述存储单元中。
14.如权利要求13所述的计算机系统,其中,所述第一值和所述第二值是通过改变硬 件开关的位置确定的。
15.如权利要求12所述的计算机系统,进一步包括 所述处理器进一步适于如果第三值存储在所述存储单元中,则所述处理器适于根据所述第一指令集执行所述代码;如果第四值存储在所述存储单元中,则所述处理器适于根据所述第二指令集执行所述 代码。
16.如权利要求15所述的计算机系统,其中,所述第三值和所述第四值是通过改变硬 件开关的位置确定的。
17.如权利要求15所述的计算机系统,其中,所述存储单元是置于与所述处理器协同 操作的协处理器中的寄存器。
18.如权利要求16所述的计算机系统,其中,所述第一值、所述第二值、所述第三值和 所述第四值是通过改变所述寄存器的值确定的。
19.如权利要求15所述的计算机系统,其中,所述第一指令集包括使所述处理器将执 行从所述第一编码切换至所述第二编码的至少一个指令,所述第二指令集包括使所述处理 器将执行从所述第二编码切换至所述第一编码的至少一个指令。
20.如权利要求15所述的计算机系统,其中,所述第一指令集包括遗留指令,所述第二 指令集包括可变长度的指令。
21.一种适于执行代码的计算机系统,所述计算机系统包括存储器,适于存储指令集,所述指令集包括通过第一指令长度编码的多个第一指令和 通过第二指令长度编码的多个第二指令;处理器,适于通过所述多个第一指令执行计算机程序的第一组代码,以及通过所述多 个第二指令执行所述计算机程序的第二组代码。
22.如权利要求21所述的计算机系统,其中,所述多个第一指令包括在特许资源上操 作的指令。
23.如权利要求22所述的计算机系统,其中,所述指令集的指令具有6位主操作码字段 和至少一个其它字段。
24.如权利要求23所述的计算机系统,其中,所述主操作码字段的3个相邻位的逻辑组 合确定所述指令集中的哪些指令是所述多个第二指令的成员。
25.如权利要求24所述的计算机系统,其中,所述3个相邻位是所述主操作码字段的3 个最低有效位(LSB)。
26.如权利要求25所述的计算机系统,其中,所述逻辑组合是(NOTLSB2)AND(LSB1 OR LSBO)。
27.如权利要求24所述的计算机系统,其中,所述多个第二指令是所述多个第一指令 的子集。
28.如权利要求27所述的计算机系统,其中,所述多个第一指令的指令长度和所述多 个第二指令的指令长度分别是32位和16位。
29.如权利要求28所述的计算机系统,其中,做出决定以执行所述第一组代码,所述决 定基于代码执行速度。
30.如权利要求28所述的计算机系统,其中,做出决定确定以执行所述第一组代码和 所述第二组代码,所述决定基于代码尺寸。
31.如权利要求28所述的计算机系统,其中,所述指令集进一步包括通过第三指令长 度编码的多个第三指令;以及所述处理器进一步适于通过所述多个第三指令,执行所述计算机程序的第三组代码。
32.如权利要求31所述的计算机系统,其中,所述多个第三指令是所述多个第一指令 的子集。
33.如权利要求32所述的计算机系统,其中,所述多个第三指令的指令长度是48位。
34.如权利要求33所述的计算机系统,其中,做出决定以执行所述多个第一指令和所 述多个第三指令,所述决定基于代码执行速度。
35.如权利要求33所述的计算机系统,其中,做出决定以执行所述多个第一指令、所述 多个第二指令和所述多个第三指令,所述决定基于代码尺寸。
36.如权利要求33所述的计算机系统,其中,所述多个第二指令包括具有5位寄存器字 段的指令,所述5位寄存器字段被解码以选择在所述指令执行中操作的GPR。
37.如权利要求36所述的计算机系统,其中,所述多个第二指令包括具有3位寄存器字 段的指令,所述3位寄存器字段被解码以选择在所述指令执行中操作的GPR。
38.如权利要求36所述的计算机系统,包括具有寄存器列表字段的指令,所述寄存器 列表字段被解码以从列举有多组GPR的一组列表中选择在所述指令执行中操作的列表。
39.如权利要求38所述的计算机系统,包括具有立即数字段的指令,所述立即数字段 被解码以确定在所述指令执行中使用的偏移。
40.如权利要求39所述的计算机系统,其中,所述立即数字段是4位。
41.如权利要求40所述的计算机系统,其中,所述立即数字段是7位。
42.如权利要求40所述的计算机系统,其中,所述立即数字段是9位。
43.如权利要求42所述的计算机系统,其中,所述多个第一指令和所述多个第二指令 包括具有寄存器字段和立即数字段的装载多字指令,所述寄存器字段和所述立即数字段可 结合以确定处理器存储器的地址,可从所述处理器存储器将字装载到所述一组GPR中。
44.如权利要求43所述的计算机系统,其中,所述多个第一指令和所述多个第二指令 包括具有寄存器字段和立即数字段的存储多字指令,所述寄存器字段和所述立即数字段可 结合以确定处理器存储器的地址,可将所述一组GPR的内容置于所述处理器存储器中。
45.如权利要求44所述的计算机系统,其中,所述多个第二指令包括具有立即数字段 的ANDI16指令,所述立即数字段保存数字,所述数字可被解码以从一列立即数值中选择立 即数值。
46.如权利要求45所述的计算机系统,其中,所述多个第二指令包括具有立即数字段 的JRADDIUSP指令,所述立即数字段可确定立即数值并且隐式地使用SP和RA。
47.如权利要求46所述的计算机系统,所述计算机系统的执行可引起无条件跳转至保 存在RA中的地址,还将所述立即数与SP的内容算法地结合以产生用于SP内容的新值。
全文摘要
方法和装置提供了压缩指令代码尺寸的手段。指令集架构编码紧凑位长度、常规位长度或扩展位长度的指令。通常使用的指令被编码为具有紧凑位长度和常规位长度,基于功率、性能或代码尺寸要求选择紧凑位长度或常规位长度的指令。ISA的指令可用于微处理器的特许和非特许两种操作模式中。在软件应用中可交换地使用指令编码。来自ISA的指令可在包括单一指令集架构处理器或多指令集架构处理器且能够用于ISA的任何可编程装置上执行。
文档编号G06F9/30GK101887357SQ20101017823
公开日2010年11月17日 申请日期2010年5月11日 优先权日2009年5月11日
发明者埃里克·K·诺登 申请人:美普思科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1