用于编译器优化的方法和系统技术方案

技术编号:13002017 阅读:70 留言:0更新日期:2016-03-10 14:05
本公开的多个方面提供了一种用于代码编译的方法。该方法包括接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器,并且基于分配的寄存器将指令编译为循环体。

【技术实现步骤摘要】
【国外来华专利技术】【专利说明】用于编译器优化的方法和系统引用并入本公开要求2013年7月24日递交的第61/857,952号美国临时申请“Type-basedEarly Stage Register Allocat1n Optimizat1n Technology Applied to MultiRegister Virtual Machine”的权益,该临时申请的全部内容通过引用被并入于此。
技术介绍
这里所提供的
技术介绍
描述是为了总地给出本公开的上下文的目的。目前所提名的专利技术人的工作(就该
技术介绍
部分中所描述的工作的程度)以及不可作为递交申请时的现有技术的本描述的多个方面既不明确地也不隐含地被承认为本公开的现有技术。—般来说,诸如Dalvik之类的Java虚拟机将经常使用的Java字节码(bytecode)编译为本机代码(native code)以提高运行时的性能。在示例中,Java虚拟机包括逐个编译字节码并且同时进行寄存器分配的即时(just-1n-time)编译器。
技术实现思路
本公开的多个方面提供了一种用于代码编译的方法。该方法包括接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器,并且基于分配的寄存器将指令编译为循环体。在实施例中,循环代码为字节码形式,并且被编译为本机代码。该方法包括接收用于编译的字节码形式的循环代码的指令,在将指令编译为针对字节码形式的循环代码的本机代码形式的循环体之前向虚拟寄存器分配一个或多个物理寄存器,并且基于分配的物理寄存器将指令编译为本机代码形式的循环体。在示例中,该方法包括在循环体之前的循环入口块中添加载入指令以将虚拟寄存器中的值载入到分配的物理寄存器中。在另一示例中,该方法包括在循环体之后的循环出口块中添加卸载指令以将分配的物理寄存器中的值卸载到虚拟寄存器中。此外,根据本公开的一方面,该方法包括确定可用物理寄存器是否满足循环代码的指令的编译要求。在示例中,该方法包括将可用物理寄存器的数目与预定限值进行比较,并且当可用物理寄存器的数目大于预定限值时在要在循环体之前被执行的本机代码的循环入口块中添加分配指令。本公开的多个方面提供了一种存储用于使处理器执行用于代码编译的操作的程序指令的非瞬态计算机可读介质。该操作包括接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器,并且基于分配的寄存器将指令编译为循环体。本公开的多个方面提供了一种包括处理器和存储器的装置。处理器被配置为执行指令代码。存储器被配置为存储用于使处理器执行以下操作的指令:接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器;并且基于分配的寄存器将指令编译为循环体。【附图说明】作为示例被提出的本公开的各个实施例将参考以下附图被详细描述,其中相似的标号指代相似的元件,并且其中:图1示出了根据本公开的实施例的系统示例100的框图;图2示出了概述根据本公开的实施例的编译过程200的流程图;以及图3A和3B示出了根据本公开的实施例的代码示例。【具体实施方式】图1示出了根据本公开的实施例的系统示例100的框图。系统100包括诸如处理模块110、存储器模块120等之类的硬件组件以及诸如被存储在存储器模块120中的各种代码指令之类的软件组件。硬件组件根据软件组件进行操作以执行各种任务。系统100使用即时(JIT)编译器135,该编译器被配置为在编译循环中的一个接一个的指令之前针对循环执行循环范围的寄存器分配。系统100可以是任何合适的系统,例如台式计算机、膝上型计算机、平板计算机、智能电话等。系统100可以包括其它合适的组件(未被示出),例如显示器、触摸屏、麦克风、通信组件等。在实施例中,系统100包括将诸如处理模块110、存储器模块120之类的各种电路集成到单个集成电路(1C)芯片上的单个1C芯片。在另一实施例中,系统100包括被适当地耦合在一起的多个1C芯片,例如处理器芯片、存储器芯片等。处理模块110包括诸如中央处理单元(CPU) 111之类的一个或多个处理器来执行各种代码指令以执行各种任务。代码指令可以是可被CPU 111直接执行的低级代码,例如机器代码(本机代码),或者可以是高级代码,例如用Java语言、用C语言等写成的代码,其可被转译成机器代码并且然后被执行。CPU 111可以利用任何合适的体系结构来实现,例如x86、ARM等。在示例中,当CPU111具有X86体系结构时,CPU 111能够执行专用于x86体系结构的x86指令集中的机器代码。在另一示例中,当CPU 111具有ARM体系结构时,CPU 111能够执行专用于ARM体系结构的ARM指令集中的机器代码。—般来说,CPU 111包括可以快速被访问的多个寄存器115 (物理寄存器)。每个指令对寄存器和/或存储器模块120中的数据执行特定任务,例如加载、跳转、算术运算、逻辑运算等。在实施例中,CPU 111被配置为具有流水线体系结构,并且基于寄存器的指令通常是时间上高效的。存储器模块120包括针对各种存储需要提供存储器空间的一个或多个存储介质。在示例中,存储器模块120存储要被处理模块110执行的代码指令并且存储要被处理模块110处理的数据。在另一示例中,存储器模块120包括被分配用于系统存储的存储器空间,并且包括被分配用于用户存储的存储器空间。存储介质包括但不限于硬盘驱动、光盘、固态驱动、只读存储器(ROM)、动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)、闪存等。根据本公开的一方面,存储器模块120存储各种计算机程序,例如系统程序、用户应用程序等。每个计算机程序包括要被执行以执行任务的代码指令。在图1的示例中,存储器空间130在存储器模块120中被分配用于存储适合于系统100的Java软件程序。该Java软件程序被安装在系统100中以提供Java运行时环境(JRE),例如可以在系统100中被执行的Java字节码。在示例中,Java软件程序被执行以启动系统100中的Java虚拟机用于执行Java字节码。在示例中,系统100是Android系统,并且存储器空间130存储用于Android系统的Dalvik软件程序。在实施例中,用户应用程序的源代码用Java语言来生成。源代码被编译以生成用于用户应用的Java字节码。Java字节码可被各种Java虚拟机执行。在图1的示例中,存储器空间150被分配以存储用于用户应用的Java字节码。为了执行Java字节码,系统100启动Java虚拟机。在示例中,CPU 111执行存储器空间130处的Java软件以启动Java虚拟机。Java虚拟机提供用于Java字节码的Java运行时环境。在示例中,在Java字节码的执行之后,Java虚拟机被终止。根据本专利技术的一方面,Java虚拟机利用解析和即时(JIT)编译用于Java字节码执行。在示例中,Java虚拟机检测Java字节码中经常被执行的轨迹,例如路径、循环等,并且按照与比较不常被执行的轨迹不同的方式执行经常被执行的轨迹。Java虚拟机跟踪针对轨迹的执行次数。当针对轨迹的执行次数少于阈值(例如2)时,Java虚拟机通过解析(i本文档来自技高网...

【技术保护点】
一种用于代码编译的方法,包括:接收用于编译的循环代码的指令;在将所述指令编译为针对所述循环代码的循环体之前向变量分配一个或多个寄存器;并且基于分配的所述寄存器将所述指令编译为所述循环体。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:齐歆瑜简宁胜黄海涛高丽萍
申请(专利权)人:马维尔国际贸易有限公司
类型:发明
国别省市:巴巴多斯;BB

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1