CN100388199C - 使用微代码引擎的java硬件加速器 - Google Patents
使用微代码引擎的java硬件加速器 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 claims description 38
- 238000003860 storage Methods 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 22
- 230000009466 transformation Effects 0.000 claims description 18
- 238000012856 packing Methods 0.000 claims description 3
- 230000003190 augmentative effect Effects 0.000 claims 2
- 238000006243 chemical reaction Methods 0.000 abstract description 17
- 238000010586 diagram Methods 0.000 description 23
- 230000008859 change Effects 0.000 description 10
- 238000011068 loading method Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000004615 ingredient Substances 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000002195 synergetic effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
硬件Java加速器(42)由一个译码级(26b)和一个微代码级组成。分解成译码和微代码级允许该译码级去实施指令级并行运算,同时该微代码级允许转换单个Java字节码为多个原生指令。提供了一个重发缓存器(82),其存储已转换的指令,并且当该系统从一个中断返回的时候,重新发送它们。以此方式,当一个中断时不需要刷新硬件加速器。还使用一个原生PC监控器(54)。当原生PC(54)在一个特定范围之内时,硬件加速器能够转换Java字节码为原生指令。当原生PC在该范围外边的时候,硬件加速器被停用,并且CPU(25)靠从该存储器中获得的原生指令运行。
Description
发明背景
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所述的方法,其中处理所述基于堆栈的指令包括产生存储于所述寄存器堆中的一变量的指示。
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 | 2000-10-13 | ||
US09/687,777 US7225436B1 (en) | 1998-12-08 | 2000-10-13 | Java hardware accelerator using microcode engine |
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)
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 |
US20060117308A1 (en) * | 2002-08-30 | 2006-06-01 | Renesas Technology Corp. | Data processing apparatus and ic card |
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)
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)
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 |
ATE180336T1 (de) * | 1989-09-01 | 1999-06-15 | Amdahl Corp | Betriebssystem und datenbank mit einer aus mehreren tabellen geformten zugriffsstruktur |
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 |
US5548776A (en) * | 1993-09-30 | 1996-08-20 | Intel Corporation | N-wide bypass for data dependencies within register alias table |
US5499352A (en) * | 1993-09-30 | 1996-03-12 | Intel Corporation | Floating point register alias table FXCH and retirement floating point register array |
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 |
US5781750A (en) * | 1994-01-11 | 1998-07-14 | Exponential Technology, Inc. | Dual-instruction-set architecture CPU with hidden software emulation mode |
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 |
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 |
US6014723A (en) * | 1996-01-24 | 2000-01-11 | Sun Microsystems, Inc. | Processor with accelerated array access bounds checking |
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 |
US6038643A (en) * | 1996-01-24 | 2000-03-14 | Sun Microsystems, Inc. | Stack management unit and method for a processor having a stack |
US5925123A (en) * | 1996-01-24 | 1999-07-20 | Sun Microsystems, Inc. | Processor for executing instruction sets received from a network or from a local memory |
JP3634379B2 (ja) | 1996-01-24 | 2005-03-30 | サン・マイクロシステムズ・インコーポレイテッド | スタックキャッシングのための方法及び装置 |
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 |
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 |
ATE244417T1 (de) | 1996-11-13 | 2003-07-15 | Paran Arik | Echtzeitprogramm-sprachbeschleuniger |
US5953741A (en) * | 1996-11-27 | 1999-09-14 | Vlsi Technology, Inc. | Stack cache for stack-based processor and method thereof |
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 |
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 |
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 |
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 |
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 |
US5940858A (en) * | 1997-05-30 | 1999-08-17 | National Semiconductor Corporation | Cache circuit with programmable sizing and method of operation |
US5946718A (en) * | 1997-05-30 | 1999-08-31 | National Semiconductor Corporation | Shadow translation look-aside buffer and method of operation |
US6139199A (en) | 1997-06-11 | 2000-10-31 | Sun Microsystems, Inc. | Fast just-in-time (JIT) scheduler |
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 |
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 |
US6321323B1 (en) | 1997-06-27 | 2001-11-20 | Sun Microsystems, Inc. | System and method for executing platform-independent code on a co-processor |
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 |
EP0941508B1 (en) | 1997-10-02 | 2007-01-17 | Koninklijke Philips Electronics N.V. | Variable instruction set computer |
EP1019794B1 (en) | 1997-10-02 | 2008-08-20 | Koninklijke Philips Electronics N.V. | Data processing device for processing virtual machine instructions |
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 |
WO1999030229A1 (en) | 1997-12-11 | 1999-06-17 | Digits Corp. | Object code analysis and remediation 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 |
US6205543B1 (en) * | 1998-12-03 | 2001-03-20 | Sun Microsystems, Inc. | Efficient handling of a large register file for context switching |
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 |
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 |
-
2001
- 2001-10-09 EP EP01402604A patent/EP1197847A3/en not_active Withdrawn
- 2001-10-09 KR KR1020010062160A patent/KR20020028814A/ko not_active Application Discontinuation
- 2001-10-10 JP JP2001313301A patent/JP2002163116A/ja active Pending
- 2001-10-10 WO PCT/US2001/042610 patent/WO2002031652A1/en active Application Filing
- 2001-10-10 AU AU2001297021A patent/AU2001297021A1/en not_active Abandoned
- 2001-10-10 CN CNB018169821A patent/CN100388199C/zh not_active Expired - Fee Related
-
2006
- 2006-10-03 US US11/538,362 patent/US8473718B2/en not_active Expired - Fee Related
Patent Citations (3)
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 |
---|---|
US20070118724A1 (en) | 2007-05-24 |
CN1468399A (zh) | 2004-01-14 |
WO2002031652A1 (en) | 2002-04-18 |
KR20020028814A (ko) | 2002-04-17 |
EP1197847A2 (en) | 2002-04-17 |
US8473718B2 (en) | 2013-06-25 |
JP2002163116A (ja) | 2002-06-07 |
AU2001297021A1 (en) | 2002-04-22 |
WO2002031652A8 (en) | 2002-09-26 |
EP1197847A3 (en) | 2003-05-21 |
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) | 用于受应用管理的线程单元的结构化异常处理 | |
CN101375248B (zh) | 硬件JavaTM字节码译码器 | |
WO2000034844A9 (en) | Java virtual machine hardware for risc and cisc processors | |
CN101189578A (zh) | 用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置 | |
US7225436B1 (en) | Java hardware accelerator using microcode engine | |
US8769508B2 (en) | Virtual machine hardware for RISC and CISC processors | |
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 | |
Haggett | Tokenisation and Compression of Java Class Files for Mobile Devices | |
Egger | Development of an Aos Operating System for the DNARD Network Computer | |
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 |