[发明专利]用于使用寄存器分配器建立调用约定序言和收尾程序代码的方法和装置有效
| 申请号: | 00107019.3 | 申请日: | 2000-04-24 |
| 公开(公告)号: | CN1271889A | 公开(公告)日: | 2000-11-01 |
| 发明(设计)人: | 小C·N·克利克;C·A·维克;M·H·帕莱茨尼 | 申请(专利权)人: | 太阳微系统有限公司 |
| 主分类号: | G06F9/45 | 分类号: | G06F9/45 |
| 代理公司: | 中国专利代理(香港)有限公司 | 代理人: | 王勇,王忠忠 |
| 地址: | 美国加利*** | 国省代码: | 暂无信息 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 用于 使用 寄存器 分配器 建立 调用 约定 序言 收尾 程序代码 方法 装置 | ||
本发明一般涉及一种用于提高软件应用程序性能的方法和装置。具体地说,本发明涉及一种使寄存器分配器建立用于子程序的调用约定序言和收尾程序代码的方法和装置
在致力于提高与计算机程序执行有关的效率的努力中,很多计算机程序在编译过程中被“优化”。优化一个计算机程序一般用以消除实质上不使用的计算机代码部分。另外,作为编译处理的一部分的优化计算机程序可以重新构成计算操作以提供更为高效地执行的全部计算,从而消耗较少的计算机资源。
一个优化器用于将一个计算机程序、例如以诸如C++,FORTRAN,或Java字节码之类的程序设计语言编写的计算机程序高效变换或者否则编译为更快的程序。更快的或者被优化的程序一般包括基本上所有与原始的或预先变换的计算机程序一样的、可观察到的行为。具体地说,被优化程序包括与其相关原始程序相同的数学行为。然而,优化器一般使用更少的计算重新创建相同的数学行为。
正如本领域技术人员所了解的,一个优化器一般包括一个用于控制寄存器在一个优化的或者否则为编译的程序内部表示内的使用的寄存器分配器。一个寄存器分配器分配一个其中存储与程序有关的数据的寄存器空间。与存取和一个计算机相关的“常规”存储器空间、例如被分为栈页槽的栈空间相关的速度相比,一个寄存器是一个与计算机的处理器相关的、可以被相对较快存取的存储单元。
在寄存器分配处理之前,一组值、即输入变量为编译器所知,并且位于一个调用约定所规定的固定存储单元中。如本领域技术人员所公知的,一个调用约定一般是一个由此进行到子程序的调用的约定。一个调用约定一般规定变量从哪里经过,即,每个变量所出现在的寄存器或栈页槽。另外,一个调用约定可以规定在子程序期间必须保留的寄存器,即,被被调用者-保存寄存器。如果在子程序中使用被被调用者-保存寄存器,则一般需要保存并恢复被被调用者-保存寄存器。调用约定可能还规定某些寄存器是不用于还是用于特定目的。保存和恢复寄存器以及任何其他的特定处理,一般发生在子程序的入口和出口,并且被称为序言和收尾程序代码。在寄存器分配处理完成之后可使用附加信息。这样的附加信息包括,与子程序有关的栈帧大小以及要保存和恢复的一组寄存器,但是附加信息不限于这些。
图1是一个包括一个寄存器分配器和一个调用约定代码发生器的编译器的图示。源代码102作为输入提供给编译器106,该编译器可能是一个优化编译器。一般地,源代码102包括一个对子程序110的调用108,以及与该调用108有关的输入变量112。具体地说,相对于调用108规定输入变量112的位置。
编译器106所包括的一个寄存器分配器116用于分配源代码102所使用的存储器空间。在寄存器分配器116执行一个寄存器分配之后,调用约定代码发生器118产生与源代码102有关的序言和收尾程序代码。以实例方式,如果在分配的任何部分使用任何被被调用者-保存寄存器,则将用于保存和恢复被被调用者-保存寄存器的代码插入到序言和收尾程序代码。序言和收尾程序代码被包括在一个源代码102的内部表示120中。一旦产生内部表示120,编译器106从内部表示120创建机器指令124。
除一个子程序的调用约定之外,内部表示120包括复制、加载和存储与变量定义和使用有关的指令。如图所示,变量或值“c”和“d”存储在一个栈内。如本领域技术人员所公知的,变量“d”必须在子程序调用过程中溢出。因此,变量“d”在子程序调用之后被再次从栈加载到“foo”。
参照图2,该图描述一个从包括调用约定的源代码产生机器指令的过程。如本领域技术人员所公知的,过程202一般包括“虚拟”寄存器到“真实”寄存器的转换。在分配之前,编译器假设有不限数目的“虚拟”寄存器一起工作。分配器的工作是将无限制的虚拟寄存器映象到整个机器具有的非常有限的真实寄存器组。过程202在步骤204开始,在该步骤将调用约定代码插入到编译器所得到的源代码。
一般地,在编译器插入调用约定代码或与一个子程序调用可能产生的约定有关的代码之后,编译器在步骤206研究调用约定。具体地说,编译器研究与调用约定有关的输入变量。在步骤208,确定输入值或变量是否与一个寄存器或栈位置、例如栈页槽有关。当确定输入变量存储在一个寄存器时,过程流进入步骤216,在这里将输入值复制到一个虚拟寄存器。一般地,使用寄存器到寄存器复制命令完成该复制。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于太阳微系统有限公司,未经太阳微系统有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/00107019.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:图像处理装置和方法及提供媒体
- 下一篇:荧光灯及其制造方法





