CN1101019C - 数据序列产生方法及设备、转换方法及计算机 - Google Patents

数据序列产生方法及设备、转换方法及计算机 Download PDF

Info

Publication number
CN1101019C
CN1101019C CN98123834A CN98123834A CN1101019C CN 1101019 C CN1101019 C CN 1101019C CN 98123834 A CN98123834 A CN 98123834A CN 98123834 A CN98123834 A CN 98123834A CN 1101019 C CN1101019 C CN 1101019C
Authority
CN
China
Prior art keywords
sequence
mentioned
data
executive routine
code
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 - Lifetime
Application number
CN98123834A
Other languages
English (en)
Other versions
CN1218222A (zh
Inventor
绪方一则
小松秀昭
百濑浩之
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1218222A publication Critical patent/CN1218222A/zh
Application granted granted Critical
Publication of CN1101019C publication Critical patent/CN1101019C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

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

Landscapes

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

Abstract

一种编译器,其中将字节码转换为中间码,它使用对应于字节码的执行程序的地址,作为一操作码,并按对应于中间码的连续顺序执行此执行程序。中间码的长度恒定且操作码的位置也恒定。执行程序组相对于头的地址的偏移量作为操作码使用。此外,通过使用CPU中的空流水线,用于转移到下一中间码执行程序指令组的一部分指令组以及用于转移到再下一中间码执行程序指令组的一部分指令组能与原始中间码处理并行执行。

Description

数据序列产生方法及设备、转换方法及计算机
本发明涉及一编译器,特别是用于Java(Java是Sun微系统公司的注册商标)的即时(Just In Time-JIT)编译器。
凭借因特网的普及Java得以广泛地作用,这是由于如图1所示字节码14的特点所决定的,此字节码是当服务器1中的Java编译器12编译Java源码10时而得到的。字节码14既与OS(操作系统)53无关也与硬件55,如客户机5中的CPU无关,因此能被连结在网络3上各种各样的客户机5执行。另一方面,因为字节码14必须要由客户机5重新解释,从而出现了执行速度下降的问题。客户机5可以是一般计算机,或者是称作网络计算机,还可以是存储容量小的家用信息处理机,或者是没有装备像硬盘这样的辅助存储设备的机器。
字节码14是在客户机5中为WWW(万维网)浏览器提供的Java虚拟机(Java VM)52的本机码。当CPU,即硬件55实际执行字节码14时,使用了Java解释器54和Java JIT编译器56。
当执行字节码14时,解释器54翻译字节码14并调用和执行为每个指令准备的执行程序。解释器的优点在于字节码14一读出,字节码14的执行就可应即开始,并且所包含的字节码的数量通常很小,为了执行仅需小的存储器容量。缺点是执行速率低,这是因为字节码只是在它执行前才被解码而出现以下问题造成的结果。
(a)因为Java字节码以可变长格式提供,CPU难以通过多次预取实现优化。
(b)难以为频繁检测的字节码提供基于规则的优化。当使用复杂的规则或多规则时,为了对字节码序列应用规则,需要许多时间来检测字节码,这种处理是不实际的。
(c)参数的读出只能在执行程序的头部发生,所以处理过程不能立即开始。
(d)因为解码循环的存在,解码循环的处理时间附加到全部字节码14的处理时间上。因此,处理速度不可能增强以使超过解码循环处理速度。
JIT编译器56预先或者在执行前即时将字节码14翻译成机器码并执行机器码。此方法的优点在于因编译器技术的使用而优化了机器码,被翻译的码执行速度高。然而,通常的优化编译器比解释器要求更多的存储器和更高的CPU能力。
有一种使用线程码的技术,字节码14转换成一子程序调用而后才被执行,线程码是一子程序和一机器码构成的对,其中子程序是为每个字节码准备的用以处理对应的字节码,而机器码设置参数并根据字节码发出子程序调用。线程码是通过编译字节码成为具有最小长度的机器码而得到。线程码的执行快于解释器,同时比通常的优化编译器要较少的资源。然而,在这种情况下会出现下列问题。
(a)为Java字节码例如用32位的RISC CPU,转换参数集和调用指令占用存储器的平均大小是字节码占用的四信之多。
(b)在基于规则的优化能对快速检测的字节码序列使用之前,程序的结构必须被分析以确认字节码序列不超过大多数基本块,因为这样,字节码序列的开销也许偏离优化的效果。
(c)因为中间码也是机器码,一个已经预先执行过的执行程序可能从指令高速缓存中被清除。
在背景技术中没有公开这样的Java字节码编译器,它能被结合到网络计算机和家用信息处理机中,并且在要求很少的资源时能执行高速处理。
因此,本发明的第一个目的就是提供一编译器,它能在使用有限资源的同时以高速编译Java字节码。
本发明的另一个目的是提供一编译器,它能实现基于规则的优化而无需分析程序的结构。
本发明还有一个目的是为优化程序的执行,应用一种规则而不必考虑程序基本块的边界。
本发明再一个目的是对对应于一字节码的执行程序提供一种指令结构,以充分利用CPU的能力。
本发明的第一个特点是一种方法,用于把字节码转换成中间码,这里用与一个字节码对应的执行程序的地址作为操作码,并且以连续顺序执行此执行程序。中间码的长度是固定的,操作码的位的位置也是固定的。执行程序存储在存储器的连续区域中,而且执行程序相对于头地址的偏移量作为操作码来使用。因此,对应于中间码的执行程序地址产生和操作数产生都能高速实现。此外,通过使用CPU中的空流水线,用于移到下一中间码执行程序之指令组的一部分(操作数产生和转移),以及用于转移到再下一中间码执行程序之指令组的一部分(中间码预取指和执行程序地址计算)能与原始中间码处理并行执行。其结果是节省了解码和转移处理所要求的时间,而且执行的速度能够提高。另外,因为中间码不是指令而是数据,指令高速缓存可用于仅缓存执行程序组。因此,指令高速缓存比在背景技术中能被更有效地使用。在那里是使用参数集和对执行程序的子程序调用来实现中间码的。
本发明的第二个特点是采用表达方式(idioms)来实现基于规则的优化,不要求分析程序结构。具体地,当有字节码序列A,B,C和D,以及表达方式ABCD被定义时,字节码A被转换成中间码abcd,这里使用ABCD执行程序的地址作为操作码,而字节码B,C和D被转换成中间码b,c和d,使用了相应的执行程序的地址作为操作码。也就是,中间码按abcd,b,c和d的次序产生。如果当abcd的执行已经完成时,处理转移到d下面的位置,在那出现分支指令转移到b,c或d的情况也能被处理,在高速处理能被提供时,能确保相同的处理。中间码不能减少,但使用表达方式的基于规则的优化可以提供,无需分析程序结构。因为在有分支指令转移到表达方式化的码上时,通常的规则不能被使用,本发明扩展了该规则的使用范围。
综上所述,大多数执行程序的每一个,都能被一个周期中能执行两个或更多指令的处理机来执行,包括有:执行程序原始要求的指令;跟随执行程序后执行的转移到第二执行程序的部分指令;以及跟在第二执行程序后执行的转移到第三执行程序的部分指令。这两个执行程序共享为执行一个执行程序所要求的预处理,所以在一个执行程序中的指令可被平稳地优化,对转移和解码不会招致任何不利后果。此执行程序以及编译器的其它元素被存储在主存储器中,以便执行。
在码序列中的每个码可以与每个执行程序对应以便调节处理流,并且用于转移到第二执行程序的部分指令可能包含为第二执行程序的操作数生成指令,以及为转移到第二执行程序的转移指令。同时,为转移到第三执行程序的部分指令可能包含用于相对第三执行程序取码的指令,以及用于计算第三执行程序地址的指令。
在码序列中的每个码可以与每个执行程序对应以便调节处理流,并且一表达方式化的执行程序是许多执行程序的一个组,可能包含用于对应第二执行程序从码序列中取一码字的指令,计算第二执行程序地址的指令,第二执行程序的操作数生成指令,转移到第二执行程序的指令,为从码序列中取对应第三执行程序一码的指令,和计算第三执行程序地址的指令。当使用表达方式的优化不分析程序的结构而执行时,在上面所说的例子中,中间码按abcd,b,c和d的次序产生。在abcd前的中间码的执行程序中,执行预取b和b的执行程序的地址计算。然而,因为在abcd后将要处理的中间码是跟在d后的中间码,并且不是中间码b,所以预取址和地址计算必须再次执行。因此,表示方式执行程序要求上面所述的指令。
另外,当第二类数据序列(中间码序列)根据第一类数据序列(字节码序列)而产生时,下列步骤要执行:读出第一类数据;确定读出的第一类数据序列是否与预定的表达方式数据之一相同,每个预定的表达方式数据包含一组第一类数据;以及如果读出的第一类数据序列与表达方式数据相同,则转换读出的第一类数据序列中的第一数据成为对应于表达方式数据的第二类数据,在上面所说的例子中,此处理对应于字节码A到中间码abcd的转换。
再则,还可能包括下面的步骤:转换读出的第一类数据序列中不是第一数据的每个数据成为第二类对应数据。在上述例子中,这一步对应于字节码B,C和D到对应中间码b,c和d的转换。
还有,下列步骤也可能被包括:第二确定步骤确定是否有可能性在读出的第一类数据序列中,除了第一数据的数据序列与包含在预定的表达方式数据中的数据序列相同;以及,如果查明没有可能性时,转换第一数据下面的数据成为第二类对应数据的步骤。在上述例子中,表达方式BCD或BCDX(X是字节码或为1或更大的字节码)没有出现。然而,通常此表达方式BCD或BCDX可被预先规定。存在这种表达方法的可能性被判断,并当没有这种表达方式存在的可能性时,下面的字节码被转换成相应的中间码。
这样一来,可能进一步包括下面的步骤:对还没有转换成第二类数据序列的第一类读出数据序列中的数据序列施行第二确定步骤。在上面的例子中这一步是完成了,表达方法可能被预先规定从C或D开始。
上面所叙述的处理在确定步骤之前,另一类数据序列的结构无须被分析就可以实现。
还有,下面这些步骤也可能还被包括:如果查明存在可能性时,确定在第一类读出数据序列中还没有转换成第二类数据的数据序列是否等于预定的表达方式数据;以及如果此数据序列等于预定表达方式数据时,将第一类读出数据序列中尚未转换为第二类数据的数据序列的第一数据,转换成对应被确认为等同预定表达方式数据的第二类数据。这是当预先规定了表达方式BCD时实现的处理的实例。
转换为第二类数据的步骤可能包含为对应于第一类数据的执行程序计算地址的步骤。当执行程序的地址作为中间操作码的操作码使用时,此计算是必须的。
上面的处理可借助专用的设备实现或者依据计算机程序执行。这种执行程序和计算机程序可以存储在象软盘,或CD-ROM,或者如主存或硬盘的存储设备中。
图1是说明一般系统的方块图。
图2是显示JIT编译器56的方块图。
图3是转换/执行模块的流程图。
图4是当未实现基于规则的优化时,转换为中间码的流程图。
图5是解释中间码的操作码的图形。
图6为“iload”的执行程序示例图。
图7为“iadd”的执行程序示例图。
图8为“iconst”的执行程序示例图。
图9的图形用以说明“rlwimi”指令。
图10的图形用以说明本发明的第二特点。
图11是依照本发明的基于规则的优化处理流程图。
图12是为确定读出的字节码是否与规则匹配的流程图。
图13是为查找下一规则准备的流程图。
图14是复位规则查找部分的流程图。
图15是转换为中间码的常规处理流程。
图16是图15中程序结构分析的流程。
图17是图15中规则查找期间当基本块的边界达到时,规则查找处理的流程。
图18为对规则“ILLADDS”的执行程序实例图。
图19为使用解释器方法的处理实例图。
图20为使用线程码方法的处理实例图。
附图中的标号意义说明如下:
1:服务器
3:网络
5:客户机
10:Java源码
12:Java编译器
14:字节码
52:Java虚拟机
53:操作系统
54:Java解释器
55:硬件(包括存储器及CPU)
56:Java JIT编译器
58:机器码
100:转换/执行模块
102:中间码
104:执行程序组
本发明可提供一编译器,仅使用有限的资源它能以高速执行Java字节码。
本发明可提供一编译器,它能实现基于规则的优化而无须分析程序的结构。
为优化程序的执行,不考虑程序基本块的边界而能应用规则。
可为对应于字节码的执行程序提供一种指令结构,它能够充分利用CPU的能力。
按照本发明的系统总体结构与图1所示相似。被装载进入客户机主存的JIT编译器56,显示在图2方块图中。字节码14通过网络3被客户机5所接收,并装载入主存。一执行程序组104对应于字节码的各个字段,被连续地存储在主存中,并且在此图中包含有执行程序1(104a),执行程序2(104b)和执行程序3(104c)。另外,转换/执行模块100被准备以读取字节码14,产生中间码102,以及通过访问执行程序组104执行此代码。
由转换/执行模块100实现的处理现参照图3将予以说明。当转换/执行模块100被调用时,首先确定字节码14是否已被装载(步1010)。如果字节码14已被装载完毕,对此字节码的转换处理已经完成,并且程序控制转移到步1040。当字节码14尚未被装载时则将其装载(步1020),并转换成中间码(步1030)。一旦字节码已被转换为中间码,此字节码就不再需要了,并且此字节码存放的区域被释放。其结果是存储器能得以有效利用。转换处理包括一计算处理,如用中间码的操作数,计算与每个字节码对应的执行程序的地址。
当完成了到中间码的转换时,CPU的寄存器被初始化。从而程序的控制转移到对第一个中间码的执行程序(步1040),并且执行中间码的处理(步1050)。只要中间码不是返回指令,中间码的处理就一直继续(步1060)。当中间码为返回指令时,程序的控制返回到主调程序(步1070)。
图4显示了转换为中间码的处理。首先,一字节码序列被读出(步1110),以及产生一中间码,此中间码具有与字节码对应的执行程序的地址作为其操作码(步1120)。因为执行程序104被装载进入存储器的连续区域,通过首地址的偏移可确定对应执行程序的地址。在图5的例子中,因为对应于字节码“iadd”的执行程序在偏移执行程序组104的头(顶)部“xxxx”处被装载,此中间码的第一个操作码是“xxxx”。而且,因对应于字节码“iload”的执行程序在偏移执行程序组104头部“yyyy”处被装载,此中间码的下一操作码是“yyyy”。另外,因对应于字节码“if_cmplt”的执行程序在偏移执行程序组104头部“zzzz”处被装入,中间码的下一操作码为“zzzz”。这些执行程序无须连接放置,只要相互靠近,装载过程速度没有不利影响。
因为通常字节码具有可变长度于是难以由CPU多步预取处理,中间码的长度应该是恒定值,也就是二进制码由字单位(例如32bits)构成,第一个字由操作码及操作数构成。最好在一个字中操作码和操作数的位置和长度也是定值。另外,还希望操作码和操作数占据一单个字的位置,除非要求多操作数的情况存在。如果需要第二个和后续的字,其结构为每个操作码预先规定,对要求二个操作数的指令,这第一个字可由普通的操作码和第一操作数组成,而第二字可由第二操作数及(空操作)NOP指令构成。当使用可变长的操作时,第二个及后面的字必须包含具有合适长度的操作数。
字节码的操作数中一个被装进堆栈,一个包含在字节码中,执行程序期间,装入堆栈的操作数从堆栈装载,而包含在字节码中的操作数从中间码的操作数字段抽出。包含在中间码中的操作数被划分为如下:
1.局部变量索引
2.常量数据存储区索引
3.常量值
4.空操作数(仅在堆栈中的操作数)
5.与指令符合的其它操作数现将说明上面各个操作数。
1.局部变量索引
在Java字节码中,局部变量从0开始按升序被编号,并且这些号作为操作数用以指定要被使用的局部变量。全部局部变量具有相同的大小(一字长=32位),两个局部变量用64位的数据。对中间码,不是局部变量号,用该方法从堆栈框架头到局部变量地址的偏移量(以字长度单位计算)作为操作数。当JIT编译器执行一具体方法时,用于局部变量的区域定义在紧靠该方法的堆栈框架处。运行中该方法之堆栈框架头的地址保持在寄存器中(当使用下面要说的Power PC机时为BP寄存器)。因此,当操作数按上面所说地被定义时,此BP寄存器和一偏移量被使用以允许应即访问局部变量。偏移量是在前面的执行程序中将偏移量乘以4并将结果转换为字节单位而获得(在前面程序中是否操作数要乘以4取决于CPU)。
2.常量数据存储区索引
在Java中存在字节码中包含具有常量值的操作数的情况,还有常量值被存储在常量数据存储区(一常量表,每个元素的大小为一个字=32位)而且其索引用做操作数的情况。当操作数是存储在常量数据存储区的常量值时,从常量数据存储区的基地址中得到,按字为单位计算出的偏移量定义为操作数。在执行程序中,保持常量数据存储区基地址的寄存器(在下面的例子中为CP寄存器)和获得的一偏移量被使用以应即装载常量数据存储区的常数。该偏移量是在前面的程序中将偏移量乘以4并将结果转换为字节单位而获得,在实际实施时,常量数据存储区的基地址定义为常量数据存储区的头地址+32K字。用这种定义,当使用16位带符号的操作数作为索引时,最大64K入口可被访问。
3.常量值
当字节码中包含一常量值并且一处理整数的指令被发出时,此常量值落在16位带符号的整数范围内。在此情况下,此整数作为操作数使用,对于处理浮点值的指令常数值或者是0,1,或者是2。不管单精度字点值还是多精度浮点值,除高端16个位外,其余各位是0。因此,根据指令以格式表示的常量值的高16个位被定义作为操作数。当一处理整数值的指令使用操作数时,因为在前面的执行程序中操作数被乘以4,此操作数应乘以1/4以便返回为原始值。尽管这种处理是浪费的,在实际程序的字节码中,比之处理常量值的指令,有更多的访问局部变量和常量数据存储区的指令,而且系统经常设计成具有更高的所需处理速度。因为处理常量值的指令,仅仅是将常量值推入堆栈的简单指令。由于指令间的依赖性的存在,该乘以1/4的处理不会对执行速度带来有害的影响,对于处理浮点值的指令要求增加上第0位。
4.无操作数
当在字节码中没有操作数时如像iadd指令(用于计算堆栈中二个整数值之和并将此和推入堆栈),一合适的值(实际实施时是“0”)被输入。
5.与指令符合的其它操作数
一个能用16位表示的值它代表每个指令的一个操作数,并且有了它执行速度能增加。对于超过16位的操作数,中间码使用二个或更多的字。
对图4中步1120的处理,当提供字节码和对应偏移量的表时,处理速度能够提高。步1110和1120的处理被重复直到全部字节码转换完成(步1130)。
在本实施例中,执行程序由CPU执行,在一个周期内(一个时钟)CPU能执行二个或更多的机器码。每个执行程序中包含为处理字节码的机器码,为下一字节码计算执行程序地址和为操作数生成的机器码,为装载再下一个中间码和为执行程序计算地址的机器码,以及为下一字节码转移到执行程序的机器码。一以Power PC 603e作为CPU使用的例子被给出。(Power PC是IBM公司的注册商标)。
Power PC 603e在一个周期中最多可执行5个指令(需要说明的是Power PC 603e在一个周期可执行读两条指令,但在读指令已经完成以后在一个周期可执行5条指令)。使用这一能力,为执行中间码的预处理开销可被隐藏掉。图6到图8所示的指令能在一个周期中被执行(以一行表示)。例如在对字节码“iload”的执行程序中,如图6所示,这是一指令将局部变量推入操作数堆栈。对下一中间码的处理(阴暗部分)和为再下一个中间码的处理(在中间一列和右边一列画有剖面线的部分)在“iload”指令的原始处理执行的同时(在左边一列)实现。由虚线围绕的部分代表在CPU的流水线中没有要执行的指令,这是由于停止原始中间码的处理或中间码中原始处理指令之间的相关性。
“lwzx”是从局部变量装载数值的指令,而“stwu”是将其推入操作数据堆栈的指令。这两条指令都要求字节码“iload”处理。“mtctr”是用于在计数器中设定下一执行程序地址的指令;“srawi”是将操作数乘以4的指令;而“bctr”是实现转移到下一执行程序的指令。这些指令构成向下一执行程序转移的这种请求。另外,“lwzu”是预取再下一个中间码的指令,而“rlwimi”是计算再一个执行程序地址的指令。这些指令构成向再下一执行程序转移的这种请求部分。
图7所示的指令是“iadd”指令所要求的,“iadd”指令用于从操作数堆栈弹出两组数据并且将此数据值的和推入操作数堆栈。如从图7所见,为转移到下一执行程序所要求的指令部分和为转移到再下一程序所要求的指令部分,与“iload”的那些是相同的。而且,为“iadd”所要求的指令是“lwz”(装载数据1),“lwz”(装载数据2),“add”(用数据1和数据2执行的计算)和“stwu”(结果推入操作数堆栈)。
图8所示的指令是字节码“iconst”所要求的,这是用于将操作数所提供的常量值推入操作数堆栈。如从图8所见,为转移到下一执行程序所要求的指令部分和为转移到再一个执行程序所要求的指令部分,与“iload”的那些是相同的。而且,为“iconst”所要求的指令包括用于计算常量值(带符号值)的指令“srawi”和用于将常量值推入操作数堆栈的指令“stwu”。
假定备用的寄存器按如下命名,对应于“iload 4”,“iadd”和“iconst 4”的具体执行程序给出如下。
pc:中间码地址
ea:下一中间码的执行程序的地址
op:下一中间码×4的操作数
now:再一个中间码
bp:堆栈框架的头
sp:操作数据栈头
cp:常量数据存储区的基地址
“iload 4”
#cycle 1
mtctr    ea
1wzx     r3,bp,op
#cycle 2
sraxi          op,now,14
lwzu           now,4(pc)
#cycle 3
stwu           r3,-4(sp)
#cycle 4
rlwimi         ea,now,2,16,29
bctr
#cycle 5
流水线停止
“iadd”
#cycle 1
mtctr          ea
lwz            r3,4(sp)
#cycle 2
lwz            r4,0(sp)
srzw           op,now,14
#cycle 3
lwzu           now,4(pc)
#cycle 4
add            r3,r3,r4
#cycle 5
stwu           r3,4(sp)
rlwimi         ea,now,2,16,29
bctr
#cycle 6
流水线停止
“iconst 4”
#cycle 1
mtctr          ea
srawi          r3,op,2
#cycle 2
srawi          op,now,14
lwzu           now,4(pc)
#cycle 3
stwu           r3,-4(sp)
#cycle 4
rlwimi         ea,now,2,16,29
bctr
#cycle 5
流水线停止
对上面各条指令的规定将在下面予以说明。
lwz
从存储器读出一个字(4个字节)并装载到寄存器
lwzu
从存储器读出一个字并装载到寄存器,并且在寄存器中存储的数据地址用来表示一地址。
Iwzx
从存储器读出一个字并装载到寄存器,用两个寄存器值之和指示一个地址。
lbz
从存储器读出一个字节并装载到寄存器。
stwu
从寄存器写一字到存储器,并在寄存器中存储的数据地址用来表示一地址。
stwx
从寄存器写一字到存储器,用两个寄存器值之和指示一个地址。
li
在寄存器中设置一常量
add
加两个寄存器值。
addi
加常量值到寄存器值上。
srawi
右移寄存器的内容并使用符号扩展
slwi
左移寄存器的内容
rlwimi
寄存器A的内容循环移位,并以对应的结果位序列替代寄存器B的位序列。
mtctr
在计数器寄存器(用以存储间接转移地址的寄存器)中设置一个值。
bctr
按计数器寄存器中存储的地址转移。
blr
按连接寄存器(用以保存返回地址的寄存器)中存储的地址转移。
bctrl
在连接寄存器中保存返回地址,并按存储在计数器寄存器中的地址转移。
现在参照图9,对用于计算下一执行程序地址的“rlwimi”指令进行说明。当“rlwimi B,A,8,12,23”和寄存器A和B如图9所示时,首先,寄存器A的内容向左循环移8位,然后,寄存器A的12个位(在此情况为5,6,7),位12到位23取代在寄存器B中对应位置的各个位置。结果,寄存器B的内容是如步2所表示的。在寄存器A和B中的第一个0x表示16进制系统。
采用上面的结构,处理速度可以同样快或高于以通常的编译器完成的编译处理,它不执行高级优化如寄存器分配或码的调度。此外,因为执行程序组的头地址被用作操作码,中间码能被降低到两倍的字节码,应当指出的是因为在被转换成中间码以后字节码被丢弃,使用的存储量可以减少。
本发明的第二个特点现将予以说明。这第二个特点是对采用的CPU没有限制,具体说,在以上的说明中,在一个周期中CPU应当执行多条指令,本发明的第二特点并不依仗CPU。然而需要指出,如要求高速的处理,可采用第二特点和上面所述特点的结合。
图10给出第二特点的概貌。图10中“原始字节码”列的左边表示操作码,而右边表示操作数。“规则LLAS应用”和“规则LAS附加应用”两列是为中间码,并且其左边表示操作码而其右边表示操作数,操作码是地址,但在此情况下,以字节码中相同名或以规则名来描述。
假定一包括字节码序列“iload”,“iload”,“iadd”和“istore”的表达方式LLAS被预先规定。因为图10中左边的字节码序列如图在LLAS规定的那样被安排,规则LLAS被采用以生成中间码,产生进到“规则LLAS应用”列的那些内容。需要指出的是当使用表达方式的规则在背景技术领域应用时,包含在规则定义中的全部码被恰当的规则替换。这就是,在图10的例子中“iload”,“iload”,“iadd”和“istore”被“LLAS”所替代,并且它们后面跟随着未对其使用规则的中间码“iload”。然而,在本发明中仅有包含在表达方式中的第一个码被转换成“LLAS”,而余下的“iload”,“iadd”和“istore”被转换为中间码。结果,采用表达方式的规则应用可以不必进行程序结构的分析,也就是,即使当某些码转移到“原始字节码”中的第二个“iload”码(用箭头表示的),因“iload”“iadd”和“istore”保持为中间码,理想地校正处理可得以实现(按LLAS执行程序需要读操作数“iload”和“istore”的的处理,以及转移到最后一个“iload”的处理)。依照背景技术采用表达方式的规则用到这种部分上是不可能的。换句话说,通常通过程序结构的分析已经确认,采用表达方式的规则应用对这样的部分是不可能的。
按照本发明,当包含字节码序列“iload”,“iadd”和“istore”的一表达方式LAS被定义时,它如同图10右边“规则LAS附加应用”到所表示的那样。还有在此情况下,构成LAS的字节码序列“iload”,“iadd”和“istore”中,只有第一个码“iload”被转换成LAS,而余下的“iadd”和“istore”被转换为中间码。“LAS”的执行程序也要求读“istore”的操作数和转移到最后一个“iload”的处理。在图10的例子中,规则LLAS和LAS被定义并能够使用。不过,当规则LLAS和AS(“iadd”,“istore”)或者规则LLAS和SL(“istore”,“iload”)被定义时,它们都能被使用。
在转换字节码成为中间码的处理中(图3的步1030)采用表达方式的规则应用被实现。此处理在图11中被显示。首先,一个字节码序列被读出以确定它是否与规则匹配(步1210)。在多数情况下,此处理使用下面将会简要说明的状态转变而实现。读出的字节码序列被确定是否与规则匹配(步1220)。如果字节码序列匹配此规则,使用匹配规则的执行程序的地址生成中间码并输出(步1230)。对此处理,可以使用提供一些地址与对应规则的表。需要指出的是仅对字节码序列的第一个字节码产生中间码,而其它的字节码保持不改变。当读出的字节码序列不匹配此规则时,对已被读出但尚未为其产生中间码的第一个字节码,使用执行程序的地址生成中间码并输出(步1240)。该处理被执行是因为当字节码序列不匹配时,为了找寻规则使用下一字节码作为第一字节码,此第一字节码被转换成中间码。
遵循这点,检查是否存在已被读出但为它尚未生成中间码的字节码(步1250)。当存在这样的字节码,或当步1230的处理已被执行完时,则检查该已读出但中间码尚未生成的字节码序列与具体规则的全部或第一部分是否匹配(步1260)。如果字节码序列不与任何规则匹配,程序的控制返回到步1240。当字节码序列匹配具体的规则或大概匹配此规则,则准备寻求下一规则(步1290)。当对已读出的全部字节码都产生了中间码时,规则寻找处理被复位(步1270)。上面的处理被重复直到没有尚未被转换的字节码存在为止。步1220的各个处理和下面的步骤要对每一个字节码执行。
参考图12现将对图11中步1210的处理事例作一说明。首先,检查是否有尚未被转换的字节码(1410)。如存在这样的字节码则读出相继的字节码(步1420)。此相继的字节码用以获得要被替换的状态(步1430)。检查得到的状态是否与任何规则不匹配(步1440)。如果不匹配,此后的处理被终止(步1520)。如果存在与规则匹配的可能性,则当前的状态被替换为获得的状态(步1450),同时指针指示下次要被读出的字节码的指针加1处(步1460)。然后,检查是否当前状态已与规则匹配(步1470)。如果状态不与规则匹配,程序的控制返回到步1410,如状态已与规则匹配,处理作为成功匹配而结束(步1510)。
当在步1410不存在未被转换的字节码时,状态替换成不再有字节码要被读出的状态,并且被获得(步1480)。然后,检查是否当前状态与规则匹配(步1490)。如果状态与规则匹配,状态改变为获得的状态(步1500),而此后处理被终止(步1510)。如果状态与规则不匹配,处理被终止(步1520)。因为使用状态转换以确定状态是否与规则匹配的算法与使用状态转换以查找字符序列的算法类似,应当参考《算法介绍“Introduction to Algorithms”》McGraw-Hill图书公司,MIT出版社,1991,PP.855~868。
图11中步1290的处理事例被显示在图13中。首先,检查已被读出但尚未为其生成中间码的字节码序列是否匹配具体规则前面的部分(步1560)。反之,检查已被读出但尚未为其生成中间码的整个字节码序列是否不匹配该规则。如果整个字节码序列匹配该规则(图11中步1560的直接回答是NO),初始状态由下面状态所替换:匹配于规则的字节码序列已经读到最后指令的第二个(步1590),也就是,处理返回到已读出的最后字节码的前一个字节码。然后,指示下面要被读出的字节码的指针移到与规则匹配的字节码序列的末端,以便将其读出并且重复图12中的处理。
如果被读出但尚未为其生成中间码的字节码序列是规则的前面部分,初始状态改变到与规则匹配的字节码序列已被读出的状态(步1570)。指示要被读出的下一字节码的指针不移动(步1580),因为要读的下一字节码已被准备好。
图11中步1270的处理示例在图14中给出。复位规则寻找部分,状态被恢复成初始状态(步1660),并且检查是否存在已被读出而还没有转换成中间码的字节码(步1670)。通常,如果处理达到图11中的步1270,即使已被读出也不会有尚未转换成中间码的字节码存在。当不存在未转换的字节码时,此后处理终止(步1690)。如果存在未转换的字节码,该已被读出的字节码被丢弃(步1680)。
为比较,常规的处理显示在图15中,虽然没有对它作出详细说明,程序结构的分析是必须首先执行的(见图16)。接着执行检查以确定字节码序列是否匹配于规则,同时考虑基本块的边界。使用匹配于规则的执行程序的地址产生和输出中间码的处理,按当与规则匹配的字节码序列已被读出时同样的方式来实现,在此情况下,包含在规则定义中的全部字节码用此规则来替代,并且规则查找部分而后被复位(与图14中相同)。因此,在本发明和背景技术之间产生的中间码的结构不同。在查找规则的过程中,当达到基本块的边界时,图15中的规则查找处理显示在图17中。
如在解释本发明的第二个特点的第一部分所说,对实现该特点的CPU没有施加特别的限制。因此,执行程序也许为一个周期中仅执行一条机器语言指令的CPU准备。这里所示的执行程序是由上面所说的Power PC 603e执行,以便以更高的速度实现履行的处理。
图18中给出使用字节码序列“iload”,“iload”,“iadd”和“istore”,为规则“ILLADDS”的执行程序。左边的列表示原始规则处理,而“srawi”是用于计算数据2的偏移的指令。第一个“lwz”是从局部变量装载数据1的指令;第二个“lwz”是从局部变量装载数据2的指令;第三个“lwz”是装载为“istore”的操作数的指令。“add”是数据1加到数据2上的指令;接着的“srawi”是用于计算目标位置处的偏移的指令,在此目标位置处存储着结果;而“stwu”是存储结果到局部变量的指令。
图18中间列和右列分别表示转移到下一中间码的指令部分(阴暗部分)和转移到再一中间码的指令部分(划有剖面线的部分)。转移到下一中间码的指令部分不同于图6到图8所示的。也就是为取下一中间码的指令“lwz”和为计算下面执行程序地址的指令“rlwimi”被额外提供。这是根据以下情况。在为“ILLADDS”之前的中间码的执行程序中,用以转移到下一中间码后面的中间码的指令部分,也就是预取下一中间码后面的中间码和执行程序的地址计算,被执行。依照本发明的第二个特点,对应于包含在“ILLADDS”定义中的字节码的中间码也被生成。因此,先于“ILLADDS”在下一中间之后到来的中间码,是“ILLADDS”的定义中包含的第二字节码“iload”,因为这在理论上不正确,在为“ILLADDS”的执行程序中执行了重新计算,处理的其余部分与前面所说的情况相同。
包括“iload 4”,“iload 5”,“iadd”和“istore 6”的规则“ILLADDS”的细节如下。
#cycle 1
srawi      r4,now,14
lwz        now,12(pc)
#cycle 2
lwz        r3,bp,op
#cycle 3
lwz        r4,bp,r4
rlwimi     ea,now,2,16,29
#sycle 4
mtctr      ea
lwz        r5,8(pc)
srawi      op,now,14
#cycle 5
lwzu       now,16(pc)
add        r3,r3,r4
#cycle 6
srawi      r5,r5,14
#cycle     7
stwu       r3,bp,r5
rlwimi     ea,now,2,16,29
bctr
#cycle     8
流水线停止
本发明已经说明过由JIT编译器执行的处理,对应于流程图中各个步骤的功能模块/电路能够配备的构成专用设备。
当一程序被用以实现JIT编译器时,它可存储在如像CD-ROM,存储进客户机。
上面所说明的实施例仅仅是一个示例,而且执行程序可针对PowerPC以外的CPU进行修改。另外,由本发明的第二特点实现的处理不限于图11中所示的那些,而且也能实现其它的处理,以便生成在图10中中间和右边列的中间码。在图12,13,和14中采用的算法能被相互替换。
当解释器方法或线程码方法由Power PC使用时的处理示例将被说明。图19所示的处理使用解释器方法:(a)显示一解码循环,而(b)显示“iload”的执行程序。如图19所显现的,(a)和(b)的处理必须实现此执行“iload”,并且总共要求17个周期。执行如在上面所说的“ILLADDS”中的同样的处理,要求(a),(b),(a),(b),(a),(c),(a)和(d)的这些处理。处理(c)是“iadd”的执行程序而(d)是“istore”的执行程序。因为用解释器方法基于规则的优化不能实现,多重周期是需要的,因此处理较慢。
图20显示使用线程码方法的处理,根据此方法,首先,中间码被执行,然后开始执行程序。“iload”的处理示于图20(a),并且在中间码的处理中,局部变量索引被设置同时做出对执行程序的调用。图20(b)显示“ILLADDS”处理,那里执行中间码的处理并接着处理执行程序。当比较图8和图18中的处理时,可以看到几乎要求同样的周期数目。然而,当使用线程码方法以执行基于规则的优化时,程序的结构必须首先被分析,所以本发明的处理执行得更快。另外,因为在线程码系统中中间码也是指令,指令高速缓存为这种码所使用。另一方面,因本发明中中间码是数据,从有效使用指令高速缓存的观点来看处理速度能增加。再则,中间码的大小小于线程码。

Claims (12)

1.用于根据第一类数据序列产生第二类数据序列的方法,包括以下步骤:
读出一个第一类数据序列;
确定读出的第一类数据序列是否与多个预定的规则序列之一相同,每个所说预定规则序列包含一组可包含在该第一类数据序列中的数据;并且
如果上述读出的第一类数据序列等同于规则序列之一,则把上述读出的第一类数据序列中的第一个数据部分,转换为对应于所说的规则序列之一的第二类数据;
确定除所说读出的第一类数据序列以外的数据序列,是否存在可能性与包含在所说预定规则序列中的数据序列相同;
如果查明没有可能性,则把上述读出的第一类数据序列下面的一个数据转换为第二类对应数据。
2.根据权利要求1的方法,其特征在于还包含一步骤:
如果读出的第一类数据序列与规则序列之一相同,则将上述读出的第一类数据序列中其余的数据部分转换成第二类对应的数据。
3.按照权利要求1的方法,其特征在于还包括一步骤:
对所说读出的第一类数据序列中尚未被转换成第二类数据序列的数据序列,执行可能性确定步骤。
4.按照权利要求1的方法,其特征在于,在上述确定步骤之前,所说第一类数据序列的结构未被分析。
5.按照权利要求1的方法,其特征在于进一步包括下列步骤:
如果存在可能性,确定在上述读出的第一类数据序列中尚未被转换成第二类数据的数据序列是否与所说预定的规则序列相等;并且
如果上述数据序列等同于所说预定规则序列时,把上述读出的第一类数据中尚未被转换成第二类数据的数据序列的第一个数据,转换成对应于被确定等同的所说预定规则序列的第二类数据。
6.按照权利要求1的方法,其特征在于所说转换步骤还包括为对应上述第一个数据部分的执行程序计算地址的步骤。
7.一种用于将字节码序列转换成为中间码序列的方法,包括下列步骤:
读出一个字节码序列;
确定读出的字节码序列是否等同于多个预定的规则序列之一,每个所说预定的规则序列包含一个可以包含在读出的字节码序列中的上述字节码序列;而且
如果所读出的字节码序列等于上述规则序列之一,转换上述读出的字节码序列的第一个码部分,成为对应于所说规则序列之一的中间码;
确定是否存在这样的可能性,即在上述字节码序列中除所说第一个码部分以外的其他字节码序列,与规则序列之一相同;并且
如果查明无此可能性,则将第一个码部分下面的码转换成对应的中间码。
8.在一个计算环境中,用于根据第一类数据序列产生第二类数据序列的系统,包括:
用以读出第一类数据序列的模块;
用以确定读出的第一类数据序列是否与预定表达方式规则之一相同的模块,每个所说预定表达方式规则包含一组所说的第一类数据;以及
转换模块,用以当上述读出第一类数据序列等同于表达方式规则之一时,把上述读出的第一类数据序列中的第一个数据,转换为对应于所说的规则序列之一的第二数据;
其中,上述转换模块包含一模块,用于计算对应于上述第一类数据执行程序的地址。
9.按照权利要求8的系统,其特征在于还包括:
第二确定模块,用以确定除所说读出的第一类数据序列中的第一个数据以外的数据序列,是否存在可能性与包含在所说预定表达方式规则中的数据序列相同,其中如果查明没有可能性,所说的转换模块把上述第一个数据下面的一个数据转换为第二类对应数据。
10.用于将字节码序列转换成中间码序列的系统,包括:
一处理器;
一存储器;
由处理器执行的程序,所说的程序包括:
用以读出字节码序列的模块;
用以确定读出的字节码序列是否等同于多个规则码序列之一的模块,每个上述多个规则码序列包括一组字节码;还有
转换模块,用于当上述确定模块确定读出的字节码序列等同于规则码序列之一时,把上述读出的字节码序列的第一个码部分转换为对应于所等同的规则码序列的中间码。
11.按照权利要求10的系统,其特征在于所说的存储器存储有与各个字节码部分对应的执行程序,而且上述转换模块执行处理,以计算对应所说字节码的执行程序的地址。
12.按照权利要求11的系统,其特征在于所说的处理器在一个周期中执行多个指令;其中,对应于上述规则码序列的执行程序包含:一条用以取接着上述规则码序列后要被执行的第一个中间码的指令,所说的第一个中间码对应于第二个执行程序;一条用以计算上述第二个执行程序的地址的指令,一条所说第二执行程序的操作数生成指令,一条用于转移到上述第二个执行程序的指令,一条取接着再下一个上述规则码序列后要被执行的第二个中间码的指令,该第二个中间码对应于第三个执行程序,以及一条用以计算上述第三执行程序地址的指令。
CN98123834A 1997-11-11 1998-11-04 数据序列产生方法及设备、转换方法及计算机 Expired - Lifetime CN1101019C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP30821297A JP3377419B2 (ja) 1997-11-11 1997-11-11 命令列生成方法及び装置、変換方法、及びコンピュータ
JP308212/1997 1997-11-11
JP308212/97 1997-11-11

Publications (2)

Publication Number Publication Date
CN1218222A CN1218222A (zh) 1999-06-02
CN1101019C true CN1101019C (zh) 2003-02-05

Family

ID=17978278

Family Applications (1)

Application Number Title Priority Date Filing Date
CN98123834A Expired - Lifetime CN1101019C (zh) 1997-11-11 1998-11-04 数据序列产生方法及设备、转换方法及计算机

Country Status (3)

Country Link
US (1) US6324686B1 (zh)
JP (1) JP3377419B2 (zh)
CN (1) CN1101019C (zh)

Families Citing this family (80)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6298477B1 (en) * 1998-10-30 2001-10-02 Sun Microsystems, Inc. Method and apparatus for selecting ways to compile at runtime
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6637025B1 (en) * 1998-12-03 2003-10-21 International Business Machines Corporation Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file
WO2000034854A2 (en) * 1998-12-08 2000-06-15 Koninklijke Philips Electronics N.V. Method of executing an interpreter program
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6748588B1 (en) * 1999-03-31 2004-06-08 Microsoft Corporation One-pass greedy-pattern-matching finite-state-machine code generation
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
GB2365553B (en) * 2000-05-13 2004-07-14 Ibm Trace information in a virtual machine
US6839712B1 (en) * 2000-10-26 2005-01-04 International Business Machines Corporation Pre-processing code to identify and modify format of keys
US7080120B2 (en) * 2001-01-19 2006-07-18 Digital Orchid, Inc. System and method for collaborative processing of distributed applications
KR20040034601A (ko) 2001-04-23 2004-04-28 아트멜 코포레이숀 바이트 컴파일된 자바 코드를 실행하는 마이크로 프로세서
CA2346762A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Compiler generation of instruction sequences for unresolved storage devices
ATE381059T1 (de) * 2001-10-31 2007-12-15 Aplix Corp System zum ausführen von zwischenkode, methode zum ausführen von zwischenkode, und computerprogrammprodukt zum ausführen von zwischenkode
US7178129B2 (en) * 2001-12-07 2007-02-13 Dbase, Inc. Drag-and drop dynamic distributed object model
DE10339458A1 (de) * 2002-08-28 2004-03-25 Denso Corp., Kariya Gasmessfühler und Verfahren zu dessen Herstellung
JP3831396B2 (ja) * 2002-08-30 2006-10-11 株式会社ルネサステクノロジ データ処理装置及びicカード
GB2393270B (en) * 2002-09-19 2005-07-27 Advanced Risc Mach Ltd Executing variable length instructions stored within a plurality of discrete memory address regions
US7281248B2 (en) * 2002-11-19 2007-10-09 Microsoft Corporation Virtualized and realized user interface controls
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
US10437964B2 (en) * 2003-10-24 2019-10-08 Microsoft Technology Licensing, Llc Programming interface for licensing
US20050165837A1 (en) * 2004-01-22 2005-07-28 International Business Machines Corporation System and method for embedded java memory footprint performance improvement
US20050183077A1 (en) * 2004-02-12 2005-08-18 International Business Machines Corporation System and method for JIT memory footprint improvement for embedded java devices
US7348982B2 (en) * 2004-09-30 2008-03-25 Microsoft Corporation Method, system, and computer-readable medium for creating and laying out a graphic within an application program
US8510657B2 (en) 2004-09-30 2013-08-13 Microsoft Corporation Editing the text of an arbitrary graphic via a hierarchical list
US8134575B2 (en) 2004-09-30 2012-03-13 Microsoft Corporation Maintaining graphical presentations based on user customizations
US7493604B2 (en) * 2004-10-21 2009-02-17 Microsoft Corporation Conditional compilation of intermediate language code based on current environment
US7533373B2 (en) * 2005-01-25 2009-05-12 Taiwan Semiconductor Manufacturing Co., Ltd Method for prevention of system execution malfunction
US7698697B2 (en) * 2005-03-03 2010-04-13 International Business Machines Corporation Transforming code to expose glacial constants to a compiler
US7707547B2 (en) * 2005-03-11 2010-04-27 Aptana, Inc. System and method for creating target byte code
US7743325B2 (en) * 2005-03-15 2010-06-22 Microsoft Corporation Method and computer-readable medium for fitting text to shapes within a graphic
US7750924B2 (en) * 2005-03-15 2010-07-06 Microsoft Corporation Method and computer-readable medium for generating graphics having a finite number of dynamically sized and positioned shapes
US7478224B2 (en) * 2005-04-15 2009-01-13 Atmel Corporation Microprocessor access of operand stack as a register file using native instructions
KR100763177B1 (ko) 2005-04-21 2007-10-04 삼성전자주식회사 자바 가상 머신의 명령어 수행 방법 및 그 장치
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US20060288338A1 (en) * 2005-06-15 2006-12-21 Jinzhan Peng Offset threaded code
US7747944B2 (en) * 2005-06-30 2010-06-29 Microsoft Corporation Semantically applying style transformation to objects in a graphic
US8438486B2 (en) 2006-02-09 2013-05-07 Microsoft Corporation Automatically converting text to business graphics
US7840950B2 (en) * 2006-03-09 2010-11-23 International Business Machines Corporation Programmatic compiler optimization of glacial constants
JP4778359B2 (ja) 2006-05-17 2011-09-21 エヌイーシーコンピュータテクノ株式会社 エミュレーション方法及びコンピュータシステム
US8914774B1 (en) 2007-11-15 2014-12-16 Appcelerator, Inc. System and method for tagging code to determine where the code runs
US8954989B1 (en) 2007-11-19 2015-02-10 Appcelerator, Inc. Flexible, event-driven JavaScript server architecture
US8260845B1 (en) 2007-11-21 2012-09-04 Appcelerator, Inc. System and method for auto-generating JavaScript proxies and meta-proxies
US8566807B1 (en) 2007-11-23 2013-10-22 Appcelerator, Inc. System and method for accessibility of document object model and JavaScript by other platforms
US8719451B1 (en) 2007-11-23 2014-05-06 Appcelerator, Inc. System and method for on-the-fly, post-processing document object model manipulation
US8819539B1 (en) 2007-12-03 2014-08-26 Appcelerator, Inc. On-the-fly rewriting of uniform resource locators in a web-page
US8756579B1 (en) 2007-12-03 2014-06-17 Appcelerator, Inc. Client-side and server-side unified validation
US8806431B1 (en) 2007-12-03 2014-08-12 Appecelerator, Inc. Aspect oriented programming
US8527860B1 (en) 2007-12-04 2013-09-03 Appcelerator, Inc. System and method for exposing the dynamic web server-side
US8938491B1 (en) 2007-12-04 2015-01-20 Appcelerator, Inc. System and method for secure binding of client calls and server functions
US8285813B1 (en) 2007-12-05 2012-10-09 Appcelerator, Inc. System and method for emulating different user agents on a server
US8335982B1 (en) 2007-12-05 2012-12-18 Appcelerator, Inc. System and method for binding a document object model through JavaScript callbacks
US8639743B1 (en) 2007-12-05 2014-01-28 Appcelerator, Inc. System and method for on-the-fly rewriting of JavaScript
US8127080B2 (en) 2008-02-01 2012-02-28 International Business Machines Corporation Wake-and-go mechanism with system address bus transaction master
US8640141B2 (en) 2008-02-01 2014-01-28 International Business Machines Corporation Wake-and-go mechanism with hardware private array
US8250396B2 (en) 2008-02-01 2012-08-21 International Business Machines Corporation Hardware wake-and-go mechanism for a data processing system
US8452947B2 (en) 2008-02-01 2013-05-28 International Business Machines Corporation Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms
US8145849B2 (en) 2008-02-01 2012-03-27 International Business Machines Corporation Wake-and-go mechanism with system bus response
US8312458B2 (en) 2008-02-01 2012-11-13 International Business Machines Corporation Central repository for wake-and-go mechanism
US8788795B2 (en) 2008-02-01 2014-07-22 International Business Machines Corporation Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8171476B2 (en) 2008-02-01 2012-05-01 International Business Machines Corporation Wake-and-go mechanism with prioritization of threads
US8880853B2 (en) 2008-02-01 2014-11-04 International Business Machines Corporation CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock
US8725992B2 (en) 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
US8612977B2 (en) 2008-02-01 2013-12-17 International Business Machines Corporation Wake-and-go mechanism with software save of thread state
US8015379B2 (en) 2008-02-01 2011-09-06 International Business Machines Corporation Wake-and-go mechanism with exclusive system bus response
US8732683B2 (en) 2008-02-01 2014-05-20 International Business Machines Corporation Compiler providing idiom to idiom accelerator
US8516484B2 (en) 2008-02-01 2013-08-20 International Business Machines Corporation Wake-and-go mechanism for a data processing system
US8316218B2 (en) 2008-02-01 2012-11-20 International Business Machines Corporation Look-ahead wake-and-go engine with speculative execution
US8386822B2 (en) 2008-02-01 2013-02-26 International Business Machines Corporation Wake-and-go mechanism with data monitoring
US8225120B2 (en) 2008-02-01 2012-07-17 International Business Machines Corporation Wake-and-go mechanism with data exclusivity
US8291079B1 (en) 2008-06-04 2012-10-16 Appcelerator, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US8880678B1 (en) 2008-06-05 2014-11-04 Appcelerator, Inc. System and method for managing and monitoring a web application using multiple cloud providers
US7596620B1 (en) 2008-11-04 2009-09-29 Aptana, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US8886919B2 (en) 2009-04-16 2014-11-11 International Business Machines Corporation Remote update programming idiom accelerator with allocated processor resources
US8082315B2 (en) 2009-04-16 2011-12-20 International Business Machines Corporation Programming idiom accelerator for remote update
US8145723B2 (en) 2009-04-16 2012-03-27 International Business Machines Corporation Complex remote update programming idiom accelerator
US8230201B2 (en) 2009-04-16 2012-07-24 International Business Machines Corporation Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system
US10698708B2 (en) * 2009-08-04 2020-06-30 International Business Machines Corporation Optimizing just-in-time compilation in a network of nodes
US8799325B2 (en) * 2010-03-12 2014-08-05 Microsoft Corporation Reordering nodes in a hierarchical structure
KR102663196B1 (ko) * 2018-11-16 2024-05-07 삼성전자주식회사 사용자 단말장치, 서버, 사용자 단말장치의 제어방법 및 서버의 제어방법

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5487169A (en) * 1993-11-18 1996-01-23 Motorola, Inc. Method for translating a test plan source file containing multiple programming languages
US5590331A (en) * 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
JPH09265736A (ja) * 1996-03-25 1997-10-07 Toshiba Corp 情報処理装置
US6078744A (en) * 1997-08-01 2000-06-20 Sun Microsystems Method and apparatus for improving compiler performance during subsequent compilations of a source program
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs

Also Published As

Publication number Publication date
CN1218222A (zh) 1999-06-02
JPH11175349A (ja) 1999-07-02
US6324686B1 (en) 2001-11-27
JP3377419B2 (ja) 2003-02-17

Similar Documents

Publication Publication Date Title
CN1101019C (zh) 数据序列产生方法及设备、转换方法及计算机
CN1287257C (zh) 用于算术表达式优化的方法和装置
CN1302380C (zh) 处理器和编译器
CN100339824C (zh) 高效执行特长指令字的处理器和方法
CN1264089C (zh) 编译设备和编译方法
CN1127016C (zh) 计算机处理装置和方法
CN1153129C (zh) 用于处理器定制操作的设备
CN1749955A (zh) 控制处理器和协处理器间的数据传输的运算处理装置
CN1613058A (zh) 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备
CN1570870A (zh) 终极管道和最优重排技术
CN1186729C (zh) 从虚地址计算页表索引的方法和装置
CN1802632A (zh) 用于在程序代码转换期间执行解释器优化的方法和装置
CN1227589C (zh) 用于保存返回状态的数据处理设备和方法
CN1742257A (zh) 基于识别寻址模式的双目的寄存器的数据预测机制
CN1122216C (zh) 优化器
CN1399736A (zh) 用于处理器的转移指令
CN1315062C (zh) 处理器装置、使用它的信息处理装置、编译装置及其方法
CN1672133A (zh) 优化的代码生成
CN1684058A (zh) 处理器
CN1497435A (zh) 处理器
CN1783012A (zh) 程序转换器件及方法、程序转换执行器件及转换执行方法
CN101051301A (zh) 用于操作计算机处理器阵列的方法和装置
CN1823322A (zh) 用于程序代码转换的共享代码缓存方法及设备
CN1869952A (zh) 指令执行设备、调试方法、调试设备以及调试程序
CN1226026A (zh) 数据处理装置

Legal Events

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

Granted publication date: 20030205