精简指令集计算机处理器装置及其数据处理方法转让专利

申请号 : CN200810056665.9

文献号 : CN101221496B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蔡嵩松李晓钰

申请人 : 中国科学院计算技术研究所

摘要 :

本发明公开了一种精简指令集计算机(RISC)处理器装置及其数据处理方法。该装置包括译码器,物理寄存器堆和运算部件,以及译码器,物理寄存器堆和运算部件之间连接的数据通路,所述物理寄存器堆中的每个物理寄存器扩展为72位,整个数据通路统一扩充为72位;所述运算部件,包括扩展运算模块,用于在指令运算中,对物理寄存器堆中的72位寄存器的标志位进行修改,并根据修改的标志位进行新的指令运算。其扩大虚拟机的优化空间,达到提高虚拟机性能的目的。

权利要求 :

1.一种RISC处理器装置,包括译码器,物理寄存器堆和运算部件,以及译码器,物理寄存器堆和运算部件之间连接的数据通路,其特征在于:所述物理寄存器堆包括扩展后的通用寄存器和扩展后的浮点寄存器,其中的每个物理寄存器被扩展为72位;

所述数据通路统一扩充为72位;

所述运算部件,包括扩展运算模块,用于当处理器处于X86虚拟机工作模式下时,在指令运算中,对物理寄存器堆中的72位物理寄存器的标志位进行修改,并根据修改的标志位进行新的指令运算;

其中,所述扩展运算模块,包括通用寄存器扩展运算模块,用于当处理器处于X86虚拟机工作模式下时,利用所述扩展后的通用寄存器进行运算,并把运算结果的数据部分和标志部分一起写回到经扩展后的目标通用寄存器中。

2.根据权利要求1所述的RISC处理器装置,其特征在于,所述扩展后的通用寄存器和扩展后的浮点寄存器,分别包括64位的数据位部分和8位的标志位部分。

3.根据权利要求2所述的RISC处理器装置,其特征在于,所述扩展后的通用寄存器的第64到69位共6个标志位,由低到高分别表示CF位、PF位、AF位、ZF位、SF位和OF位。

4.根据权利要求2所述的RISC处理器装置,其特征在于,所述扩展后的浮点寄存器的第64位作为该浮点寄存器的TAG标志位,表示该浮点寄存器的状态,用于检测浮点访问时会不会发生栈溢出例外。

5.根据权利要求4所述的RISC处理器装置,其特征在于,所述TAG位为0,则表示浮点栈此项为空,即浮点寄存器中的数值无效;如果为1,则表示浮点寄存器中的数值有效。

6.根据权利要求1所述的RISC处理器装置,其特征在于,所述译码器包括最新标志位指针,用于指向与最新标志位结合的通用寄存器。

7.根据权利要求1所述的RISC处理器装置,其特征在于,所述扩展运算模块,包括浮点寄存器扩展运算模块,用于当处理器处于X86虚拟机工作模式下时,利用所述扩展后的浮点寄存器进行运算,并根据运算结果改写浮点寄存器的TAG位。

8.一种RISC处理器装置的数据处理方法,其特征在于,包括下列步骤:步骤A,在设置RISC处理器的X86虚拟机工作模式时,扩展物理寄存器堆中的通用寄存器和浮点寄存器为72位,同时将数据通路统一扩充为72位;

步骤B,在指令运算中,对物理寄存器堆中的72位物理寄存器的标志位进行修改,并根据修改的标志位进行新的指令运算;

其中,扩展后的通用寄存器进行运算时,把运算得到的结果数据部分和标志部分一起写回到目标通用寄存器。

9.根据权利要求8所述的RISC处理器装置的数据处理方法,其特征在于,所述步骤B中,对于通用寄存器而言,包括下列步骤:步骤B1,根据指令运算,修改最新标志位指针,译码器的最新标志位指针指向与最新标志位结合的通用寄存器。

10.根据权利要求9所述的RISC处理器装置的数据处理方法,其特征在于,所述步骤B1之后还包括下列步骤:步骤B2,如果一个新指令运算需要使用标志位作为源操作数,则使用最新标志位指针指向的通用寄存器作为该指令的源操作数。

11.根据权利要求9或10所述的RISC处理器装置的数据处理方法,其特征在于,所述步骤B1中,修改最新标志位指针,包括下列步骤:

1)如果指令运算时需要改变最新标志位,则最新标志位指针值改变为指向该指令的目标寄存器;

2)如果新指令运算时不需要改变最新标志位,但是却把最新标志位指针指向的物理寄存器作为目的操作数,则需要将原物理寄存器中的标志位的值复制到新的物理寄存器中,作为最新标志位指针指向的通用寄存器;

3)如果指令修改全部标志位,则修改通用寄存器中的6个标志位,再将最新标志位指针指向新的通用寄存器;

4)如果指令只修改6位标志位中的其中一位或者多位,则采用拼接的方法把多位标志位拼接在一起。

12.根据权利要求8所述的RISC处理器装置的数据处理方法,其特征在于,所述步骤B中,对于浮点寄存器而言,包括下列步骤:步骤B1′,如果浮点运算指令使用浮点栈中的浮点寄存器进行运算时,则需要先判断TAG标志位的状态,如果TAG位为0即数据无效,则引发浮点栈溢出异常;

步骤B2′,如果浮点运算指令判断TAG标志位的状态为1即有效,则正常执行运算,执行之后将目标浮点寄存器的TAG位置为1。

13.根据权利要求12所述的RISC处理器装置的数据处理方法,其特征在于,所述步骤B2′后还包括下列步骤:步骤B3′,使用对TAG置位的指令SETTAG使得相应的浮点栈中项有效或者无效。

说明书 :

精简指令集计算机处理器装置及其数据处理方法

技术领域

[0001] 本发明涉及计算机处理器技术领域,特别是涉及一种精简指令集计算机(RISC)处理器装置及其数据处理方法。

背景技术

[0002] 虚拟机是20世纪60年代IBM公司提出的概念,并且付诸实现。当时主流计算机是大型机,通过把大型机分割成多个虚拟机,利用虚拟机监视器(Virtual Machine Monitor,VMM)的分隔,多种不同应用或者多个用户可以共享这一稀缺资源。
[0003] 但是,随着硬件成本降低和计算能力的增强,以及多任务操作系统(OS)的出现,虚拟机监视器慢慢退出历史舞台,微型计算机和个人计算机(PC)大行其道。 [0004] 然而,由于虚拟机的强大和成功在于用户可以访问和利用仅仅通过指令集的组合就可以形成的功能和设备,最近几年,虚拟机监视器重新成为学术界和工业界的焦点。虚拟机监视器为现代计算机系统的真实限制提供一种虚拟解决方案,其变成一个强大的工具,这一工具会大大扩展现代计算机系统的能力。
[0005] 当今X86架构在很多的应用中占据了主导的地位,很多大型的服务器类的应用都是X86架构。精简指令集计算机(Reduced Instruction Set Computing,RISC)架构的微处理器为了能够广泛地运行服务类的应用,实现与X86架构的兼容就成为了必要的任务。另外,现有X86架构的计算机中,应用程序更加多样化,很多商业软件都是基于X86架构的,所以RISC微处理器要想更为广泛地运行多样化的应用,也非常需要实现对X86的兼容。 [0006] MIPS作为RISC很大的一个分支,目前有很多开源的虚拟机平台,可以实现MIPS到X86平台的异构支持。
[0007] 在MIPS架构上用虚拟机兼容X86架构需要考虑很多方面,其中一方面就 是X86架构中对标志寄存器(EFLAGS)标志位的使用。
[0008] X86定点运算指令支持共6比特(Bit)的EFLAGS标志位运算,即很多运算指令除了产生数据值以外,还要产生标志位,转移指令把标志位作为转移条件,实现指令运算。 [0009] X86中标志寄存器(EFLAGS)主要包括以下三部分内容:
[0010] 一、状态标志(Status Flags),包括CF(进位标志)、PF(奇偶位)、AF(辅助进位)、ZF(零标志)、SF(非负标志)和OF(溢出)共六位;
[0011] 二、DF(方向标志)标志,用来控制串操作指令的方向;
[0012] 三、其他系统标志和I/O特权域(IOPL域),这些标志包括单步模式标志、中断使能、I/O优先级等,用户程序不能修改这些标志。
[0013] 关于标志寄存器的第二和第三部分的内容,MIPS64中已经有相应的硬件可以实现,但对于第一部分的内容没有相应的实现。
[0014] X86中还有一个16位的浮点标志寄存器,其中每两位组成一个标志(TAG),共8个标志(TAG)。每个标志(TAG)对应一个浮点寄存器的状态,00表示valid,01表示zero,10表示special,11表示empty。由于X86中的浮点寄存器以栈的方式组织,浮点标志寄存器主要用于检测浮点访问时会不会发生栈溢出例外。
[0015] 现有技术中,标志寄存器第一部分的内容,即状态标志(Status Flags)和浮点标志寄存器的MIPS到X86的异构实现,都没有硬件实现,而软件层次的虚拟机异构实现会产生很大的开销,对性能造成很大的影响。

发明内容

[0016] 本发明所要解决的问题在于提供一种精简指令集计算机(RISC)处理器装置及其数据处理方法。其扩大虚拟机的优化空间,达到提高虚拟机性能的目的。 [0017] 为实现本发明而提供的一种RISC处理器装置,包括译码器,物理寄存器堆和运算部件,以及译码器,物理寄存器堆和运算部件之间连接的数据通路,所述物理寄存器堆包括扩展后的通用寄存器和扩展后的浮点寄存器,其中的每个物理寄存器被扩展为72位,所述数据通路统一扩充为72位;
[0018] 所述运算部件,包括扩展运算模块,用于当处理器处于X86虚拟机工作 模式下时,在指令运算中,对物理寄存器堆中的72位物理寄存器的标志位进行修改,并根据修改的标志位进行新的指令运算。
[0019] 所述扩展后的通用寄存器和扩展后的浮点寄存器,分别包括64位的数据位部分和8位的标志位部分。
[0020] 所述扩展后的通用寄存器的第64到69位共6个标志位,由低到高分别表示CF位、PF位、AF位、ZF位、SF位和OF位。
[0021] 所述扩展后的浮点寄存器的第64位作为该浮点寄存器的TAG标志位,表示该浮点寄存器的状态,用于检测浮点访问时会不会发生栈溢出例外。
[0022] 所述TAG位为0,则表示浮点栈此项为空,即浮点寄存器中的数值无效;如果为1,则表示浮点寄存器中的数值有效。
[0023] 所述扩展运算模块,包括通用寄存器扩展运算模块,用于当处理器处于X86虚拟机工作模式下时,利用所述扩展后的通用寄存器进行运算,并把运算结果的数据部分和标志部分一起写回到经扩展后的目标通用寄存器中。
[0024] 所述译码器包括最新标志位指针,用于指向与最新标志位结合的通用寄存器。 [0025] 所述扩展运算模块,包括浮点寄存器扩展运算模块,用于当处理器处于X86虚拟机工作模式下时,利用所述扩展后的浮点寄存器进行运算,并根据运算结果改写浮点寄存器的TAG位。
[0026] 为实现本发明目的还提供一种RISC处理器装置的数据处理方法,包括下列步骤: [0027] 步骤A,在设置RISC处理器的X86虚拟机工作模式时,扩展物理寄存器堆中的通用寄存器和浮点寄存器为72位,同时将数据通路统一扩充为72位;
[0028] 步骤B,在指令运算中,对物理寄存器堆中的72位物理寄存器的标志位进行修改,并根据修改的标志位进行新的指令运算。
[0029] 所述步骤B中,对于通用寄存器而言,包括下列步骤:
[0030] 步骤B1,扩展后的通用寄存器进行运算时,把运算得到的结果数据部分和标志部分一起写回到目标通用寄存器;
[0031] 步骤B2,根据指令运算,修改最新标志位指针,译码器的最新标志位指针指向与最新标志位结合的通用寄存器。
[0032] 所述步骤B2之后还包括下列步骤:
[0033] 步骤B3,如果一个新指令运算需要使用标志位作为源操作数,则使用最新标志位指针指向的通用寄存器作为该指令的源操作数。
[0034] 所述步骤B2中,修改最新标志位指针,包括下列步骤:
[0035] 1)如果指令运算时需要改变最新标志位,则最新标志位指针值改变为指向该指令的目标寄存器;
[0036] 2)如果新指令运算时不需要改变最新标志位,但是却把最新标志位指针指向的物理寄存器作为目的操作数,则需要将原物理寄存器中的标志位的值复制到新的物理寄存器中,作为最新标志位指针指向的通用寄存器;
[0037] 3)如果指令修改全部标志位,则修改通用寄存器中的6个标志位,再将最新标志位指针指向新的通用寄存器;
[0038] 4)如果指令只修改6位标志位中的其中一位或者多位,则采用拼接的方法把多位标志位拼接在一起。
[0039] 所述步骤B中,对于浮点寄存器而言,包括下列步骤:
[0040] 步骤B1′,如果浮点运算指令使用浮点栈中的浮点寄存器进行运算时,则需要先判断TAG标志位的状态,如果TAG位为0即数据无效,则引发浮点栈溢出异常; [0041] 步骤B2′,如果浮点运算指令判断TAG标志位的状态为1即有效,则正常执行运算,执行之后将目标浮点寄存器的TAG位置为1;
[0042] 所述步骤B2′之后还包括下列步骤:
[0043] 步骤B3′,使用对TAG置位的指令SETTAG使得相应的浮点栈中项有效或者无效。 [0044] 本发明的有益效果是:本发明的精简指令集计算机(RISC)处理器装置及其数据处理方法,在MIPS架构上对X86的标志位和浮点栈做必要的硬件支持,在RISC处理器上实现标志寄存器6比特的标志位运算以及防止浮点栈溢出,实现与X86指令集的兼容,以扩大虚拟机的优化空间,达到提高虚拟机性能的目的。
[0045] 附图说明
[0046] 图1是本发明RISC处理器装置结构示意图;
[0047] 图2是本发明实施例64位物理寄存器的扩展为72位寄存器,用作通用寄存器标志位(EFLAGS)的支持示意图;
[0048] 图3是本发明实施例64位物理寄存器的扩展为72位寄存器,用作浮点寄存器TAG标志位的支持示意图;
[0049] 图4是本发明RISC处理器装置数据处理方法流程图。

具体实施方式

[0050] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种精简指令集计算机(RISC)处理器装置及其数据处理方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。 [0051] 在本发明实施例中,以精简指令集计算机(RISC)的MIPS64指令集为例,而对本发明的精简指令集计算机(RISC)处理器装置的数据处理方法进行说明,但应当说明的是,这不是对本发明的限制,本发明同样适用于其他精简指令集计算机(RISC)的情况。 [0052] 为实现本发明而提供一种精简指令集计算机(RISC)处理器装置,如图1所示,包括译码器1、物理寄存器堆2和运算部件3,以及译码器1,物理寄存器堆2和运算部件3之间连接的数据通路(数据总线)4。
[0053] 所述物理寄存器堆2包括通用寄存器21和浮点寄存器22。
[0054] 本发明实施例中,将物理寄存器堆2中的每个物理寄存器扩展为72位,包括64位的数据位部分和8位的标志位部分;同时,整个数据通路4(数据总线)包括发射通路等统一扩充为72位。
[0055] 扩展后的通用寄存器21的第64到69位共6个标志位,由低到高分别表示CF位、PF位、AF位、ZF位、SF位和OF位,如图3所示。
[0056] 扩展后的浮点寄存器22的第64位作为该浮点寄存器22的TAG标志位,表示该浮点寄存器22的状态,如图4所示。与X86浮点栈项映射的浮点寄存器22的这一TAG标志位,用于检测浮点访问时会不会发生栈溢出例外,其他的浮点寄存器的TAG位不起作用。 [0057] 由于X86处理器中的浮点栈只有8项,所以映射0-7号共8个浮点寄存器为浮点栈中相应项,其他浮点寄存器的TAG位不起作用。
[0058] 作为一种可实施方式,如果TAG位为0,则表示空(empty),即无效;如果为1,则表示有效(valid)。
[0059] 所述运算部件3,包括扩展运算模块31,用于当处理器处于X86虚拟机工作模式下时,在指令运算中,对物理寄存器堆2中的72位寄存器的标志位进行修改,并根据修改的标志位进行新的指令运算。
[0060] 所述扩展运算模块31,包括通用寄存器扩展运算模块311和浮点寄存器扩展运算模块312,其中:
[0061] 所述通用寄存器扩展运算模块311,用于当处理器处于X86虚拟机工作模式下时,利用所述扩展后的通用寄存器21进行运算,并把运算得到的结果数据部分和标志部分一起写回到经扩展后的通用寄存器21中。
[0062] 所述浮点寄存器扩展运算模块312,用于当处理器处于X86虚拟机工作模式下时,利用所述扩展后的浮点寄存器22和浮点寄存器22的TAG位进行运算,并根据运算结果改写浮点寄存器22的TAG位。
[0063] 所述译码器1包括最新标志位指针Reflag11,用于指向与最新标志位结合的通用寄存器21。
[0064] 所述最新标志位,是指指令运算后,最后被改变的标志位;所述与最新标志位结合的通用寄存器21,是指指令运算后,最后被改变的标志位所在的通用寄存器21。例如,一条加指令ADD,运用第一通用寄存器和第二通用寄存器中的值相加,结果放到第三通用寄存器中,并根据指令运算结果改变第三通用寄存器的标志位,则被改变的第三通用寄存器的标志位为最新标志位,该第三通用寄存器为与最新标志位结合的通用寄存器,该最新标志位指针Reflag11指向第三通用寄存器。
[0065] 下面详细说明本发明的精简指令集计算机(RISC)处理器装置的数据处理方法,包括下列步骤:
[0066] 步骤S100,在设置RISC处理器的X86虚拟机工作模式时,设置物理寄存器堆2中的通用寄存器21和浮点寄存器22为72位物理寄存器,包括64位的数据位和8位的标志位。
[0067] 72位的物理寄存器堆2包括64位的数据位和8位的标志位。
[0068] 扩展后的通用寄存器21的第64到69位共6个标志位,由低到高分别表示CF位、PF位、AF位、ZF位、SF位和OF位,如图3所示。
[0069] 扩展后的浮点寄存器22的第64位作为该浮点寄存器22的TAG标志位,表示该浮点寄存器22的状态,如图4所示。与X86浮点栈项映射的浮点寄存器22的这一TAG标志位,用于检测浮点访问时会不会发生栈溢出例外,其他的浮点寄存器的TAG位不起作用。作为一种可实施方式,如果TAG位为0,则表示空(empty),即无效;如果为1,则表示有效(valid)。
[0070] 步骤S200,在指令运算中,对物理寄存器堆2中的72位寄存器的标志位进行修改,并根据修改的标志位进行新的指令运算。
[0071] 步骤S200中,对于通用寄存器21而言,包括下列步骤:
[0072] 步骤S210,扩展后的通用寄存器21进行运算时,把运算得到的结果数据部分和标志部分一起写回到目标通用寄存器21;
[0073] 步骤S220,根据指令运算,修改最新标志位指针Reflag11,译码器1的最新标志位指针Reflag11指向与最新标志位结合的通用寄存器21;
[0074] 根据不同的指令,最新标志位指针Reflag11有不同的修改方法: [0075] A)如果指令运算时需要改变最新标志位,则最新标志位指针Reflag11值改变为指向该指令的目标寄存器;
[0076] B)如果新指令运算时不需要改变最新标志位,但是却把最新标志位指针Reflag11指向的物理寄存器作为目的操作数,则需要将原物理寄存器中的标志位的值复制到新的物理寄存器中,作为最新标志位指针Reflags11指向的通用寄存器21; [0077] C)如果指令修改全部标志位,则修改通用寄存器21中的6个标志位,再将最新标志位指针Reflags11指向新的通用寄存器21;
[0078] D)如果指令只修改6位标志位中的其中一位或者多位,则采用拼接的方法把多位标志位拼接在一起,例如and逻辑与指令只修改OF、CF、SF、ZF和PF标志,那么就在目标寄存器中修改这5位,再把最新标志位的指针Reflag指向的寄存器中的AF标志位复制到新的目标寄存器中拼接即可。
[0079] 步骤S230,如果一个新指令运算需要使用标志位作为源操作数,则使用最新标志位指针Reflag11的指向的通用寄存器21作为该指令的源操作数。
[0080] 对于根据通用寄存器21的标志位进行跳转和运算的指令,在运算部件3执行的时候可以直接读取最新标志位指针Reflag11所指向的72位扩展寄存器中的高8位,得到标志位的值作为源;对于直接运算得到通用寄存器21的标志位的指令,将运算得到的标志位写入到目标寄存器的扩展高8位中。
[0081] 例如,本发明实施例中,根据通用寄存器的标志位进行运算和直接运算得到通用寄存器的标志位的值,例如加法指令,它执行MIPS指令集的加法操作,但是在计算加法结果并存入目标寄存器的同时,还要根据结果的值修改目标寄存器的高6位标志位值; [0082] 例如,根据通用寄存器的标志位中的一位或者多位进行分支跳转指令,则根据标志位的一位或者是几位进行或跳转。
[0083] 步骤S200中,对于浮点寄存器22而言,包括下列步骤:
[0084] 步骤S210′,如果浮点运算指令使用浮点栈中的浮点寄存器进行运算时,则需要先判断TAG标志位的状态,如果TAG位为0即数据无效,则引发浮点栈溢出异常; [0085] 步骤S220′,如果浮点运算指令判断TAG标志位的状态为1即有效,则正常执行运算,执行之后将目标浮点寄存器的TAG位置为1;
[0086] 所述步骤S220′之后还可以包括下列步骤:
[0087] 步骤S230′,使用对TAG置位的指令SETTAG使得相应的浮点栈中项有效或者无效。
[0088] 作为一种可实施方式,SETTAG指令格式如下:
[0089] SETTAG ft imm
[0090] 该指令设置浮点寄存器ft的TAG位为imm值,当imm为0时表示相应的浮点寄存器中的数值无效,当imm为1时表示相应的浮点寄存器中的数值有效。
[0091] 由于X86处理器中的浮点栈只有8项,所以ft在0到7之间,如果是序号大于8的浮点寄存器使用这条指令,则不起任何作用。
[0092] 如果没有寄存器的扩展,那么现有结构如果要实现物理寄存器的标志位(EFLAGS),每条计算得到物理寄存器的标志位的指令都要被翻译成很多条指令来实现,其中包括:首先计算得到结果,再根据结果的值进行各种运算, 以求得各个标志位的值,并把这个标志值保存起来(或者保存在寄存器中,或者保存在内存里,如果保存在寄存器中,那么其它指令在使用该寄存器的时候,需要将这个值存入内存中,再使用时再从内存中恢复),这样做必然增加了很多不必要的开销。而本发明的精简指令集计算机(RISC)处理器装置及其数据处理方法,在MIPS架构上对X86的物理寄存器做必要的硬件支持,以扩大虚拟机的优化空间,达到提高虚拟机性能的目的。
[0093] 通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。
[0094] 本发明的精简指令集计算机(RISC)处理器装置及其数据处理方法,在MIPS架构上对X86的标志寄存器(EFLAGS)做必要的硬件支持,以扩大虚拟机的优化空间,达到提高虚拟机性能的目的。
[0095] 以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。