CN100388199C - 使用微代码引擎的java硬件加速器 - Google Patents

使用微代码引擎的java硬件加速器 Download PDF

Info

Publication number
CN100388199C
CN100388199C CNB018169821A CN01816982A CN100388199C CN 100388199 C CN100388199 C CN 100388199C CN B018169821 A CNB018169821 A CN B018169821A CN 01816982 A CN01816982 A CN 01816982A CN 100388199 C CN100388199 C CN 100388199C
Authority
CN
China
Prior art keywords
instruction
storehouse
register
cpu
bytecode
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.)
Expired - Fee Related
Application number
CNB018169821A
Other languages
English (en)
Other versions
CN1468399A (zh
Inventor
M·帕特尔
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.)
Nazomi Communications Inc
Original Assignee
Nazomi Communications Inc
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
Priority claimed from US09/687,777 external-priority patent/US7225436B1/en
Application filed by Nazomi Communications Inc filed Critical Nazomi Communications Inc
Publication of CN1468399A publication Critical patent/CN1468399A/zh
Application granted granted Critical
Publication of CN100388199C publication Critical patent/CN100388199C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set

Abstract

硬件Java加速器(42)由一个译码级(26b)和一个微代码级组成。分解成译码和微代码级允许该译码级去实施指令级并行运算,同时该微代码级允许转换单个Java字节码为多个原生指令。提供了一个重发缓存器(82),其存储已转换的指令,并且当该系统从一个中断返回的时候,重新发送它们。以此方式,当一个中断时不需要刷新硬件加速器。还使用一个原生PC监控器(54)。当原生PC(54)在一个特定范围之内时,硬件加速器能够转换Java字节码为原生指令。当原生PC在该范围外边的时候,硬件加速器被停用,并且CPU(25)靠从该存储器中获得的原生指令运行。

Description

使用微代码引擎的JAVA硬件加速器
发明背景
JavaTM是一种由Sun微系统公司(Sun Microsystems)开发的面向对象的程序设计语言。该Java语言在信源和二进制级面上都是小型、简单和可跨平台和操作系统便携的。这使得Java程序设计语言在因特网上非常流行。
Java的平台独立性和代码紧凑是Java在常规程序设计语言之上的最大优点。在常规程序设计语言中,一个程序的源代码被发送给一个编译器,其转换该程序为机器码或者处理器指令。处理器指令对于系统的处理器而言是原生(native)的。如果在一个基于英特尔的系统上编译代码,则结果程序将仅在其它基于英特尔的系统上运行。如果希望在别的系统上运行该程序,用户必须返回初始的源代码,获得一个编译器用于该新的处理器,并且重新编译该程序为专用于其它处理器的机器代码。
Java操作则不同。Java编译器接受Java程序并且产生字节码(bytecode),而不是产生用于任何特定处理器的机器码。字节码是看起来像机器码的指令,但不是专用于所有的处理器。为了执行Java程序,字节码翻译器接受Java字节码,转换它们为等效的原生处理器指令,并且执行该Java程序。该Java字节码翻译器是Java虚拟机的一个组成部分。
使Java程序处于字节码形式意即不是专用于任何一个系统,只要有一台Java虚拟机可用,该程序就可以在任何平台和任何操作系统上运行。这使一个二进制字节码文件得以跨平台执行。
使用字节码的缺点在于执行速度。直接在硬件上运行的系统专用程序(它们由该硬件进行编译)比Java字节码(其必须由Java虚拟机进行处理)运行显著更快。处理器必须既将该Java字节码转换为Java虚拟机中的原生指令(native instruction)又执行该原生指令。
一种增加Java虚拟机速度的方法是利用诸如“适时工作”(JIT)翻译器的技术,以及被称为“热点JITs”翻译器的甚至于更快的翻译器。所述各JIT版本全都导致用以产生原生处理器指令的JIT编译开销。这些JIT翻译器还导致额外的存储开销。
对于要求以极小内存使用和低能量消耗来运行Java程序的局部成本解决方案的用户设备,Java的缓慢执行速度和JIT翻译器的开销已经使得其难以应用。对于使用最快JITs的现有的处理器的性能要求以软件两倍以上去支持运行Java虚拟机。通过利用超级标量处理器结构或者通过提高该处理器时钟频率可以满足处理器性能的要求。在这两种情况下,功率需要被急剧提高了。由JIT技术引起的存储器膨胀,还违反了低成本和低功率的用户应用要求。
希望拥有一个供执行Java程序的改良系统,其提供了一个低成本的解决方案以供用户设备运行Java程序。
发明概述
本发明概括地涉及Java硬件加速器,该Java硬件加速器用于转换Java字节码为用于中央处理单元(CPU)的原生指令。本发明的一个实施例包括:一个重发缓存器,该重发缓存器与硬件加速器有关,并且适合于存储随同相关的原生程序计数器值一起发送给CPU的已转换的原生指令。当CPU从一个中断处返回的时候,重发缓存器查验程序计数器以确定是否从重发缓存器重新发送一个存储的原生指令值。通过这种方式,无需再装入硬件加速器转换的指令,就可以有效地处理中断返回。
本发明的另一个实施例包括:一个硬件加速器,用以将基于堆栈的指令转换为对一个中央处理单元是原生的基于寄存器的指令。该硬件加速器包括一个原生程序计数器监控器。该原生程序计数器监控器查验是否原生程序计数器是在一个硬件加速器程序计数器范围之内。当该硬件加速器程序计数器是在硬件加速器程序计数器范围之内的时候,硬件加速器启动,并且已转换的原生指令被从该硬件加速器发送给CPU,该原生程序计数器不用于确定从存储器中加载的指令。
以此方式,该硬件加速器可以在一定范围内欺骗该原生程序计数器,该范围对应于其中存储有基于堆栈的指令的程序计数器的范围。通过监控该程序计数器,硬件加速器总是可以知道什么时候其需要被操作和不需要被操作。因此,如果出现一个中断,导致数据程序计数器移动到一个超出硬件加速器程序计数器范围的范围,不需要从CPU给硬件加速器明确的指令,处理该中断而阻塞该硬件加速器。
本发明的又一个实施例包括:一个可操作地连接到中央处理单元的硬件加速器,该硬件加速器适合于将基于堆栈的指令转换为基于寄存器的指令,该基于寄存器的指令对中央处理单元来说是原生的。该硬件加速器包括一个微代码级。该微代码级包括微代码存储器。该微代码存储器输出包括多个字段,所述各字段包括第一字段组和控制位字段,该第一字段组对应于原生指令字段,而该控制位字段通过该微代码控制逻辑影响第一字段组的译码以产生一个原生指令。微代码部分的使用允许相同的常规硬件加速器结构利用各种各样的中央处理单元工作。在一个优选实施例中,微代码部分是和译码部分分离的。
附图简要说明
从下面结合附图的描述中可以进一步理解本发明。
图1是一个包括硬件Java加速器的本发明系统的示意图。
图2是一个举例说明使用本发明硬件Java加速器的示意图。
图3是一个举例说明本发明一个实施例的Java硬件加速器一些细节的示意图。
图4是一个举例说明在本发明的系统中的Java加速器指令转换实施例细节的示意图。
图5是一个举例说明本发明实施例的指令转换操作的示意图。
图6是一个举例说明使用指令级并行运算(instruction levelparallelism)的本发明实施例的指令转换系统的示意图。
图7是一个用于本发明一个实施例的例外(exception)字节码的列表。
图8是一个硬件加速器的实施例的示意图,该硬件加速器实施例供本发明的一个实施例使用。
图9是一个示意图,举例说明供本发明的硬件加速器使用的译码级。
图10是一个示意图,举例说明供图9的译码级使用的指令译码单元的一个实施例。
图11是一个示意图,举例说明供图8的实施例使用的一个微代码级的实施例。
图12是一个供图11的微代码级使用的微代码地址逻辑的示意图。
图13是一个供图11的实施例使用的原生指令设计者(composer)单元的示意图。
图14是一个供图13的原生指令设计者单元使用的寄存器选择逻辑的示意图。
图15举例说明一个本发明实施例的堆栈和变量寄存器管理器。
图16举例说明一个替代方案的本发明实施例的堆栈和变量寄存器管理器。
图17是供本发明一个实施例使用的原生PC监控器的示意图。
图18是供本发明一个实施例使用的重发缓冲器的示意图。
图19和20是举例说明本发明一个实施例的操作的示意图。
优选实施例详细说明
图1~7举例说明本发明应用的操作。
图1是一个系统20的示意图,示出和中央处理单元26一起使用的一个硬件Java加速器22。Java硬件加速器22允许Java虚拟机的一部分以硬件实现。这种硬件实现可加快Java字节码的处理。尤其是,在一个优选实施例中,Java字节码成为原生处理器指令的转换至少部分是在硬件Java加速器22中进行的。当以软件实施的时候,这一转换部分地成为该Java虚拟机中的瓶颈。在图1中,来自指令高速缓冲存储器24或者其它存储器的指令被提供给硬件Java加速器22。如果这些指令是Java字节码,硬件Java加速器22可以转换这些字节码为原生处理器指令,原生处理器指令经由多路复用器28被提供给CPU。如果使用了一个非Java码,可以使用多路复用器26来旁路该硬件加速器。Java堆栈包括帧、操作数堆栈、变量等等。
Java硬件加速器可以完成下列任务中的一些任务或者全部任务:
1.Java字节码译码;
2.只要可能,标识和编码指令级并行运算(ILP);
3.转换字节码为原生指令;
4.在一个与CPU有关的或者作为一个独立的堆栈的寄存器堆上管理Java堆栈;
5.在预先确定的Java字节码上产生有关指令的例外;
6.当原生CPU码被提供的时候,切换到原生CPU操作;
7.对于阵列指令实施跳跃查验;和
8.管理在与CPU有关的寄存器堆上的变量。
在一个优选实施例中,Java虚拟机的字节码解释器、Java寄存器和Java堆栈功能实现于硬件Java加速器中。垃圾收集堆(garbage collectionheap)和常数池区域可以被保存在标准存储器中,并且经由标准存储器索引访问。在一个实施例中,这些功能在例如写入阻碍(write barrier)的硬件中被加速。
Java硬件加速器的主要优点是可提高Java虚拟机工作的速度,并且允许使用现有的原生语言传统应用程序、软件库以及开发工具。专用的微处理器(其中Java字节码是原生指令)则不能进行访问那些传统的应用程序。
虽然在图1中Java硬件加速器表示成独立于中央处理单元,Java硬件加速器可以被结合进中央处理单元中。在那种情况下,中央处理单元具有一个Java硬件加速器子单元,用于将Java字节码转换为原生指令以通过CPU的主要部分操作。
图2是一个状态机示意图,示出本发明一个实施例的操作。模块32是加电状态。在加电期间,设定多路复用器28以旁路Java硬件加速器。在模块34中,运行原生指令启动程序。模块36示出该系统以原生方式执行原生指令,并且旁路Java硬件加速器。
在模块38中,该系统切换到Java硬件加速器方式。在Java硬件加速器方式中,Java字节码被传送给Java硬件加速器22,转换为原生指令,然后发送给CPU用于操作。
Java加速器方式可以对某些Java字节码产生例外。这些字节码不由硬件加速器22处理,而是在CPU26中处理。如模块40所示,该系统工作在原生方式,但是Java虚拟机在加速器中实现,该加速器进行字节码转换,并且处理在Java加速器方式中产生的例外。
难以用硬件处理的比较长和更复杂的字节码可以被选择去产生例外。图7是一个示出可能的字节码目录的列表,该字节码可以在一个优选实施例中引起例外。
图3是一个示意图,举例说明本发明的Java硬件加速器的一个实施例细节。该Java硬件加速器包括Java加速器指令转换硬件42。指令转换单元42用于转换Java字节码为原生指令。在下面对应图4更详细地描述Java加速器指令转换硬件42的一个实施例。这些指令转换硬件42使用存储在硬件Java寄存器44中的数据。硬件Java寄存器存储在Java虚拟机中定义的Java寄存器。该Java寄存器包括Java虚拟机的状态,影响其操作,并且在运行时刻被更新。在Java虚拟机中的Java寄存器包括PC,即表示多少字节码正在被执行的程序计数器(program counter);Optop,即一个指向操作数堆栈顶端的指针;帧,即一个指向当前方法的执行环境的指针;以及Java变量(Var),即一个指向目前执行的方法可利用的第一原生变量的指针。虚拟机规定这些寄存器为单个的32位字宽。该Java寄存器也被存储在Java堆栈中,该Java堆栈可以被作为硬件Java堆栈50实现,或者该Java堆栈可以被存储进相关的寄存器堆的CPU中。
在一个优选实施例中,硬件Java寄存器44可以包括供指令转换硬件42使用的附加的寄存器。这些寄存器可以包括一个表示切换到原生指令配置的寄存器和控制寄存器,以及一个表示该系统版本号的寄存器。
Java PC可用于从指令高速缓冲存储器24或者存储器获得字节码指令。在一个实施例中,Java PC由在多路复用器52中的中央处理单元26的标准程序计数器54多路复用。该标准PC54不在Java硬件字节码转换操作期间使用。在另一个实施例中,标准程序计数器54被用作Java程序计数器。
Java寄存器是Java虚拟机的一部分,并且不应该与通用寄存器46或者48相混淆,通用寄存器46或者48是由中央处理单元26操作的。在一个实施例中,该系统除了一个Java CPU寄存器堆48之外使用传统的CPU寄存器堆46。当在原生代码上运行时,路复用器56连接常规的寄存器堆46到CPU26的执行逻辑26c。当Java硬件加速器被激活的时候,Java CPU寄存器堆48代替常规的CPU寄存器堆46。在另一个实施例中,使用常规的CPU寄存器堆46。
如在下面对应图3和4所做描述,Java CPU寄存器堆48,或者在一个替代性实施例中描述的常规的CPU寄存器堆46,可用于存储部分操作数堆栈和一些变量。以这种方法,当操作数堆栈和变量值存储在JavaCPU寄存器堆48中,或者该值存储在常规的CPU寄存器堆46中时,来自Java加速器指令转换器42的原生的基于寄存器的指令可以运行。除了所发出的装入/存储指令之外,经由连接到存储器判优器62的上溢/下溢线路60,数据可以从该数据超高速缓存或者其它的存储器58被写入和离开Java CPU寄存器堆48。数据往返于存储器的上溢/下溢传送可以与CPU操作同时进行。另一方面,当该CPU不工作时,上溢/下溢传送可以明确地进行。当Java堆栈上溢或者下溢的时候,上溢/下溢总线60可以被作为一个三态总线或者作为二个独立的总线实现,去读取进入该寄存器堆的数据和写离开该寄存器堆的数据。
另一方面,用于该CPU的寄存器堆可以被作为具有原生指令的单个寄存器堆实现,该原生指令用于操纵加载操作数堆栈和变量值往返于存储器。另一方面,可以使用多个Java CPU寄存器堆:一个寄存器堆用于变量值,另一个寄存器堆用于操作数堆栈值,以及另一个寄存器堆用于存放方法环境信息的Java帧堆栈。
Java加速器控制器(协同处理单元)64可用于控制硬件Java加速器,从硬件Java寄存器44和Java堆栈50读入和读出,并且当一个“分支占用”信号来自CPU执行逻辑26c时,刷新(flush)Java加速器指令转换流水线。
CPU26被分成各流水线级,包括有指令取出26a、指令译码26b、执行逻辑26c、存储器存取逻辑26d、及写回逻辑26e。执行逻辑26c执行原生指令,从而可以确定是否采用了一个分支指令,并且发出“采用分支”信号。在一个实施例中,执行逻辑26c监控用于检测支路的程序地址。图4举例说明一个可用于本发明的Java加速器指令转换器的实施例。指令缓冲器70存储来自指令高速缓冲存储器的字节码指令。字节码被发送给一个并行译码单元72,并行译码单元72同时译码多个字节码。为了允许指令级并行运算,多个字节码被同时处理。即,多个字节码可以被转换为较少数量的原生指令。
经过译码的字节码被发送给一个状态机单元74和运算逻辑单元(ALU)76。ALU 76被提供去重新排序字节码指令以使它们更容易被状态机74运行,并且实施各种各样包括计算存储器索引的算术功能。状态机74使用查询表78转换字节码为原生指令。因此,状态机74提供一个表示在微代码查询表78中想要的原生指令的地址。计数器被保持以保存已经在操作数堆栈上设置了多少个输入的数字,以及跟踪和更新在存储器和寄存器堆中的操作数堆栈的顶端。在一个优选实施例中,微代码查询表78的输出在线路80上与运行于原生CPU寄存器堆中的寄存器的指示添加。该寄存器指示来自于计数器并且译自于字节码。为了实现这些,必须具有一个硬件指示,表明在寄存器堆的哪些入口有哪些操作数和变量。在此基础上构成原生指令。另一方面,这些寄存器指示可以直接发送给如图3所示的Java CPU寄存器堆48。
除了在Java CPU寄存器堆48中或者在常规的CPU寄存器堆46中的堆栈和变量的设置指示之外,状态机74能访问在44中的Java寄存器。缓冲器82提供转换的原生指令给CPU。
本发明一个实施例的Java硬件加速器的操作在图5和6中举例说明。图5的部分I示出Java字节码的指令转换。对应于助记符iadd的Java字节码被Java虚拟机解释为一个采用操作数堆栈的顶端二个值的整数操作,将其相加,并将结果推到操作数堆栈的顶端。该Java转换机转换Java字节码为原生指令,诸如指令ADDR1,R2。这是一个原生于CPU的指令,表示寄存器R1中的值与寄存器R2中的值相加,并且在寄存器R2中存储这个结果。R1和R2是在操作数堆栈中的顶端二个入口s。
如图5部分II中所示,Java寄存器包括一个“值A”的PC值,其被加1为“值A+1”。Optop值从“值B”改变为“值B-1”,以表示操作数堆栈的顶端处于一个新的位置。指向变量列表开始的变量基准值不改变。在图5部分III中,原生CPU寄存器堆或者在图3中的Java CPU寄存器堆48的内容被示出。Java CPU寄存器堆从寄存器R0~R5开始,寄存器R0~R5包括操作数堆栈值以及寄存器R6~R7包括变量值。在操作原生指令之前,寄存器R1包括操作数堆栈的顶端值。寄存器R6包括第一个变量。硬件用于在寄存器堆中检测变量的可利用性。如果该变量是不可用的,硬件和微代码一起发出加载指令给原生CPU。一旦一个变量值已经被在RF中更新,其入口就标记为正在修改,从而当进行方法调用的时候,仅在存储器中更新的变量被回复给存储器。这样就导致明显更高性能的方法。
在执行原生指令之后,寄存器R2此刻包括操作数堆栈的顶端值。寄存器R1不再包括一个有效的操作数堆栈值,并且可以用来由一个操作数堆栈值改写。
图5的部分IV示出操作数堆栈和变量的存储位置,其可以被存储在数据超高速缓存58或者主存储器中。为了方便起见,举例说明的存储器没有举例说明所有的虚拟存储器配置。在执行原生指令之前,操作数堆栈的顶端地址Optop是“值B”。在执行原生指令之后,操作数堆栈的顶端地址是包括原生指令结果的“值B-1”。请注意,操作数堆栈值“4427”可以通过上溢/下溢线路60被写入寄存器R1中。当转换到原生方式时,在Java CPU寄存器堆48中的数据应被写入到数据存储器。
在硬件Java寄存器44、Java CPU寄存器堆48和数据存储器之间必须保持一致性。CPU 26和Java加速器指令转换单元42被用流水线输送,并且每当有一个“分支采用”信号时,必须能消除对于硬件Java寄存器44的任何改变和用于Java CPU寄存器堆48的控制信息的改变。系统最好是使用缓冲器(未示出)以确保这种一致性。另外,Java指令转换必须进行,以便避免在指令转换单元和CPU中的流水线故障。
图6是一个举例说明具有本发明的指令级并行地址运算操作的示意图。在图6中,Java字节码iload_n和iadd被Java字节码转换器转换为单个的原生指令ADDR6,R1。在Java虚拟机中,iload_n将由Java寄存器变量表示的顶端原生变量推入操作数堆栈。
在本发明中,Java硬件转换器可以合并iload_n和iadd字节码为单个原生指令。如图6中部分II所示,Java寄存器PC被从“值A”更新为“值A+2”。Optop值仍然是“值B”。值Var保持在值“C”。
如图6中部分III所示,在原生指令ADDR6,R1执行存储在寄存器R6中的第一原生变量值之后,“1221”被加到包含在寄存器R1中的操作数堆栈的顶端值,并且结果存储在寄存器R1中。在图6的部分IV中,Optop值没有改变,然而在寄存器的顶端中的值包含增加指令的结果,1371。这个例子显示本发明以原生CPU操作而仅支持二个操作数。本发明还可以支持三个操作数以及超长指令字(VLIW)CPU的操作数。
对于某些由硬件和微代码构成(120)的字节代码,诸如SiPush、BiPush等等,本发明使得与原生指令紧邻的字段的符号扩展的数据可利用。做为选择,这个数据可以被当作一个协处理器寄存器。如在本发明中所述,协处理器寄存器读/写入指令可以由硬件加速器发出。另外,微代码具有几个字段,其有助于构成原生指令。
本发明的Java硬件加速器尤其非常适合于一种嵌入的解决方案,其中硬件加速器被作为现有的CPU设计而置于相同的芯片上。这允许使用原先存在的软件库和用于传统应用的开发工具。此外,本实施例的体系结构是可伸缩的,从而适合从智能卡到桌面解决方案范围的各种各样的应用。这种可伸缩性在图4的Java加速器指令转换单元中实现。例如,对于各种各样的不同的CPU结构,查询表78和状态机74可以被修改。这些CPU结构除了复杂指令系统计算机(CISC)结构之外包括简化指令系统计算机(RISC)结构。本发明还可以被超级标量CPU或者超长指令字(VLIW)计算机使用。
图8~20举例说明本发明的操作。图8是一个示出本发明一个实施例的系统100的示意图。系统包括一个CPU 101和一个硬件加速器。硬件加速器部分包括一个译码级102,用于从存储器接收Java字节码。译码级102最好是使用指令级并行运算,其中一个以上Java字节码可以被转换为单个原生指令。在一个优选实施例中,系统100包括一个微代码级104,其从译码级102接收信号,并且被用于构成原生指令。微代码级104允许从单个字节码产生多个原生指令。当它们被发送给CPU101之时,重发缓冲器106在重发缓冲器106中存储一份转换的指令。
重发缓冲器106监控原生PC值110。在一个优选实施例中,当硬件加速器被激活的时候,硬件加速器不使用原生PC值去确定从存储器中加载指令的存储位置。原生PC值被代之以保持在一个欺骗的范围内,其表示硬件加速器被激活。在一个优选实施例中,原生PC监控器110检测是否原生PC值是在欺骗的范围之内。如果是这样的话,多路复用器112从硬件加速器发送转换的指令到CPU101。不然的话,来自存储器的原生指令被加载给CPU101。当在欺骗的范围中的时候,来源于存储器的地址是来自加速器的Java PC。否则,原生PC来源于存储器。
如果出现一个中断,原生PC值将达到一个处于欺骗范围之外的值。PC监控器110于是将阻塞硬件加速器。当出现一个中断返回的时候,CPU101将被刷新,并且当中断返回时,原生PC值108返回到在中断之前的PC值。重发缓冲器106于是将重新发送从CPU101刷新的存储的原生指令给CPU101,其对应于这个现有的原生PC值。借助于这个系统,当出现一个中断时,硬件加速器不需要被刷新,也不需要预先转换的Java字节码被再装入硬件加速器。因此,使用重发缓冲器106可以加速操作并且从中断恢复。
CPU 101与寄存器堆113有关。这个寄存器堆是原生CPU的标准寄存器堆,可操作地连接到该CPU的ALU,但是为了说明起见在这里被分别地示出。寄存器堆113存储堆栈和变量值,其可以通过转换的指令使用。堆栈和变量管理器114跟踪存储在寄存器堆113中的所有的信息,并且使用它以有助于微代码级工作。如在下面描述的,在一个实施例中,存在固定数量的寄存器被用于堆栈值和变量值。例如,六个寄存器可以用于该顶端六个堆栈值,并且六个寄存器被用于六个变量值。
在本发明的另一个实施例中,堆栈和变量管理器分配堆栈和变量值给在寄存器堆中不同的寄存器。这个替换的实施例的一个优点是,有时候由于一个调用请求堆栈和变量值可以交换,并且这样的一个交换可以在该堆栈和变量管理器114更有效地进行,而不是产生许多原生指令去实现这一点。
在一个实施例中,多个重要的值可以存储在硬件加速器中,以协助系统的操作。存储在该硬件加速器中的这些值有助于改善该系统的操作,尤其当该CPU的寄存器堆被用于存储Java的堆栈部分的时候。
硬件加速器最好是存储一个堆栈值顶端的指示。这个顶端堆栈值有助于从存储器加载堆栈值。当指令被从基于堆栈的指令转换为基于寄存器的指令之时,该顶端堆栈值被更新。当使用指令级并行运算的时候,属于单个基于寄存器的指令的每个堆栈基准指令需要被估算其对Java堆栈的影响。
在一个实施例中,一个操作数堆栈深度值被保存在硬件加速器中。这个操作数堆栈深度表示在CPU的寄存器堆中操作数堆栈的动态深度。因此,如果四个堆栈值被存储在该寄存器堆中,堆栈深度指示器将读出“4”。知道堆栈在寄存器堆中的深度有助于加载和存储堆栈值进出该寄存器堆。
在一个优选实施例中,在硬件加速器之内保存最小堆栈深度值和最大堆栈深度值。堆栈深度值与该最大和最小堆栈深度值相比较。当该堆栈值低于最小值的时候,硬件加速器构成加载指令将堆栈值从存储器加载到CPU的寄存器堆。当堆栈深度高于最大值的时候,硬件加速器构成存储指令经堆栈值存储回存储器。
在一个实施例中,在CPU寄存器堆中至少操作数堆栈的顶端四个(4)入口作为一个环形缓冲器,该环形缓冲器保存在加速器中,并且可操作地连接到一个上溢/下溢单元。
硬件加速器此外最好是存储一个操作数和存储在CPU的寄存器堆中的变量的指示。这些指示允许硬件加速器去从输入的基于堆栈的指令构成转换的基于寄存器的指令。
硬件加速器同样最好是在存储器中存储一个变量基准和操作数基准的指示。这允许在CPU的寄存器堆和存储器之间加载和存储变量和操作数以构成指令。例如,当寄存器堆中没有一个可用的变量时,硬件发出加载指令。该硬件适于将变量数目乘以4,并且加上变量基准以产生变量的存储位置。所产生的指令是基于了解该变量基准是在一个临时的原生CPU寄存器中。变量数乘以4可以使被构成作为原生指令紧邻的字段是可利用的,其可以是一个带有地址的存储器访问指令,该地址是该临时寄存器的内容,该临时寄存器保持一个对该变量基准加上一个即时偏移的指针。做为选择,该变量的最终存储位置可以由该CPU作为一个由该加速器保存的指令而读取,然后该变量可以被加载。
在一个实施例中,当通过Java字节代码的执行而更新时,硬件加速器将该变量标记为经过修改的。对于某些字节码,该硬件加速器可以将标记为经过修改的变量复制到系统存储器。
在一个实施例中,硬件加速器构成原生指令,其中该原生指令操作数包括至少二个原生CPU寄存器堆索引,这里该寄存器堆内容是用于操作数堆栈和变量的数据。
图9举例说明本发明一个实施例的译码级。这个译码级102′被分成预取级116和指令译码118。预取级116包括一个字节码缓冲器和调准预取级单元120,其从一个存储器(未示出)接收原始的字节码。Java字节码缓冲器控制部件122提供指令去确定什么时候从该存储器中加载附加的字节码。地址单元124使用Java程序计数器126去确定下一个加载的字节码的位置。如上所述,当该硬件加速器被激活时,Java程序计数器被用于从包括Java字节码的存储器中得到下一个字。原生PC被保存在一个欺骗区域内,且不在硬件加速器被激活时用以取得下一个指令。字节码缓冲器调准单元120包括许多来自存储器的字节码。当指令被从指令译码单元118传递的时候,多个字节被从字节码缓冲器调准单元120上除去。在线路128上的信号表示由指令译码单元118使用的字节码的数目。在一个实施例中,在线路130上的该译码的数据被发送给微代码级。这个数据可以包括微代码起始地址数据130a、索引/地址和变量数据130b,以及变量控制数据130c。
图10示出一个指令译码单元118′。在这个实施例中,多个字节被发送给一个指令译码单元。单个的译码单元132、134、136、138和140接收和译码该字节。请注意到,相邻字节的值影响该字节如何被译码。例如,如果字节A是一个两字节指令的开始,字节B的值就被解释为该两字节指令的后半部分。指令级并行运算逻辑142接收所译码的信息,然后确定用于主要字节码的微代码起始地址。通过按照转换的指令访问的寄存器的选择,辅助的字节代码可以与主要字节码结合。在下面对应于图19和20描述这一实施例的一个例子。
加速器ALU 144被用于计算索引地址等等。该加速器ALU被连接到寄存器池。使用加速器ALU允许某些简单计算被从CPU单元移动到硬件加速器单元,因此允许Java字节码被转换为较少的原生指令。“变量选择+其它控制”单元146确定哪些寄存器被用作变量。来自ILP逻辑单元142的变量控制线表示如何解释这些变量。变量和相关的变量控制线在原生CPU的指令中对于每个操作数字段都是可用的。
在一个实施例中,当在原生CPU寄存器堆中不存在变量的时候,硬件加速器发出原生加载指令,存储器地址则由在硬件加速器中的ALU计算。
在图11中示出的微代码级104′包括一个微代码地址逻辑148和微代码存储器150。微代码地址逻辑发送微代码地址给微代码存储器150。然后,微代码存储器150发送该地址的内容给原生指令设计者逻辑152,该原生指令设计者逻辑152产生原生指令。每个微代码存储器线路包括主要指令部分联线154、控制位联线156以及更新堆栈指示器位联线158。微代码地址逻辑148和微代码150两者可以产生一连串的原生指令,直至更新堆栈位被发送给微代码地址逻辑148——在该点,微代码地址逻辑从译码逻辑(未示出)获得另一个起始地址。原生指令设计者在联线154上接收主要指令部分(即来自译码的控制位)、索引地址、变量以及变量控制。这些输入使原生指令设计者152得以构成原生指令,其被发送给重发缓冲器和原生CPU。
图12示出本发明一个实施例的微代码地址逻辑148′。来自于译码逻辑的起始地址进入到多路复用器154。多路复用器154可以或者发送该起始地址或者一个递增的或者计算得出的值给微代码RAM。在一个优选实施例中,当更新堆栈位未被设置时,在微代码中的下一个部件的地址被ALU 156计算,并且提供给多路复用器154以发送给微代码存储器(未示出)。通过包括跳转到微代码存储器的其它区域可节省在微代码RAM存储器中的空间。这些跳转可以通过在单元158中的计算或者通过在线路160上提供该地址来完成。
图13举例说明一个供本发明使用的原生指令设计者单元的实施例。在这个实施例中,提供了多个寄存器选择逻辑单元162、164和166。每个寄存器选择逻辑单元可用于选择一个以原生指令使用的寄存器。特定资源逻辑单元168和选择逻辑170允许选择专用指令。
图14示出本发明一个实施例的寄存器选择逻辑161′。寄存器确定逻辑172根据变量控制位、微代码控制位和堆栈及变量寄存器管理器信息而确定使用哪个寄存器。例如,如果指令是加载该堆栈的顶端,则随后字节码寄存器确定逻辑172就可以使用这个堆栈的顶端值去确定包含该堆栈顶端值的寄存器R10,从而在转换的指令中使用寄存器R10。
寄存器重新映射单元174进行寄存器重新映射。在常规的CPU中,某些寄存器被保留。寄存器重新映射单元174允许译码器逻辑去假定堆栈和变量寄存器是虚拟的,其简化了计算。多路复用器176允许在线路171上的值无需修改地传送。
图15举例说明一个堆栈和变量寄存器管理器114′的实施例。堆栈和变量寄存器管理器保存指示有什么存储在CPU的寄存器堆的变量和堆栈寄存器中。这个信息然后被提供给译码级和微代码级以帮助译码Java字节码和产生适当的原生指令。
在一个优选实施例中,堆栈和变量寄存器管理器的一个作用是保存堆栈顶端的指示。因此,例如若寄存器R1~R4存储4个来自存储器或者通过执行字节代码的顶端堆栈值,随着数据被加载进、出于寄存器堆,该堆栈的顶端将改变。因此,在该寄存器堆中寄存器R2可以是该堆栈的顶端,而寄存器R1是该堆栈的底端。当一个新数据被加载进在该寄存器堆内的堆栈的时候,数据将被加载进寄存器R3,于是寄存器R3变为该堆栈的新的顶端,该堆栈的底端仍然是R1。当在寄存器堆中的堆栈上加载二个以上项目时,在寄存器堆中的堆栈的新顶端将是R1,但是最初的R1将由加速器上溢/下溢单元写回给存储器,且R2将是在CPU寄存器堆中的部分堆栈的底端。
图16举例说明一个替代方案的堆栈和变量寄存器管理器114″。在这个替代方案的实施例中,保持一个寄存器分配表172。该寄存器分配表保存在哪些寄存器中存储有哪些变量和堆栈变量的指示。当一个指令被译码的时候,使用寄存器分配表172查验是否一个变量或者堆栈值被存储在寄存器堆中。如果存在一个与输入堆栈或者变量值的匹配,在CPU的寄存器堆内的值被使用。如果不存在匹配,可以从存储器加载该值进该寄存器堆,并且该寄存器分配表被更新。在一个实施例中,一个调用分配逻辑单元174可操作地与寄存器分配表相连接。当发生调用的时候,典型地一些堆栈和变量的值被交换。通过使用再分配逻辑174在寄存器分配表172内重新指定该值,可以加速调用操作。
图17示出一个原生PC监控器110′的实施例。原生PC值与一个高值域寄存器和一个低值域寄存器相比。如果该原生PC值是在这个范围之内,硬件加速器被启动而使用线路178。否则,该硬件加速器被停用。部件180测试是否原生PC值接近于欺骗范围的高端。如果是这样的话,系统促使跳转到原生PC单元的一个更低的值。
图18举例说明一个重发缓冲器106′的实施例。该重发缓冲器接收转换的指令,并且连同相关的原生PC值一起存储它们。只要没有中断,原生PC值将连续地递增,并且下一个指令和当前的原生PC被存储在该重发缓冲器中,并且指令发出给CPU。当出现一个中断的时候,该CPU流水线被刷新,包括非执行指令,其中在该重发缓冲器中存在一份副本。当从一个中断发生返回的时候,CPU被刷新,并且在该中断之前的原生PC值被恢复。这个恢复的原生PC值和一个存储在PC值存储器184中的原生PC相匹配,导致一个在老的指令存储器186中缓存的指令被提供给CPU。该老的指令存储器和该PC值存储器被同步。一旦所有的老的指令被提供给CPU 102,原生PC值将超出在存储器184中所有的老的PC值的范围,并且新的转换的指令将被提供。重发缓存器的深度取决于在CPU 102(未示出)中流水线级的数目。在诸如分支这样的特定条件下,重发缓存器被刷新。如上所述,该重发缓存器减轻了硬件加速器的操作。硬件加速器不需要知道CPU的中断返回操作的细节。因此,不需要较大修改硬件加速器体系结构,该硬件加速器就可以用各种各样不同的CPU操作。对微代码级的改变足以改变硬件加速器,使得其可以被不同的CPU使用。
图19和20举例说明本发明的系统的一个实施例的操作。在图19中,所示多个指令由译码器级接收。顶端二个指令是整数加载,而底端指令是整数相加。系统对这些字节码的理想结合将是主要操作码为相加,并且二个加载结合在一起。该系统测试是否每个变量都在存储器中。在这个例子中,iload31不是一个存储在存储器中的变量。因此,变量31的值就需要从存储器中被加载进一个空闲寄存器。在这个例子中,存储在堆栈管理器中的变量基准被加载进临时的寄存器R10。该字被放置进堆栈的顶端,或者在这种情况下,在该寄存器堆中指示堆栈的顶端。
图20举例说明一个当使用iload_3和iload_5的时候的例子。在这个例子中,这两个变量被存储在寄存器堆内。因此,相加可以与二个加载结合。在这个例子中,Var_H被表示为3,Var_L被表示为5。操作(op)类型被表示为iadd。Var_H控制和Var_L控制表示该变量是加载类型并且在寄存器堆中。堆栈修改的顶端是+1。这是因为对二个加载要将二个值加载到堆栈上,并且作为主要加法操作的结果而从堆栈减去一个值。
实际上,结合以上做了描述的附图可以理解,变量3和变量5已经存储在二个寄存器堆内。这些寄存器堆的值由该系统所确定。指令iload3、iload5和iadd通过确定哪二个寄存器存储变量3和变量5和确定哪个寄存器去存储该堆栈的新的顶端而执行。如果变量3被存储在寄存器R9中,而变量5被存储在寄存器R11中,且堆栈的顶端将被存储在寄存器R2中,则转换的原生指令就是在寄存器R9内的值加到在寄存器R11内的值上且将该值存储到寄存器R2。因此,这个原生指令同时进行三个字节码的操作,作为在原生CPU上的操作而导致指令级并行运算。
另外,在硬件加速器内配置了一个ALU,这里译码的字节代码指令用于字节码诸如GOTO和GOTO_W,在字节码指令之后紧邻的分支偏移按照被符号扩展和被添加给当前的字节码指令的Java PC,并且结果被存储在Java PC寄存器中。除了将下一个字节代码指令的Java PC推到操作数堆栈上之外,JSR和JSR_W字节码指令也如此进行。
Java PC被由硬件加速器计算的一个值递增。这个递增值是基于在当前译码期间被安排的字节的数目,其由于ILP而可以包括一个以上字节代码。类似地,SiPush和BiPush指令也被符号扩展,并且在所组成的原生指令的紧邻的字段中使其可利用。在某些处理器中,原生指令的紧邻的字段比希望的偏移或者符号扩展的常数具有较小的位宽,因此这个数据可以作为存储映射或者I/O映射读取。
虽然参考以上所述的实施例已经描述了本发明,各优选实施例和方法的这种描述不应视为有限定意义。例如,在说明书或者权利要求中的术语Java应视为涵盖了使用基础Java概念的后继的编程语言或者其它编程语言(使用诸如字节码的通用指令以表示虚拟机的操作)。还应理解,本发明的所有方面不限于特定描述,或是在此所提出的配置。当参考了本发明的内容,对本发明所公开的各种各样的实施例(以及本发明的其它变化方案)在形式上和细节方面进行某些修改对所属技术领域的专业人员将是显而易见的。因此,期望以所附权利要求来涵盖落在本发明的实质精神和范围之内的所有这样的修改或者变化。

Claims (72)

1.一种用于执行基于堆栈和寄存器的指令的系统,包括:
用于执行所述基于寄存器的指令的执行逻辑;
一个与该执行逻辑相关的寄存器堆;和
一个与该执行逻辑配合处理所述基于堆栈的指令的硬件加速器,其中该硬件加速器标记与所述寄存器堆中的所述基于堆栈的指令相关的变量,在所述变量作为处理所述基于堆栈的指令的结果而被更新的时候将其标记为经过修改的,而使得被标记为经过修改的所述变量能够选择性地被写入存储器中。
2.根据权利要求1所述的系统,其中所述硬件加速器和所述执行逻辑位于一CPU内。
3.根据权利要求1所述的系统,其中所述硬件加速器与所述执行逻辑配合,通过将所述基于堆栈的指令转换成基于寄存器的指令,以在所述执行逻辑中执行,来处理所述基于堆栈的指令。
4.根据权利要求1所述的系统,其中所述寄存器堆用于为所述基于寄存器堆的指令存储数据,且一操作数堆栈作为环形缓冲器被用于所述基于堆栈的指令。
5.一种用于执行基于堆栈和寄存器的指令的CPU,包括:
用于执行所述基于寄存器的指令的执行逻辑;
一个与该执行逻辑相关的寄存器堆;和
一个与该执行逻辑配合处理所述基于堆栈的指令的硬件加速器,其中该硬件加速器通过符号扩展一个在“JSR”或“JSR_W”字节码之后紧邻的分支偏移并将其附加到一当前字节码指令的虚拟机程序计数器即PC,由所述“JSR”或者“JSR_W”字节码来产生一个新的虚拟机程序计数器即PC,计算返回的虚拟机程序计数器并且将该返回的虚拟机程序计数器即PC推到一操作数堆栈上。
6.根据权利要求5所述的CPU,其中所述硬件加速器和所述执行逻辑位于一CPU内。
7.根据权利要求5所述的CPU,其中所述硬件加速器与该执行逻辑配合,通过将所述基于堆栈的指令转换成基于寄存器的指令,以在所述执行逻辑中执行,来处理所述基于堆栈的指令。
8.一种用于执行基于堆栈和寄存器的指令的中央处理单元即CPU,包括:
用于执行所述基于寄存器的指令的执行逻辑;
一个与该执行逻辑相关的寄存器堆;和
一个与该执行逻辑配合处理所述基于堆栈的指令的硬件加速器,其中该硬件加速器执行对虚拟机SiPush和BiPush字节码的符号扩展,并且对所述基于堆栈的指令构成的一基于寄存器的指令的紧邻字段增补符号扩展数据。
9.根据权利要求8所述的CPU,其中所述硬件加速器与该执行逻辑配合,通过将所述基于堆栈的指令转换成基于寄存器的指令,以在所述执行逻辑中执行,来处理所述基于堆栈的指令。
10.一种用于执行基于堆栈和寄存器的指令的中央处理单元即CPU,包括:
用于执行所述基于寄存器的指令的执行逻辑;
一个与所述执行逻辑相关的寄存器堆;和
一个与该执行逻辑配合处理所述基于堆栈的指令的硬件加速器,其中该硬件加速器执行对虚拟机SiPush和BiPush字节码的符号扩展,并且使符号扩展数据可以为该执行逻辑所读取。
11.根据权利要求10所述的CPU,其中所述硬件加速器与该执行逻辑配合,通过将所述基于堆栈的指令转换成基于寄存器的指令,以在所述执行逻辑中执行,来处理所述基于堆栈的指令。
12.根据权利要求5、8及10中任一项所述的CPU,其中所述寄存器堆用于为所述基于寄存器的指令存储数据,且一操作数堆栈作为环形缓冲器被用于所述基于堆栈的指令。
13.一种用于执行基于堆栈和寄存器的指令的中央处理单元即CPU,包括:
用于执行所述基于寄存器的指令的执行逻辑;
一个与所述执行逻辑相关的寄存器堆;和
一个与该执行逻辑配合处理所述基于堆栈的指令的硬件加速器,其中所述硬件加速器:
在所述寄存器堆中为所述基于堆栈的指令保持一操作数堆栈,使得所述寄存器堆中的该操作数堆栈形成一环形缓冲器,该环形缓冲器与一上溢/下溢装置连接,用于在存储器与所述寄存器堆之间移动所述操作数堆栈内的操作数;并将处理所述基于堆栈的指令的所需变量装入所述寄存器堆;
通过符号扩展一个在“GOTO”或“GOTO_W”字节码之后紧邻的分支偏移,由所述“GOTO”或“GOTO_W”字节码来产生一个新的虚拟机程序计数器,并将其增补给一当前字节码指令的虚拟机程序计数器;
通过扩展符号一个在”JSR”或“JSR_W”字节码之后紧邻的分支偏移,并将其增补给一当前字节码指令的虚拟机程序计数器,由所述转移子例程即”JSR”或“JSR_W”字节码来产生一个新的虚拟机程序计数器,计算返回的虚拟机程序计数器且将该返回的虚拟机程序计数器即PC推到所述操作数堆栈上;
执行对虚拟机SiPush和BiPush字节码的符号扩展,并且对根据所述基于堆栈的指令构成的一基于寄存器的指令的紧邻字段,增补符号扩展数据;
执行对虚拟机SiPush和BiPush字节码的符号扩展,并且使符号扩展数据可以为所述执行逻辑所读取;且
根据选定的基于堆栈的指令来产生例外。
14.根据权利要求13所述的CPU,其中所述例外是用基于寄存器的指令处理的。
15.根据权利要求13所述的CPU,其中所述硬件加速器与该执行逻辑配合,通过将所述基于堆栈的指令转换成基于寄存器的指令,以在所述执行逻辑中执行,来处理所述基于堆栈的指令。
16.一种中央处理单元即CPU,包括:
执行逻辑,用于接收和处理对应于基于寄存器的指令的输入;
一硬件加速器,用于处理基于堆栈的指令,以产生能够被所述执行逻辑处理的输出;
一操作数堆栈,用于基于堆栈的指令,该操作数堆栈作为一环形缓冲器被保持在一寄存器堆中;
一上溢/下溢装置,用于在一寄存器堆与一存储器之间移动所述操作数堆栈内的操作数,所述寄存器堆还存储与所述基于寄存器的指令相关的数据;
一字节码缓冲器,该字节码缓冲器从所述存储器接收基于堆栈的指令;
一指令译码单元,其连接到所述字节码缓冲器,用于对从所述字节码缓冲器接收的指令进行译码;及
一字节码缓冲器控制部件,该字节码缓冲器控制部件接收字节码的数目的指示,用该指示来控制将所述基于堆栈的指令从所述存储器装入所述字节码缓冲器。
17.根据权利要求16所述的CPU,其中所述指令译码单元产生存储于所述寄存器堆中的变量的指示。
18.根据权利要求16所述的CPU,进一步包括一微代码单元,其连接到所述指令译码单元,用于接收来自该指令译码单元的输出。
19.根据权利要求16所述的CPU,其中所述硬件加速器根据选定的基于堆栈的指令来产生例外。
20.根据权利要求16所述的CPU,其中所述指令译码单元并行地对从所述字节码缓冲器接收的多个指令进行译码。
21.根据权利要求18所述的CPU,其中所述指令译码单元产生所述微代码单元的起始地址。
22.根据权利要求21所述的CPU,进一步包括一为所述微代码选择所述起始地址或一递增起始地址的装置。
23.根据权利要求16所述的CPU,进一步包括一通用指令高速缓存,用于所述基于堆栈的指令和基于寄存器的指令。
24.根据权利要求18所述的CPU,其中所述指令译码单元包括多个译码器。
25.根据权利要求21所述的CPU,其中所述微代码单元产生堆栈更新指示,以使得所述指令译码单元产生所述微代码单元的新的起始地址。
26.一种中央处理单元即CPU,包括:
执行逻辑,用于接收和处理对应于基于寄存器的指令的输入;
一硬件加速器,用于处理基于堆栈的指令,以产生能够被所述执行逻辑处理的输出;
一操作数堆栈,用于所述基于堆栈的指令,该操作数堆栈是作为一环形缓冲器被保持在一寄存器堆中的;
一上溢/下溢装置,用于在一寄存器堆与一存储器之间移动所述操作数堆栈内的操作数,所述寄存器堆还存储与所述基于寄存器的指令相关的数据;
一字节码缓冲器,该字节码缓冲器从所述存储器接收基于堆栈的指令;及
一指令译码单元,其连接到所述字节码缓冲器,并行地对从所述字节码缓冲器接收的多个指令进行译码。
27.根据权利要求26所述的CPU,其中所述指令译码单元产生存储于所述寄存器堆中的变量的指示。
28.根据权利要求26所述的CPU,其中所述指令译码单元包括多个译码器。
29.根据权利要求26所述的CPU,其中所述硬件加速器根据选定的基于堆栈的指令来产生例外。
30.根据权利要求26所述的CPU,进一步包括一微代码单元,其连接到所述指令译码单元,用于接收来自所述指令译码单元的输出。
31.根据权利要求26所述的CPU,其中所述指令译码单元产生所述微代码单元的起始地址。
32.根据权利要求31所述的CPU,进一步包括一选择所述微代码单元的所述起始地址或一递增起始地址的装置。
33.根据权利要求32所述的CPU,其中所述微代码单元产生堆栈更新指示,以使得所述指令译码单元产生所述微代码单元的新的起始地址。
34.一种中央处理单元即CPU,包括:
执行逻辑,用于接收和处理对应于基于寄存器的指令;
一硬件加速器,用于处理基于堆栈的指令,以产生能够被所述执行逻辑处理的输出;
一操作数堆栈,用于所述基于堆栈的指令,该操作数堆栈是作为一环形缓冲器被保持在一寄存器堆中的;
一上溢/下溢装置,用于在一寄存器堆与一存储器之间移动所述操作数堆栈内的操作数,所述寄存器堆还存储与所述基于寄存器的指令相关的数据;
一字节码缓冲器,该字节码缓冲器从所述存储器接收基于堆栈的指令;及
一指令译码单元,其连接到所述字节码缓冲器,以对从所述字节码缓冲器接收到的指令进行译码,并提供有多少字节已被处理的指示;及
一通用程序计数器,用于所述基于堆栈的指令和所述基于寄存器的指令,其中所述通用程序计数器是由被处理字节数量的所述指示来递增的。
35.根据权利要求34所述的CPU,进一步包括一通用指令高速缓存,用于所述基于堆栈的指令和所述基于寄存器的指令。
36.根据权利要求34所述的CPU,其中所述指令译码单元产生存储于所述寄存器堆中的变量的指示。
37.根据权利要求34所述的CPU,进一步包括一微代码单元,其连接到所述指令译码单元,用于接收来自该指令译码单元的输出。
38.根据权利要求34所述的CPU,其中所述硬件加速器根据选定的基于堆栈的指令来产生例外。
39.根据权利要求38所述的CPU,其中所述例外是用基于寄存器的指令处理的。
40.根据权利要求34所述的CPU,其中所述指令译码单元并行地对从所述字节码缓冲器接收的多个指令进行译码。
41.根据权利要求37所述的CPU,其中所述指令译码单元产生所述微代码单元的起始地址。
42.根据权利要求41所述的CPU,进一步包括一选择所述微代码单元的所述起始地址或一递增起始地址的装置。
43.根据权利要求40所述的CPU,其中所述指令译码单元包括多个译码器。
44.根据权利要求41所述的CPU,其中所述微代码单元产生堆栈更新指示,以使得所述指令译码单元产生所述微代码单元的新的起始地址。
45.一种用于中央处理单元即CPU的方法,包括:
对基于寄存器的指令,在能够处理所述基于寄存器的指令的执行逻辑中,处理所述基于寄存器的指令;和
对基于堆栈的指令,在一硬件加速器中进行处理,将所述基于堆栈的指令输入能够处理所述基于寄存器的指令的所述执行逻辑,其中所述硬件加速器标记一寄存器堆中的与所述基于堆栈的指令相关的变量,在所述变量作为所述基于堆栈的指令的处理结果而被更新的时候将其标记为经过修改的,以使得被标记为经过修改的该变量能够被选择性地写入一存储器。
46.根据权利要求45所述的方法,其中处理所述基于堆栈的指令包括并行地在一指令译码单元中对多个基于堆栈的指令进行译码。
47.根据权利要求45所述的方法,其中处理所述基于堆栈的指令包括根据选定的基于堆栈的指令来产生例外。
48.根据权利要求46所述的方法,其中处理所述基于堆栈的指令包括在所述指令译码单元中产生一微代码单元的起始地址。
49.根据权利要求48所述的方法,处理所述基于堆栈的指令包括选择所述微代码单元的起始地址或一递增起始地址。
50.根据权利要求45所述的方法,进一步包括将所述基于堆栈的指令和所述基于寄存器的指令存储于一通用指令高速缓存中。
51.根据权利要求45所述的方法,其中处理所述基于堆栈的指令包括产生存储于所述寄存器堆中的一变量的指示。
52.一种用于中央处理单元即CPU的方法,包括:
对基于寄存器的指令,在能够处理所述基于寄存器的指令的执行逻辑中,处理所述基于寄存器的指令;及
对基于堆栈的指令,在一硬件加速器中进行处理,将所述基于堆栈的指令输入能够处理所述基于寄存器的指令的所述执行逻辑,其中所述硬件加速器通过符号扩展一个在“JSR”或“JSR_W”字节码之后紧邻的分支偏移并将其附加到一当前字节码指令的虚拟机程序计数器即PC,由所述“JSR”或者“JSR_W”字节码来产生一个新的虚拟机程序计数器即PC,计算返回的虚拟机程序计数器并且将该返回的虚拟机程序计数器即PC推到一操作数堆栈上。
53.根据权利要求52所述的方法,其中处理所述基于堆栈的指令包括并行地在一指令译码单元中对多个基于堆栈的指令进行译码。
54.根据权利要求52所述的方法,其中处理所述基于堆栈的指令包括根据选定的基于堆栈的指令来产生例外。
55.根据权利要求53所述的方法,其中处理所述基于堆栈的指令包括在所述指令译码单元中产生一微代码单元的起始地址。
56.根据权利要求55所述的方法,处理所述基于堆栈的指令包括选择所述微代码单元的起始地址或一递增起始地址。
57.根据权利要求52所述的方法,进一步包括将所述基于堆栈的指令和所述基于寄存器的指令存储于一通用指令高速缓存中。
58.根据权利要求52所述的方法,其中处理所述基于堆栈的指令包括产生存储于所述寄存器堆中的一变量的指示。
59.一种用于中央处理单元即CPU的方法,包括:
对基于寄存器的指令,在能够处理所述基于寄存器的指令的执行逻辑中,处理所述基于寄存器的指令;及
对基于堆栈的指令,在一硬件加速器中进行处理,将所述基于堆栈的指令输入能够处理所述基于寄存器的指令的所述执行逻辑,其中所述硬件加速器执行对虚拟机SiPush和BiPush字节码的符号扩展,并且对根据所述基于堆栈的指令构成的一基于寄存器的指令的紧邻字段增补符号扩展数据。
60.根据权利要求59所述的方法,其中处理所述基于堆栈的指令包括并行地在一指令译码单元中对多个基于堆栈的指令进行译码。
61.根据权利要求59所述的方法,其中处理所述基于堆栈的指令包括根据选定的基于堆栈的指令来产生例外。
62.根据权利要求60所述的方法,其中处理所述基于堆栈的指令包括在所述指令译码单元中产生一微代码单元的起始地址。
63.根据权利要求62所述的方法,处理所述基于堆栈的指令包括选择所述微代码单元的起始地址或一递增起始地址。
64.根据权利要求59所述的方法,进一步包括将所述基于堆栈的指令和所述基于寄存器的指令存储于一通用指令高速缓存中。
65.根据权利要求59所述的方法,其中处理所述基于堆栈的指令包括产生存储于所述寄存器堆中的一变量的指示。
66.一种用于中央处理单元即CPU的方法,包括:
对基于寄存器的指令,在能够处理所述基于寄存器的指令的执行逻辑中,处理所述基于寄存器的指令;及
对基于堆栈的指令,在一硬件加速器中进行处理,将所述基于堆栈的指令输入能够处理所述基于寄存器的指令的所述执行逻辑,其中所述硬件加速器执行对虚拟机SiPush和BiPush字节码的符号扩展,并且使符号扩展数据可以为所述执行逻辑所读取。
67.根据权利要求66所述的方法,其中处理所述基于堆栈的指令包括并行地在一指令译码单元中对多个基于堆栈的指令进行译码。
68.根据权利要求66所述的方法,其中处理所述基于堆栈的指令包括根据选定的基于堆栈的指令来产生例外。
69.根据权利要求67所述的方法,其中处理所述基于堆栈的指令包括在所述指令译码单元中产生一微代码单元的起始地址。
70.根据权利要求69所述的方法,处理所述基于堆栈的指令包括选择所述微代码单元的起始地址或一递增起始地址。
71.根据权利要求66所述的方法,进一步包括将所述基于堆栈的指令和所述基于寄存器的指令存储于一通用指令高速缓存中。
72.根据权利要求66所述的方法,其中处理所述基于堆栈的指令包括产生存储于所述寄存器堆中的一变量的指示。
CNB018169821A 2000-10-10 2001-10-10 使用微代码引擎的java硬件加速器 Expired - Fee Related CN100388199C (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US23929800P 2000-10-10 2000-10-10
US60/239,298 2000-10-10
US09/687,777 US7225436B1 (en) 1998-12-08 2000-10-13 Java hardware accelerator using microcode engine
US09/687,777 2000-10-13

Publications (2)

Publication Number Publication Date
CN1468399A CN1468399A (zh) 2004-01-14
CN100388199C true CN100388199C (zh) 2008-05-14

Family

ID=26932444

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB018169821A Expired - Fee Related CN100388199C (zh) 2000-10-10 2001-10-10 使用微代码引擎的java硬件加速器

Country Status (7)

Country Link
US (1) US8473718B2 (zh)
EP (1) EP1197847A3 (zh)
JP (1) JP2002163116A (zh)
KR (1) KR20020028814A (zh)
CN (1) CN100388199C (zh)
AU (1) AU2001297021A1 (zh)
WO (1) WO2002031652A1 (zh)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US8453133B2 (en) * 1999-11-12 2013-05-28 Oracle America, Inc. Optimization of N-base typed arithmetic instructions via rework
GB0121064D0 (en) 2001-08-31 2001-10-24 Transitive Technologies Ltd Obtaining translation of generic code representation
US7434030B2 (en) * 2001-09-12 2008-10-07 Renesas Technology Corp. Processor system having accelerator of Java-type of programming language
EP1387253B1 (en) * 2002-07-31 2017-09-20 Texas Instruments Incorporated Dynamic translation and execution of instructions within a processor
WO2004027600A1 (ja) * 2002-08-30 2004-04-01 Renesas Technology Corp. データ処理装置及びicカード
GB2399899B (en) 2003-03-27 2005-06-22 Micron Technology Inc Active memory command engine and method
JP3866749B2 (ja) * 2005-03-07 2007-01-10 富士通株式会社 マイクロプロセッサ
US20070174556A1 (en) * 2006-01-26 2007-07-26 International Business Machines Corporation Methods and apparatus for reducing command reissue latency
US20070288909A1 (en) * 2006-06-07 2007-12-13 Hong Kong Applied Science and Technology Research Institute Company Limited Hardware JavaTM Bytecode Translator
JP4945410B2 (ja) * 2006-12-06 2012-06-06 株式会社東芝 情報処理装置及び情報処理方法
US8719807B2 (en) * 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
KR101407629B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 자바 변환 가속 장치 및 방법
KR101407628B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 작업 수행 속도를 향상시키는 장치 및 방법
KR100936401B1 (ko) * 2007-10-17 2010-01-12 주식회사 에이디칩스 자바 바이트코드 변환방법
US7929368B2 (en) * 2008-12-30 2011-04-19 Micron Technology, Inc. Variable memory refresh devices and methods
CN101697117B (zh) * 2009-09-30 2012-09-05 江南大学 用于实时Java处理器的字节码高速缓存装置及存取方法
WO2011136809A1 (en) * 2010-04-30 2011-11-03 Hewlett-Packard Development Company, L.P. Preprocessor for file updating
JP2012088909A (ja) * 2010-10-19 2012-05-10 Tokyo Univ Of Agriculture & Technology 変換器及び変換方法
US9311247B1 (en) 2012-03-20 2016-04-12 Marvell International Ltd. Method and apparatus for detecting patterns of memory accesses in a computing system with out-of-order program execution
US9164900B1 (en) * 2012-05-23 2015-10-20 Marvell International Ltd. Methods and systems for expanding preload capabilities of a memory to encompass a register file
CN102903001B (zh) * 2012-09-29 2015-09-30 上海复旦微电子集团股份有限公司 指令的处理方法和智能卡
US10101982B2 (en) * 2013-01-31 2018-10-16 Htc Corporation Methods for application management in an electronic device supporting hardware acceleration
FR3002341B1 (fr) 2013-02-19 2015-04-03 Commissariat Energie Atomique Systeme de compilation dynamique d'au moins un flot d'instructions
US9703562B2 (en) 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems
US20140281398A1 (en) * 2013-03-16 2014-09-18 William C. Rash Instruction emulation processors, methods, and systems
CN104346132B (zh) * 2013-08-08 2017-06-09 上海复旦微电子集团股份有限公司 应用于智能卡虚拟机运行的控制装置及智能卡虚拟机
FR3013869B1 (fr) * 2013-11-22 2016-01-01 Thales Sa Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede
US9542211B2 (en) * 2014-03-26 2017-01-10 Intel Corporation Co-designed dynamic language accelerator for a processor
KR102273023B1 (ko) 2014-10-16 2021-07-05 삼성전자주식회사 화질 개선 알고리즘 처리 방법 및 장치
US9652157B2 (en) 2015-03-19 2017-05-16 International Business Machines Corporation Accelerated non-volatile memory recirculation processing
CN105573814A (zh) * 2015-09-01 2016-05-11 北京中电华大电子设计有限责任公司 一种java卡局部变量字节码采用芯片硬件解析执行的方法
US10768935B2 (en) * 2015-10-29 2020-09-08 Intel Corporation Boosting local memory performance in processor graphics
US10853125B2 (en) 2016-08-19 2020-12-01 Oracle International Corporation Resource efficient acceleration of datastream analytics processing using an analytics accelerator
CN109919825B (zh) * 2019-01-29 2020-11-27 北京航空航天大学 一种orb-slam硬件加速器
US10783082B2 (en) 2019-08-30 2020-09-22 Alibaba Group Holding Limited Deploying a smart contract
US11449427B2 (en) 2020-02-13 2022-09-20 SK Hynix Inc. Microprocessor-based system memory manager hardware accelerator
US11775298B2 (en) * 2020-04-24 2023-10-03 Intel Corporation Frequency scaling for per-core accelerator assignments
US11340958B2 (en) 2020-07-08 2022-05-24 Vmware, Inc. Real-time simulation of compute accelerator workloads for distributed resource scheduling

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
WO1999018484A2 (en) * 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
WO2000034844A2 (en) * 1998-12-08 2000-06-15 Jedi Technologies, Inc. Java virtual machine hardware for risc and cisc processors

Family Cites Families (132)

* 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
JPS5569855A (en) 1978-11-20 1980-05-26 Panafacom Ltd Data processing system
US4524416A (en) 1980-04-15 1985-06-18 Honeywell Information Systems Inc. Stack mechanism with the ability to dynamically alter the size of a stack in a data processing system
US4587632A (en) 1980-05-27 1986-05-06 At&T Bell Laboratories Lookahead stack oriented computer
EP0097725B1 (de) 1982-06-08 1986-05-14 Ibm Deutschland Gmbh Einrichtung im Befehlswerk eines mikroprogrammgesteuerten Prozessors zur direkten hardwaregesteuerten Ausführung bestimmter Instruktionen
JPS59501684A (ja) 1982-10-22 1984-10-04 インタ−ナシヨナル・ビジネス・マシ−ンズ・コ−ポレ−シヨン 目的命令ストリ−ムへ殆んど実時間で插入するためのソ−スおよび目的命令ストリ−ムの外部における加速式命令写像
US4922414A (en) 1982-12-17 1990-05-01 Symbolics Inc. Symbolic language data processing system
US4763255A (en) 1984-10-31 1988-08-09 International Business Machines Corporation Method for generating short form instructions in an optimizing compiler
JP2564805B2 (ja) 1985-08-08 1996-12-18 日本電気株式会社 情報処理装置
US4783738A (en) 1986-03-13 1988-11-08 International Business Machines Corporation Adaptive instruction processing by array processor having processor identification and data dependent status registers in each processing element
US5142681A (en) 1986-07-07 1992-08-25 International Business Machines Corporation APL-to-Fortran translators
DE3726192A1 (de) 1987-08-06 1989-02-16 Otto Mueller Stacksteuerung
DE68909426T2 (de) 1988-01-15 1994-01-27 Quantel Ltd Datenverarbeitung und -übertragung.
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
US5313614A (en) 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US4961141A (en) 1988-12-16 1990-10-02 International Business Machines Corporation Generating efficient code for a computer with dissimilar register spaces
US5218711A (en) 1989-05-15 1993-06-08 Mitsubishi Denki Kabushiki Kaisha Microprocessor having program counter registers for its coprocessors
US5113522A (en) 1989-05-17 1992-05-12 International Business Machines Corporation Data processing system with system resource management for itself and for an associated alien processor
US5077657A (en) 1989-06-15 1991-12-31 Unisys Emulator Assist unit which forms addresses of user instruction operands in response to emulator assist unit commands from host processor
US5440749A (en) 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
DE69033121T2 (de) 1989-09-01 1999-10-28 Amdahl Corp Betriebssystem und Datenbank mit einer Regelsprache zum bedingungsgesteuerten Rechnerbetrieb
US5179673A (en) * 1989-12-18 1993-01-12 Digital Equipment Corporation Subroutine return prediction mechanism using ring buffer and comparing predicated address with actual address to validate or flush the pipeline
US5241636A (en) 1990-02-14 1993-08-31 Intel Corporation Method for parallel instruction execution in a computer
US5201056A (en) 1990-05-02 1993-04-06 Motorola, Inc. RISC microprocessor architecture with multi-bit tag extended instructions for selectively attaching tag from either instruction or input data to arithmetic operation output
CA2038264C (en) 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
US5430862A (en) 1990-06-29 1995-07-04 Bull Hn Information Systems Inc. Emulation of CISC instructions by RISC instructions using two pipelined stages for overlapped CISC decoding and RISC execution
CA2045756C (en) 1990-06-29 1996-08-20 Gregg Bouchard Combined queue for invalidates and return data in multiprocessor system
US5163139A (en) 1990-08-29 1992-11-10 Hitachi America, Ltd. Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions
US5265206A (en) 1990-10-23 1993-11-23 International Business Machines Corporation System and method for implementing a messenger and object manager in an object oriented programming environment
US5307492A (en) 1991-03-07 1994-04-26 Digital Equipment Corporation Mapping assembly language argument list references in translating code for different machine architectures
US5193180A (en) 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5666296A (en) 1991-12-31 1997-09-09 Texas Instruments Incorporated Method and means for translating a data-dependent program to a data flow graph with conditional expression
US5438668A (en) 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5335460A (en) * 1992-04-27 1994-08-09 Smith Jr Joseph H Tilt to clean gutter system
CA2093451C (en) 1993-04-06 2000-03-14 David M. Mooney Method and mechanism for calling 32-bit functions from 16-bit functions
US5499352A (en) 1993-09-30 1996-03-12 Intel Corporation Floating point register alias table FXCH and retirement floating point register array
US5548776A (en) 1993-09-30 1996-08-20 Intel Corporation N-wide bypass for data dependencies within register alias table
US5613132A (en) 1993-09-30 1997-03-18 Intel Corporation Integer and floating point register alias table within processor device
US5481684A (en) 1994-01-11 1996-01-02 Exponential Technology, Inc. Emulating operating system calls in an alternate instruction set using a modified code segment descriptor
US5542059A (en) 1994-01-11 1996-07-30 Exponential Technology, Inc. Dual instruction set processor having a pipeline with a pipestage functional unit that is relocatable in time and sequence order
US5781750A (en) 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
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
GB2289353B (en) 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Data processing with multiple instruction sets
US6151702A (en) 1994-09-30 2000-11-21 Computer Associates Think, Inc. Method and system for automated, interactive translation of a software program to a data model for input to an information repository
US5668999A (en) 1994-12-20 1997-09-16 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US5748964A (en) 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5774868A (en) 1994-12-23 1998-06-30 International Business And Machines Corporation Automatic sales promotion selection system and method
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
US5634118A (en) 1995-04-10 1997-05-27 Exponential Technology, Inc. Splitting a floating-point stack-exchange instruction for merging into surrounding instructions by operand translation
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
US5692170A (en) 1995-04-28 1997-11-25 Metaflow Technologies, Inc. Apparatus for detecting and executing traps in a superscalar processor
US5680641A (en) 1995-08-16 1997-10-21 Sharp Microelectronics Technology, Inc. Multiple register bank system for concurrent I/O operation in a CPU datapath
US6295599B1 (en) 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US5778178A (en) 1995-11-13 1998-07-07 Arunachalam; Lakshmi Method and apparatus for enabling real-time bi-directional transactions on a network
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
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
US6076141A (en) 1996-01-24 2000-06-13 Sun Microsytems, Inc. Look-up switch accelerator and method of operating same
JP2000501217A (ja) 1996-01-24 2000-02-02 サン・マイクロシステムズ・インコーポレイテッド 配列アクセス境界チェックを加速したプロセッサ
WO1997027536A1 (en) 1996-01-24 1997-07-31 Sun Microsystems, Inc. Instruction folding for a stack-based machine
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
US6038643A (en) * 1996-01-24 2000-03-14 Sun Microsystems, Inc. Stack management unit and method for a processor having a stack
US6065108A (en) 1996-01-24 2000-05-16 Sun Microsystems Inc Non-quick instruction accelerator including instruction identifier and data set storage and method of implementing same
DE69734399D1 (de) 1996-01-24 2006-03-02 Sun Microsystems Inc Verfahren und vorrichtung zur stapel-cachespeicherung
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
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
US5794068A (en) 1996-03-18 1998-08-11 Advanced Micro Devices, Inc. CPU with DSP having function preprocessor that converts instruction sequences intended to perform DSP function into DSP function identifier
US5768593A (en) 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
US5805895A (en) 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5946487A (en) 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
US6031992A (en) 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US5764908A (en) 1996-07-12 1998-06-09 Sofmap Future Design, Inc. Network system containing program modules residing in different computers and executing commands without return results to calling modules
US5838165A (en) 1996-08-21 1998-11-17 Chatter; Mukesh High performance self modifying on-the-fly alterable logic FPGA, architecture and method
US5926832A (en) 1996-09-26 1999-07-20 Transmeta Corporation Method and apparatus for aliasing memory data in an advanced microprocessor
US6067577A (en) 1996-09-30 2000-05-23 Apple Computer, Inc. Dynamic method resolution for native methods in a dynamic object-oriented programming language
WO1998021655A1 (en) 1996-11-13 1998-05-22 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
US5889996A (en) 1996-12-16 1999-03-30 Novell Inc. Accelerator for interpretive environments
US5920720A (en) 1997-02-25 1999-07-06 Microsoft Corporation Efficient computer based virtual machine object structure
US5905895A (en) 1997-03-07 1999-05-18 International Business Machines Corporation Method and system for optimizing non-native bytecodes before bytecode interpretation
US6009499A (en) * 1997-03-31 1999-12-28 Sun Microsystems, Inc Pipelined stack caching circuit
US6003038A (en) 1997-03-31 1999-12-14 Sun Microsystems, Inc. Object-oriented processor architecture and operating method
US6167488A (en) * 1997-03-31 2000-12-26 Sun Microsystems, Inc. Stack caching circuit with overflow/underflow unit
US5898850A (en) 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
US5898885A (en) 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native stack-based instruction within a computer system
US6131144A (en) * 1997-04-01 2000-10-10 Sun Microsystems, Inc. Stack caching method with overflow/underflow control using pointers
US6052526A (en) 1997-04-17 2000-04-18 Vertel Corporation Data structure and method for dynamic type resolution using object-oriented programming language representation of information object sets
US5953736A (en) 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
US6330659B1 (en) 1997-11-06 2001-12-11 Iready Corporation Hardware accelerator for an object-oriented programming language
US5946718A (en) 1997-05-30 1999-08-31 National Semiconductor Corporation Shadow translation look-aside buffer and method of operation
US5940858A (en) 1997-05-30 1999-08-17 National Semiconductor Corporation Cache circuit with programmable sizing and method of operation
US6009511A (en) 1997-06-11 1999-12-28 Advanced Micro Devices, Inc. Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers
US6139199A (en) 1997-06-11 2000-10-31 Sun Microsystems, Inc. Fast just-in-time (JIT) scheduler
US6321323B1 (en) 1997-06-27 2001-11-20 Sun Microsystems, Inc. System and method for executing platform-independent code on a co-processor
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
US6513156B2 (en) 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6317872B1 (en) 1997-07-11 2001-11-13 Rockwell Collins, Inc. Real time processor optimized for executing JAVA programs
US6128728A (en) 1997-08-01 2000-10-03 Micron Technology, Inc. Virtual shadow registers and virtual register windows
US5944801A (en) 1997-08-05 1999-08-31 Advanced Micro Devices, Inc. Isochronous buffers for MMx-equipped microprocessors
DE69839913D1 (de) 1997-10-02 2008-10-02 Koninkl Philips Electronics Nv Datenverarbeitungsgerät zur verarbeitung von befeh
WO1999018485A2 (en) 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. Variable instruction set computer
US5970249A (en) 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US8782199B2 (en) 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
US5923892A (en) 1997-10-27 1999-07-13 Levy; Paul S. Host processor and coprocessor arrangement for processing platform-independent code
US5903761A (en) 1997-10-31 1999-05-11 Preemptive Solutions, Inc. Method of reducing the number of instructions in a program code sequence
US6170083B1 (en) 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6118940A (en) 1997-11-25 2000-09-12 International Business Machines Corp. Method and apparatus for benchmarking byte code sequences
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
EP1071991A4 (en) 1997-12-11 2002-03-13 Digits Corp OBJECT CODE ANALYSIS AND IMPROVEMENT SYSTEM AND METHOD
US6081665A (en) 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6081884A (en) * 1998-01-05 2000-06-27 Advanced Micro Devices, Inc. Embedding two different instruction sets within a single long instruction word using predecode bits
US6110226A (en) 1998-02-19 2000-08-29 Cygnus Solutions Java development environment using optimizing ahead-of-time compiler
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
US6108768A (en) 1998-04-22 2000-08-22 Sun Microsystems, Inc. Reissue logic for individually reissuing instructions trapped in a multiissue stack based computing system
US6275903B1 (en) 1998-04-22 2001-08-14 Sun Microsystems, Inc. Stack cache miss handling
US6075942A (en) 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers
US6158048A (en) 1998-05-29 2000-12-05 Intel Corporation Method for eliminating common subexpressions from java byte codes
US6085198A (en) 1998-06-05 2000-07-04 Sun Microsystems, Inc. Integrated three-tier application framework with automated class and table generation
US6131191A (en) 1998-07-21 2000-10-10 Intel Corporation Code implants for compilers
US6141794A (en) 1998-10-16 2000-10-31 Sun Microsystems, Inc. System and method for synchronizing access to shared variables in a virtual machine in a digital computer system
US6275984B1 (en) 1998-11-20 2001-08-14 Sega Of America, Inc. System and method for delaying indirect register offset resolution
US6249861B1 (en) 1998-12-03 2001-06-19 Sun Microsystems, Inc. Instruction fetch unit aligner for a non-power of two size VLIW instruction
US6212604B1 (en) 1998-12-03 2001-04-03 Sun Microsystems, Inc. Shared instruction cache for multiple processors
US6205543B1 (en) * 1998-12-03 2001-03-20 Sun Microsystems, Inc. Efficient handling of a large register file for context switching
US6209077B1 (en) 1998-12-21 2001-03-27 Sandia Corporation General purpose programmable accelerator board
US6233768B1 (en) 1999-06-25 2001-05-22 Diane Harding Multiple air chamber contoured maternity mattress
AU2001238261A1 (en) * 2000-02-14 2001-08-27 Chicory Systems, Inc. Predecoding instructions to determine stack change information
US6901591B1 (en) 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US7478224B2 (en) 2005-04-15 2009-01-13 Atmel Corporation Microprocessor access of operand stack as a register file using native instructions

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
WO1999018484A2 (en) * 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
WO2000034844A2 (en) * 1998-12-08 2000-06-15 Jedi Technologies, Inc. Java virtual machine hardware for risc and cisc processors

Also Published As

Publication number Publication date
EP1197847A3 (en) 2003-05-21
US8473718B2 (en) 2013-06-25
WO2002031652A8 (en) 2002-09-26
CN1468399A (zh) 2004-01-14
EP1197847A2 (en) 2002-04-17
US20070118724A1 (en) 2007-05-24
WO2002031652A1 (en) 2002-04-18
KR20020028814A (ko) 2002-04-17
AU2001297021A1 (en) 2002-04-22
JP2002163116A (ja) 2002-06-07

Similar Documents

Publication Publication Date Title
CN100388199C (zh) 使用微代码引擎的java硬件加速器
TW583587B (en) Java hardware accelerator using thread manager
US11422837B2 (en) Virtual machine coprocessor for accelerating software execution
US8185882B2 (en) Java virtual machine hardware for RISC and CISC processors
CN101251792B (zh) 用于受应用管理的线程单元的结构化异常处理
US6317872B1 (en) Real time processor optimized for executing JAVA programs
CN101189578B (zh) 用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置
CN101375248B (zh) 硬件JavaTM字节码译码器
WO2000034844A9 (en) Java virtual machine hardware for risc and cisc processors
US7225436B1 (en) Java hardware accelerator using microcode engine
US8769508B2 (en) Virtual machine hardware for RISC and CISC processors
CN101231597A (zh) 智能卡中java程序指令的执行方法
CN106033370B (zh) 64位Java虚拟机的实现方法及装置
Jones et al. C--: A portable assembly language
CN1347525A (zh) 虚拟机指令的优化字节码解释器
EP1866759B1 (en) Preparing instruction groups in a processor having multiple issue ports
US20050149694A1 (en) Java hardware accelerator using microcode engine
EP0924603A2 (en) Compiler controlled dynamic scheduling of program instructions
Garnett Dynamic optimization if IA-32 applications under DynamoRIO
Brunthaler Purely interpretative optimizations
Zmyzgova et al. Issues of compatibility of processor command architectures
Seitz The design and implementation of a bytecode for optimization on heterogeneous systems

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080514

Termination date: 20111010