CN101189578B - 用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置 - Google Patents

用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置 Download PDF

Info

Publication number
CN101189578B
CN101189578B CN200680019817.7A CN200680019817A CN101189578B CN 101189578 B CN101189578 B CN 101189578B CN 200680019817 A CN200680019817 A CN 200680019817A CN 101189578 B CN101189578 B CN 101189578B
Authority
CN
China
Prior art keywords
code
machine
function
subject
translater
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN200680019817.7A
Other languages
English (en)
Other versions
CN101189578A (zh
Inventor
乔纳森·杰·安德鲁斯
杰拉恩特·诺森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
IBM United Kingdom Ltd
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority claimed from PCT/GB2006/001949 external-priority patent/WO2006131695A1/en
Publication of CN101189578A publication Critical patent/CN101189578A/zh
Application granted granted Critical
Publication of CN101189578B publication Critical patent/CN101189578B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Abstract

在程序代码转换(特别是动态二进制翻译)中,主题代码(17)通过翻译器(19)被翻译为目标代码(21),以在目标处理器(13)上执行。目标代码的选定部分(例如,库函数SFuncA(1 72))被执行本机代码的一部分(例如本机函数NFuncA(282))所替代。本机函数对于目标处理器是本机特有的。该方法还包括执行主题代码部分(例如,主题函数SFuncB(173))以替代本机代码部分(例如,库函数NFuncB(283))。反向绑定技术以本机代码的选定部分(特别是本机库函数)替代主题代码,以在该翻译器(19)内保持控制。这有助于维持该翻译器(19)中的准确主题状态,还具有其它优点。

Description

用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置
技术领域
本发明总体上涉及计算机和计算机软件的领域,更具体地讲,涉及用于例如转换程序代码的代码翻译器、仿真器和加速器的程序代码转换方法及装置。 
背景技术
在嵌入式和非嵌入式的CPU中,存在占优势的指令集架构(ISA),有许多软件存于其中,假设它们可容易地存取相关软件,其可被性能“加速”或“翻译”至许多可用的处理器而表现较佳的成本/性能优势。还发现这样的占优势的CPU架构,其被及时锁住至其ISA,且无法表现性能或符合市场需求。这样的CPU将得益于面向软件的处理器共架构。 
例如,在公布的申请WO00/22521中公开了能够促进这种加速、翻译和共架构能力的程序代码转换方法和装置,WO00/22521的公开通过引用包含于此。 
库函数是由另一程序调用以执行特定函数的代码区段。许多计算环境提供一种标准库函数集,例如,操作系统的一部分(“系统库”)。在其它情况中,提供一个或多个专有库。当主题程序在主题计算环境中运行时,由于函数调用针对这些外部主题库而建构,所以控制流通过不同单元的主题代码之间。在一些情况下,某些主题库的本机(即,目标架构)版本在该目标架构上是可获得的。因此,期望利用这些本机库函数,其适于替代将主题库翻译为目标代码。在程序代码转换中本机库的使用在共同待审查申请US 10/748,317(见WO2005/008478)已加以讨论,其公开通过引用包含于此。 
发明人已确认此种本机绑定还造成不利。例如,执行控制从主题程序被移除且转到本机代码。接着,控制后续的执行(例如,相关子库的使用)是更为困难的。再者,可能失去实现最优化的机会。此外,仿真的主题状态可能变得不准确。 
发明内容
根据本发明,提供一种在权利要求中阐述的装置和方法。本发明的优选特征从权利要求以及说明来看是清楚的。 
下面是可根据本发明实施例实行的各个方面和优点的概要。提供本发明作为一种导引,以帮助本领域技术人员能够更快速地理解详细的设计讨论,这些设计讨论在各方面确保,并且意图不是以任何方式限制权利要求的范围。 
在本发明的一方面中,提供一种执行程序代码的方法,该方法在从可由主题处理器执行的主题代码转换为可由目标处理器执行的目标代码期间执行程序代码,其中,该目标代码结合可由该目标处理器本地执行的本机代码可被执行,该方法包括:在该目标处理器上执行第一主题代码部分,作为已翻译的目标代码;从该第一主题代码部分调用,以在该目标处理器上本地执行本机代码部分;从该本机代码部分调用,以执行第二主题代码部分作为已翻译的目标代码;从该第二主题代码部分的执行返回到该本机代码部分的执行;以及从该本机代码部分的执行返回到该第一主题代码部分的执行。 
在本发明的另一方面中,提供一种执行程序代码的方法,该方法在从可由主题处理器执行的主题代码转换为可由目标处理器执行的目标代码之后执行程序代码。在该方法中,该目标代码结合可由该目标处理器本地执行的本机代码可被执行。该方法包括:至少提供第一、第二和第三主题代码部分,并至少提供第一本机代码部分;从该第一主题代码部分的执行进行调用以执行该第一本机代码部分,使得该第一本机代码部分被执行以替代该第二主题代码部分的已翻译目标代码版本的执行;从该第一本机代码部分的执行进行调用以执行该第三主题代码部分的目标代码已翻译版本;从该第三主题代码部分的目标代码已翻译版本的执行返回到该第一本机代码部分的执行;以及从该第一本机代码部分的执行返回到该第一主题代码部分的执行。 
在本发明的另一方面中,提供一种程序代码执行的方法,该方法适用于从可由主题处理器执行的主题代码转换为可由目标处理器执行的目标代码。在该方法中,该目标代码结合可由该目标处理器本地执行的本机代码可被执行。该方法包括:至少提供第一和第二主题代码部分,其具有相应的第一和第二本机代码部分,其中,该第一本机代码部分包括到该第二本机代码部分的链接;将该第一主题代码部分绑定到该第一本机代码部分,使得该第一本机代码部分被执行以替代该第一主题代码部分的目标代码已翻译版本的执 行;以及,以到该第二主题代码部分的链接替代该第一本机代码部分中的该链接,使得该第二主题代码部分的目标代码已翻译版本被执行以替代该第二本机代码部分的执行。 
在示例的实施例中,发明人已研发出有关加速程序代码转换的方法,这些方法对于有关实时翻译器是特别有用的,该实时翻译器提供主题程序代码到目标代码的动态二进制翻译。 
本发明的示例实施例改进了进行程序代码转换时的性能。特别地,示例的实施例改进了有关结合已翻译目标代码使用本机绑定代码的性能。此外,本发明的实施例使得翻译器执行从主题代码到目标代码的程序代码转换,并结合本机代码的一些部分有效地执行目标代码。 
本发明还延伸到翻译器装置,其具有被配置为执行在此限定的任何一种方法的翻译器单元。另外,本发明延伸到计算机可读存储介质,其上记录可由计算机执行以实现在此限定的任何一种方法的指令。 
附图说明
包括在说明书中并组成说明书的一部分的附图示出了当前的优选实施方式,这些附图如下: 
图1是示出应用了本发明实施例的装置的框图; 
图2是示出在程序代码转换期间执行控制的示例方法的示意性流程图; 
图3是示例翻译器中的示例主题程序的示意性表示; 
图4是显示使用本机绑定的示例实施例的操作流程的示意性框图; 
图5是示例的反向绑定函数的示意性表示; 
图6是包括本机绑定函数和反向绑定主题函数的程序代码的示例; 
图7是目标处理器中的存储器的示例布置; 
图8显示本机绑定和反向绑定的第一示例机制; 
图9显示本机绑定和反向绑定的另一示例机制;以及 
图10显示用于在程序代码转换的翻译器中的上下文再使用的示例机制。 
具体实施方式
提供以下描述以使本领域技术人员能够实现并使用本发明,并且该描述提出由发明人实施其发明所建立的最佳方式。然而,由于本发明的一般原理 在此已明确地限定以提供一种改善程序代码转换的方法与装置,因此对于本领域技术人员来说,各种修改仍是明显可见。 
以下的技术用语中,主题程序在包括主题处理器的主题计算平台上执行。包括目标处理器的目标计算平台用于通过执行动态程序代码转换的翻译器来执行主题程序。翻译器执行从主题代码至目标代码的代码转换,使得目标代码在目标计算平台上可执行。 
图1示出了示例的目标计算平台14,其包括目标处理器13,目标处理器13包括目标寄存器15和存储多个软件组件17、19、20、21、22、27和28的存储器18。这些软件组件包括将被翻译的主题代码17、操作系统20、翻译器代码19、已翻译代码(目标代码)21、抽象寄存器组(bank)27、本机绑定机制22,以及本机代码28。 
由主题代码17的运行时翻译所产生的“目标代码”21以及直接针对目标架构所编译的“本机代码”28之间存在区别。由目标操作系统20所提供的系统目标库是本机代码28的一个示例。相反,主题系统库的翻译是目标码21的一个示例。本机代码28是产生于翻译器19外部。这意味着翻译器19并不产生本机代码28。而且,翻译器19并不具有最优化本机代码28的机会。 
在一个实施例中,翻译器代码19是仿真器,该仿真器以最优化或非最优化方式将主题指令集架构(ISA)的主题代码翻译为另一ISA的已翻译目标代码。在另一实施例中,翻译器19用作加速器,该加速器通过执行程序代码最优化以将主题代码翻译为每个相同ISA的目标代码。 
一般而言,目标计算平台14是一种翻译器装置,其包括(特别是)翻译器单元19。在示例的实施例中,翻译器19是实施该翻译器的源代码的编译版本。翻译器19以及由翻译器19所产生的已翻译代码21结合目标处理器13(通常为微处理器或其它合适的计算机)上的操作系统20而运行。应理解的是,图1中所述的结构仅为示例,例如,本发明的实施例可以在驻留在操作系统之内或之下的代码中实施。主题代码17、编译器代码19、操作系统20以及存储器18的存储结构可以是本领域技术人员所知悉的广泛种类的任何类型。 
在根据图1的装置中,当运行目标代码21时,程序代码转换最好在运行时动态地执行。翻译器19与已翻译程序21内联运行。翻译器19最好用作针对目标架构编译的应用程序。主题程序17在运行时由翻译器19翻译,以在目标架构14上执行。翻译器19还转换由主题程序17进行的主题操作系统(OS) 调用,从而当转到目标OS 20时,使得它们正确地运行。 
通过翻译器19运行主题程序17包括二种不同类型且以交错方式执行的代码:翻译器代码19以及目标代码21。翻译器代码19在运行时之前基于翻译器19的高级源代码实施而由例如编译器产生。相反,目标代码21在整个运行时基于正被翻译的程序的已存储的主题代码17由翻译器代码19产生。 
主题程序17意图在主题处理器(未示出)上运行。在一个实施例中,翻译器19用作仿真器。换言之,翻译器19仿真该主题处理器,而实际上在目标处理器13上执行主题程序17作为目标代码21。 
在示例的实施例中,提供至少一个全局寄存器存储27(也称为主题寄存器组27或抽象寄存器组27)。在多处理器的环境中,根据主题处理器的架构,可选地提供多于一个的抽象寄存器组27。主题处理器状态的表示由主题代码21和翻译器19的组件所提供。换言之,翻译器19将主题处理器状态(例如:变量和/或对象)存储在各种显式编程语言装置中。用于编译翻译器19的编译器确定该状态和操作如何在翻译器代码中实施。比较而言,目标代码21隐式地提供目标寄存器15和存储器位置18(由目标代码21的目标指令所控制)中的主题处理器状态。例如,全局寄存器存储27的低级别表示仅仅是已分配的存储器的区域。然而,在翻译器19的源代码中,全局寄存器存储27是可被较高级地存取和控制的数据数组或对象。 
图2是示出在程序代码转换期间执行控制的示例方法的示意性流程图。 
如图2所示,控制初始存在于翻译器控制循环190中。在步骤201,控制循环190调用翻译器19的代码产生函数192,该代码产生函数192将主题代码17的区块(block)翻译为已翻译代码21的相应区块。接着,在步骤202,已翻译目标代码21的区块在目标处理器13上执行。方便地,已翻译目标代码21的每个区块的末端含有指令,以将控制返回至控制循环201。换言之,翻译和执行主题代码的步骤是交错的,使得部分主题程序17被翻译且接着依次被执行。 
这里,术语“基本区块”对于本领域技术人员是熟知的。基本区块是具有精确的一个入口点和精确的一个出口点(其将代码的区块限制为单一控制路径)的代码区段。为此,基本区块是有用的控制流的基本单元。翻译器19将主题代码17适当地分为多个基本区块,其中每个基本区块是单个入口点处的第一指令以及单个出口点处的最后指令(例如,跳跃、调用或分支指令)之间 的序次的一组指令。翻译器可仅选择这些基本区块中的一个区块(区块模式),或选择一组基本区块(群组区块模式)。一组区块适当地包括两个或多个基本区块(被一起处理为单个单元)。此外,翻译器可形成表示主题代码的相同基本区块但在不同入口条件下的等区块(iso-block)。 
在示例的实施例中,中间表示(IR)树基于主题指令序列而产生,作为从原始主题程序17产生目标代码21的部分过程。IR树是由主题程序所计算的表达式和所执行的操作的抽象表示。之后,目标代码21基于IR树而产生。IR节点的集合实际上是有向无环图(DAG),但俗称为“树”。 
如本领域技术人员可理解的,在一个实施例中,翻译器19使用面向对象的编程语言(例如:C++)来实现。例如,IR节点被实现为C++对象,对于其它节点的参照被实现为对应于这些其它节点的C++对象的C++引用。因此,IR树被实现为含有各种彼此引用的IR节点对象的集合。 
此外,在讨论中的实施例中,IR产生使用与主题架构(主题程序17将在其上运行)的指定特性相应的一组抽象寄存器定义。例如,针对主题架构上的各个物理寄存器(“主题寄存器”),有独特的抽象寄存器定义。这样,翻译器中的抽象寄存器定义可以被实现为C++对象,其含有对于IR节点对象(即,IR树)的引用。由该组抽象寄存器定义所引用的所有IR树的集合体被称为工作IR森林(forest)(称为“森林”是因为它含有多个抽象寄存器根,每个根指的是IR树)。这些IR树及其它过程适当地形成翻译器代码产生函数192的一部分。 
本机绑定 
图3是示意性实施例,其显示将通过翻译器19执行的主题程序17的多个编译单元171、172和173。在该示例中,可执行的主要主题171调用第一库170a中的函数SFuncA 172。该第一主题函数SFuncA的执行依次调用第二库170b中的第二主题函数SFuncB 173。图3中的箭头表示主题程序的这些不同单元之间的控制流。例如,第一库170a是专有库,而第二库170b是系统库,反之亦然。 
尽管在图3中已经显示了库以供说明,但是主题代码单元171、172和173可以是任何主题代码的合适部分。当未使用本机绑定时,主题程序17的单元171、172和173各自被翻译为目标代码21并在翻译器19的控制下执行。 
图4示出了在本发明的示例的实施例中使用的本机绑定机制。这里,翻 译器19使用本机绑定,以本机系统库280a中对等效函数的调用来替代主题程序17中对主题系统库函数172的调用。换言之,主题程序171实际上反而调用本机绑定代码28的区段。主题程序171的已翻译目标代码版本含有对本机绑定代码28的调用。在这种情况下,该调用被绑定到第一本机库280a中的第一本机函数NFuncA 282。 
亦如图4所示,在该示意性的示例中,第一本机函数NFuncA 282依次调用第二本机库(即子库)中的第二本机函数NFuncB 283。换言之,一般预期的执行顺序用于本机绑定代码的第二区段283的执行,以紧随本机绑定代码的第一区段282的执行。 
在示例的MIPS-x86翻译中,x86系统目标库“libc”可定义高级memcpy()(存储器复制)例程,其利用SSE2矢量操作来执行相当快速的字节复制。通过使用本机绑定机制22,对MIPS主题代码中的memcpy的所有调用被绑定到本机的memcpy()。这消除了翻译memcpy()函数的主题(MIPS)版本的成本。此外,memcpy()函数的本机(x86)版本具有较好的目标硬件的复杂的感知力,因此以最具效率的方式提供来实现函数的期望效果。 
当检测到主题程序的控制流进入主题代码17(例如主题库,其中存在主题代码的本机版本)的区段时,由翻译器19实现本机绑定。翻译器19执行等效本机码28,而不是翻译主题代码17。 
除了目标系统库调用外,本机绑定可用于更多的任意码取代,例如,取代非库函数的本机编译版本。此外,通过以替代的本机函数(其实现与对主题系统函数的调用相同的功能,或作为在目标系统调用周围的调用存根(stub))取代对主题系统函数的调用,本机绑定可用于在目标架构上实施主题系统调用。本机绑定也可在超出函数调用点以外的任意主题代码位置上应用,以允许任意码序列(目标代码或本机代码)和/或函数调用在主题程序中的任何限定明确的点上被插入或取代。 
本机绑定机制22允许翻译器19将特定主题代码17函数与其本机代码28对应物彼此关联,使得翻译器19获知哪个主题函数进行绑定以及哪个本机函数将其绑定。翻译器19可依据本机绑定机制22的实施方式而以不同方式来获得该函数映射信息。如共同待审查申请US 10/748,317和WO2005/008478中所讨论的,执行本机绑定的特定机制包括绑定点、运行时符号修补以及S调用。 
本机绑定使已翻译主题代码直接地执行代码单元的本机(即,目标架构)版本,而不是翻译和执行等效主题代码,例如,库的本机版本。这避免了翻译这些库的主题版本的开销。此外,因为本机版本可利用目标架构的架构特性(其是主题版本未察觉的),所以本机版本可以是相同功能的更有效实施。 
尽管本机绑定带来一些优点,但是也存在限制。特别地,本机代码28并非在翻译器19的直接控制之下。 
执行本机代码28不更新由翻译器19所保持的主题状态。例如,本机代码28不更新抽象寄存器组27。此外,本机代码不考虑由翻译器19控制的仿真的主题存储器分配,例如,栈和堆存储器分配。 
本机代码可调用至一个或多个级别中的一个或多个子库。翻译器19不能通过本机代码282控制子库的使用。实际上,通过执行控制远离翻译器19的多个级别,子库有时是一百个级别深的等级。 
翻译器19不能执行针对本机代码28的最优化。例如,翻译器19能够最优化本机代码库中的代码,但该机会由于不在翻译器19控制之下执行本机代码28而丧失。 
还存在关于参数变换的限制。例如,存在一些限制,诸如有关浮点精度,其中主题程序17、翻译器19和本机代码28并非都共享相等的浮点精度。 
本发明的示例实施例提供用于本机绑定的上下文的改进机制,其解决这些和其它缺点。 
反向绑定 
图5示出在本发明示例实施例中使用的反向绑定技术。 
如图5所示,翻译器19通过本机代码28的执行而被部分地调用,并且主题代码17的一部分被执行。控制流接着返回至已绑定的本机代码28。图5的反向绑定技术为混合型。换言之,主题代码17的一部分(通过翻译器19)被执行并在部分本机代码28之间交错。特别地,翻译器19被调用以执行主题代码17的一部分,以替代执行本机代码28的预期下一个部分,或是除了执行本机代码28的预期下一个部分以外,还执行主题代码17的一部分。 
在图5示出的示例中,在步骤①,主要的主题程序171对第一本机函数NFuncA 282进行调用,第一本机函数NFuncA 282被执行以作为本机绑定代码。接着,在步骤②,主题代码函数SFuncB 173通过翻译器19被执行为目标代码,以取代第二本机函数NFuncB 283。在步骤③,控制返回至本机代码 28,以完成NFuncA 282的执行。最后,在步骤④,控制返回至主要的可执行主题171。 
图6显示程序代码的示例区段,以说明反向绑定是特别有帮助的实际情况。 
在该示例中,functionA 171是被翻译和执行为目标代码的主题代码。翻译器19本机绑定至函数“getSomeInfo”282的本机代码版本,其被执行为本机代码。该本机函数“getSomeInfo”包括对“malloc”函数的调用,“malloc”函数分配存储器区域,以便“getSomeInfo”函数运行。然而,该存储器分配恰好由该主题代码中的functionA释放。执行malloc函数的本机版本导致存储器泄漏和潜在缺陷。换言之,在主题代码和本机代码的执行之间发生了保持存储器分配一致性的问题。 
如图6所示,在此示例中,存在从本机代码函数“getSomeInfo”282到“malloc”函数173的主题代码版本的反向绑定。在本机函数“getSomeInfo”282的执行期间,对“malloc”函数的调用导致翻译器19被调用。翻译器19将主题“malloc”函数173翻译为目标代码。在由翻译器19所保持的仿真主题状态中,“malloc”和“free”此时被正确地配对。执行主题“malloc”函数173的结果返回至本机“getSomeInfo”函数282,以分配表示aBuffer的存储器。 
为了说明起见,图6的示例已被简化。反向绑定最好发生在本机绑定码中的多个不同点上,并且可发生在多个不同子级别上。 
在特定的示例实施例中,通过由对主题代码17的反向绑定部分的链接替代绑定本机代码28中的链接来应用反向绑定。 
图7示出用于执行反向绑定的示例存储器再寻址机制。图7是目标处理器13的存储器18的示意性表示,该存储器18存储本机代码区段282、283以及主题代码区段173等。在这种情况下,如同图5,在第一本机库NLibA 280a和第二本机库NLibB 280b中分别提供本机函数NFuncA 282和NFuncB 283。因此,第一本机库NLibA 280a依赖于第二本机库NLibB 280b,并且NLibB是NLibA的从属。在另一实施例中,在单个库中设置第一函数NFuncA 282和第二函数NFuncB 283,但NFuncB仍是NFuncA的从属。 
此外,图7显示了已由翻译器19从主题代码173产生的目标代码213。目标代码213可在目标处理器13上执行,以替代主题代码173。 
当需要时,目标架构通常将通过例如动态链接程序将本机库280a以及任何从属(例如,库280b)加载到存储器18。但是,在本发明的示例实施例中,当初始化翻译器19时,将本机库280a(及其从属280b)加载到存储器18。尽管这消耗较多存储器,但好处在于本机库280a、280b能被翻译器19立即运用。 
在一个示例中,第一本机库(NLibA 280a)中的依赖性和符号被解析,并且第一本机库280a中的链接被替代为主题库173中的函数的链接,以成为反向绑定主题函数。在图7中,用对_reverse_NFuncB的调用来替代从NFuncA282中对NFuncB的调用。此替代调用以本机函数库282中的调用存根来适当地插入。反向调用存根此时通向主题函数SFuncB 173,其由翻译器19翻译并以TFuncB 213被执行为目标代码。 
现在将详细描述用于实施本机绑定和反向绑定的示例机制。 
反向绑定点 
在一个实施例中,使用专用的“反向绑定点”描述语言来识别将被绑定的本机函数。反向绑定点描述包括:(a)将被反向绑定的本机函数;以及(b)相应的反向绑定主题函数。在执行的开始,翻译器19读取反向绑定点描述以识别反向绑定点(从本机代码调用主题函数的位置)。 
在本机库的初始化期间,当翻译器19遇到这些反向绑定点时,翻译器19在本机代码28中插入对适当的主题函数的调用存根。 
在一个实施例中,特定的反向绑定点描述嵌入到翻译器19中。在另一实施例中,反向绑定点描述存储在翻译器19运行时读取的单独文件中,因此允许终端用户通过添加特定的本机对主题函数的映射来控制反向绑定机制22。修改的本机库 
在另一实施例中,本机库的特定翻译器版本被预先创建,当编译时该版本具有反向绑定点,例如,嵌入到其中的反向调用存根。 
参数变换 
当调用本机函数时,翻译器19遵守目标架构的本机调用协定。通过比较,在整个目标代码21中,只要翻译器19遵从一些一致性调用协定,目标代码21就不必要遵从目标架构调用协定。因此,当执行本机代码28时,可应用第一调用协定,并且当执行目标代码21时,可应用第二调用协定。在这种情况下,当在本机代码28和目标代码21之间移动时,可实施调用协定切换, 或反之亦然。 
此外,翻译器19可能需要执行目标机器状态(如本机代码28所表示)和主题机器状态(如目标代码21所表示)之间的数据变换,上述两种状态都用于反向绑定主题函数173的输入参数和返回值(如果有的话)。这种数据变换的示例可包括:(i)字节序(endian)转换(即,字节交换);(ii)数据结构对准;(iii)主题地址和目标地址之间的转换;以及(iv)值变换(例如,常数转换或值缩放)。 
例如,在MIPS架构上,函数参数被传送到寄存器中,而在x86架构上,参数被传送到栈上。为了使MIPS-x86翻译器调用本机函数,x86调用协定需要将函数参数从主题寄存器组27移动到该栈。相反,对主题MIPS函数的反向绑定需要将函数参数从该栈移动到主题寄存器组27。 
调用存根 
调用反向绑定主题函数173包含几个步骤,包括:参数设置、输入参数变换、函数调用以及结果变换。 
参数设置指的是用于计算函数调用参数的值的代码。本机代码28方便地计算参数值而不考虑函数是被调用作为本机函数283还是作为反向绑定主题函数173。 
输入参数变换将函数调用参数值从其本机代码28表示组织化为主题函数173预期的格式和位置。 
函数调用是以遵守应用于翻译器19中的调用协定的方式对反向绑定主题函数173的实际函数调用,并且包括(已重新格式化的)参数组织化为函数原型所需的顺序。函数原型指示函数的参数的顺序和类型以及函数的返回值的类型。例如,如果由翻译器应用的调用协定需要将自变量传送到栈上,则调用反向绑定主题函数的代码以正确顺序将自变量放置到主题栈上,并使主题栈指针相应移动。 
结果变换对主题函数的返回值(如果有的话)进行转换。反向绑定主题函数173将以与主题架构一致的格式返回值,翻译器19将该值转换为由本机代码28所使用的表示。 
“参数变换”指的是不同数据格式之间的所有各种转换以及目标代码21和本机代码28的调用转换。执行参数变换的代码称为“调用存根”,其包括基本函数调用周围的最小包装(wrapper),其目的在于允许本机代码调用者282和主题代码被调用者173相互作用。因此,单个“调用存根”可以被分为本 机代码28和目标代码21成份。参数变换是否整体地发生在目标代码21中或本机代码28中依赖于反向绑定的实施。 
本机代码反向调用存根 
图8显示使用在本机代码中实行的调用存根281、285的示例实施方式。当进行从主题代码171到本机绑定函数282的调用时,使用本机代码调用存根281。相反,当进行从绑定本机函数A到反向绑定主题函数B 173的调用时,使用本机代码反向调用存根285。在绑定本机代码282内,翻译器19用对反向调用存根285的调用取代对本机库函数的调用(例如,如图7所示的从属库283)。这里,反向调用存根285(预先)写入到本机代码中。每个反向调用存根285执行上述参数变换,并且调用反向绑定主题函数173。 
在一个实施例中,通过限定均匀反向调用存根函数接口而便于进行参数变换。均匀调用存根函数接口限定所有反向调用存根的固定函数签名和相应的数据类型,这允许翻译器19配置反向调用存根281而不需参照基本主题函数173的函数签名(原型)。这允许反向调用存根285可使用高级编程语言(例如C或C++)而实施,其使得本机绑定和反向绑定机制更容易被翻译器19的终端用户理解。 
在另一实施例中,参数变换通过限定双向均匀调用存根函数接口而便于进行。该调用存根函数接口限定所有本机绑定函数调用211以及所有反向绑定函数调用282的固定函数签名。因此,本机绑定和反向绑定机制更容易被翻译器19的终端用户理解。 
目标代码调用存根 
图9显示使用目标代码调用存根211和目标代码反向调用存根215的另一示例实施方式。这里,本机绑定和反向绑定的参数变换在目标代码21中整体地执行。在该实施例中,翻译器19在译码时检测来自主题代码171的本机绑定调用,并且将参数变换编码为IR树(其被最终产生为目标代码)。通过表示参数变换和IR中的本机函数原型的细节,调用存根代码211变为合并到主题代码(即,调用存根的IR和主题代码的IR是可区别的)。这允许翻译器将最优化(例如,群组区块)应用于参数变换代码。相比之下,在本机代码中执行的参数变换,例如,在本机代码调用存根211中所执行的主题寄存器到函数参数的映射(如上所述),存在于翻译器19外部,并且不能被容易地最优化。类似地,在目标代码中也提供反向调用存根215,并且最优化在翻译器19内实 现。 
本机代码调用存根281、285以及目标代码调用存根和211、215按照相似的成对方式被适当地执行,然而,也可按照混合的成对方式执行。换言之,本机代码调用存根281与目标代码反向调用存根285一起使用,或反之亦然。 
如上所述,本发明的示例实施例主要涉及以本机函数来替代主题函数(本机绑定),反之亦然(反向绑定)。然而,本发明的实施例还扩展至任意替代和添加。特别地,通过将额外反向绑定主题函数调用配置到本机代码例程来适当地实施反向绑定。这里,额外主题函数调用将执行控制临时地返回到翻译器19。举一示例而言,翻译器可接着执行代码,以便于在将控制返回到本机代码之前更新仿真的主题状态。举另一示例而言,翻译器可应用特性描述(profiling),以在主题程序中的特定点上在调用本机绑定代码或已翻译主题代码之间动态地进行选择。 
上下文再使用 
图10示出本发明示例实施例的另一方面。 
图10是上下文线程(thread)214的示意性表示。上下文线程214是一种数据结构,其容纳不同集合的数据,并允许翻译器19在多线程的程序上操作。该示例的数据结构容纳(尤其是)抽象寄存器组27的当前值、仿真主题栈的位置、仿真主题栈的尺寸、线程标识符以及与主题线程的翻译有关的特定翻译器信息。 
针对多线程程序中的每个线程,产生新的上下文线程。此外,上下文线程用于每个反向绑定主题函数173。换言之,每当遇到反向绑定函数173时,翻译器19提供上下文线程214作为执行该线程的环境。 
不幸地,存在与每个上下文线程的产生有关的开销。特别地,需要保留用于上下文线程的空间并接着以适当值来构成该数据结构的工作。新的上下文线程的产生是相当昂贵的。 
在本发明的示例实施例中,单个上下文线程在多个反向绑定主题函数之间被共享。最好是,创建单个上下文线程数据结构214a,并接着用于第一反向绑定主题函数173a,如图10所示。当主题函数173a完成时,上下文线程214a被存储并不被丢弃。该数据结构保留在存储器18中。 
如图10所示,当遇到第二反向绑定主题函数173b时,所存储的主题上下文被取回并被再使用。这里,所存储的上下文线程214a被取回并成为用于 第二反向绑定主题函数173b的上下文线程214b。该过程随着上下文线程214b被存储并被再使用作为用于第三反向绑定主题函数173c的上下文线程214c而重复。 
每当上下文线程被再使用时,用对于相应主题函数173b、173c合适的值来重新构成上下文线程。然而,该重新构成相比于产生全新的上下文线程而言是不太昂贵的。因此,翻译器19中的开销显著地减低。 
以上所述的示例实施例具有许多优点。例如,即使当执行本机代码28时,翻译器也能够通过将本机代码的区段反向绑定回至翻译器中的主题代码,来保留执行控制的量度。此外,执行反向绑定主题代码更新由翻译器19所保持的主题状态,例如,抽象寄存器组27。另外,执行反向绑定主题代码允许翻译器更新仿真主题存储器分配,例如栈和堆存储器分配。翻译器能够通过适当地布置反向绑定,来控制绑定本机代码中的子库的使用。级别控制被启用,并且翻译器能够执行最优化。例如,通过避免未与主题代码共享相等的浮点数精度的本机代码函数,来改善参数显示。 
虽然已示出并描述了一些优选实施例,但本领域的技术人员应理解,在不脱离权利要求限定的本发明的范围的情况下,可进行各种变化和修改。 
应注意与本申请相关的与本说明书共同提交或在本说明书之前提交以及与本说明书公布于公开审查的所有文章和文档,并且所有这些文章和文档的内容通过引用包含于此。 
本说明书(包括任何权利要求、摘要和附图)所公开的所有特征和/或所公开的任何方法或过程中的所有步骤都可以按照任何组合方式组合,除了至少某些特征和/或步骤是相互排斥的组合以外。 
本说明书(包括任何权利要求、摘要和附图)所公开的各个特征可由提供相同、等效或相似目的的可选特征取代,除非明确地表明其不适用。因此,除非明确地表明其不适用,所公开的各个特性仅仅是一系列等效或相似特征中的一个示例。 
本发明并不限于前述实施例的细节,本发明可延伸至本说明书(包括任何权利要求、摘要和附图)所公开的特征中的任一新颖部分或任何新颖的组合,或是延伸至所公开的任何方法或过程中的步骤的任一新颖部分或任何新颖的组合。 

Claims (49)

1.一种执行程序代码的方法,该方法在从可由主题处理器执行的主题代码(17)转换为可由目标处理器(13)执行的目标代码(21)期间执行程序代码,该目标代码(21)结合可由该目标处理器(13)本地执行的本机代码(28)可由该目标处理器(13)执行,该方法包括以下步骤:
在该目标处理器上(13)执行第一主题代码部分(171),作为已翻译的目标代码(21);
从该第一主题代码部分(171)调用,以在该目标处理器(13)上本地执行本机代码部分(282);
其中,从该本机代码部分(282)调用,以执行第二主题代码部分(173)作为已翻译的目标代码(21);
从该第二主题代码部分(173)的执行返回到该本机代码部分(282)的执行;以及
从该本机代码部分(282)的执行返回到该第一主题代码部分(171)的执行。
2.根据权利要求1所述的方法,其中,该本机代码部分(282)具有等效主题代码部分(172),使得执行该本机代码部分(282)替代执行该等效主题代码部分(172)。
3.根据权利要求1所述的方法,其中,该第二主题代码部分(173)取代等效本机代码部分(283),使得执行该第二主题代码部分(173)替代执行该等效本机代码部分(283)。
4.根据权利要求1所述的方法,其中,该第二主题代码部分(173)不具有等效本机代码部分(283)。
5.根据权利要求1所述的方法,其中,执行该第二主题代码部分(173)更新该目标处理器(13)上所保持的仿真主题状态,以表示在该主题处理器中执行该主题代码(17)。
6.根据权利要求1所述的方法,还包括以下步骤:
确定是执行该第二主题代码部分(173)还是执行第二本机代码部分(283);以及
提供从该本机代码部分(282)到该第二本机代码部分(283)的链接,或者提供从该本机代码部分(282)到该第二主题代码部分(173)的链接。
7.根据权利要求1所述的方法,其中,该第二主题代码部分(173)提供用于执行的主题库函数,以替代等效本机库函数。
8.根据权利要求1所述的方法,其中,该本机代码部分(282)是包括对从属第二本机库函数(NFuncB)的调用的第一本机库函数(NFuncA),并且该方法包括:以对该第二主题代码部分(173)的调用取代该调用。
9.根据权利要求1所述的方法,还包括以下步骤:
将本机库(280)加载到该目标处理器(13)的存储器,该本机库(280)至少包括第一本机函数(NFuncA)和第二本机函数(NFuncB),其中,该第二本机函数(NFuncB)是该第一本机函数(NFuncA)的从属;以及
以对与该第二主题代码部分(173)相关的存储器位置的调用来取代该本机库(280)中对与该第二本机函数(NFuncB)相关的存储器位置的调用。
10.根据权利要求9所述的方法,还包括以下步骤:
至少加载第一本机库(280);
解析该第一本机库(280)中的依赖性,并为一个或多个从属函数(NFuncB)分配存储器位置;以及
以对与该第二主题代码部分(173)相关的存储器位置的调用来选择性地取代该第一本机库(280)中对为该一个或多个从属函数(NFuncB)中的至少一个函数分配的存储器位置的调用。
11.根据权利要求6所述的方法,其中,该确定步骤包括:提供反向绑定点描述,该反向绑定点描述包括:(a)本机函数(NFuncB)的识别,作为将被反向绑定的该第二本机代码部分(283),以及(b)将被调用的主题函数(SFuncB)的识别,作为用于替代该本机函数(NFuncB)的该第二主题代码部分(173)。
12.根据权利要求11所述的方法,还包括:当遇到包含在该反向绑定点描述中的该本机函数(NFuncB)时,在该本机代码部分(282)中插入对该主题函数(SFuncB)的反向调用存根(215,285)。
13.根据权利要求12所述的方法,还包括:在本机函数调用之前、之后或替代该本机函数调用,在该本机代码(28)中插入该反向调用存根(215,285)。
14.根据权利要求11所述的方法,还包括:将该反向绑定点描述嵌入到执行从主题代码(17)到目标代码(21)的转换的翻译器(19)内。
15.根据权利要求11所述的方法,还包括:在进行从主题代码(17)到目标代码(21)的转换的翻译器(19)的执行开始时,从存储的反向绑定点描述文件读取该反向绑定点描述。
16.根据权利要求6所述的方法,其中,该确定步骤还包括:提供修改的本机库(280)作为该本机代码部分(282),其中,该修改的本机库(280)适用于执行从主题代码(17)到目标代码(21)的转换的翻译器(19),并且其中,该修改的本机库(280)包括从该本机库(280)到该第二主题代码部分(173)的链接。
17.根据权利要求1所述的方法,其中,该本机代码部分(282)提供用于执行的第一本机库函数(NFuncA)以替代等效主题库函数,并且该第二主题代码部分(173)提供用于执行的主题库函数以替代等效本机库函数,并且该方法还包括以下步骤:
将零个或更多个第一函数参数从目标代码表示变换为本机代码表示,并根据该第一本机库函数(NFuncA)的原型利用该零个或更多个已变换的第一函数参数调用该第一本机库函数(NFuncA);
将零个或更多个第二函数参数从本机代码表示变换为主题代码表示,并根据该主题库函数的原型利用该零个或更多个已变换的第二函数参数调用该主题库函数;
将已调用的主题库函数的零个或更多个第二返回值从主题代码表示变换为本机代码表示,并返回到该第一本机库函数(NFuncA);以及
将已调用的本机函数的零个或更多个第一返回值从本机代码表示变换为主题代码表示,并返回到该第一主题代码部分(171)。
18.根据权利要求1所述的方法,还包括:插入进行从该本机代码部分(282)到该第二主题代码部分(173)的调用的反向调用存根(215,285)。
19.根据权利要求18所述的方法,其中,在本机代码(28)中提供该反向调用存根(215,285)。
20.根据权利要求18所述的方法,其中,该反向调用存根(215,285)包括由执行从主题代码(17)到目标代码(21)的转换的翻译器(19)所产生的目标代码(21)。
21.根据权利要求20所述的方法,还包括:
将该反向调用存根(215,285)的中间表示整合为用于主题代码(17)的区块的中间表示森林;以及
产生用于该中间表示森林的目标代码(21)。
22.根据权利要求1所述的方法,还包括以下步骤:
提供上下文线程数据结构(214),其用于从主题代码(17)到目标代码(21)的转换;
使用该上下文线程数据结构(214),将第二主题代码部分(173)转换为该已翻译的目标代码(21)版本;
将该上下文线程数据结构(214)存储在该目标处理器(13)的存储器中;以及
当第二次或之后遇到该第二主题代码部分(173)时,再使用该存储的上下文线程数据结构(214)。
23.根据权利要求22所述的方法,还包括以下步骤:
通过从该本机代码部分(282)调用来至少提供将被执行的第三主题代码部分(173b);以及
当将该第三主题代码部分(173b)转换为该目标代码(21)时,共享该存储的上下文线程数据结构(214)以供使用。
24.根据权利要求22所述的方法,其中,该上下文线程数据结构(214)至少提供抽象寄存器组(27)的表示、仿真主题栈的位置、该仿真主题栈的尺寸、线程标识符以及与该主题代码部分的翻译相关的特定翻译器信息。
25.一种翻译器装置,该翻译器装置执行从可由主题处理器执行的主题代码(17)到可由目标处理器(13)执行的目标代码(21)的程序代码转换,该目标代码(21)结合可由该目标处理器(13)本地执行的本机代码(28)可由该目标处理器(13)执行,该翻译器装置包括:
翻译器单元(19),用于将第一主题代码部分(171)翻译为用于在该目标处理器(13)上执行的已翻译目标代码(21),其中,已翻译的第一主题代码部分(171)包括用于在该目标处理器(13)上本地执行本机代码部分(282)的调用,
其中,翻译器单元(19)提供该本机代码部分(282),以包括用于执行第二主题代码部分(173)作为已翻译的目标代码(21)的调用,以使得该第二主题代码部分(173)的执行返回到该本机代码部分(282)的执行,并使得该本机代码部分(282)的执行返回到该第一主题代码部分(171)的执行。
26.根据权利要求25所述的翻译器装置,其中,该本机代码部分(282)具有等效主题代码部分(172),使得执行该本机代码部分(282)替代执行该等效主题代码部分(172)。
27.根据权利要求25所述的翻译器装置,其中,该第二主题代码部分(173)取代等效本机代码部分(283),使得执行该第二主题代码部分(173)替代执行该等效本机代码部分(283)。
28.根据权利要求25所述的翻译器装置,其中,该第二主题代码部分(173)不具有等效本机代码部分(283)。
29.根据权利要求25所述的翻译器装置,其中,执行该第二主题代码部分(173)更新该目标处理器(13)上所保持的仿真主题状态,以表示在该主题处理器中执行该主题代码(17)。
30.根据权利要求25所述的翻译器装置,其中,该翻译器单元(19)被配置为确定是执行该第二主题代码部分(173)还是执行第二本机代码部分(283),并且提供从该本机代码部分(282)到该第二本机代码部分(283)的链接,或者提供从该本机代码部分(282)到该第二主题代码部分(173)的链接。
31.根据权利要求25所述的翻译器装置,其中,该第二主题代码部分(173)提供用于执行的主题库函数,以替代等效本机库函数。
32.根据权利要求25所述的翻译器装置,其中,该本机代码部分(282)是包括对从属第二本机库函数(NFuncB)的调用的第一本机库函数(NFuncA),并且该翻译器单元(19)被配置为以对该第二主题代码部分(173)的调用取代该调用。
33.根据权利要求25所述的翻译器装置,其中,该翻译器单元(19)被配置为将本机库(280)加载到该目标处理器(13)的存储器,该本机库(280)至少包括第一本机函数(NFuncA)和第二本机函数(NFuncB),其中,该第二本机函数(NFuncB)是该第一本机函数(NFuncA)的从属,并且该翻译器单元(19)以对与该第二主题代码部分(173)相关的存储器位置的调用来取代该本机库(280)中对与该第二本机函数(NFuncB)相关的存储器位置的调用。
34.根据权利要求33所述的翻译器装置,其中,该翻译器单元(19)被配置为至少加载第一本机库(280a),解析该第一本机库(280)中的依赖性,为一个或多个从属库(280b)中的一个或多个从属函数(NFuncB)分配存储器位置,并且以对与该第二主题代码部分(173)相关的存储器位置的调用来选择性地取代该第一本机库(280a)中对从属函数(NFuncB)的分配的存储器位置的调用。
35.根据权利要求30所述的翻译器装置,其中,该翻译器单元(19)参照反向绑定点描述,该反向绑定点描述包括:(a)本机函数的识别,作为将被反向绑定的该第二本机代码部分(283),以及(b)将被调用的主题函数的识别,作为用于替代该本机函数的该第二主题代码部分(173)。
36.根据权利要求35所述的翻译器装置,其中,该翻译器单元(19)被配置为当遇到包含在该反向绑定点描述中的该本机函数时,在该本机代码部分(282)中插入对该主题函数的反向调用存根(215,285)。
37.根据权利要求36所述的翻译器装置,其中,该翻译器单元(19)被配置为在本机函数调用之前、之后或替代该本机函数调用,在该本机代码(28)中插入该反向调用存根(215,285)。
38.根据权利要求35所述的翻译器装置,其中,该反向绑定点描述被嵌入到该翻译器装置内。
39.根据权利要求35所述的翻译器装置,其中,该翻译器单元(19)被配置为在该翻译器装置的执行开始时,从存储的反向绑定点描述文件读取该反向绑定点描述。
40.根据权利要求30所述的翻译器装置,其中,该翻译器单元(19)被配置为提供修改的本机库(280),其中,该修改的本机库(280)适用于包含本机代码部分(282)的该翻译器装置,并且其中,该修改的本机库(280)包括从该本机库(280)到该第二主题代码部分(173)的链接。
41.根据权利要求25所述的翻译器装置,其中,该本机代码部分(282)包括用于执行的第一本机库函数(NFuncA)以替代等效主题库函数(SFuncA),并且该第二主题代码部分(173)包括用于执行的主题库函数(SFuncB)以替代等效本机库函数(NFuncB),并且其中,该翻译器单元(19)被配置为执行以下步骤:
将零个或更多个第一函数参数从目标代码表示变换为本机代码表示,并根据该第一本机库函数(NFuncA)的原型利用该零个或更多个已变换的第一函数参数调用该第一本机库函数(NFuncA);
将零个或更多个第二函数参数从本机代码表示变换为主题代码表示,并根据该主题库函数(SFuncB)的原型利用该零个或更多个已变换的第二函数参数调用该主题库函数(SFuncB);
将已调用的主题库函数(SFuncB)的零个或更多个第二返回值从主题代码表示变换为本机代码表示,并返回到该第一本机库函数(NFuncA);以及
将已调用的本机函数(NFuncA)的零个或更多个第一返回值从本机代码表示变换为主题代码表示,并返回到该第一主题代码部分(171)。
42.根据权利要求25所述的翻译器装置,其中,该翻译器单元(19)被配置为插入进行从该本机代码部分(282)到该第二主题代码部分(173)的调用的反向调用存根(215,285)。
43.根据权利要求42所述的翻译器装置,其中,在本机代码(28)中提供该反向调用存根(215,285)。
44.根据权利要求42所述的翻译器装置,其中,该反向调用存根(215,285)包括由执行从主题代码(17)到目标代码(21)的转换的翻译器所产生的目标代码(21)。
45.根据权利要求44所述的翻译器装置,其中,该翻译器单元(19)被配置为:
将该反向调用存根(215,285)的中间表示整合为用于主题代码(17)的区块的中间表示森林;以及
产生用于该中间表示森林的目标代码(21)。
46.根据权利要求25所述的翻译器装置,其中,该翻译器单元(19)被配置为:
提供上下文线程数据结构(214),其用于从主题代码(17)到目标代码(21)的转换;
使用该上下文线程数据结构(214),将第二主题代码部分(173)转换为该已翻译的目标代码(21)版本;
将该上下文线程数据结构(214)存储在该目标处理器(13)的存储器中;以及
当第二次或之后遇到该第二主题代码部分(173)时,再使用该存储的上下文线程数据结构(214)。
47.根据权利要求46所述的翻译器装置,其中,该翻译器单元(19)被配置为:
通过从该本机代码部分(282)调用来至少提供将被执行的第三主题代码部分(173b);以及
当将该第三主题代码部分(173b)转换为已翻译的目标代码版本时,共享该存储的上下文线程数据结构(214)以供使用。
48.根据权利要求46所述的翻译器装置,其中,该上下文线程数据结构(214)至少提供抽象寄存器组的表示、仿真主题栈的位置、该仿真主题栈的尺寸、线程标识符以及与该主题代码部分的翻译相关的特定翻译器信息。
49.一种程序代码转换的设备,该设备执行从可由主题处理器执行的主题代码(17)到可由目标处理器(13)执行的目标代码(21)的程序代码转换,该目标代码(21)结合可由该目标处理器(13)本地执行的本机代码(28)可由该目标处理器(13)执行,该设备包括:
被配置为在该目标处理器上(13)执行第一主题代码部分(171),作为已翻译的目标代码(21)的装置;
被配置为从该第一主题代码部分(171)调用,以在该目标处理器(13)上本地执行本机代码部分(282)的装置;
其中,从该本机代码部分(282)调用,以执行第二主题代码部分(173)作为已翻译的目标代码(21);
被配置为从该第二主题代码部分(173)的执行返回到该本机代码部分(282)的执行的装置;以及
被配置为从该本机代码部分(282)的执行返回到该第一主题代码部分(171)的执行的装置。
CN200680019817.7A 2005-06-04 2006-05-26 用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置 Active CN101189578B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0511414A GB2426840A (en) 2005-06-04 2005-06-04 Method of executing program code where a portion of the target code calls a native code portion which then calls a second target code portion.
GB0511414.5 2005-06-04
US11/273,111 2005-11-14
US11/273,111 US7793272B2 (en) 2005-06-04 2005-11-14 Method and apparatus for combined execution of native code and target code during program code conversion
PCT/GB2006/001949 WO2006131695A1 (en) 2005-06-04 2006-05-26 Method and apparatus for combined execution of native code and target code during program code conversion

Publications (2)

Publication Number Publication Date
CN101189578A CN101189578A (zh) 2008-05-28
CN101189578B true CN101189578B (zh) 2012-11-07

Family

ID=34835146

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200680019817.7A Active CN101189578B (zh) 2005-06-04 2006-05-26 用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置

Country Status (6)

Country Link
US (1) US7793272B2 (zh)
JP (1) JP5039031B2 (zh)
CN (1) CN101189578B (zh)
GB (1) GB2426840A (zh)
HK (1) HK1113212A1 (zh)
TW (1) TWI453671B (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0517357D0 (en) * 2005-08-25 2005-10-05 Corizon Ltd User interface generation
US7353504B2 (en) * 2005-12-09 2008-04-01 Bea Systems, Inc. System and method for efficiently generating native code calls from byte code in virtual machines
US8429623B2 (en) * 2007-01-16 2013-04-23 Oracle America Inc. Processing engine for enabling a set of code intended for a first platform to be executed on a second platform
JP2010517134A (ja) * 2007-01-22 2010-05-20 イースリーネット、カンパニー、リミテッド 異機種間プログラム連動方法及びそのミドルウェアプラットホームエンジン
US8752056B2 (en) * 2007-12-03 2014-06-10 International Business Machines Corporation Running native code across single or multi-core hybrid processor achitecture
US9454390B2 (en) * 2008-04-04 2016-09-27 Intuit Inc. Executable code generated from common source code
US9645912B2 (en) * 2008-12-01 2017-05-09 Microsoft Technology Licensing, Llc In-place function modification
US8683451B1 (en) * 2010-04-30 2014-03-25 The United States Of America As Represented By The Secretary Of The Navy System and method for translating software code
CN101937355A (zh) * 2010-09-03 2011-01-05 复旦大学 基于动态二进制翻译的异构程序交互方法
JP5792577B2 (ja) * 2010-11-10 2015-10-14 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 動的バイナリ・トランスレータに関するメモリ管理のための装置、方法、およびコンピュータ・プログラム
US9032526B2 (en) 2011-05-12 2015-05-12 Microsoft Technology Licensing, Llc Emulating mixed-code programs using a virtual machine instance
US8468507B2 (en) * 2011-06-10 2013-06-18 Microsoft Corporation Binding executable code at runtime
US8990515B2 (en) 2011-06-14 2015-03-24 Microsoft Technology Licensing, Llc Aliasing buffers
US9063760B2 (en) 2011-10-13 2015-06-23 International Business Machines Corporation Employing native routines instead of emulated routines in an application being emulated
JP2015507269A (ja) * 2012-01-10 2015-03-05 インテル コーポレイション コールバックによるisaブリッジング
US9092540B2 (en) 2012-02-14 2015-07-28 International Business Machines Corporation Increased interoperability between web-based applications and hardware functions
US9081896B1 (en) * 2012-03-21 2015-07-14 Amazon Technologies, Inc. Generating a replacement binary for emulation of an application
KR101665219B1 (ko) 2012-03-22 2016-10-11 인텔 코포레이션 네스티드 에뮬레이션 및 동적 링킹 환경
KR101559651B1 (ko) 2014-01-28 2015-10-13 한양대학교 산학협력단 동적 분석 방법 및 장치
US9823909B1 (en) * 2014-05-02 2017-11-21 Amazon Technologies, Inc. Program code conversion for cross-platform compatibility
US10303498B2 (en) * 2015-10-01 2019-05-28 Microsoft Technology Licensing, Llc Performance optimizations for emulators
US11210074B2 (en) * 2016-06-27 2021-12-28 Intel Corporation On-demand binary translation state map generation
JP6352486B2 (ja) * 2017-04-12 2018-07-04 インテル コーポレイション コールバックによるisaブリッジング
CN111090466B (zh) * 2019-12-20 2022-03-18 北京字节跳动网络技术有限公司 调用指令的优化方法、装置、设备和存储介质
US11231918B1 (en) 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
US11403100B2 (en) 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US6721941B1 (en) * 1996-08-27 2004-04-13 Compuware Corporation Collection of timing and coverage data through a debugging interface
US6044220A (en) * 1997-02-25 2000-03-28 Motorola, Inc. Method and apparatus for operating a data processor to execute software written using a foreign instruction set
US5940779A (en) * 1997-03-05 1999-08-17 Motorola Inc. Architectural power estimation method and apparatus
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6199202B1 (en) * 1998-01-06 2001-03-06 Hewlett-Packard Company Method and apparatus for the inter-operation of differing architectural and run time conventions
ATE457492T1 (de) 1998-10-10 2010-02-15 Ibm Programmkodekonvertierung mit verringerter übersetzung
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6820255B2 (en) * 1999-02-17 2004-11-16 Elbrus International Method for fast execution of translated binary code utilizing database cache for low-level code correspondence
US6481006B1 (en) * 1999-05-06 2002-11-12 International Business Machines Corporation Method and apparatus for efficient invocation of Java methods from native codes
US7137105B2 (en) * 1999-05-12 2006-11-14 Wind River Systems, Inc. Dynamic software code instrumentation method and system
GB2367658B (en) * 2000-10-05 2004-09-22 Advanced Risc Mach Ltd Intercalling between native and non-native instruction sets
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
US6907519B2 (en) 2001-11-29 2005-06-14 Hewlett-Packard Development Company, L.P. Systems and methods for integrating emulated and native code
CA2376327C (en) * 2002-03-12 2009-04-28 Ibm Canada Limited-Ibm Canada Limitee Executing native code in place of non-native code
JP2004303114A (ja) * 2003-04-01 2004-10-28 Hitachi Ltd インタープリタおよびネイティブコード実行方法
US20040204374A1 (en) * 2003-04-11 2004-10-14 Xuegen Wang Cis-element decoys useful as anti-tumor therapeutics
US7434209B2 (en) 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code

Also Published As

Publication number Publication date
US7793272B2 (en) 2010-09-07
TWI453671B (zh) 2014-09-21
US20070006184A1 (en) 2007-01-04
TW200719229A (en) 2007-05-16
GB2426840A (en) 2006-12-06
JP5039031B2 (ja) 2012-10-03
CN101189578A (zh) 2008-05-28
GB0511414D0 (en) 2005-07-13
HK1113212A1 (zh) 2008-09-26
JP2008546085A (ja) 2008-12-18

Similar Documents

Publication Publication Date Title
CN101189578B (zh) 用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置
CN100483341C (zh) 用于执行本机绑定的方法和装置
US6496922B1 (en) Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
CN101523348B (zh) 针对程序代码转换处理动态链接的函数调用的方法和设备
EP2142987B1 (en) Improvements in and relating to floating point operations
JPH08506195A (ja) 一つのプログラムの中でまたは1つのプロセッサ環境に於て、夫々のオブジェクトコードタイプが異なる複数のプログラムセグメントを実行するための装置
US20060248262A1 (en) Method and corresponding apparatus for compiling high-level languages into specific processor architectures
JPH0782441B2 (ja) シミユレーシヨン方法
JPH10320214A (ja) コンパイルシステム及びコンピュータプログラム製品
Probst Dynamic binary translation
KR900006008B1 (ko) 스마트 메모리군을 갖는 정보 처리 시스템
US6684395B2 (en) Multiple image dynamic bind and load procedure for a multi-processor
US6978451B2 (en) Method for fast compilation of preverified JAVA bytecode to high quality native machine code
EP1889158B1 (en) Method and apparatus for combined execution of native code and target code during program code conversion
Terei et al. Low level virtual machine for Glasgow Haskell Compiler
Lindahl et al. Unboxed compilation of floating point arithmetic in a dynamically typed language environment
Mayer et al. The data-parallel Ada run-time system, simulation and empirical results
Richards The BCPL Cintcode System Users’ Guide
Leroy Compiling functional languages
Wilcox The MAINSAIL Project: Developing Tools for Software Portability
Lindahl Compilation of Floating Point Arithmetic in the High Performance ERLANG Compiler.
Dietz et al. Execution Of MIMD MIPSEL Assembly Programs Within CUDA/OpenCL GPUs
Montuelle CUFOM: the CERN Universal Format for Object Modules
Morgan Implementation of an Imperative Object Calculus
Bayer LiзpMe: An Implementation of Scheme for the Palm Pilot

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: INTERNATIONAL BUSINESS MACHINE CORP.

Free format text: FORMER OWNER: IBM YING CO., LTD.

Effective date: 20090731

Owner name: IBM YING CO., LTD.

Free format text: FORMER OWNER: TELANSIT CO., LTD.

Effective date: 20090731

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20090731

Address after: American New York

Applicant after: International Business Machines Corp.

Address before: England Hampshire

Applicant before: IBM UK Ltd.

Effective date of registration: 20090731

Address after: England Hampshire

Applicant after: IBM UK Ltd.

Address before: London, England

Applicant before: Transitive Ltd.

C14 Grant of patent or utility model
GR01 Patent grant