混合模式指令的动态最佳匹配编译的方法和设备的制作方法

文档序号:6492828阅读:194来源:国知局
专利名称:混合模式指令的动态最佳匹配编译的方法和设备的制作方法
技术领域
本发明涉及混合模式计算机指令,更具体地说,涉及用于混合模式计算机指令的动态最佳匹配编译的方法和设备。
背景技术
对嵌入式系统(例如无线通信装置、无线数据装置等)有日益增长的需求。在静态和动态存储器、处理能力、显示器大小、电池寿命、输入/输出能力等方面,嵌入式系统上可用的资源类型大不相同。所以,在嵌入式系统上很少有硬件和软件的会聚。
如业界一般技术人员已知的,不用本机编译语言(例如C编程语言),而用中间语言(IL),例如Java、C#等,来开发嵌入式系统具有许多优点。首先,可以将中间语言模块放在多个平台上,而不用更改源代码,这就和大多数编译语言不同。第二,中间语言和它们的运行时环境常常具有故障消除特性,例如阵列边界检查、自动无用单元收集以及内置异常处理,这些是许多编译语言不具备的。第三,中间语言通常比完全解释语言运行得快。
实现了中间语言的上述优点,嵌入式系统正慢慢向在运行时环境上工作的中间语言迁移。由于应用软件从运行时环境取得较大的价值,因此预计许多未来的应用程序会使用中间语言来写。
对在嵌入式系统上使用中间语言最起阻止作用的因素之一是执行速度。虽然中间语言通常比解释语言工作得快,但中间语言通常比本机编译语言要慢。例如,中间语言例如Java可比本机编译语言例如C慢达3或4倍。
加速中间语言指令的一种技术包括从一些中间语言指令产生本机指令。通常,仅将最常用的代码路径编译为本机代码,其余的代码留作中间指令。虽然这种现有技术可改进性能,但从一些中间语言指令产生本机指令仅利用了处理器的单一指令集。
混合模式处理器例如ARM依从处理器具有两个或更多个指令集,例如一个16位指令集(Thumb指令集)和一个32位指令集(ARM指令集)。根据如何使用指令集,这些指令集中每一个都有其优缺点。例如,16位Thumb指令集通常以一半数量的位来编码32位ARM指令的功能性,从而创建更高的代码密度。但是,ARM指令通常比Thumb指令具有更多的语义内容。如业界一般技术人员所知,这就是说,用Thumb指令实现的操作可能需要更多的指令来执行用ARM指令执行的等效操作(例如40%多的指令)。例如,要使用16位立即数据单元,Thumb指令集将需要比ARM指令集多两条的指令才能将数据移入寄存器中。
根据系统的存储器配置,ARM代码可比相应的Thumb代码运行得快得多,或反之亦然。例如据估计,用32位存储器,ARM代码将比相应的Thumb代码运行快40%。但是,用16位存储器,Thumb代码可比相应的ARM代码运行快45%。于是,由于基于各个嵌入式系统配置在速度和存储特性方面有如此大的差异,将中间语言完全编译到一个指令集(例如ARM指令集)中就有重大的缺点。此外,不将全部中间语言指令都编译为本机指令也有重大的缺点。


图1为示出所公开系统的使用环境的示范计算机系统的框图。
图2的框图示出可以由图1的计算机系统实现的混合模式指令的动态最佳匹配编译的使用实例。
图3的流程图示出可以由图1的计算机系统实现的动态编译混合模式指令的过程实例。
图4的流程图示出可以由图1的计算机系统实现的试探性优化混合模式指令的过程实例。
图5的流程图示出可以由图1的计算机系统实现的在使用16位指令和32位指令之间作决定的过程实例。
具体实施例方式
一般来说,本文所述方法和设备动态编译混合模式指令(即混合模式指令的动态最佳匹配编译)。虽然以下公开了系统实例,包括在硬件上执行的软件以及其它组件,但应指出,这些系统仅是说明性的,而不应认为是限制性的。例如,要考虑到,任何或所有公开的硬件和软件成分可完全以专用硬件实施、完全以软件实施、完全以固件实施、或以硬件、固件和/或软件的某种组合来实施。
此外,虽然以下公开内容是针对示范动态编译系统而作,但应理解,许多其它动态编译系统也很容易适用于所公开的系统。所以,虽然以下说明了示范系统和过程,但业界一般技术人员应容易理解到,所公开的实例并不是实现这种系统的唯一方式。例如,也可使用除16位指令集和32位指令集以外的其它指令集。
示范计算机系统100的框图示于图1。计算机系统100可以是个人计算机(PC)、个人数字助理(PDA)、因特网设备、蜂窝电话或任何其它计算装置。在一个实例中,计算机系统100包括主处理单元102,它由电源103供电。主处理单元102可包括混合模式处理单元104,由系统互连106电连接到主存储装置108以及一个或多个接口电路110。在一个实例中,系统互连106是地址/数据总线。当然,业界一般技术人员很容易理解,也可使用除总线外的其它互连将混合模式处理单元104连接到主存储装置108。例如,可以使用一条或多条专用线和/或纵横开关将混合模式处理单元104连接到主存储装置108。
混合模式处理单元104可包括任何类型的已知混合模式处理器,例如IntelXScaleTM处理器系列中以及Intel因特网交换处理器(IXP)处理器系列中的处理器。或者,混合模式处理单元104可由两个或更多个单指令集处理器实现。例如可以使用IntelPentium处理器和IntelItanium处理器的混合系统。此外,混合模式处理器104可包括任何类型的已知高速缓冲存储器,例如静态随机存取存储器(SRAM)。主存储装置108可包括动态随机存取存储器(DRAM)和/或任何其它形式的随机存取存储器。例如,主存储装置108可包括双数据率随机存取存储器(DDRAM)。主存储装置108还可包括非易失性存储器。在一个实例中,主存储装置108存储软件程序,该软件程序由混合模式处理器104以众所周知的方式执行。主存储装置108可存储编译程序111,用于由混合模式处理器104执行。
接口电路110可以使用任何类型的众所周知的接口标准实现,例如以太网接口和/或通用串行总线(USB)接口。可将一个或多个输入装置112连接到接口电路110,以将数据和命令输入到主处理单元102中。例如,输入装置112可以是键盘、鼠标、触摸屏、跟踪垫、跟踪球、isopoint和/或语音识别系统。
一个或多个显示器、打印机、扬声器和/或其它输出装置114也可通过一个或多个接口电路110连接到主处理单元102。显示器114可以是阴极射线管(CRT)、液晶显示器(LCD)或任何其它类型的显示器。显示器114可产生主处理单元102操作期间产生的数据的视觉指示。视觉指示可包括对操作员输入的提示、计算的值、检测的数据等。
计算机系统100还可包括一个或多个存储装置116。例如,计算机系统100可包括一个或多个硬盘驱动器、光盘(CD)驱动器、数字多功能盘驱动器(DVD)和/或其它计算机媒体输入/输出(I/O)装置。
计算机系统100还可通过到网络118的连接与其它装置交换数据。到网络118的连接可以是任何类型的网络连接,例如以太网连接、数字用户线(DSL)、电话线、同轴电缆等。网络118可以是任何类型的网络,例如因特网、电话网、电缆网络和/或无线网络。
图2的框图总体示出了混合模式指令系统200的动态最佳匹配编译的使用实例。混合模式指令系统200包括多个应用程序202、语言编译器204、编译的二进制206和运行时环境208。
多个应用程序202可包括Java源文件、C#源文件等。而且,多个应用程序202可包括来自一般不与虚拟机编译语言例如Perl、Python、Jython等相关联的编程语言的源文件。
多个应用程序202由语言编译器204编译。语言编译器204的实例可以是Java编译器、C#编译器、J#编译器、Visual Basic.NET编译器、Visual C++.NET编译器等。语言编译器204将用高级符号语言写的计算机程序(例如多个应用程序202)转换成中间语言指令(即非本机指令)。
语言编译器204的输出(即非本机指令)存储在编译的二进制206中,编译的二进制例如可以是Java字节代码、.NET MSIL、Perl字节代码等。编译的二进制206包括多个非本机指令,其格式是运行时环境可加载、编译成本机指令并然后执行。
例如,如果编译的二进制206是Java字节代码,则编译的二进制206包括Java指令序列。Java指令序列中每个Java指令是一个字节的操作码,后面有零个或多个操作数。一个字节的操作码是运行时环境208(即Java虚拟机)使用的操作。操作数是由操作码的操作使用的值。例如,Java字节代码可包含以下十六进制格式的字节序列“840102”。运行时环境208可将“84”解释成意思是“iinc”,这是递增局部变量的一个操作。在此情况下,操作数“01”表示哪个局部变量要递增一个整数值,在此情况下,操作数“02”表示十进制值2。
运行时环境208可以是Java虚拟机、.NET通用语言运行时间(CLR)、Perl虚拟机(例如Parrot)等。运行时环境208包括JIT编译器210和执行代码212。可将编译的二进制206加载到JIT编译器210中,以在JIT存储位置214中形成编译二进制206的拷贝,它就可存储在图1的主存储装置108中。将JIT存储位置214中编译二进制206的拷贝加载到主存储装置108中之后,JIT编译器210就可对其中存储的非本机指令起作用。例如,通过由Thumb代码发生器216将非本机指令生成为本机Thumb指令,或通过由ARM代码发生器218将非本机指令生成为本机ARM指令,JIT编译器210就可对非本机指令起作用。Thumb代码发生器216和ARM代码发生器218可以分别是产生16位指令集代码和32位指令集代码的JIT编译器210的组件。
如业界一般技术人员所知,存在有将这种非本机指令转换成本机指令的方法。例如,Insignia Solution提供了基于Java的运行时环境,称为Jeode平台。Jeode平台对很少用的代码路径使用解释器,而对经常执行的代码路径使用JIT编译器。Jeode平台的JIT编译器能够将非本机指令转换成一个或多个ARM指令。但Jeode平台的JIT编译器不利用混合模式指令生成,而是仅使用一个指令集。ARM代码发生器可以实现这些众所周知的方法之一。备选或另外,可以从Thumb指令而不是从非本机指令转换为ARM指令。例如,ARM开发套件(ADS)包括编译器和汇编器,其可以从源文件转换成ARM指令或Thumb指令。Thumb代码发生器216可以用类似方式将非本机指令转换成本机指令。
而且,JIT编译器210包括代码剖析器(profiler)220,它可存储有关非本机指令和本机指令的产生和执行的操作数据,另外或备选,代码剖析器220可以位于JIT编译器210之外。如何以及何时实现混合模式生成的细节在以下结合图3加以说明。
一般而言,图3的过程实例300动态编译位于图1的主处理单元102上的指令,虽然指令可能源自于图1的因特网、POTS和/或其它网络118,或源自于图1的硬盘驱动器、CD、DVD和/或其它存储装置116。更具体地说,过程实例300可以在图2的JIT编译器210中操作。优选的是,将过程300实施在一个或多个软件程序中,这些软件程序存储在一个或多个存储器中,并由一个或多个处理器用已知方式执行。但是,过程300的部分块或全部块可以手动进行。虽然参考图3所示的流程图对过程300加以说明,但业界一般技术人员应理解到,也可使用实现过程300的许多其它方法。例如,许多块的顺序可以改变,一个或多个块的操作可以改变,有些块可以组合,和/或有些块可以删除。
过程实例300开始,先确定是否以前已调用过一种方法(块302)。一个实现实例可检查用于该方法的Thumb指令是否已经存在。如果用于该方法的Thumb指令已存在,就可确定该方法以前调用过。
如果该方法以前未曾调用过(块302),则可任意地将图2的16位Thumb代码发生器216配置成产生比本应由Thumb代码发生器216所产生的代码更小的Thumb代码(块304)。较小代码的一个优点是,有可能减小图1的计算机系统100的存储器大小,而可生产出含有可能较少和更有限资源的廉价产品。虽然在本文将16位Thumb代码发生器216的配置解释为仅具有两个级别,使能级和禁止级,但业界一般技术人员会理解,可以定义配置的各种级别。
在任意地配置了16位Thumb代码发生器216(块304)之后,产生Thumb指令(块306),并退出过程实例300(块308)。Thumb指令可由图2的Thumb代码发生器216产生。Thumb代码发生器216通过将非本机指令转换成本机指令来创建Thumb指令。由于Thumb代码的正特性,首次调用后产生Thumb指令需谨慎。例如,Thumb代码通常比ARM代码占用较少的存储空间,但是ARM代码可以比Thumb代码更快。所以,有利的是,将最常调用的指令生成为ARM指令,并将不太常运行的指令生成为Thumb指令,以具有更好的存储空间特性。在这一点上,在过程300中,还不知道指令调用的频率,所以将指令转换成Thumb指令。
相反,如果该方法以前曾被调用(块302),则与当前所执行方法关联的调用计数器就递增(块310)。调用计数器可以是存储在图2的代码剖析器220中的变量,表示上述方法已被调用的次数。一个实现实例可在所产生的本机Thumb或ARM方法中插入调用计数指令。调用计数指令可以递增调用计数器作为全局变量。调用计数器可以位于图2的代码剖析器220中。或者,调用计数指令可以调用以下方法,即递增调用计数器作为图2的代码剖析器220中具有局部范围的变量,表示上述方法已被调用的次数。如果变量等于零,则过程300可以确定该方法以前未曾调用过,否则过程300可以确定该方法以前曾经调用过。
与当前所执行方法关联的调用计数器递增(块310)后,过程实例300确定调用计数器是否大于预定极限(块312)。如果调用计数器不大于预定极限(块312),则Thumb代码已经存在,因此不需要重新产生。结果,退出过程实例300(块308)。
相反,如果调用计数器大于预定极限(块312),则调用试探性优化过程(块314)。结合图4对试探性优化过程作更详细的说明。试探性优化过程返回控制后(块314),退出过程实例300(块308)。
试探性优化的过程实例400示于图4。优选的是,将过程400实施为一个或多个软件程序,这些软件程序存储在一个或多个存储器中,并由一个或多个处理器用已知方式执行。但是,过程400的部分块或全部块可以手动执行。虽然参考图4所示的流程图对过程400加以说明,但业界一般技术人员容易理解,也可使用实现过程400的许多其它方法。例如,许多块的顺序可以改变,一个或多个块的操作可以改变,有些块可以组合,和/或有些块可以删除。
一般来说,过程实例400优化图1的主处理单元102上的混合模式指令,虽然指令可源自于图1的因特网、POTS和/或其它网络118,或源自于图1的硬盘驱动器、CD、DVD和/或其它存储装置116。更具体的说,过程实例400可以在图2的JIT编译器210中操作。
许多软件应用程序,例如图2的多个应用程序202中的一个或多个,用大部分应用程序的时间执行来自图2的编译二进制206的少数指令。这些经常被执行的指令称为热点,它们组织起来的方法称为热点方法。比起优化较少执行的大部分指令增加系统整体性能而言,优化热点方法能更多地增加系统的整体性能。所以重要的是,准确识别热点方法,并在识别后优化热点方法。热点方法的识别已结合图3的调用计数器讨论过。
图4示出可以优化热点方法的过程实例400。过程实例400开始,首先任意配置图2的32位ARM代码发生器218,以产生更快的代码,也可能是更大的代码(块402)。通常可以进行更快但更大的折衷,以提高热点方法(例如定时临界方法)的速度,可能会得到更好的性能,但存储器较大。虽然在本文将32位ARM代码发生器218的配置解释为仅具有两个级别,使能级和禁止级,但业界一般技术人员会认识到,可以定义配置的各种级别。
任选地配置32位ARM代码发生器218(块402)后,过程实例400产生用于热点方法的32位ARM代码(块404)。产生用于热点方法的32位ARM代码(块404)后,从为热点方法产生的32位ARM代码中获得ARM指令计数(块406)。例如,通过从含有首先产生的32位ARM代码指令的存储位置减去含有最后产生的32位ARM代码指令的存储位置,图2的JIT编译器210可获得ARM指令计数。
在获得用于热点方法的ARM指令计数(块406)后,获得用于热点方法的ARM代码大小(块408)。ARM代码大小是用字节测量的ARM机器代码的大小。ARM代码大小可通过例如将ARM指令计数乘以4来获得或估算。业界一般技术人员容易理解,ARM指令计数可以乘以4,因为ARM指令的大小是32位,这是4个八位位组(即字节)。ARM代码大小不同于ARM指令计数,因为ARM代码大小测量用于给定热点方法的字节数,而ARM指令计数测量指令数。一条指令可包括多个字节。
在获得用于热点方法的ARM代码大小(块408)后,获得用于热点方法的Thumb指令计数(块410)。例如,通过从含有首先产生的16位Thumb代码指令的存储位置减去含有最后产生的16位Thumb代码指令的存储位置,图2的JIT编译器210就可获得Thumb指令计数。
在获得用于热点方法的Thumb指令计数(块410)后,获得用于热点方法的Thumb代码大小(块412)。Thumb代码大小是用字节测量的Thumb机器代码大小。Thumb代码大小不同于Thumb指令计数,因为Thumb代码大小测量用于给定热点方法的字节数,而Thumb指令计数测量指令数。Thumb代码大小可通过例如将Thumb指令计数乘以2来获得或估算。业界一般技术人员容易理解,Thumb指令计数可以乘以2,因为Thumb指令的大小通常是16位,这是2个八位位组(即字节)。
在获得用于热点方法的Thumb代码大小(块412)后,调用Thumb或ARM判定过程(块414)。结合图5对Thumb或ARM判定过程作更详细的讨论。在Thumb或ARM判定过程完成(块414)后,退出过程实例400(块416)。
决定使用ARM或Thumb指令的过程实例500示于图5。优选的是,将过程500实施为一个或多个软件程序,这些软件程序存储在一个或多个存储器中,并由一个或多个处理器用已知方式执行。但过程500的部分块或全部块可以手动执行。虽然参考图5所示的流程图对过程500加以说明,但业界一般技术人员容易理解,也可使用实现过程500的许多其它方法。例如,许多块的顺序可以改变,一个或多个块的操作可以改变,有些块可以组合,和/或有些块可以删除。
一般来说,过程实例500优化图1的主处理单元102上的混合模式指令,虽然指令可能源自于图1的因特网、POTS和/或其它网络118,或源自于图1的硬盘驱动器、CD、DVD和/或其它存储装置116。此外,过程实例500可以在图2的JIT编译器210中操作。
过程实例500开始,先确定Thumb指令计数是否小于ARM指令计数(块502)。如果Thumb指令计数小于ARM指令计数(块502),则过程实例500确定16位Thumb代码因其较小的指令计数而成为最佳匹配(块504)。在决定使用16位Thumb代码(块504)后,退出过程实例500(块506)。
相反,如果Thumb指令计数大于ARM指令计数(块502),则过程实例500确定Thumb指令计数是否比ARM指令计数大第一阈值以上(块508)。第一阈值可存储在非易失性存储器中,直接在系统的代码空间中(例如图1的硬盘驱动器、CD、DVD、闪存和/或其它存储装置116),通过通信链路传输等,并可以是各种不同格式例如百分比数(例如4%)、十进制数、十六进制数等其中之一。
如果Thumb指令计数不比ARM指令计数大第一阈值以上(块508),则过程实例500确定,就指令计数而言,16位Thumb代码并不比32位ARM代码小很多,并确定32位ARM为最佳匹配(块510)。确定32位ARM代码为最佳匹配(块510)后,退出过程实例500(块506)。
相反,如果Thumb指令计数比ARM指令计数大第一阈值以上(块508),则过程实例500确定Thumb代码大小是否比ARM代码大小至少小第二阈值(块512)。第二阈值可存储在非易失性存储器中,直接在系统的代码空间中(例如图1的硬盘驱动器、CD、DVD、闪存和/或其它存储装置116),通过通信链路传输等,且可以是各种不同格式例如百分比数(例如35%)、十进制数、十六进制数等之一。
如果Thumb代码大小比ARM代码大小至少小第二阈值(块512),则过程实例500确定16位Thumb代码因其显著较小的代码大小而成为最佳匹配(块504)。在过程实例500决定使用16位Thumb代码(块504)后,过程实例500退出(块506)。相反,如果Thumb代码大小不比ARM代码大小至少小第二阈值(块512),则过程实例500确定32位ARM代码为最佳匹配(块510),并退出(块506)。
虽然本文说明了特定方法和设备,但本专利的覆盖范围不限于此。相反,本专利覆盖在文字上或等效原则下落入所附权利要求书范围内的所有设备、方法和制品。
权利要求
1.一种执行非本机软件指令的方法,所述方法包括在装置上接收所述非本机软件指令;基于所述非本机软件指令从第一指令集产生第一本机软件指令,第一本机软件指令的产生发生在所述装置上;在所述装置上执行第一本机软件指令;基于所述非本机软件指令从第二指令集产生第二本机软件指令,第二本机软件指令的产生发生在所述装置上;以及在所述装置上执行第二本机软件指令。
2.如权利要求1所述的方法,还包括计数第一本机软件指令被执行的次数;以及对第一本机软件指令被执行的次数和阈值相比较,其中产生第二本机软件指令是对以下之一作出的响应(i)所述次数等于所述阈值,以及(ii)所述次数超过所述阈值。
3.如权利要求2所述的方法,还包括插入仪表以计数第一本机软件指令被执行的次数。
4.如权利要求2所述的方法,还包括通过移动运行时配置参数接收所述阈值。
5.如权利要求1所述的方法,其中在所述装置上接收所述非本机软件指令包括在所述装置上接收中间语言指令。
6.如权利要求1所述的方法,其中在所述装置上接收所述非本机软件指令包括在所述装置上接收Java字节代码。
7.如权利要求1所述的方法,其中在所述装置上接收所述非本机软件指令包括在手持计算装置上无线接收所述非本机软件指令。
8.如权利要求1所述的方法,其中第一本机软件指令包括X位宽的指令,第二本机软件指令包括Y位宽的指令,且X小于Y。
9.如权利要求1所述的方法,其中第一本机软件指令包括16位宽的指令,且第二本机软件指令包括32位宽的指令。
10.如权利要求1所述的方法,其中第一本机软件指令包括Thumb指令,且第二本机软件指令包括ARM指令。
11.如权利要求1所述的方法,其中产生第一本机软件指令包括使用即时编译器在所述装置上编译所述非本机软件指令。
12.如权利要求1所述的方法,还包括在产生第一本机软件指令之前配置第一代码优化选项,第一代码优化选项导致产生较小的代码;以及在产生第二本机软件指令之前配置第二代码优化选项,第二代码优化选项导致产生较快的代码。
13.如权利要求1所述的方法,其中产生第一本机软件指令包括产生第一多个本机软件指令,并且产生第二本机软件指令包括产生第二多个本机软件指令,所述方法还包括计数在第一多个本机软件指令中包含的第一指令数;计数在第二多个本机软件指令中包含的第二指令数;以及比较第一指令数和第二指令数,其中执行第一本机软件指令是对以下之一作出的响应(i)第二指令数等于第一指令数,以及(ii)第二指令数超过第一指令数。
14.如权利要求13所述的方法,还包括比较第一指令数和第二指令数,其中执行第二本机软件指令是对第一指令数不超过第二指令数预定阈值以上而作出的响应。
15.如权利要求1所述的方法,还包括测量第一本机软件指令,得出第一字节数;测量第二本机软件指令,得出第二字节数;以及比较第一字节数和第二字节数,其中执行第一本机软件指令是对第一字节数比第二字节数小至少预定阈值而作出的响应。
16.如权利要求1所述的方法,还包括测量第一本机软件指令,得出第一字节数;测量第二本机软件指令,得出第二字节数;以及比较第一字节数和第二字节数,其中执行第二本机软件指令是对第一字节数不比第二字节数小至少预定阈值而作出的响应。
17.一种包括机器可存取介质的制品,所述机器可存取介质具有多个机器可存取指令,当执行所述指令时,使装置在所述装置上接收非本机软件指令;基于所述非本机软件指令从第一指令集产生第一本机软件指令,第一本机软件指令的产生发生在所述装置;在所述装置上执行第一本机软件指令;基于所述非本机软件指令从第二指令集产生第二本机软件指令,第二本机软件指令的产生发生在所述装置上;以及在所述装置上执行第二本机软件指令。
18.如权利要求17所述的机器可存取介质,其中所述多个机器可存取指令构建成使所述装置计数第一本机软件指令被执行的次数;以及对第一本机软件指令被执行的次数和阈值相比较,其中产生第二本机软件指令是对以下之一作出的响应(i)所述次数等于所述阈值,以及(ii)所述次数超过所述阈值。
19.如权利要求18所述的机器可存取介质,其中所述多个机器可存取指令构建成使所述装置插入仪表,以计数第一本机软件指令被执行的次数。
20.如权利要求17所述的机器可存取介质,其中所述非本机软件指令包括中间语言指令。
21.如权利要求17所述的机器可存取介质,其中第一本机软件指令包括X位宽的指令,第二本机软件指令包括Y位宽的指令,且X小于Y。
22.如权利要求17所述的机器可存取介质,其中第一本机软件指令包括Thumb指令,且第二本机软件指令包括ARM指令。
23.如权利要求17所述的机器可存取介质,其中所述多个机器可存取指令至少包括部分即时编译器。
24.如权利要求17所述的机器可存取介质,其中第一本机软件指令包括第一多个本机软件指令,且第二本机软件指令包括第二多个本机软件指令,其中所述多个机器可存取指令构建成使所述装置计数在第一多个本机软件指令中包含的第一指令数;计数在第二多个本机软件指令中包含的第二指令数;以及比较第一指令数和第二指令数,其中执行第一本机软件指令是对以下之一作出的响应(i)第二指令数等于第一指令数,以及(ii)第二指令数超过第一指令数。
25.如权利要求24所述的机器可存取介质,其中所述多个机器可存取指令构建成使所述装置比较第一指令数和第二指令数,其中执行第二本机软件指令是对第一指令数超过第二指令数预定阈值以上而作出的响应。
26.如权利要求17所述的机器可存取介质,其中所述多个机器可存取指令构建成使所述装置测量第一本机软件指令,得出第一字节数;测量第二本机软件指令,得出第二字节数;以及比较第一字节数和第二字节数,其中执行第一本机软件指令是对第一字节数比第二字节数小至少预定阈值而作出的响应。
27.如权利要求17所述的机器可存取介质,其中所述多个机器可存取指令构建成使所述装置测量第一本机软件指令,得出第一字节数;测量第二本机软件指令,得出第二字节数;以及比较第一字节数和第二字节数,其中执行第二本机软件指令是对第一字节数不比第二字节数小至少预定阈值而作出的响应。
28.一种构建成执行混合模式代码的设备,所述设备包括存储装置;以及混合模式处理器,操作上连接到所述存储装置,所述混合模式处理器构建成执行运行时环境,所述运行时环境存储在所述存储装置中,所述运行时环境包括编译的二进制;第一代码发生器,基于所述编译的二进制产生第一软件指令,第一软件指令与所述混合模式处理器的第一指令集相关联;第二代码发生器,基于所述编译的二进制产生第二软件指令,第二软件指令与所述混合模式处理器的第二指令集相关联,其中第一指令集不同于第二指令集;以及执行代码,包括第一指令和第二指令。
29.如权利要求28所述的设备,其中第一指令集包括X位宽的指令集,第二指令集包括Y位宽的指令集,且X小于Y。
30.如权利要求28所述的设备,其中第一指令集包括16位宽的指令集,并且第二指令集包括32位宽的指令集。
全文摘要
提供了混合模式指令的动态最佳匹配编译的方法和设备。在一个实施例中,提供的方法包括在一个装置上接收非本机软件指令;基于非本机软件指令从第一指令集产生第一本机软件指令,第一本机软件指令的产生发生在该装置上;在该装置上执行第一本机软件指令;基于非本机软件指令从第二指令集产生第二本机软件指令,第二本机软件指令的产生发生在该装置上;以及在该装置上执行第二本机软件指令。
文档编号G06F9/45GK1849584SQ200480025747
公开日2006年10月18日 申请日期2004年9月8日 优先权日2003年9月10日
发明者M·南亚, Z·高, J·蒙特, J·徐 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1