CN1513137A - 使用多重指令集的数据处理 - Google Patents

使用多重指令集的数据处理 Download PDF

Info

Publication number
CN1513137A
CN1513137A CNA028110641A CN02811064A CN1513137A CN 1513137 A CN1513137 A CN 1513137A CN A028110641 A CNA028110641 A CN A028110641A CN 02811064 A CN02811064 A CN 02811064A CN 1513137 A CN1513137 A CN 1513137A
Authority
CN
China
Prior art keywords
instruction
hardware
instruction set
performance element
software
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.)
Granted
Application number
CNA028110641A
Other languages
English (en)
Other versions
CN1327338C (zh
Inventor
Dj
D·J·西尔
ά
E·C·内维尔
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.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
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 Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN1513137A publication Critical patent/CN1513137A/zh
Application granted granted Critical
Publication of CN1327338C publication Critical patent/CN1327338C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

一种数据处理系统,使用用于有可能存在的Java字节码的硬件执行器和用于得不到所述硬件支持的Java字节码的软件指令解释器来支持执行本机指令和Java字节码这两者。在软件指令解释器中的、执行处理处于解释中的Java字节码的本机指令序列(26)以序列终止指令BXJ终止,所述序列终止指令BXJ根据检测启用的硬件执行器(6)是否存在而采取不同的动作。如果检测到启用的硬件执行器是存在的,则使用它尝试执行下一个Java字节码。如果活动的硬件执行器不存在,则直接将一个Java字节码传递到软件指令解释器。

Description

使用多重指令集的数据处理
本发明涉及到数据处理系统领域。更具体而言,本发明涉及到能够执行不止一个指令集中的指令的数据处理系统。
提供能够执行不止一个指令集中的指令的数据处理系统是已知的。这种系统的一个例子是:英格兰剑桥的ARM有限公司生产的、能够执行32位ARM指令集和16位Thumb指令集这二者的处理器。
最近开发的、能够执行不止一个指令集的数据处理系统的类型是那种试图执行其自身的本机指令集和Java字节码指令这二者的类型。更具体而言,已经提出和开发了Java加速技术,它们提供用于执行Java字节码的专用硬件。这种方法的一个例子是英格兰剑桥的ARM有限公司设计的Jazelle体系结构的增强型,用于使用执行本机ARM指令的处理器核心执行Java字节码。
使用上述技术的问题在于:有些Java字节码不能很好地适应于通过由Jazelle提供的相对简单的体系结构的硬件增强型而执行。更复杂的Java字节码因此要被传递到支持软件来执行。上述方法能够缩减硬件Java加速系统的复杂性,同时提供完全覆盖可能碰到的和需要执行的所有Java字节码。然而,Java加速硬件的、被开发用于适用特定情形和随时间变化的不同实施可能要求通过软件执行而不是通过所提供硬件机构执行来支持不同的Java字节码。它的缺点在于:要求为每个版本的Java加速硬件开发和测试不同的支持软件组。这是高成本和耗时间的。
与已知的Java加速技术一起出现的另一个问题是:在系统执行Java字节码时,调试和跟踪系统的运行是相对困难的。具体而言,通过硬件执行的单个Java字节码实际上代表要由处理器核心执行的大量离散的处理操作,还有,Java字节码被加速硬件原子地处理的方式不允许随便地插入断点,逐步的处理或者其他有用的诊断技术。
从一个方面来看,本发明提供用于在第一程序指令集的程序指令或者第二程序指令集的程序指令的控制下处理数据的装置,所述装置包括:软件指令解释器,可操作用于将所述第二程序指令集的程序指令解释为以序列终止指令终止的所述第一程序指令集的程序指令序列;以及
响应所述序列终止指令的指令译码器:
(i)如果所述第二指令集的硬件指令执行单元不可用,则使用所述软件指令解释器启动解释所述第二指令集的下一个程序指令;
(ii)如果所述第二指令集的所述硬件指令执行单元是可用的,则使用所述硬件指令执行单元启动执行所述第二指令集的所述下一个程序指令。
本发明提供一种新指令,当把第二指令集的指令(例如Java字节码)作为第一指令集的指令序列(例如本机指令序列)执行时,新指令用作序列终止指令。序列终止指令响应可用的硬件指令执行单元的存在或不存在,以便或者使用硬件指令执行单元启动处理第二指令集的下一个指令或者继续使用软件指令解释器。因此,能够处理第二指令的所有指令的软件指令解释器可以被提供并且仅仅用在需要它的时候,因为如果上述硬件指令执行单元可用(例如存在并且被启用),则序列终止指令将缺省地把下一个指令传递到硬件指令执行单元。如果特定的硬件指令执行机构不支持第二指令集的特定指令,则它将被转发到软件指令解释器以便按要求执行,但是当硬件执行机构存在时,将尝试使用那个硬件执行字节码,因为如果这是成功的,它将会更加快速。
可以想到,提供能够操作的或者引发第二指令集的下一个指令经受软件解释或者操作硬件执行的序列终止指令是没什么优势的,因为额外设置和处理常常被要求在软件解释器之中用于支持两种活动模式,还有,硬件执行可能永不发生。然而,实际上,准备初始化后续硬件执行所需要的处理活动类型常常或者已经发生在软件解释之中或者容易地被提供在其他有用的处理一般是不可能的处理周期之中,诸如寄存器互锁等的所引起。因此,序列终止指令能够在软件指令解释器之中使用极其小的开销支持两种类型的后续活动。
可以理解,检测活动的硬件执行器可以采用多种形式。然而,在优选实施例中,这种检测使用至少一个硬件指令执行单元标志。这种标志在软件控制之下被相对容易地设置,并且能够提供信息,诸如硬件指令执行单元是否存在和/或硬件指令执行单元是否活动。
为了在序列终止指令之后方便和加速第二指令集的下一个指令的后续处理,序列终止指令最好指定软件解释开始地址,以供软件指令解释器使用,假如这就是所谓的机制。已经发现:机会常常存在于如下情况之中,软件以一种提高总体运行速度的方式在不会过度地影响执行当前指令的速度的情况下解释当前指令以便准备指向开始解释下一个指令的指针。
这一用于解释下一个指令的开始地址可以通过多种方式被传递到软件指令解释器。然而,实现这个的优选机制是:将指定的寄存器中的地址作为序列终止指令之中或者总是由序列终止指令为该目的而使用的预定寄存器之内的操作数而加以传递。
用于提供硬件执行开始地址以供硬件指令执行单元使用的相似的机制也可以提供。
一种常规的、灵活的、健壮的、用于提供软件指令解释器的方式是:第一指令集的多个程序指令序列中的每个代表第二指令集之中的对应指令。这些代码片断可以通过指针表得到访问,所述指针表可选地以第二指令集的程序指令作为索引。指针表的基地址可以提供在作为致使软件指令解释器代码更加通用的常规机构的基地址寄存器之中。
尽管可以理解,本发明可以应用在一般的类型的情况中,可以理解,它尤其适用于如下的情况之下,在这种情况下,第一指令集是处理器核心的本机指令集,第二指令集是Java字节码指令,并且序列终止指令是处理器核心的本机指令。
从另一个方面看,本发明提供用于在第一程序指令集的程序指令或者第二程序指令集的程序指令的控制下处理数据的方法,所述方法包括如下步骤:
使用软件指令解释器将所述第二程序指令集的程序指令解释为以序列终止指令终止的所述第一程序指令集的程序指令序列;以及
响应所述序列终止指令:
(i)如果所述第二程序指令集的硬件指令执行单元不可用,则使用所述软件指令解释器启动解释所述第二指令集的下一个程序指令;以及
(ii)如果所述第二程序指令集的所述硬件指令执行单元是可用的,则使用所述硬件指令执行单元启动执行所述第二指令集的所述下一个程序指令。
从又一个方面看,本发明提供用于控制数据处理装置以便在第一程序指令集的程序指令或者第二程序指令集的程序指令的控制下处理数据的计算机程序产品,所述计算机程序产品包括:软件指令解释器逻辑,可操作用于将所述第二程序指令集的程序指令解释为以序列终止指令终止的所述第一程序指令集的程序指令序列,所述序列终止指令执行如下操作:
(i)如果所述第二程序指令集的硬件指令执行单元不可用,则使用所述软件指令解释器逻辑启动解释所述第二指令集的下一个程序指令;以及
(ii)如果所述第二程序指令集的所述硬件指令执行单元是可用的,则使用所述硬件指令执行单元启动执行所述第二指令集的所述下一个程序指令。
计算机程序产品可以采用支持代码的形式,以便结合硬件加速器使用。这种支持代码可以例如被提供在数据存储介质之上或者可以作为嵌入式处理系统之中的固件或者如果希望的话可以动态地下载。
现在通过仅仅是举例的方式,并参考如下的附图描述本发明的实施例,在附图中:
图1图示了一种并入字节码翻译硬件的数据处理系统;
图2示意性地图示了对字节码的软件指令解释;
图3是示意性地表示以序列终止指令结尾的代码片断在软件指令解释器之中操作的流程图;
图4是执行代替字节码的代码片断的例子;
图5图示了没有硬件字节码执行支持的数据处理系统的例子;
图6是图示当与图5的系统一起操作时软件指令解释器活动的流程图;
图7图示了在Java字节码和处理操作之间的映射;
图8图示了采用内容可编址存储器的形式的可编程翻译表;
图9图示了采用随机存取存储器形式的可编程翻译表;
图10是示意性地图示可编程翻译表的初始化和编程的流程图;
图11是示意性图示在系统之中执行Java字节码解释的处理流水线部分的方框图;
图12示意性地图示了跨越两个指令字和两个虚拟存储器页的可变长度指令;
图13示意性地图示了包括了用于处理图12所示预取中止类型的机制的数据处理系统流水线部分;
图14给出了逻辑表达式,它是一种指定如何检测图12所示的预取中止类型的方式;
图15示意性地图示了用于中止处理和指令仿真的支持代码的装置;
图16是示意性地图示了用于处理可变长度字节码指令的预取中止所执行的处理的流程图;
图17图示了操作系统和受该操作系统控制的各种进程之间的关系;
图18图示了包括处理器核心和Java加速器的处理系统;
图19是示意性地图示正在控制Java加速器配置中的操作系统运行的流程图;
图20是示意性地图示Java虚拟机结合Java加速机制运行的流程图,其中,所述Java虚拟机在控制Java加速机制的配置中使用。
图21图示了并入图1中的字节码翻译硬件的数据处理系统,它还并入了浮点子系统;
图22图示了并入图1中的字节码翻译硬件和图21中的浮点子系统的数据处理系统,它还并入了浮点运算寄存器和未处理操作状态标志;
图23显示了为Java浮点指令所生成的ARM浮点指令;
图24显示了可以由Java加速硬件为Java‘dmul’和‘dcmpg’指令生成的ARM指令序列;
图25显示了当执行接着‘dcmpg’指令的‘dmul’指令时的操作序列,其中未处理浮点运算是通过执行由Java加速硬件为Java‘dmul’指令所生成的‘FCMPD’指令引发的,所示的操作序列适用于使用对应于图22的不精确的未处理操作检测的系统;
图26显示了在执行图25的FMULD指令之后的浮点运算寄存器的状态和未处理操作状态标志;
图27显示了当执行接着‘dcmpg’指令的‘dmul’指令时的操作序列,其中未处理浮点运算是通过执行由Java加速硬件为Java‘dcmpg’指令所生成的‘FCMPD’指令引发的,所表示的操作序列适用于使用对应于图22的不精确的未处理操作检测的系统;
图28显示了在执行图27的FCMPD指令之后的浮点运算寄存器的状态和未处理操作状态标志;
图29显示了当执行接着‘dcmpg’指令的‘dmul’指令时的操作序列,其中未处理浮点运算是通过执行由Java加速硬件为Java‘dmul’指令所生成的‘FMULD’指令引发的,所表示的操作序列适用于使用对应于图21的精确的未处理操作检测的系统;
图30显示了当执行接着‘dcmpg’指令的‘dmul’指令时的操作序列,其中未处理浮点运算是通过执行由Java加速硬件为Java‘dcmpg’指令所生成的‘FCMPD’指令引发的,所表示的操作序列适用于使用对应于图21的精确的未处理操作检测的系统.
图1图示了数据处理系统2,它并入了处理器核心4(诸如ARM处理器)以及字节码翻译硬件6(也称为Jazelle)。处理器核心4包括寄存器库8、指令译码器10以及数据通路12,所述处理器核心4用于对存储在寄存器库8的寄存器之中的数据值执行各种数据处理操作。所提供的寄存器18包括用于控制字节码翻译硬件6当前是启用还是禁止的标志20。此外,所提供的寄存器19包括用于指示字节码翻译硬件当前是活动还是不活动的标志21。换言之,标志21指示数据处理系统当前是执行Java字节码还是执行ARM指令。应该理解,在其它实施例中,寄存器18和19可以是包括了标志20和21这两者的单个寄存器。
在运行时,如果Java字节码处于执行中,并且字节码翻译硬件6是活动的,则Java字节码由字节码翻译硬件6接收,并且用于生成对应的ARM指令序列(在这一特定的没有限制的示例实施例中),或者生成至少表示ARM指令的处理器核心控制信号,然后它们被传递到处理器核心4。因此,字节码翻译硬件6可以把单个Java字节码映射为可以被处理器核心4执行的对应的ARM指令序列。当字节码翻译硬件不活动时,它将被绕过并且可以将一般ARM指令供应到ARM指令译码器10,以便根据其本机指令集控制处理器核心4。应该理解,ARM指令序列可以等同于Thumb指令序列和/或不同指令集中的指令的混合,而且这种替换被考虑和包括。
应该理解,字节码翻译硬件6仅仅可以对也许会碰到的可能的Java字节码的子集提供硬件翻译支持。某些Java字节码可能要求如此扩展和抽象的处理以至于在硬件中尝试将这些映射成对应的ARM指令操作常常是低效率的。因此,当字节码翻译硬件6碰到这种没有硬件支持的字节码时,它将触发用ARM本机指令所写的软件指令解释器来执行由所述没有硬件支持的Java字节码指定的处理。
软件指令解释器可以被写入以便为所有可以被解释的可能Java字节码提供软件支持。如果字节码翻译硬件6存在并被启用,则只有那些没有硬件支持的Java字节码将正常地被提交到软件指令解释器之中的相关代码片段。然而,如果字节码翻译硬件6没有提供或者是禁止的(诸如在调试等期间),则所有的Java字节码都将被提交到软件指令解释器。
图2示意性地图示了软件指令解释器的活动。Java字节码流22代表Java程序。这些Java字节码可以与操作数互相交错。因此,在执行给定的Java字节码之后,要执行的下一个Java字节码可能紧跟着出现在后面的字节位置,或者如果存在有插入的操作数字节,则可能是再后面的若干个字节位置。
如图2所示,遇到Java字节码BC4,它得不到字节码翻译硬件6的支持。这将在字节码硬件翻译6之中触发如下异常,所述异常将引发使用字节码值BC4作为索引在指针表24中执行的查询,以便读取指向代码片段26的指针P#4,所述代码片段26将执行得不到硬件支持的字节码BC4指定的处理。指针表的基地址值还可以存储在寄存器中。接着通过指向得不到支持的字节码BC4的R14进入所选定的代码片段。
如所图示的,因为存在256个可能的字节码值,所述指针表24包括256个指针。相似地,最大可提供256个ARM本机指令代码片段,用于执行由所有可能的Java字节码所指定的处理。(在两个字节码能够使用相同代码片段的情况下,可以少于256个)。为了提高处理速度,字节码翻译硬件6典型地为许多单个Java字节码提供硬件支持,在这一情况下,在软件指令解释器之中的对应代码片段将永远得不到使用,除非强制使用(诸如在调试期间或者在其它环境中(诸如在后面将要论述的预取中止等))。然而,因为这些通常是比较简单和比较短的代码片段,所以由于提供它们所产生的额外存储器开销就相对地小。此外,这种小的额外的存储器开销,要大于软件指令解释器的普遍性质以及在字节码翻译硬件不存在或者被禁止的情形下其处理所有可能的Java字节码的能力所补偿的开销。
可以看出,图2的代码片段26中的每个都是以序列终止指令BXJ结尾的。这种序列终止指令BXJ的活动随着如图3所示的数据处理系统2的状态而变化。图3是采用高层原理的形式来图示由软件指令解释器之中的代码片段26所执行的处理的流程图。在步骤28,正在被解释的Java字节码指定的操作被执行。在步骤30,将要执行的下一个Java字节码从字节码流22中读取,并且在Java字节码流22之中对应下一个Java字节码的字节码指针被存储在寄存器库8中的寄存器(即R14)之中。因此,对于图2的Java字节码BC4,下一个Java字节码将是BC5,并且指向Java字节码BC5的存储器单元的指针被加载到寄存器R14。
在步骤32,在指针表24之中对应于下一个Java字节码BC5的指针被从指针表24中读取,并且被存储在寄存器库8的寄存器即R12之中。
应该理解,图3图示了独立、顺序地被执行的步骤28、30以及32。然而,根据已知的编程技术,步骤30和32的处理按照常规可以交织在步骤28的处理之中,以便利用在步骤28的处理过程中不用就会浪费的处理机会(周期)。因此,步骤30和32的处理可以使用相对小的执行速度开销而被实现。
步骤34使用被指定为操作数的寄存器R14来执行序列终止指令BXJ。
在步骤34执行BXJ指令之前,系统的状态已经通过如下指针设置过了,所述指针是:指向Java字节码流22之中的下一个Java字节码的、正存储在寄存器R14之中的指针;以及指向对应于所述下一个Java字节码的代码片段、正存储在寄存器R12之中的指针。对特定寄存器的选择可以是变化的,并且没有、一个或者两个都被指定为针对序列终止指令的操作数或者是由所述体系结构所预定和定义的。
步骤28、30、32和34主要是软件步骤。在图3的步骤34之后的那些步骤主要是硬件步骤,并且是在没有独立地可标识的程序指令的情况下发生的。在步骤36,硬件检测字节码翻译硬件6是否是活动的。它是通过读取字节码翻译硬件6存在和启用的寄存器标志值而进行的。用于确定活动的字节码翻译硬件6的存在的其它机制也是可能的。
如果字节码翻译硬件6存在的并且是启用的,则处理进行到步骤38,在步骤38,将控制与指定字节码指针的寄存器R14的内容一起传递给字节码翻译硬件6,其中所述字节码指针指向字节码流22之中的、字节码翻译硬件6尝试将其作为它的下一个字节码来执行的字节码。所示的代码片段26的活动然后就终止。
可替换地,如果在步骤36的判定是这样的:没有字节码翻译硬件6或者字节码翻译硬件6是禁止的,则处理进行到步骤40,在步骤40,进行在本机ARM指令代码中的跳转,以便开始执行在软件指令解释器之中的、由存储在寄存器R12之中的地址所指向的代码片段。因此,对下一个代码片段的快速执行将被启动,从而得到在处理速度上的优势。
图4更加详细地图示了特定代码片段。这一特定例子是整数加法Java字节码,它的助记符为iadd。
第一ARM本机指令使用寄存器R14中的已增量1的字节码指针,以便读取下一个字节码值(整数加指令没有任何跟随的字节码操作数,因此下一个字节码将紧跟着当前字节码)。寄存器R14中的字节码指针还以增量值被更新了。
第二和第三指令用来从堆栈中获取将要被相加的两个整数操作数值。
第四指令利用由于在寄存器R0上的寄存器互锁而不用就会浪费的处理周期,以便为存储在寄存器R4中的下一个字节码获取代码片段的地址值,并且将这一地址存储在寄存器R12之中。寄存器Rexc用于存储指向指针表24的开始的基指针。
第五指令执行由Java字节码指定的整数加。
第六指令将Java字节码的结果反向存储到堆栈中。
最后的指令是使用操作数R12所指定的序列终止指令BXJ。如果要求软件解释,则寄存器R12存储对于软件解释下一个Java字节码所需要的ARM代码片段的地址。BXJ指令的执行确定是否存在启用的字节码翻译硬件6。如果它存在,则控制就同存储在寄存器R14之中的指定下一个字节码地址的操作数一起传递到这一字节码翻译硬件6。如果活动的字节码翻译硬件6不存在,则开始执行由寄存器R12之中的地址值所指向的下一个字节码的代码片段。
图5示意性地图示了与图1相似的数据处理系统42,例外的是,在这种情况下,不提供字节码翻译硬件6。在这一系统中,标志21总是指示ARM指令处于执行之中,并且使用BXJ指令进入Java字节码的执行的尝试总是被当作好像字节码翻译硬件6是禁止的,标志20被忽略了的情况一样来处理。
图6图示了系统42在执行Java字节码时所执行的处理的流程图。这与图3的处理是相似的,原因在于,相同的软件解释器代码处于使用之中,除了在序列终止指令BXJ被执行时的情况之外,所以不可能有硬件字节码支持,并且由此处理总是这样继续,也就是跳转到执行由R12所指向的、作为下一个Java字节码的代码片段的代码片段。
应该理解,在这一情况之下的软件指令解释器是作为ARM本机指令被提供的。软件指令解释器(或者其它的支持代码)可以作为有其自身的版权的独立的计算机程序产品被提供。这一计算机程序产品可以通过记录介质(诸如软盘或者CD)来发布或者可以通过网络链接动态地下载。在本发明特别好地适合于用在其中的嵌入式处理应用的情况下,软件指令解释器可以作为嵌入式系统中的只读存储器或者一些其它非易失性程序存储设备之中的固件而被提供。
图7图示了Java字节码和它们所指定的处理操作之间的关系。从图7可以看出,8位Java字节码提供256个可能的不同字节码值。这些Java字节码中的第一个203从属于以Java标准所指定的、对应的处理操作(诸如前面所论述的iadd)的固定式绑定。最后两个Java字节码即254和255在作为定义的实施的Java虚拟机规范之中进行论述。因此,Java实施是随意分配固定式绑定给这些字节的。或者,Java实施可以选择将这些作为可编程式绑定对待。Jazelle为这些字节码指定固定式绑定。在包含的字节码值203和253之间,可编程式绑定可以按照用户的希望而指定。这些通常用于提供在字节码和处理操作之间的绑定,诸如在运行时被解析的快速形式字节码(参见《Java虚拟机规范》,作者Tim Lindholm和Frank Yellin,发行商AddisonWesley,ISBN 0-201-63452-X)。
根据图7应该理解,尽管硬件加速的解释技术非常适合于处理固定式绑定,但是这些技术却不怎么适合于可编程式绑定。尽管有可能使用软件解释技术来处理所有的可编程式绑定,诸如解释对应的代码片段所代表的相关字节码,但是由于在一些情况下可能成为性能关键字节码的内容而会是慢速的。
图8图示了可编程翻译表的一种形式。这一可编程翻译表100采用的是内容可寻址存储器的形式。要翻译的字节码被输入到CAM查询阵列102。如果这一阵列102包含匹配的字节码条目,则生成命中,它引发指定要输出的值的对应操作,即:
如果在CAM表中存在匹配的字节码条目,则硬件使用指定操作的代码来确定要在硬件中执行的操作,执行上述操作并移动到下一个字节码;
如果在CAM表中不存在匹配的字节码条目,则字节码就被当作得不到硬件支持来处理并且调用其代码片段。
在这个例子中,指定操作的值是4位值,并且已经引起命中的CAM条目对应于字节码bc6。根据图7可以看出,可能要进行这种可编程翻译的所有字节码的最高有效的两位是“1”,因此只有这些字节码的最低有效的6位需要被输入到阵列102。
在这一例子的可编程翻译表100有8个条目。存在的条目数可以随着专用于这一任务所需要的硬件资源的量而变化。在一些例子中,可以只提供四个条目,不过在其它情况下10个条目也许是适当的。还有可能为每个可能的可编程式绑定字节码提供条目。
可以理解,如果可用的可编程映射资源首先被最关键的翻译占用,则不是很关键的翻译可能就接受软件解释。提供软件解释器结合可编程翻译表允许配置系统以及对生成的表进行编程,而不需要知道有多少表条目可以使用,因为如果表溢出,则所要求的翻译将被捕获(trap)并且由软件解释器来执行。
图9图示了可编程翻译表104的第二个例子。在这一例子中,翻译表采用随机存取存储器的形式来提供,所述随机存取存储器包括要输入到译码器106进行翻译的字节码,译码器106将字节码处理为到4位字的RAM阵列108的地址,每个字代表操作指定的代码。在这种情况下,指定操作的代码总是对应字节码。因此,这种类型的表使用额外的指定操作的代码,它指定“调用这一字节码的代码片段”。
图10是图示初始化和配置具有图8的例子的形式的可编程映射硬件解释器的示意性的流程图。实际上,在这一流程图中所图示的活动的不同部分分别由软件初始化指令和对应于这些指令的硬件来执行。
在步骤110,表初始化指令被执行,初始化指令用于清除全部现有的表条目,并且设置指向表中顶部条目的指针。接着,初始化代码可以执行从而使用诸如协处理器寄存器加载之类的程序指令将映射加载到翻译表中。这些表加载指令的不同形式可以随着特定情况和环境的变化而变化。可编程映射硬件解释器系统通过在步骤112接收程序指令值(诸如Java字节码)以及与其相关联的操作值来响应这些指令。在步骤114,不被支持的操作捕获硬件检查:处于编程之中的操作值是否是得到那个可编程映射硬件解释器支持的操作值。不同的可编程映射硬件解释器可以支持不同的操作值组,因此可以为其提供它们自己的专用捕获硬件。捕获硬件可以相对简单些,假如特定系统例如知道它支持操作值0,1,2,3,4,5,6,7,8,10而不支持9的话。在步骤114的硬件比较器能够比较操作值与值9是否相等,并且如果检测到9,则通过把处理转向步骤116而拒绝编程。
假设步骤114指示操作值是得到支持的,则步骤118检查来确定是否已经到达可编程映射表的尾部。如果可编程映射表已经满了,则处理再次进行到步骤116而不添加新的映射。将步骤118提供在硬件之中意味着:在硬件只是拒绝溢出条目的情况下,支持代码可以尝试来编程可编程映射表而不用知道有多少条目是可以使用的。因此,程序员应该将最关键的映射放在表的开始,从而编程来确保这些占用的时隙(slot)可以使用。对支持代码来说避免必须知道有多少可编程时隙可以使用意味着:单一组支持代码可以运行在多种平台上。
假设表具有空条目,则在步骤120,将新映射写入到所述空条目,表指针然后在步骤122推进。
在步骤116,系统对将要被编程到可编程映射表中的更多的程序指令值进行测试。步骤116通常是软件步骤,在初始化系统期间支持代码尝试对它所希望的数量的映射进行编程。
在初始化图9所示的RAM表的情况下,结合图10的上述的过程接着可以进行下列的修改:
在步骤110,通过设置图9的阵列108中的所有表条目为“调用这一字节码的字节码片断”而不是通过设置图8的阵列102来清除表,从而使每一表条目不匹配任何字节码;
在步骤110,没有要初始化的翻译表指针;
步骤118不存在,因为没有翻译表指针;
步骤120变为“将操作值写到由程序指令值所指示的表条目”;以及
步骤122不存在,因为没有翻译表指针。
图11图示了可以用于Java字节码解释的处理流水线的一部分。处理流水线124包括翻译级126和Java译码级128。后续级130可以采用多种不同的形式,这要取决于特定的实施。
来自Java字节码流的字可以交替地加载到摆动缓冲器(swingbuffer)132的两个半部分。通常,多路复用器133选择来自摆动缓冲器132的当前字节码以及其操作数,并通过多路复用器137将它交付给锁存  134.如果因为流水线已经被清空或者一些其它原因而使摆动缓冲器132为空,则多路复用器135选择直接来自Java字节码流的进入的字的正确的字节码并且将它交付给锁存器134。
译码字节码的第一周期是通过第一周期译码器146而进行的,第一周期译码器146对锁存器134中的字节码进行动作。为了允许在硬件支持的字节码带有操作数的的情况,其它多路复用器选择来自摆动缓冲器132的操作数并且将它们交付到第一周期译码器146。这些多路复用器未在图中示出,它们与多路复用器133是类似的。典型地,第一周期译码器146对操作数输入的松散定时要求要多于对字节码输入的,从而对于操作数就不要求与多路复用135和137以及锁存器134所提供的旁路路径相似的旁路路径。
如果摆动缓冲器132包括的操作数字节对于锁存器134中的字节码是不充足的,则在充足的操作数字节可以使用之前,第一周期译码器146停止。
第一周期译码器146的输出是通过多路复用器142被传递到后续流水线级130的ARM指令(或者代表ARM指令的处理器核心控制的信号组)。第二输出是通过多路复用器139被写到锁存器138的指定操作的代码。指定操作的代码包括位140,它指定这是否是单周期字节码。
在下一个周期,接着的字节码通过如前所述的第一周期译码器146来译码。如果位140指示单周期字节码,则那个字节码就被译码并且控制如前所述的后续流水线阶段130。
如果位140相反指示的是多周期字节码,则第一周期译码器146就停止,并且多周期或者翻译译码器144就译码在锁存器138中的指定操作的代码,以便产生ARM指令(或者是代表ARM指令的处理器核心控制的信号组),多路复用器142将ARM指令传递到后续的流水线级130而不是传递到第一周期译码器146的对应输出。多周期或翻译译码器还产生通过多路复用器139被写到锁存器138(同样地不写到第一周期译码器146的对应输出)的其它指定操作的代码。这个其他指定操作的代码也包括位140,它指定这是否是为多周期字节码生成的最后的ARM指令。在位140指示最后的ARM指令已经产生之前,多周期或翻译译码器144继续如上面所描述的生成其它ARM指令,接着第一周期译码器146取消停止并为后面的字节码产生第一个ARM指令。
当锁存器134中的字节码需要翻译时,前述的过程采用三种方式加以修改。第一,字节码由多路复用器133从摆动缓冲器132中提取并且由字节码翻译器136进行翻译,产生通过多路复用器139写到锁存器138的指定操作的代码。这一指定操作的代码具有位140,它被设置以便指示还没有为当前字节码产生最后的ARM指令,从而多路复用器142和多路复用器139在翻译的字节码的第一周期将选择多周期或翻译译码器144的输出而不选择第一周期译码146的输出。
第二,多周期或翻译译码器144生成要传递到后续流水线级130的所有ARM指令以及它们的要反向写到锁存器138的对应的其它指定操作的代码,而不是仅仅在第一周期之后按照常规为不要求翻译的字节码生成那些指令。
第三,如果字节码是通过多路复用器135被直接写到锁存器134的,并且因此不存在于摆动缓冲器132中,以及在前一个周期不可能得到字节码翻译器136的翻译,则第一周期译码器146发信号通知字节码翻译器136:它必须重新启动并停止一个周期。这样就保证:当第一周译码器146取消停止时,锁存器138为翻译的字节码保持有效的指定操作的代码。
从图11可以看出,提供翻译流水线级启用可编程翻译步骤所要求的处理以便有效地被隐藏或叠合到流水线之中,因为缓冲了的指令可以按照要求提前被翻译并流进流水线的其余部分。
在图11中可以看出,在这一例子实施例中,可以考虑固定映射硬件解释器主要由第一周期译码器146以及运行在如下模式中的多周期或翻译译码器144所构成,在所述模式下,其中多周期或翻译译码器144译码已经由第一周期译码器146进行译码的多周期字节码。在这一例子中的可编程映射硬件解释器可以考虑由字节码翻译器136和多周期或翻译译码器144(在这一例子中它在翻译可编程字节码之后运行)来构成。固定映射硬件解释器以及可编程映射硬件解释器可以采用多种不同的方式来提供,并且从抽象的观点来看可以共享重要的公共硬件同时还保留它们不同的功能。所有这些不同的可能性是包括在这里所描述的技术之中的。
图12图示了跨越了虚拟存储器页边界204的两个32位指令字200,202。它可以是1kB的页边界,不过其它的页大小是可能的。
第一指令字200位于完全(properly)映射在虚拟存储器系统的虚拟存储页之中。第二指令字202位于在这一级没有被映射到虚拟存储器系统的虚拟存储器页中。因此,2字节的可变长度指令206具有在指令字200中的第一字节以及在指令字202中的第二字节,它将具有与其第二字节相关联的预取中止。常规预取中止处理机制例如仅仅支持对齐指令的指令字,这些机制不能够处理这一情况,并且能够例如尝试来检查和修复包括可变长度指令206的第一字节的指令字200的读取而不是集中于实际上导致所述中止的、包括可变长度指令字206的第二字节的指令字202。
图13图示了数据处理系统中用于处理Java字节码的指令流水线208的一部分,它包括用于处理图12中所示类型预取中止的机制。指令缓冲器包括两个指令字寄存器210和212,其中的每个存储32位的指令字。Java字节码每个长度是8位,伴随有0个或者多个操作数值。一组多路复用器214根据当前Java字节码指针位置从指令字寄存器210和212中选择合适的字节,所述当前Java字节码指针位置指示要译码的当前Java字节码指令的第一字节的地址。
与指令字寄存器210和212中的每个相关联的是各个指令地址寄存器216和218以及预取中止标志寄存器220和222。这些相关联的寄存器分别存储指令字所相关的指令地址以及当那个指令从存储器系统中被读取时是否出现预取中止。这一信息与指令字本身一起沿着流水线传递,因为顺着流水线进一步往下,这一信息通常是需要的。
如果需要,多路复用器224,226和228允许绕过输入缓冲器装置。这种类型的操作在上面已经论述了。应该理解,指令流水线208(为简洁起见)没有显示前述指令流水线的所有特征。相似地,前述的指令流水线也没有显示指令流水线208的所有技术特征。实际上,系统可以被提供为具有在两个图示的指令流水线中显示的技术特征的组合。
在指令流水线208的字节码译码级,字节码译码器230响应来自多路复用器224的至少一个Java字节码以及可选地响应来自多路复用器226和228的一个或两个操作数字节,以便生成映射的指令或对应的控制信号从而传递到流水线的其它级来执行对应于译码的Java字节码的处理。
如果已经发生了图12所示类型的预取中止,则尽管Java字节码本身可能是有效的,但是跟随其后的操作数值将是无效的并且正确的操作直到修复了预取中止时才会发生。字节码异常发生器232响应来自寄存器216和218的指令字地址以及响应来自寄存器220和222的预取中止标志,以便检测图12所示情况的类型的发生。如果字节码异常发生器232检测到了这种情况,然后它就强制多路复用器234向下一级发出由字节码异常发生器本身而不是由字节码译码器230所生成的指令或控制信号。通过触发执行仿真中止Java字节码的ARM 32位代码片段而不是允许硬件解释那个Java字节码,字节码异常发生器232对检测到图12情形下的预取中止作出响应。因此,经历过预取中止的可变长度Java指令206本身将不会得到执行,相反地,它会被32位ARM指令序列所替代。当加载一个或多个操作数字节时,用于仿真该指令的ARM指令有可能遭受数据中止,这些数据中止发生是因为与当那些字节最初作为第二指令字202的一部分被读取时所发生的预取中止的原因相同的原因,并且在执行ARM 32位代码片段期间还有可能发生其它的预取和数据中止。所有这些中止发生在ARM指令执行期间,因此通过现有的中止异常处理器例程将会得到正确的处理。
照这样,在读取字节码时发生的预取中止就被遏制了(即,不被传递到ARM核心)。相反,ARM指令序列得到执行,并且与这些ARM指令一起发生的任何中止将使用现有的机制来处理,这样就跳过了存在问题的字节码。在执行用于用中止来替换字节码的仿真的ARM指令之后,对字节码的执行可以恢复。
如果字节码本身碰到预取中止,则标记有预取中止的ARM指令就被传递到ARM流水线的其余部分。如果且当它到达了流水线的执行级,则它将引发预取中止异常:这是处理ARM指令的预取中止的非常标准的方式。
如果字节码没有碰到预取中止,但是它的一个或多个操作数碰到了(如图12所示),则调用那个字节码的软件代码片段。被传递到ARM流水线其余部分的、用于引发代码片段被调用的任何ARM指令将不作预取中止的标记,因此如果且当它们到达了流水线的执行级,ARM指令将会正常地执行。
图14图示了可以由字节码异常发生器232用来检测图12所示情况类型的逻辑表达式类型。图13的摆动缓冲器的任一半个部分指示为“Half1”(块210,216,220构成半个部分,块212,218,222构成另外的半个部分,在图13中用这些元件周围的虚线指示),它当前保存第一指令字(图12的200),用“Half2”指示摆动缓冲器的另外半个部分,它保存第二指令字(图12的202)。假设PA(Half1)意思是块220和222中的任一个的内容在Half1中,对于Half2也是一样。
那么,图12所示情况的指示符是:PA(Half1)是假,PA(Half2)是真,字节码加上其操作数跨越了摆动缓冲器的两个半个部分的边界。(事实是:页边界被标记了,仅仅是因为那是正常的要求,对于它来说两个PA()值不相同是可能的)。
在优选设计(诸如摆动缓冲器半个部分中的每个部分存储一个字以及受硬件支持的字节码被限制在最多两个操作数)中,用于确定字节码加上其操作数是否跨越边界的公式如下:
((操作数的数目=1)AND(bcaddr[1:0]=11))
OR((操作数的数目=2)AND(bcaddr[1]=1))
其中:bcaddr是字节码的地址。这样就可导出图14所示的逻辑表达式。
用于标识预取中止的其它技术是可以使用的,诸如在存储器页边界的预定距离之内开始的可变长指令。
图15示意性地图示了与Java字节码解释相关联的支持代码的结构。这与前述的图是相似的,但是在这一情况下,图示了包括指向由字节码异常事件触发的字节码异常处理代码片段的指针。因此,每个Java字节码具有仿真其操作的相关联的ARM代码片段。而且,可能发生的每个字节码异常都具有相关联的ARM异常处理代码部分。在所示情况下,字节码预取中止处理例程236被提供以便在检测到上述类型的预取中止时由字节码异常发生器232将它触发。这一中止处理代码236通过标识在触发过它的可变长度指令的开始处的字节码而进行工作,接着调用在代码片段集合中那个字节码对应的仿真代码片段。
图16是示意性地图示字节码异常发生器232的操作和后续处理的流程图。步骤238用于确定图14的表达式是否为真。如果表达式为假,则这一过程结束。
如果步骤238已经指示了图12所示情况的类型,则步骤246被执行,它触发将要由字节码异常发生器232启动的字节码预取中止异常。字节码异常发生器232可以仅仅触发执行ARM代码字节码预取中止处理器236。中止处理器236在步骤248用于标识可变长度指令的开始字节码,然后在步骤250触发执行仿真那个标识的字节码的ARM指令的代码片段。
上述用于处理预取中止的机制在如下情况中可很好地工作,在这些情况下,有4个或稍少的操作数(即,总量是5个或稍少的字节),否则字节码及其操作数有可能溢出第二缓冲器。实际上,字节码(优选地,为其提供硬件加速机制)都具有0,1,2个操作数,而其余字节码在所有情况下都使用软件处理(主要是由于它们的复杂性)。
图17图示了用于控制多个用户态进程302,304,306以及308的操作系统300。操作系统300在管态下运行而其它进程302,304,306,308在用户态下运行,用户态下所具有的对系统的配置控制参数的访问权要少于操作系统300在管态下所具有的。
如图17所示,进程302和308分别涉及到不同的Java虚拟机。这些Java虚拟机320,308中的每一个都具有其自己的由字节码翻译映射数据310,312以及配置寄存器数据314,316所构成的配置数据。实际上,可以理解,单一的Java加速硬件组被提供以便执行这两个进程302,308,但是当这些不同的进程正在使用Java加速硬件时,它们中的每个都要求使用它们相关联的配置数据310,312,314,316来配置Java加速硬件。因此,当操作系统300切换到使用Java加速硬件执行不同于使用了那个硬件的前一个进程的进程时,则Java加速硬件就应该被重新初始化和重新配置。操作系统300本身并不执行Java加速硬件的重新初始化和重新配置,但是指示它应该通过将与Java加速硬件相关联的配置无效指示符设置到无效状态来实现。
图18示意性地图示了包括带有本机指令集(例如ARM指令集)的处理器核心320以及相关联的Java加速硬件322的数据处理系统318。存储器324存储可以采用ARM指令或Java字节码形式的计算机程序代码。在Java字节码的情况下,这些被传递到Java加速硬件322,Java加速硬件322用于将它们解释为然后可以由处理器核心320执行的ARM指令流(或者对应于ARM指令的控制信号)。Java加速硬件322包括字节码翻译表326,它需要为希望执行Java字节码的每个Java虚拟机进行编程。在Java加速硬件322中还提供有配置数据寄存器328和操作系统控制寄存器330,以便控制其配置。包括在操作系统控制寄存器330之中的是采用标志CV形式的配置无效指示符,当它被置位时,指示Java加速硬件322的配置是有效的,当取消对其的置位时,指示它是无效的。
如果配置有效指示符对应于Java加速硬件322的、处于无效形式的配置数据,则尝试执行Java字节码时的Java加速硬件322对配置有效指示符作出响应,以便触发配置无效异常。配置无效异常处理器可以是采用上述为预取中止处理器提供ARM代码例程相似的方式提供的ARM代码例程。硬件机制提供在Java加速硬件322之中,用于在配置异常被触发时以及在新的有效配置数据实际上已经被写入位置之前,将配置有效指示符设置为指示配置数据是有效的形式。尽管在配置数据实际上已经被写入之前,采用这种方式设置配置有效指示符直觉上好像是计数器,但是这种方法在通过设置配置数据能够避免与进程交换局部方式一起出现的问题上具有相当明显的优势。然后,配置异常例程为Java虚拟机建立所需的配置数据,配置异常例程通过写入前述的字节码翻译表条目以及所需要的任何其它配置数据寄存器值328而与Java虚拟机保持一致。配置异常代码必须确保:在由Java加速硬件322接手任何其它的任务之前,对配置数据的写入必须完成。
图19示意性地图示了操作系统300的操作。在步骤332,操作系统等待以检测进程切换。当检测到进程切换时,步骤334确定新进程是否使用Java加速硬件322(如前述也称为Jazelle)。如果不使用Java加速硬件322,则处理进行到步骤336,在该步骤,在进行到将执行转移到新进程的步骤339之前,将Java加速硬件322禁止。如果使用Java加速硬件322,则处理进行到步骤338,在该步骤,确定正被调用的新进程与由操作系统300记录的、存储的Java加速硬件322的当前所有者是否相同。如果所有者没有改变(即,新进程实际上与使用了Java加速硬件322的上一个进程相同),则处理进行到步骤337,在该步骤,在进行到步骤339之前启用Java加速硬件322。如果新进程不是所存储的当前所有者,则处理进行到步骤340,在该步骤中,配置有效指示符被置位来指示Java加速硬件322的当前配置是无效的。这样就限制了操作系统用来管理这一配置变化的责任,对配置数据的实际更新作为任务就留给Java加速硬件322使用它自己的异常处理机制来操作。
在步骤340之后,步骤342用于在执行控制的转移被传递到步骤337然后再到步骤339之前将所存储的当前所有者更新为新进程。
图20图示了由Java加速硬件322所执行的操作。在步骤344,Java加速硬件322等待以便接收字节码来执行。当接收到字节码时,该硬件使用步骤346检查:配置有效指示符是否显示Java加速硬件322的配置是有效的。如果配置是有效的,则处理就进行到步骤348,在该步骤执行所接收的字节码。
如果配置是无效的,则处理进行到步骤350,在该步骤,Java加速硬件322使用硬件机制来置位配置有效指示符以便显示配置是有效的。如果希望的话,这还可以由异常处理器中的程序指令来进行。步骤352用于触发配置无效异常。配置无效异常处理器可以提供为指向代码片段的指针表以及合适的代码片段的组合以便处理所涉及到的每个异常,诸如指令的软件仿真、预取中止(它们都已经在上面论述过了)、或者这一例子中的配置异常。
步骤354用于执行组成配置无效异常、以及用于将所要求的配置数据写到Java加速硬件322的ARM代码。这一ARM代码可以采用协处理器的寄存器写序列的形式以便增加可编程翻译表326以及其它配置寄存器330。在步骤354之后,步骤356反向跳转到Java字节码程序以便重新尝试执行原始字节码。
如果进程切换发生在步骤354或者358期间,则至此时所建立的配置有可能会被其它进程改为无效,并且配置有效指示符会被操作系统清零。在图20的过程中,这导致再次进入344-346-350-352-354循环,即导致要从开始重新尝试重新配置。当字节码最终实际上得到了执行时,则该配置被保证是有效的。
图21图示了图1所示的、还并入有浮点子系统的数据处理系统。当未处理浮点运算发生时,浮点子系统提供用于处理ARM代码中的未处理浮点运算的机制。
这种子系统的例子是英格兰剑桥ARM有限公司的VFP软件仿真器系统。在VFP软件仿真器系统的例子中,所有的浮点运算都被当作未处理浮点运算来处理,因为没有可用的硬件来执行浮点运算。因此,所有的浮点运算都是使用所提供的用于仿真ARM代码中VFP行为的机制进行处理的。
在这种系统的情况下,未处理浮点运算是精确的,也就是说,未处理浮点运算的检测点与未处理浮点运算的出现点相同。
图22图示了如图1和图21所示的、还并入了浮点运算寄存器和未处理运算状态标志的数据处理系统。
这种子系统的例子是英格兰剑桥ARM有限公司的VFP硬件系统。在VFP硬件系统的情况下,只有特定类型的浮点运算被当作未处理浮点运算来处理,其余的由VFP硬件处理。
可能从属于未处理浮点运算的运算类包括:
—除零;
—涉及NaN的运算;
—涉及无穷大的运算;
—涉及反向规格化数的运算;
在这种系统的情况下,未处理浮点运算可以是不精确的,也就是说,未处理浮点运算的检测点可以不必与未处理浮点运算的出现点相同。
未处理VFP运算出现在当VFP协处理器拒绝接受通常构成ARM指令流的一部分的VFP指令时,但是当存在图1所示的字节码翻译器时,未处理VFP运算还可能是已经被翻译成ARM和VFP指令的组合的字节码所导致的结果。
在未处理VFP运算作为ARM指令流的一部分的情况下,用于处理未处  VFP运算的ARM机制将生成未定义的指令异常并执行安装在未定义的指令矢量上的未定义指令处理器。
在VFP软件仿真器系统的情况下,所有VFP运算都被当作未处理VFP运算并且应用相同的ARM机制,生成未定义的指令异常并且执行未定义的指令处理器。
当未处理VFP运算作为ARM指令流的一部分出现时,未定义的指令处理器能够通过检查指令流而知道:引发未处理VFP运算的指令是否的确是VFP指令,而不是一些其它类型的未定义的指令,并且当未定义的指令处理器在特权模式下执行时,它能够发出所需要的协处理器指令以便从VFP协处理器中提取它所需要的任何内部状态,然后在软件中完成所需要的指令。未定义的指令处理器将使用在ARM指令流和VFP的内部状态中都标识了的指令,以便处理未处理操作。
在许多VFP的实施中,引发未处理操作的指令可以不同于在检测到未处理操作时正在执行的指令。未处理操作可以由在较早前所发出的指令引发,并且与后续的ARM指令并行地执行,除了它碰到未处理状态之外。VFP通过拒绝接受后面的VFP指令,并且强制进入VFP未定义指令处理器而发信号通知这种状态,所述VFP未定义指令处理器能够询问VFP以便找到未处理操作的原始原因。
当Jazelle被集成到包括VFP子系统的系统中时,下列应用:
Java浮点指令是通过使用一组与VFP指令直接对应的信号在核心之中直接发出对应的VFP指令而得到翻译的。
如果VFP碰到未处理运算,它可以发信号通知未处理运算状态。
假如ARM指令流中的VFP指令发信号通知了不正确的操作,则Jazelle截取未处理运算信号,以防止它被送到核心以及防止未定义指令处理器按照常规执行。反之,Jazelle生成由Jazelle VM支持代码处理的VFP异常。
当碰到这样的Jazelle VFP异常时,VM支持代码会执行VFP“不操作”指令,即,使Jazelle状态保持不变的任何VFP指令,诸如FMRXRd,FPSCR指令。这样就使VFP硬件与支持代码保持同步并且结合未处理操作状态标志完成由浮点运算寄存器所指示的任何VFP操作的操作,在这一例子中,当刚碰到未处理操作时,该未处理操作状态标志就应该被置位。一旦完成了操作,未处理操作状态标志就被清零。
该方法利用了这样的事实:由Jazelle发出的指令序列是可以重启动的,如在2000年10月5日所提交的共同待审的英国专利申请号为0024402.0的申请,在此全部引入以供参考。结合本发明的技术使用上述参考文献中所描述的技术允许重新启动引发生成VFP指令的指令,其中,该VFP指令引发未处理操作。
图23图示了用于每个Java浮点运算的、由Java字节码翻译器所发出的对应VFP指令。注意,仅仅显示了被发出的VFP指令,Java字节码翻译器可以结合VFP指令发出附加的ARM指令。Jazelle字节码翻译器也可以发出附加VFP加载和存储指令,以便加载和存储浮点值。
图24图示了指令序列或者对应于可以由Jazelle字节码翻译器为由其后跟着‘dcmpg’字节码的‘dmul’字节码组成的Java字节码序列发出的指令的信号。假如(dmul,dcmpg)字节码序列在当双精度寄存器D0,D1以及D2分别保存Java执行堆栈的从顶部起的第三、从顶部起的第二以及顶部元素时,以及字节码序列的整数结果被期望放在整数寄存器R0时被执行,所示的序列将会出现,。
图25,27,29以及30图示了未处理浮点运算发生在翻译的指令序列的各个点时的操作序列。图25和29图示了在未处理浮点运算是由FMULD指令引发时的操作序列。图27和30图示了未处理浮点运算是由FCMPD指令引发时的操作序列。图25和27图示了发信号通知未处理浮点运算是不精确时的操作序列。图29和30图示了发信号通知未处理浮点运算是精确时的操作序列。
可以看出,有四个可能的事件序列:
1)图25:不精确未处理操作检测,发出信号通知未处理操作的Java字节码与引发未处理操作的Java字节码不相同。
2)图27:不精确未处理操作检测,尽管系统使用不精确未处理操作检测的事实,但发出信号通知未处理操作的Java字节码与引发所述未处理操作的Java字节码却是相同。这是因为第二个Java字节码‘dcmpg’为一个Java字节码发出了两个VFP指令,其中的第一个引发未处理操作,第二个发信号通知所述未处理操作。
3)图29:精确未处理操作检测,发出信号通知未处理操作的Java字节码与引发未处理操作的Java字节码相同。
4)图30:精确未处理操作检测,发出信号通知未处理操作的Java字节码与引发未处理操作的Java字节码相同,但是却不知道两个VFP指令中的哪个是由于执行实际上引发并发信号通知未处理操作的‘dcmpg’字节码而被发出的。
上面提到的重启动技术和本发明的技术的组合允许正确地处理所有这些可能的事件序列。
图26和28图示了紧跟在引发了未处理操作之后的浮点运算寄存器和未处理操作状态标志的状态,分别对应图25和图27所示的操作序列。
应该参考如下:均在2000年10月5日提交的共同待审的英国专利申请0024399.8,0024402.0,0024404.6,0024396.4,在2000年11月20日提交的英国专利申请0028249.1和在2000年12月7日提交的美国专利申请09/731,060(它们也描述了Java字节码解释系统)。这些共同待审的申请的公开内容在全部引入以供参考。

Claims (48)

1.用于在第一程序指令集的程序指令或者第二程序指令集的程序指令的控制下处理数据的装置,所述装置包括:
软件指令解释器,可操作用于将所述第二程序指令集的程序指令解释为以序列终止指令终止的所述第一程序指令集的程序指令序列;以及
响应所述序列终止指令的指令译码器:
(i)如果所述第二程序指令集的硬件指令执行单元不可用,则使用所述软件指令解释器启动解释所述第二指令集的下一个程序指令;
(ii)如果所述第二程序指令集的所述硬件指令执行单元是可用的,则使用所述硬件指令执行单元启动执行所述第二指令集的所述下一个程序指令。
2.权利要求1的装置,其中在如下情况下,所述硬件指令执行单元不可用:
(i)所述硬件指令执行单元没有被启用;或者
(ii)硬件指令执行单元不存在。
3.权利要求1和2中任意一项中的装置,其中所述指令译码器对至少一个硬件指令执行单元标志所出响应,以便检测硬件指令执行单元是否是可用的。
4.权利要求1、2和3中任意一项中的装置,其中所述序列终止指令指定在所述第一指令集的程序指令序列的所述软件指令解释器之中的软件解释开始地址,所述第一指令集用于解释所述第二指令集中的所述下一个程序指令,如果所述硬件指令执行单元不可用,则所述软件指令解释器使用所述序列。
5.权利要求4的装置,其中所述序列终止指令包括指定这样的寄存器的操作数,所述寄存器存储所述软件解释开始地址。
6.权利要求4的装置,其中所述序列终止指令使用预定寄存器来存储所述软件解释开始地址。
7.前述权利要求中任意一项中的装置,其中所述序列终止指令指定指向所述第二指令集的所述下一个指令的硬件执行开始地址,如果所述硬件指令执行单元可用,则所述硬件执行开始地址被所述硬件指令执行单元用来访问所述第二指令集的所述下一个指令。
8.权利要求7的装置,其中所述序列终止指令使用预定寄存器来存储所述硬件执行开始地址。
9.权利要求7的装置,其中所述序列终止指令包括指定这样的寄存器的操作数,所述寄存器存储所述硬件执行开始地址。
10.前述权利要求中任意一项中的装置,其中所述软件指令解释器包括所述第一指令集的多个程序指令序列,所述多个序列分别对应于所述第二指令集的程序指令。
11.权利要求10的装置,其中所述软件指令解释器包括指向所述多个序列的指针的表。
12.权利要求11的装置,其中所述指针表中的项以要被解释的所述第二指令集的程序指令作为索引。
13.权利要求11和12中任意一项的装置,其中所述指针表的基地址存储在基地址寄存器之中。
14.前述权利要求中任意一项中的装置,包括处理器核心,所述第一指令集的所述程序指令是由所述处理器核心执行的本机程序指令。
15.权利要求14的装置,其中所述硬件指令执行单元执行作为所述处理器核心上的一个或多个本机程序指令表示的Java字节码指令。
16.前述权利要求中任意一项中的装置,其中所述序列终止指令是所述第一指令集的成员。
17.用于在第一程序指令集的程序指令或者第二程序指令集的程序指令的控制下处理数据的方法,所述方法包括如下步骤:
使用软件指令解释器将所述第二程序指令集的程序指令解释为以序列终止指令终止的所述第一程序指令集的程序指令序列;以及
响应所述序列终止指令执行如下操作:
(i)如果所述第二程序指令集的硬件指令执行单元不可用,则使用所述软件指令解释器启动解释所述第二指令集的下一个程序指令;以及
(ii)如果所述第二程序指令集的所述硬件指令执行单元是可用的,则使用所述硬件指令执行单元启动执行所述第二指令集的所述下一个程序指令。
18.权利要求17的方法,其中在如下情况下,所述硬件指令执行单元不可用:
(i)所述硬件指令执行单元没有被启用;或者
(ii)硬件指令执行单元不存在。
19.权利要求17和18中任意一项中的方法,其中至少一个硬件指令执行单元标志用于检测硬件指令执行单元是否可用。
20.权利要求17、18和19中任意一项中的方法,其中所述序列终止指令指定在所述第一指令集的程序指令序列的所述软件指令解释器之中的软件解释开始地址,所述第一指令集用于解释所述第二指令集中的所述下一个程序指令,如果所述硬件指令执行单元不可用,则所述软件指令解释器使用所述序列。
21.权利要求20的方法,其中所述序列终止指令包括指定这样的寄存器的操作数,所述寄存器存储所述软件解释开始地址。
22.权利要求18的方法,其中所述序列终止指令使用预定寄存器来存储所述软件解释开始地址。
23.权利要求17-22中任意一项中的方法,其中所述序列终止指令指定指向所述第二指令集的所述下一个指令的硬件执行开始地址,如果所述硬件指令执行单元可用,则所述硬件执行开始地址被所述硬件指令执行单元用来访问所述第二指令集的所述下一个指令。
24.权利要求23的方法,其中所述序列终止指令使用预定寄存器来存储所述硬件执行开始地址。
25.权利要求23的方法,其中所述序列终止指令包括指定这样的寄存器的操作数,所述寄存器存储所述硬件执行开始地址。
26.权利要求17-25中任意一项中的方法,其中所述软件指令解释器包括所述第一指令集的多个程序指令序列,所述多个序列分别对应于所述第二指令集的程序指令。
27.权利要求26的方法,其中所述软件指令解释器包括指向所述多个序列的指针的表。
28.权利要求27的方法,其中所述指针表中的项以要被解释的所述第二指令集的程序指令作为索引。
29.权利要求27-28中任意一项的方法,其中所述指针表的基地址存储在基地址寄存器之中。
30.权利要求17-29中任意一项中的方法,包括处理器核心,所述第一指令集的所述程序指令是由所述处理器核心执行的本机程序指令。
31.权利要求30的方法,其中所述硬件指令执行单元执行作为所述处理器核心上的一个或多个本机程序指令的表示的Java字节码指令。
32.权利要求17-31中任意一项中的方法,其中所述序列终止指令是所述第一指令集的成员。
33.用于控制数据处理装置在第一程序指令集的程序指令或者第二程序指令集的程序指令的控制下进行处理数据的计算机程序产品,所述计算机程序产品包括:
软件指令解释器逻辑,可操作用于将所述第二程序指令集的程序指令解释为以序列终止指令终止的所述第一程序指令集的程序指令序列,所述序列终止指令用于执行如下操作:
(i)如果所述第二程序指令集的硬件指令执行单元不可用,则使用所述软件指令解释器逻辑启动解释所述第二指令集的下一个程序指令;以及
(ii)如果所述第二程序指令集的所述硬件指令执行单元是可用的,则使用所述硬件指令执行单元启动执行所述第二指令集的所述下一个程序指令。
34.权利要求33的计算机程序产品,其中在如下情况下,所述硬件指令执行单元不可用:
(i)所述硬件指令执行单元没有被启用;或者
(ii)硬件指令执行单元不存在。
35.权利要求33和34中任意一项中的计算机程序产品,其中至少一个硬件指令执行单元标志用于检测硬件指令执行单元是否可用。
36.权利要求33、34和35中任意一项中的计算机程序产品,其中所述序列终止指令指定在所述第一指令集的程序指令序列的所述软件指令解释器逻辑之中的软件解释开始地址,所述第一指令集用于解释所述第二指令集中的所述下一个程序指令,如果所述硬件指令执行单元不可用,则所述软件指令解释器逻辑使用所述序列。
37.权利要求36的计算机程序产品,其中所述序列终止指令包括指定这样的寄存器的操作数,所述寄存器存储所述软件解释开始地址。
38.权利要求36的计算机程序产品,其中所述序列终止指令使用预定寄存器来存储所述软件解释开始地址。
39.权利要求33-38中任意一项中的计算机程序产品,其中所述序列终止指令指定指向所述第二指令集的所述下一个指令的硬件执行开始地址,如果所述硬件指令执行单元可用,则所述硬件执行开始地址被所述硬件指令执行器用来访问所述第二指令集的所述下一个指令。
40.权利要求39的计算机程序产品,其中所述序列终止指令使用预定寄存器来存储所述硬件执行开始地址。
41.权利要求39的计算机程序产品,其中所述序列终止指令包括指定这样的寄存器的操作数,所述寄存器存储所述硬件执行开始地址。
42.权利要求33-41中任意一项中的计算机程序产品,其中所述软件指令解释器逻辑包括所述第一指令集的多个程序指令序列,所述多个序列分别对应于所述第二指令集的程序指令。
43.权利要求42的计算机程序产品,其中所述软件指令解释器逻辑包括指向所述多个序列的指针的表。
44.权利要求43的计算机程序产品,其中所述指针表中的项以要被解释的所述第二指令集的程序指令作为索引。
45.权利要求43-44中任意一项的计算机程序产品,其中所述指针表的基地址存储在基地址寄存器之中。
46.权利要求33-45中任意一项中的计算机程序产品,包括处理器核心,所述第一指令集的所述程序指令是由所述处理器核心执行的本机程序指令。
47.权利要求46的计算机程序产品,其中所述硬件指令执行单元执行作为所述处理器核心上的一个或多个本机程序指令的表示的Java字节码指令。
48.权利要求33-47中任意一项中的计算机程序产品,其中所述序列终止指令是所述第一指令集的成员。
CNB028110641A 2001-05-31 2002-02-18 使用多重指令集的数据处理 Expired - Lifetime CN1327338C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0113199A GB2376100B (en) 2001-05-31 2001-05-31 Data processing using multiple instruction sets
GB0113199.4 2001-05-31

Publications (2)

Publication Number Publication Date
CN1513137A true CN1513137A (zh) 2004-07-14
CN1327338C CN1327338C (zh) 2007-07-18

Family

ID=9915617

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB028110641A Expired - Lifetime CN1327338C (zh) 2001-05-31 2002-02-18 使用多重指令集的数据处理

Country Status (12)

Country Link
US (1) US6965984B2 (zh)
EP (1) EP1390841B1 (zh)
JP (2) JP4216182B2 (zh)
KR (1) KR100816781B1 (zh)
CN (1) CN1327338C (zh)
DE (1) DE60203612T2 (zh)
GB (1) GB2376100B (zh)
IL (2) IL155058A0 (zh)
MY (1) MY131818A (zh)
RU (1) RU2281547C2 (zh)
TW (1) TWI242158B (zh)
WO (1) WO2002097613A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102930322A (zh) * 2012-09-29 2013-02-13 上海复旦微电子集团股份有限公司 智能卡和指令的处理方法
CN103678340A (zh) * 2012-09-07 2014-03-26 腾讯科技(深圳)有限公司 浏览器引擎的运行方法、装置、浏览器及终端
CN105573814A (zh) * 2015-09-01 2016-05-11 北京中电华大电子设计有限责任公司 一种java卡局部变量字节码采用芯片硬件解析执行的方法
CN111142940A (zh) * 2019-12-23 2020-05-12 成都海光微电子技术有限公司 处理器与软件的适配方法、装置、处理器、芯片和设备

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3634379B2 (ja) * 1996-01-24 2005-03-30 サン・マイクロシステムズ・インコーポレイテッド スタックキャッシングのための方法及び装置
US7434030B2 (en) * 2001-09-12 2008-10-07 Renesas Technology Corp. Processor system having accelerator of Java-type of programming language
GB2382175A (en) * 2001-11-20 2003-05-21 Hewlett Packard Co Reconfigurable processor
JP4049578B2 (ja) * 2001-12-12 2008-02-20 ユニ・チャーム株式会社 吸収性物品装着用ショーツ
US7831807B1 (en) * 2002-06-20 2010-11-09 Unisys Corporation System and method for expanding the instruction set of an instruction processor
EP1387253B1 (en) * 2002-07-31 2017-09-20 Texas Instruments Incorporated Dynamic translation and execution of instructions within a processor
EP1391821A3 (en) * 2002-07-31 2007-06-06 Texas Instruments Inc. A multi processor computing system having a java stack machine and a risc based processor
EP1387249B1 (en) * 2002-07-31 2019-03-13 Texas Instruments Incorporated RISC processor having a stack and register architecture
EP1387250B8 (en) * 2002-07-31 2012-02-29 Texas Instruments Inc. Processor that accomodates multiple instruction sets and multiple decode modes
US20040031022A1 (en) * 2002-08-02 2004-02-12 Masayuki Kabasawa Information processing device for multiple instruction sets with reconfigurable mechanism
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
EP1489491A1 (en) * 2003-06-19 2004-12-22 Texas Instruments Incorporated Dynamically changing the semantic of an instruction
JP4224430B2 (ja) 2003-07-07 2009-02-12 株式会社ルネサステクノロジ 情報処理装置
JP2009032263A (ja) * 2003-07-07 2009-02-12 Renesas Technology Corp 情報処理装置
US7770169B2 (en) * 2004-05-17 2010-08-03 Oracle America, Inc. Thread rendezvous for read-only code in an object-oriented computing environment
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
US7769983B2 (en) * 2005-05-18 2010-08-03 Qualcomm Incorporated Caching instructions for a multiple-state processor
US20070288909A1 (en) * 2006-06-07 2007-12-13 Hong Kong Applied Science and Technology Research Institute Company Limited Hardware JavaTM Bytecode Translator
KR100781340B1 (ko) * 2006-09-18 2007-11-30 삼성전자주식회사 사용자 정의 확장 연산을 처리하는 연산 시스템 및 방법
US7711927B2 (en) * 2007-03-14 2010-05-04 Qualcomm Incorporated System, method and software to preload instructions from an instruction set other than one currently executing
KR101407629B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 자바 변환 가속 장치 및 방법
US8510488B2 (en) * 2007-08-08 2013-08-13 Ricoh Company, Limited Function control apparatus and function control method
US9021234B2 (en) 2009-01-30 2015-04-28 Nec Corporation Indirect designation of physical configuration number as logical configuration number based on correlation information, within parallel computing
RU2461887C1 (ru) * 2011-08-10 2012-09-20 Федеральное Государственное Унитарное Предприятие Ордена Трудового Красного Знамени Научно-Исследовательский Институт Радио (Фгуп Ниир) Способ передачи информации на мобильный терминал для обеспечения безопасности жизнедеятельности абонентов
US8914615B2 (en) 2011-12-02 2014-12-16 Arm Limited Mapping same logical register specifier for different instruction sets with divergent association to architectural register file using common address format
US9471344B1 (en) * 2012-03-27 2016-10-18 Marvell International Ltd. Hardware support for processing virtual machine instructions
GB2548601B (en) * 2016-03-23 2019-02-13 Advanced Risc Mach Ltd Processing vector instructions

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3889243A (en) * 1973-10-18 1975-06-10 Ibm Stack mechanism for a data processor
US4236204A (en) * 1978-03-13 1980-11-25 Motorola, Inc. Instruction set modifier register
US4587632A (en) * 1980-05-27 1986-05-06 At&T Bell Laboratories Lookahead stack oriented computer
US4922414A (en) * 1982-12-17 1990-05-01 Symbolics Inc. Symbolic language data processing system
DE3726192A1 (de) * 1987-08-06 1989-02-16 Otto Mueller Stacksteuerung
US5136696A (en) * 1988-06-27 1992-08-04 Prime Computer, Inc. High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions
US5440749A (en) * 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
US5455775A (en) * 1993-01-25 1995-10-03 International Business Machines Corporation Computer design system for mapping a logical hierarchy into a physical hierarchy
GB2289353B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Data processing with multiple instruction sets
GB2289354B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Multiple instruction set mapping
US6496922B1 (en) * 1994-10-31 2002-12-17 Sun Microsystems, Inc. Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US5638525A (en) * 1995-02-10 1997-06-10 Intel Corporation Processor capable of executing programs that contain RISC and CISC instructions
US5752035A (en) * 1995-04-05 1998-05-12 Xilinx, Inc. Method for compiling and executing programs for reprogrammable instruction set accelerator
US5619665A (en) * 1995-04-13 1997-04-08 Intrnational Business Machines Corporation Method and apparatus for the transparent emulation of an existing instruction-set architecture by an arbitrary underlying instruction-set architecture
US6076155A (en) * 1995-10-24 2000-06-13 S3 Incorporated Shared register architecture for a dual-instruction-set CPU to facilitate data exchange between the instruction sets
US5838948A (en) * 1995-12-01 1998-11-17 Eagle Design Automation, Inc. System and method for simulation of computer systems combining hardware and software interaction
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
JP2000501217A (ja) * 1996-01-24 2000-02-02 サン・マイクロシステムズ・インコーポレイテッド 配列アクセス境界チェックを加速したプロセッサ
US6038643A (en) * 1996-01-24 2000-03-14 Sun Microsystems, Inc. Stack management unit and method for a processor having a stack
US6026485A (en) * 1996-01-24 2000-02-15 Sun Microsystems, Inc. Instruction folding for a stack-based machine
US6535903B2 (en) * 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
US5742802A (en) * 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
US6031992A (en) * 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US5926832A (en) * 1996-09-26 1999-07-20 Transmeta Corporation Method and apparatus for aliasing memory data in an advanced microprocessor
EP0938703B1 (en) * 1996-11-13 2003-07-02 Paran, Arik Real time program language accelerator
US5937193A (en) * 1996-11-27 1999-08-10 Vlsi Technology, Inc. Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof
US5953741A (en) * 1996-11-27 1999-09-14 Vlsi Technology, Inc. Stack cache for stack-based processor and method thereof
US6009499A (en) * 1997-03-31 1999-12-28 Sun Microsystems, Inc Pipelined stack caching circuit
US5875336A (en) * 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US6088786A (en) * 1997-06-27 2000-07-11 Sun Microsystems, Inc. Method and system for coupling a stack based processor to register based functional unit
US5892966A (en) * 1997-06-27 1999-04-06 Sun Microsystems, Inc. Processor complex for executing multimedia functions
US6003126A (en) * 1997-07-01 1999-12-14 International Business Machines Special instruction register including allocation field utilized for temporary designation of physical registers as general registers
US6317872B1 (en) * 1997-07-11 2001-11-13 Rockwell Collins, Inc. Real time processor optimized for executing JAVA programs
DE69839913D1 (de) * 1997-10-02 2008-10-02 Koninkl Philips Electronics Nv Datenverarbeitungsgerät zur verarbeitung von befeh
EP1359501A3 (en) * 1997-10-02 2007-11-21 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
US6009509A (en) * 1997-10-08 1999-12-28 International Business Machines Corporation Method and system for the temporary designation and utilization of a plurality of physical registers as a stack
US6122638A (en) * 1997-11-26 2000-09-19 International Business Machines Corporation Object-oriented processor and method for caching intermediate data in an object-oriented processor
US6070173A (en) * 1997-11-26 2000-05-30 International Business Machines Corporation Method and apparatus for assisting garbage collection process within a java virtual machine
US6148391A (en) * 1998-03-26 2000-11-14 Sun Microsystems, Inc. System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
US6374286B1 (en) * 1998-04-06 2002-04-16 Rockwell Collins, Inc. Real time processor capable of concurrently running multiple independent JAVA machines
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6338134B1 (en) * 1998-12-29 2002-01-08 International Business Machines Corporation Method and system in a superscalar data processing system for the efficient processing of an instruction by moving only pointers to data
GB2358261B (en) * 2000-01-17 2004-06-09 Advanced Risc Mach Ltd Data processing with native and interpreted program instruction words
WO2001061476A2 (en) * 2000-02-14 2001-08-23 Chicory Systems, Inc. System including cpu and code translator for translating code from a second instruction set to a first instruction set

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678340A (zh) * 2012-09-07 2014-03-26 腾讯科技(深圳)有限公司 浏览器引擎的运行方法、装置、浏览器及终端
CN103678340B (zh) * 2012-09-07 2016-09-14 腾讯科技(深圳)有限公司 浏览器引擎的运行方法、装置、浏览器及终端
US9565244B2 (en) 2012-09-07 2017-02-07 Tencent Technology (Shenzhen) Company Limited Methods and apparatus for operating browser engine
CN102930322A (zh) * 2012-09-29 2013-02-13 上海复旦微电子集团股份有限公司 智能卡和指令的处理方法
CN102930322B (zh) * 2012-09-29 2015-08-26 上海复旦微电子集团股份有限公司 智能卡和指令的处理方法
CN105573814A (zh) * 2015-09-01 2016-05-11 北京中电华大电子设计有限责任公司 一种java卡局部变量字节码采用芯片硬件解析执行的方法
CN111142940A (zh) * 2019-12-23 2020-05-12 成都海光微电子技术有限公司 处理器与软件的适配方法、装置、处理器、芯片和设备
CN111142940B (zh) * 2019-12-23 2023-06-30 成都海光微电子技术有限公司 处理器与软件的适配方法、装置、处理器、芯片和设备

Also Published As

Publication number Publication date
KR100816781B1 (ko) 2008-03-26
JP2008123545A (ja) 2008-05-29
EP1390841A1 (en) 2004-02-25
GB0113199D0 (en) 2001-07-25
GB2376100A (en) 2002-12-04
US20020188825A1 (en) 2002-12-12
JP2004520663A (ja) 2004-07-08
CN1327338C (zh) 2007-07-18
WO2002097613A1 (en) 2002-12-05
GB2376100B (en) 2005-03-09
US6965984B2 (en) 2005-11-15
RU2281547C2 (ru) 2006-08-10
IL155058A0 (en) 2003-10-31
IL155058A (en) 2010-12-30
DE60203612D1 (de) 2005-05-12
TWI242158B (en) 2005-10-21
EP1390841B1 (en) 2005-04-06
MY131818A (en) 2007-09-28
DE60203612T2 (de) 2006-03-09
JP4216182B2 (ja) 2009-01-28
KR20040007562A (ko) 2004-01-24

Similar Documents

Publication Publication Date Title
CN1513137A (zh) 使用多重指令集的数据处理
CN1103079C (zh) 用于高级微处理器的门控存储缓冲器
US6654875B1 (en) Dual microcode RAM address mode instruction execution using operation code RAM storing control words with alternate address indicator
CN1210649C (zh) 能够发送及重新发送附属链接的排程器、包括该排程器的处理器以及排程方法
CN1522404A (zh) 在多指令集系统中对未处理操作的处理
CN1395168A (zh) 多指令集的数据处理
US7089539B2 (en) Program instruction interpretation
CN1265204A (zh) 检测被寻址单元预测失败的存储控制器
CN1677364A (zh) 对代码覆盖使用硬件辅助的自主测试用例反馈的方法和设备
CN1434938A (zh) 重启动翻译的指令
CN1440528A (zh) 寄存器中堆栈操作数的存储
RU2003112679A (ru) Аппаратная трансляция команд внутри процессорного конвейера
CN1016383B (zh) 基于操作数长度和对位的微码转移
US6907515B2 (en) Configuration control within data processing systems
CN1304944C (zh) 预先读取脱序执行指令的方法及处理器
US7647489B2 (en) Function calling mechanism with embedded index for a handler program and an embedded immediate value for passing a parameter
JP2011501286A (ja) ジャババイトコード変換方法
CN1107909C (zh) 带临时保存目标处理器状态的装置的主处理器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term
CX01 Expiry of patent term

Granted publication date: 20070718