一种risc处理器及其寄存器标志位处理方法

文档序号:6616197阅读:255来源:国知局
专利名称:一种risc处理器及其寄存器标志位处理方法
技术领域
本发明涉及计算机处理器技术领域,特别是涉及一种精简指令集计算机 (RISC)处理器及其寄存器标志位处理方法。
背景技术
虚拟机是20世纪60年代IBM公司提出的概念,并且付诸实现。当时主 流计算机是大型机,通过把大型机分割成多个虚拟机,利用虚拟机监视器 (Virtual Machine Monitor, VMM)的分隔,多种不同应用或者多个用户可以 共享这一稀缺资源。
但是,随着硬件成本降低和计算能力的增强,以及多任务操作系统(OS) 的出现,虚拟机监视器慢慢退出历史舞台,微型计算机和个人计算机(PC) 大行其道。
然而,由于虚拟机的强大和成功在于用户可以访问和利用仅仅通过指令集 的组合就可以形成的功能和设备,最近几年,虚拟机监视器重新成为学术界和 工业界的焦点。虚拟机监视器为现代计算机系统体系结构的限制提供一种虚拟 解决方案,使其变成一个强大的工具,这一工具会大大扩展现代计算机系统的 能力。
当今复杂指令集计算机(Complex Instruction Set Computing, CISC)处理 器架构,如X86指令集的CISC处理器架构在很多的应用中占据了主导的地 位,很多大型的服务器类的应用都是X86指令集的CISC处理器架构。精简指 令集计算机(Reduced Instruction Set Computing, RISC)架构的微处理器为了 能够广泛地运行服务类的应用,实现与CISC处理器的兼容就成为了必要的任 务。另外,现有CISC处理器的计算机中,应用程序更加多样化,很多商业软 件都是基于CISC处理器,所以RISC微处理器要想更为广泛地运行多样化的 应用,也非常需要实现对CISC处理器的兼容。
MIPS指令集的RISC处理器作为RISC处理器很大的一个分支,目前有很
多开源的虚拟机平台,可以实现MIPS指令集的RISC处理器到X86指令集的 CISC处理器的异构支持。
在MIPS指令集的RISC处理器上用虚拟机兼容X86指令集的CISC处理 器需要考虑很多方面,其中一方面就是X86指令集的CISC处理器中对标志寄 存器(EFLAGS)标志位的使用。
X86指令集中标志寄存器(EFLAGS)主要包括以下三部分内容
一、 状态标志(Status Flags),包括CF (进位标志)、PF (奇偶位)、 AF (辅助进位)、ZF (零标志)、SF (非负标志)和OF (溢出)共六位;
二、 DF (方向标志)标志,用来控制串操作指令的方向;
三、 其他系统标志和I/O特权域(IOPL域),这些标志包括单步模式标 志、中断使能、1/0优先级等,用户程序不能修改这些标志。
X86指令集的定点运算指令支持共6比特(Bit),包括CF、 PF、 AF、 ZF、 SF、 OF共六位的标志寄存器(EFLAGS)标志位运算,即很多运算指令 除了产生数据值以外,还要产生标志寄存器标志位,使某些转移指令能够把标
志位作为转移条件,实现指令跳转。
但是,现有技术RISC处理器的X86虚拟机中,实现标志寄存器6比特的 标志位运算时,是通过模拟而实现,其会产生很大的开销,对性能造成很大的 影响。

发明内容
本发明所要解决的问题在于提供一种RISC处理器及其寄存器标志位处理 方法。其在RISC处理器上实现标志寄存器6比特的标志位运算,实现与X86 指令集的兼容,提高虚拟机性能。
为实现本发明而提供的一种RISC处理器,包括物理寄存器堆、运算部件 和译码器;
所述物理寄存器堆包括模拟标志寄存器,用于模拟实现CISC处理器的标 志寄存器标志位;
所述运算部件包括标志读写模块,用于读写模拟标志寄存器标志位的值。
所述译码器包括模式标识模块,用于识别出运算是处于模拟EFLAGS工 作模式下,然后根据不同的指令,将模拟标志寄存器译码为源寄存器和/或目 标寄存器。
所述运算部件还包括运算控制器,用于在运算过程中,当RISC处理器处 于X86虚拟机工作模式时,根据模拟标志寄存器标志位的值,进行控制。
所述标志读写模块,包括标志提取模块和标志修改模块,其中
所述标志提取模块,用于提取一位或者多位模拟标志寄存器标志位的值, 根据指令中的8位掩码值来控制提取模拟标志寄存器中的一位或者几位,提取 出来的模拟标志寄存器标志位的值存入目标寄存器中;
所述标志修改模块,用于修改一位或者多位模拟标志寄存器标志位的值, 根据指令中的8位掩码值来控制修改模拟标志寄存器中的一位或者几位,使用 源寄存器中的值对模拟标志寄存器进行修改。
所述控制包括根据运算结果得到新的模拟标志寄存器标志位;以及根据模 拟标志寄存器标志位中的一位或者多位,执行分支跳转指令。
所述模拟标志寄存器的低六位由低到高分别表示CF位、PF位、AF位、 ZF位、SF位禾口OF位。
为实现本发明目的还提供一种RISC处理器寄存器标志位处理方法,包括 下列步骤
步骤A,在RISC处理器中设置处于RISC处理器的X86虚拟机工作模式, 即模拟标志寄存器可用;
步骤B, RISC处理器在运算过程中,当处于RISC处理器的X86虛拟机 工作模式时,读写模拟标志寄存器标志位的值,和/或根据模拟标志寄存器标 志位的值,进行控制。
所述步骤A和B之间还包括下列步骤
译码器识别出运算是处于模拟EFLAGS工作模式下,然后根据不同的指 令,将模拟标志寄存器译码为源寄存器和/或目标寄存器。 所述步骤B包括下列步骤
步骤B1,当处于RISC处理器的X86虚拟机工作模式时,提取一位或者 多位模拟标志寄存器标志位的值,根据其中的8位掩码值来控制提取模拟标志寄存器中的一位或者几位,提取出来的模拟标志寄存器标志位的值存入目标寄
存器中;
步骤B2,当处于RISC处理器的X86虚拟机工作模式时,修改一位或者 多位模拟标志寄存器标志位的值,根据其中的8位掩码值来控制修改模拟标志 寄存器中的一位或者几位,使用源寄存器中的值对模拟标志寄存器进行修改。
所述步骤B中,所述控制过程包括下列步骤
步骤Bl',根据运算结果得到模拟标志寄存器标志位;
步骤B2',根据模拟标志寄存器标志位中的一位或者多位,执行分支跳转 指令。
所述模拟标志寄存器的低六位由低到高分别表示CF位、PF位、AF位、 ZF位、SF位禾卩OF位。
本发明的有益效果是:本发明的RISC处理器及其寄存器标志位处理方法, 在MIPS指令集的RISC处理器上对X86指令集的CISC处理器的标志寄存器 (EFLAGS)的6比特(bit)标志位做必要的硬件支持,扩大虚拟机的优化空 间,达到提高虚拟机性能的目的。


图1是本发明RISC处理器结构示意图; 图2是本发明模拟标志位寄存器示意图; 图3是本发明RISC处理器寄存器标志位处理方法流程图; 图4是本发明实施例标识模拟标志寄存器的SETFLAG指令编码示意图; 图5是本发明实施例修改模拟标志寄存器标志位的指令MTFLAG指令编 码示意图6是本发明实施例读取模拟标志寄存器标志位的指令MFFLAG指令编 码示意图7是本发明实施例修改模拟标志寄存器的标志位的加指令X86ADD指 令编码示意图8是根据模拟标志寄存器标志位进行分支跳转的X86J M-EFLAGS指令
编码示意图。
具体实施例方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实
施例,对本发明的一种RISC处理器及其寄存器标志位处理方法进行进一步详 细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于 限定本发明。
本发明实施例以MIPS64指令集的RISC处理器装置为例,对本发明进行 说明,但应当说明的是,其并不是对本发明的限制,本发明同样可以适用于其 他指令集的RISC处理器。
如图1所示,为实现本发明而提供一种RISC处理器,包括物理寄存器堆 1、运算部件3和译码器2。
所述物理寄存器堆包括模拟标志寄存器4 (M-EFLAGS),用于模拟实现 X86指令集的CISC处理器的标志寄存器(EFLAGS)标志位,如图2所示, 该寄存器的低六位由低到高分别表示CF位、PF位、AF位、ZF位、SF位和 OF位。
其中
OF,表示如果结果溢出,则置为l,否则清零;
SF,表示保存结果的最高位;
ZF,表示结果如果为O则置为1,否则清零;
AF,表示运算中如果第3位向第4位有进位或者借位,则置为l,否则清
零;
PF,表示结果最低字节如果有偶数个l则置为1,否则清零; CF,表示如果运算中最高位向更高位进位或者借位,则该位置为l,否则 清零。
所述译码器2,包括模式标识模块21,用于识别出运算是处于RISC处理 器的X86虚拟机工作模式,即模拟EFLAGS工作模式下,然后根据不同的指 令,将模拟标志寄存器译码为源寄存器和/或目标寄存器。
所述运算部件3包括标志读写模块31,用于读写模拟标志寄存器4标志 位的值。
所述标志读写模块31,包括标志提取模块311和标志修改模块312,其中所述标志提取模块311,用于提取一位或者多位模拟标志寄存器4标志位
的值,根据其中的8位掩码(mask)值来控制提取模拟标志寄存器4中的一位 或者几位,提取出来的模拟标志寄存器4标志位的值存入目标寄存器中。
所述标志修改模块312,用于修改一位或者多位模拟标志寄存器4标志位 的值,根据其中的8位掩码(mask)值来控制修改模拟标志寄存器4中的一位 或者几位,使用源寄存器中的值对模拟标志寄存器4进行修改。
所述运算部件3还包括运算控制器32,用于RISC处理器在运算过程中, 当处于RISC处理器的X86虚拟机工作模式时,根据模拟标志寄存器4标志位 的值,进行控制。
所述的控制包括根据运算结果得到新的模拟标志寄存器4 (M-EFLAGS) 标志位;以及根据模拟标志寄存器4 (M-EFLAG)标志位中的一位或者多位, 执行分支跳转指令。
下面详细说明本发明的RISC处理器寄存器标志位处理方法,如图3所示, 其包括下列步骤
步骤S100,在RISC处理器中设置处于RISC处理器的X86虚拟机工作模 式,即模拟标志寄存器4可用,译码器识别出运算是处于RISC处理器的X86 虚拟机工作模式,即模拟EFLAGS工作模式下,然后根据不同的指令,将模 拟标志寄存器译码为源寄存器和/或目标寄存器;
模拟标志寄存器4 (M-EFLAGS)模拟实现X86指令集的标志寄存器 (EFLAGS)标志位,该寄存器的低六位由低到高分别表示CF位、PF位、AF 位、ZF位、SF位和OF位。
其中
OF,表示如果结果溢出,则置为l,否则清零;
SF,表示保存结果的最高位;
ZF,表示结果如果为O则置为1,否则清零;
AF,表示运算中如果第3位向第4位有进位或者借位,则置为l,否则清
零;
PF,表示结果最低字节如果有偶数个l则置为1,否则清零;
CF,表示如果运算中最高位向更高位进位或者借位,则该位置为l,否则清零。
在模拟标志寄存器4可用时,识别出该运算是在RISC处理器的X86虚拟 机工作模式,即模拟EFLAGS工作模式下,根据执行结果修改相应模拟标志 寄存器4的值,然后根据不同的指令,将模拟标志寄存器译码为源寄存器和/ 或目标寄存器,而可以不在原有目标寄存器中保存结果。
作为一种可实施方式,与模拟标志寄存器4相关的指令在修改模拟标志寄 存器4的标志位时,该指令之前有一条标明该指令是在RISC处理器的X86虚 拟机工作模式下的前缀指令SETFLAG,表示如果其后指令处于X86虚拟机模 式下。
指令格式为SETFLAG /模拟EFLAGS工作模式前缀指令 表示紧跟在该指令后的一条指令处于模拟EFLAGS工作模式。 其编码如图4所示。
那么它在执行时,只根据执行结果修改相应的模拟标志寄存器4的标志位 的值,而不在目标寄存器中保存结果,举例如下 正常的MIPS指令 ADD $5,$1,$2
表示将1号通用寄存器和2号通用寄存器中的值相加,结果存于5号通用 寄存器中;
而修改模拟标志寄存器4的标志位的指令为
SETFLAG
ADD $5,$1,$2
表示将1号通用寄存器和2号通用寄存器中的值相加,运算结果不保存, 而根据结果修改模拟标志寄存器4中的标志位相应位。
译码器2的输入集是所有可能的32位编码,包括所有合法及非法指令。 对于这种方式,译码器2新增了一种合法输入,SETFLAG,表示紧跟在该指 令后的一条指令处于RISC处理器的X86虚拟机工作模式,即模拟EFLAGS 工作模式。
译码器2根据前缀指令,在前缀指令后一条指令译码时,其输出根据模拟 EFLAGS工作模式,调整内部操作码送到运算部件,此时这条指令的目的寄存
器经过译码后变为模拟标志寄存器4 (M-EFLAGS),其中一个源寄存器也为 模拟标志寄存器4 (M-EFLAGS)。因为有些运算只修改一部分模拟标志寄存 器4 (M-EFLAGS),所以需要把原有的模拟标志寄存器4 (M-EFLAGS)送 到运算部件3。
其中,所述调整内部操作码,包括经过重命名即逻辑寄存器到物理寄存器 映射,以及读写寄存器端口等操作内容属于本领域技术人员熟知内容,因此在 本发明中不再一一详细描述。
译码器2译码后,将指令输出到运算部件3,运算部件3判断内部操作码, 如果是正常指令,按照正常步骤运算;如果是模拟EFLAGS工作模式下,则 先计算结果,再按照计算结果和中间结果置模拟标志寄存器4 (M-EFLAGS) 标志位,计算结果可以不保存到目标寄存器中。
作为另一种可实施方式,对于本发明中使用频度很大的修改模拟标志寄存 器4的标志位的指令,将对X86指令进行一对一的对应,这样一条指令等价 于原来的两条指令(一条SETFLAG—条正常MIPS指令)。举例如下
对于使用频度很大的修改模拟标志寄存器4的标志位的加指令(ADD), 定义指令X86ADD,从而
X86ADD$5,$1,$2
等价于
SETFLAG
ADD $5,$1,$2
这些使用频度很大的指令,在译码时分配单独的指令槽,功能部件在识别 出这些指令后,产生的结果不送入目标寄存器中,而是根据结果产生相应的模 拟标志寄存器4 (M-EFLAGS)标志位,把标志位送入模拟标志寄存器4 (M-EFLAGS)。
步骤S200, RISC处理器在运算过程中,当处于RISC处理器的X86虚拟 机工作模式时,读写模拟标志寄存器4标志位的值,和/或根据模拟标志寄存 器4标志位的值,进行控制。
所述步骤S200中,读写模拟标志寄存器4标志位的值,包括下列步骤
步骤S210,当处于RISC处理器的X86虚拟机工作模式时,提取一位或 者多位模拟标志寄存器4标志位的值,根据其中的8位掩码(mask)值来控制 提取模拟标志寄存器4中的一位或者几位,提取出来的模拟标志寄存器4标志 位的值存入目标寄存器中;
步骤S220,当处于RISC处理器的X86虚拟机工作模式时,修改一位或 者多位模拟标志寄存器4标志位的值,根据其中的8位掩码(mask)值来控制 修改模拟标志寄存器4中的一位或者几位,使用源寄存器中的值对模拟标志寄 存器4进行修改。
作为一种可实施方式,本发明实施例通过两条指令MTFLAG和MFFLAG 修改或者读取模拟标志寄存器4标志位的值,这两条指令的指令编码如图5 和图6所示,它们使用8位的掩码(mask)来修改或者读取模拟标志寄存器4 的相应标志位,它们分别可以写模拟标志寄存器4标志位的值和将模拟标志寄 存器4标志位的值读出来到一指定的通用寄存器中。
MTFLAG指令实现提取一位或者多位模拟标志寄存器4 (M-EFLAGS)标 志位的值,根据指令中的8位掩码(mask)值(由立即数来表示)来控制提取 模拟标志寄存器4中的一位或者几位,提取出来的模拟标志寄存器4 (M-EFLAGS)标志位的值存入目标寄存器GPR[rt]中。
由掩码(mask)提取模拟标志寄存器4中标志位的实现由以下关系式表示
GPR[rt] <~ M-EFLAGS & mask
例如,掩码(mask)值为0x00000100,那么将提取模拟标志寄存器4 (M-EFLAGS)第2位即为AF位的内容,放入目标寄存器GPR[rt]中。
MTFLAG指令直接修改一位或者多位模拟标志寄存器4 (M-EFLAGS)标 志位的值,根据指令中的8位掩码(mask)值(由立即数来表示)来控制修改 模拟标志寄存器4 (M-EFLAGS)中的一位或者几位,使用GPR[rs]源寄存器 中的值对模拟标志寄存器4 (M-EFLAGS)进行修改。
由掩码(mask)控制修改模拟标志寄存器4 (M-EFLAGS)中标志位的实 现由以下关系式表示
M、EFLAGS & mask <~ GPR[rs]
比如,GPR[rs]低8位的内容为0x00010010,掩码(mask)字段的值为 0x00110011,那么这条指令修该模拟标志寄存器4 (M-EFLAGS)中的CF、 PF、 SF和OF位,将这四位的值分别置O、 1、 l和0。
所述步骤S200中,所述控制过程包括下列步骤-
步骤S210',根据运算结果得到模拟标志寄存器4 (M-EFLAG)标志位; 例如,根据模拟标志寄存器4 (M-EFLAG)标志位,直接运算的指令如 X86ADD指令。
x86ADD /只影响EFLAGS位的32位加法
指令格式-
X86ADD rs, rt
X86ADD指令实现GPR [rs]寄存器中32位的整数和GPR [rt]寄存器中32 位整数相加,产生32位的结果,结果不保存,只根据结果修改模拟标志寄存 器4 (M-EFLAGS)的OF/SF/ZF/AF/PF位。
其编码如图7所示。
步骤S220',根据模拟标志寄存器4 (M-EFLAG)标志位中的一位或者多 位,执行分支跳转指令。
如X86J M-EFLAGS条件转移
指令格式
X86J.fmt offset
X86J指令实现比较EFLAGS的某几位,根据相应的条件进行处理器相关 的跳转。
其编码如图8所示。
其中不同的指令后缀(fmt)代表着不同的条件,如X86J.a fmt-0,表示 当CF-0并且ZFi时跳转。
MIPS64指令集的32位指令码的高6位(31bit: 26bit)为opcode域。其 中SPECIAL2 (opcode为011100)指令槽按MIPS的规定是可以由用户自主定 义的。本发明实施例新增指令全部都是利用现有MIPS64指令集中保留的 SPECIAL2空槽的值来实现的。
本发明的RISC处理器装置及其数据处理方法,在MIPS架构上对X86的 EFLAGS标志位做必要的硬件支持,扩大虚拟机的优化空间,达到提高虚拟机 性能的目的。
通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本 领域的技术人员而言是显而易见的。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只 是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行 解释。
权利要求
1、一种RISC处理器,包括物理寄存器堆、运算部件和译码器,其特征在于所述物理寄存器堆包括模拟标志寄存器,用于模拟实现CISC处理器的标志寄存器标志位;所述运算部件包括标志读写模块,用于读写模拟标志寄存器标志位的值。
2、 根据权利要求1所述的RISC处理器,其特征在于,所述译码器包括 模式标识模块,用于识别出运算是处于模拟EFLAGS工作模式下,然后根据 不同的指令,将模拟标志寄存器译码为源寄存器和/或目标寄存器。
3、 根据权利要求1所述的RISC处理器,其特征在于,所述运算部件还 包括运算控制器,用于在运算过程中,当RISC处理器处于X86虚拟机工作模 式时,根据模拟标志寄存器标志位的值,进行控制。
4、 根据权利要求1所述的RISC处理器,其特征在于,所述标志读写模 块,包括标志提取模块和标志修改模块,其中所述标志提取模块,用于提取一位或者多位模拟标志寄存器标志位的值, 根据指令中的8位掩码值来控制提取模拟标志寄存器中的一位或者几位,提取 出来的模拟标志寄存器标志位的值存入目标寄存器中;所述标志修改模块,用于修改一位或者多位模拟标志寄存器标志位的值, 根据指令中的8位掩码值来控制修改模拟标志寄存器中的一位或者几位,使用 源寄存器中的值对模拟标志寄存器进行修改。
5、 根据权利要求2所述的RISC处理器,其特征在于,所述控制包括根 据运算结果得到新的模拟标志寄存器标志位;以及根据模拟标志寄存器标志位 中的一位或者多位,执行分支跳转指令。
6、 根据权利要求1至5任一项所述的RISC处理器,其特征在于,所述 模拟标志寄存器的低六位由低到高分别表示CF位、PF位、AF位、ZF位、SF 位和OF位。
7、 一种RISC处理器寄存器标志位处理方法,其特征在于,包括下列步骤..步骤A,在RISC处理器中设置模拟标志寄存器可用;步骤B, RISC处理器在运算过程中,当处于RISC处理器的X86虚拟机 工作模式时,读写模拟标志寄存器标志位的值,和/或根据模拟标志寄存器标 志位的值,进行控制。
8、 根据权利要求7所述的RISC处理器寄存器标志位处理方法,其特征 在于,所述步骤A还包括下列步骤译码器识别出运算是处于模拟EFLAGS工作模式下,然后根据不同的指 令,将模拟标志寄存器译码为源寄存器和/或目标寄存器。
9、 根据权利要求7或8所述的RISC处理器寄存器标志位处理方法,其 特征在于,所述步骤B包括下列步骤-步骤B1,当处于RISC处理器的X86虚拟机工作模式时,提取一位或者 多位模拟标志寄存器标志位的值,根据其中的8位掩码值来控制提取模拟标志 寄存器中的一位或者几位,提取出来的模拟标志寄存器标志位的值存入目标寄 存器中;步骤B2,当处于RISC处理器的X86虚拟机工作模式时,修改一位或者 多位模拟标志寄存器标志位的值,根据其中的8位掩码值来控制修改模拟标志 寄存器中的一位或者几位,使用源寄存器中的值对模拟标志寄存器进行修改。
10、 根据权利要求7或8所述的RISC处理器寄存器标志位处理方法,其 特征在于,所述步骤B中,所述控制过程包括下列步骤步骤B1',根据运算结果得到模拟标志寄存器标志位; 步骤B2',根据模拟标志寄存器标志位中的一位或者多位,执行分支跳转 指令。
11 、根据权利要求7或8所述的RISC处理器寄存器标志位处理方法,其 特征在于,所述模拟标志寄存器的低六位由低到高分别表示CF位、PF位、 AF位、ZF位、SF位禾口OF位。
全文摘要
本发明公开了RISC处理器及其寄存器标志位处理方法。该处理器包括物理寄存器堆、运算部件和译码器,所述物理寄存器堆包括模拟标志寄存器,用于模拟实现CISC处理器的标志寄存器标志位;所述运算部件包括标志读写模块,用于读写模拟标志寄存器标志位的值。所述运算部件还包括运算控制器,用于在运算过程中,当RISC处理器处于X86虚拟机工作模式时,根据模拟标志寄存器标志位的值,进行控制。
文档编号G06F15/78GK101196869SQ20071030857
公开日2008年6月11日 申请日期2007年12月29日 优先权日2007年12月29日
发明者李国杰, 李晓钰, 胡伟武 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1