CN1287257C - 用于算术表达式优化的方法和装置 - Google Patents

用于算术表达式优化的方法和装置 Download PDF

Info

Publication number
CN1287257C
CN1287257C CNB008181950A CN00818195A CN1287257C CN 1287257 C CN1287257 C CN 1287257C CN B008181950 A CNB008181950 A CN B008181950A CN 00818195 A CN00818195 A CN 00818195A CN 1287257 C CN1287257 C CN 1287257C
Authority
CN
China
Prior art keywords
instruction
radix
operand
type
processor
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
CNB008181950A
Other languages
English (en)
Other versions
CN1421001A (zh
Inventor
陈志群
J·施瓦贝
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems 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
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of CN1421001A publication Critical patent/CN1421001A/zh
Application granted granted Critical
Publication of CN1287257C publication Critical patent/CN1287257C/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
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Abstract

用于优化算术表达式的方法,包括接收为具有第一基数的第一处理器所定义的第一指令(80),第一指令(80)包括一个运算符和至少一个操作数,当所有操作数进位不可能溢出(82)时或运算符对溢出不敏感时,将所述第一指令(80)转换成为具有第二基数的第二处理器所优化的第二指令(88),第二基数小于第一基数,并且当至少一个操作数可能进位溢出并且运算符对溢出敏感时,转换成更宽基数的第三指令(86),第三指令是溢出源。用于对算术表达式进行优化的装置包括:至少一个具有程序指令的存储器以及至少一个处理器,被设置为使用程序指令以接收为具有第一基数的第一处理器所定义的第一指令(80),第一指令(80)包括一个运算符和至少一个操作数,当所述所有运算符进位不可能溢出(82)时或当运算符对溢出不敏感时,将所述第一指令(80)转换成为具有第二基数的第二处理器所优化的第二指令(88),第二基数小于第一基数,并且当至少一个操作数可能进位溢出(84)时并且当运算符对溢出敏感时,转换成更宽基数的第三指令(86),第三指令是溢出源。

Description

用于算术表达式优化的方法和装置
相互参照的相关申请
该申请涉及下述申请:
申请日为1999年2月2日,申请人为Susser和Schwabe,名称为“资源受限设备的面向对象的指令系统(Object-Oriented Instruction Setfor Resource-Constrained Devices)”的美国专利申请。
申请日为1997年4月15日,申请人为Levy和Schwabe,名称为“可靠地分配字节码检验的虚拟机(Virtual Machine with SecurelyDistributed Bytecode Verification)”的美国专利申请。
技术领域
本发明涉及计算机系统。尤其是,本发明涉及对n基数类型算术表达式(n-base typed arithmetic expression)进行优化。
背景技术
图1说明了对计算机程序的预处理。用户用高级程序设计语言10编写程序。用高级程序设计语言10所编写的程序被编译成低级机器语言12,其可由目标机来执行。例如,用高级JavaTM程序设计语言所编写的程序被编译成低级字节码指令。字节码指令是用于JavaTM虚拟机的机器语言。Lindholm等人所著的“JavaTM虚拟机规范(The JavaTMVirtual Machine Specification)”(出版于1999年,Addison Wesley,第二版)中描述了JavaTM虚拟机规范。
典型的高级程序设计语言支持算术表达式。可操作一个或多个操作数的算术运算符定义了算术表达式。通常支持的运算符包括加法、减法、乘法、除法、求余、求反、移位、按位“或”、按位“与”、及按位“异或”。中间数值是一个或多个算术运算的结果。
高级程序设计语言通常还支持多重或n基数整数类型并且算术运算是超载的(overloaded)。超载允许运算符接收具有混合类型的操作数。例如JavaTM程序设计语言支持四种基本整数类型:字节(byte)、短整数(short)、整数(int)及长整数(long)。这些类型分别支持8位、16位、32位及64位数值。诸如“+”运算符这样的运算符可接收任何这些整数类型的运算符。下面的三个例子说明在具有混合基数类型的操作数上所操作的超载的“+”运算符。
int a,b;
a+b;
short a,b;
a+b;
byte a,b;
a+b;
这种超载是一般是通过将数值扩展到更宽的基数类型并随后执行算术运算来完成的。例如,C和JavaTM编译器通常将字节类型和短整数类型的数值扩展到整数类型。在JavaTM语言中,整数类型一般是32位。因此,在执行算术运算之前,短整数类型的16位数值和字节类型的8位数值被扩展到32位的整数类型。在JavaTM语言中,为每个上面所列的三个例子而生成了下述字节码:
iload  a
iload  b
iadd
iload指令取任意的8、16或32位的变量并将32位的操作数放入堆栈。iadd指令将两个32位的操作数弹出堆栈,将其相加并将32位的结果放回堆栈。
不同于JavaTM,一些高级程序设计语言只定义了整数类型间的关系,但是没有定义每个类型的大小。例如,一个C编译器厂商可将字节类型、短整数类型及整数类型的位长度分别定义为8、16和32位。然而,另一个C编译器厂商可将相同类型的位长度分别定义为16、32和64位。而又有一种编译器可将这些位长度分别定义为16、32和32位。在所有的情况下,每个类型的长度间的关系得到保持(由字节类型所表示的数值数目<由短整数类型表示的数值数目,由短整数类型表示的数值数目<由整数类型表示的数值数目),但是用于表示每种类型的位的实际数目是不同的。与JavaTM类似,但C以每个特定编译器所定义的整数类型的大小来执行算术操作。这需要将具有较小基数类型的数值扩展到整数类型。
这种类型扩展方法减少了机器指令的数目,因此减小了目标机的复杂性。然而,这种类型扩展方法通常需要更多的计算堆栈空间。例如,在两个16位的短整数类型数值扩展成32位类型之后,将其相加所使用的堆栈空间与将两个32位的整数类型数值进行相加所使用的堆栈空间相同,如图2A和2B所示。
现在转向图2A,说明以JavaTM语言对两个短整数类型的16位数值进行相加时堆栈使用的流程图。在附图标记20,取第一个16位的操作数并下推进入操作数堆栈。此时的操作数堆栈被标注为附图标记30。在附图标记22,所述第一个16位的操作数被扩展为32位。在附图标记24,取第二个16位的操作数并下推进入操作数堆栈。在附图标记26,所述第二个16位的操作数被扩展为32位。此时,操作数堆栈占用4×16=64位。在附图标记28,利用32位的加运算符使这两个32位的操作数相加。
转向图3A,介绍使两个整数类型的32位数值相加时堆栈使用的流程图。在附图标记40,取第一个32位的操作数并下推进入操作数堆栈。图3B说明了操作数堆栈。在附图标记42,取第二个32位的操作数并下推进入操作数堆栈。在附图标记44,利用32位的加运算符使这两个32位的操作数相加。因此,在上述16位的加操作和32位的加操作的例子中,两个32位操作数在被弹出堆栈之前,被下推进入到堆栈并利用32位加运算而进行相加。
在程序执行过程期间,可改变堆栈的大小,其原因在于诸如嵌套过程调用的级别、计算表达式的复杂度及局部说明的变量这样的因素。在像智能卡这样的资源受限设备中,通常就没有足够内存来执行这些其中发生了类型扩展的计算。
与典型的台式计算机和类似设备相比,资源受限设备一般被认为是在内存和/或计算能力或速度上相对受限的设备。举例来说,其它资源受限设备包括蜂窝式电话、边界扫描(boundary scan)设备、现场编程(field programmable)设备、个人数字助理(PDA)和传呼机以及其它微型或小体积设备。
智能卡是资源受限设备的其中一种类型,还被称为智能化便携式数据携带卡。智能卡由塑料或者金属制成并具有电子芯片,电子芯片包括用于执行程序的嵌入式微处理器或者微控制器和用于存储程序和数据的存储器。这些设备可能有信用卡大小,具有8位或者16位结构的计算机芯片。另外,这些设备的存储能力通常有限。例如,某些智能卡的随机存储器(RAM)容量小于1K,只读存储器(ROM)和/或非易失性存储器(例如电可擦除只读存储器(EEPROM))容量也有限。
另外,具有8位或16位体系结构的智能卡通常分别具有内置的8位或16位算术运算。这样,智能卡即通常可执行比32位运算更有效的8位或16位运算。对于已经扩展到32位的数据执行32位运算尤其低效。所以,像智能卡这样的资源受限设备的有限体系结构和内存,就使得要执行其中数值已扩展到更大整数类型的程序成为不切实际的或不可能的。
JavaTM虚拟机指令集定义了一个算术指令集以处理字节类型、短整数类型和整数类型数值。字节类型和短整数类型变量在编译期间被扩展到整数类型。相反,除了处理整数类型的指令系统之外,JavaCardTM(支持JavaTM编程语言的智能卡)虚拟机还定义了单独的指令集以处理字节和短整数类型的变量。大多数Java CardTM应用程序都运行于短整数或字节整数类型的数据值之上。
在计算机工业中,日益趋向于支持为在内存相对充足的台式计算机上执行而设计的高级计算机语言,使得相同的程序可在资源受限设备上运行,从而实现跨垂直平台的互用性。这种跨垂直平台的互用性要求用高级程序设计语言所编写的程序在资源受限设备上运行时可获得与他们将在内存相对充足的设备上运行时相同的结果。例如,希望支持在各种平台上——包括智能卡平台、手提式设备、用户设备、台式计算机及超级计算机——执行用JavaTM程序设计语言所编写的程序。
因此,需要将程序表示(program representation)加以转换,使得可利用较少的计算堆栈空间来执行语义相等的数学表达式。此外,现有技术需要执行这样的转换以增加执行速度。
发明内容
一种用于优化算术表达式的方法,包括:
接收为具有第一基数的第一处理器而定义的第一指令,所述指令包括一个运算符和至少一个操作数;
当所述至少一个操作数不可能进位溢出超出第二基数时,或当所述运算符对溢出无反应时,将所述第一指令转换成为具有该第二基数的第二处理器而优化的第二指令,所述第二基数小于所述第一基数;
当所述至少一个操作数可能进位溢出超出所述第二基数时,并且当所述运算符对溢出有反应时,转换成更宽基数的第三指令,该第三指令是与所述至少一个操作数相关的可能溢出的源,所述第三指令在先前已被优化,所述更宽基数大于所述第二基数而小于或等于所述第一基数。
一种用于算术表达式优化的设备,包括:
至少一个具有程序指令的存储器;以及
至少一个处理器,其设置为使用该程序指令以执行以下操作:
接收为具有第一基数的第一处理器而定义的第一指令,所述第一指令包括一个运算符和至少一个操作数;
当所述至少一个操作数不可能进位溢出超出第二基数时,或当所述运算符对溢出无反应时,将所述第一指令转换成为具有该第二基数的第二处理器而优化的第二指令,所述第二基数小于所述第一基数;以及
当所述至少一个操作数可能进位溢出超出所述第二基数时,并且当所述运算符对溢出有反应时,转换成更宽基数的第三指令,该第三指令是与所述至少一个操作数相关的可能溢出的源,所述第三指令在先前已被优化,所述更宽基数大于所述第二基数而小于或等于所述第一基数。
一种用于算术表达式优化的设备,包括:
接收装置,其用于接收为具有第一基数的第一处理器而定义的第一指令,所述第一指令包括一个运算符和至少一个操作数;
第一转换装置,其用于当所述至少一个操作数不可能进位溢出超出第二基数时,或当所述运算符对溢出无反应时,将所述第一指令转换成为具有该第二基数的第二处理器而优化的第二指令,所述第二基数小于所述第一基数;以及
第二转换装置,其用于当所述至少一个操作数可能进位溢出超出所述第二基数时,并且当所述运算符对溢出有反应时,转换成更宽基数的第三指令,该第三指令是与所述至少一个操作数相关的可能溢出的源,所述第三指令在先前已被优化,所述更宽基数大于所述第二基数而小于或等于所述第一基数。
一种使用应用软件程序的方法,该应用软件程序包括对至少一个指令的算术表达式进行优化,该至少一个指令以具有第一基数的处理器为目标,所述方法包括:
在一处理器上接收该软件程序,所述软件程序根据一包括以下步骤的方法而加以优化:
接收为具有第一基数的第一处理器而定义的第一指令,所述第一指令包括一个运算符和至少一个操作数;
当所述至少一个操作数不可能进位溢出超出第二基数时,或当所述运算符对溢出无反应时,将所述第一指令转换成为具有该第二基数的第二处理器而优化的第二指令,所述第二基数小于所述第一基数;以及
当所述至少一个操作数可能进位溢出超出所述第二基数时,并且当所述运算符对溢出有反应时,转换成更宽基数的第三指令,该第三指令是与所述至少一个操作数相关的可能溢出的源,所述第三指令在先前已被优化,所述更宽基数大于所述第二基数而小于或等于所述第一基数;以及
在所述处理器上执行指令序列。
一种用于优化算术表达式的方法,包括:
接收为具有第一基数的第一处理器而定义的第一指令,所述指令包括一个运算符和至少一个操作数;以及
基于所述至少一个操作数是否进位溢出以及所述运算符是否对溢出有反应来指示所述至少一个操作数是否具有溢出可能。
一种用于优化算术表达式的设备,包括:
接收装置,其用于接收为具有第一基数的第一处理器而定义的第一指令,所述指令包括一个运算符和至少一个操作数;以及
第一指示装置,其基于所述至少一个操作数是否进位溢出以及所述运算符是否对溢出有反应来指示所述至少一个操作数是否具有溢出可能。
一种用于优化算术表达式的设备,包括:
至少一个具有程序指令的存储器;
至少一个处理器,其设置为使用所述程序指令以进行以下操作:
接收为具有第一基数的第一处理器而定义的第一指令,所述指令包括一个运算符和至少一个操作数;以及
基于所述至少一个操作数是否进位溢出以及所述运算符是否对溢出有反应来指示所述至少一个操作数是否具有溢出可能。
附图说明
图1说明了对由高级语言所编写的程序进行编译的方框图;
图2A说明了将两个被扩展到32位的16位操作数进行相加时堆栈使用的流程图;
图2B说明了将两个被扩展到32位的16位操作数进行相加时堆栈使用的方框图;
图3A说明了将两个32位的操作数进行相加时使用堆栈的流程图;
图3B说明了将两个32位的操作数进行相加时使用堆栈的方框图;
图4A说明了根据本发明的一个实施例将在资源受限设备上所执行的算术表达式进行转换的方框图;
图4B说明了根据本发明的一个实施例对JavaTM类文件进行转换的方框图;
图5A说明了在台式计算机上对两个短整数类型的数值进行相加的代码例子;
图5B说明了在资源受限设备上对两个短整数类型的数值进行相加的代码例子;
图6A说明了在台式计算机上对两个短整数类型的数值进行相加并立即将结果进行类型转换(casting)的代码例子;
图6B说明了在资源受限设备上立即将结果进行类型转换的代码例子,该运算可能进位溢出。
图7A在台式计算机上对三个短整数类型的数值进行相加并立即将结果进行类型转换的代码例子;
图7B说明了在资源受限设备上通过可能溢出的运算来执行不受操作数溢出作用的运算的代码例子。
图8A说明了在台式计算机上对两个短整数类型的数值进行相加并将结果除以短整数类型的数值的代码例子;
图8B说明了在资源受限设备上通过可能溢出的运算来执行受操作数溢出作用的运算的代码例子。
图9说明了根据本发明的一个实施例对n基数型算术表达式进行优化的方法流程图;
图10说明了根据本发明的一个实施例对n基数型算术表达式进行优化的方法的详细流程图;
图11说明了根据本发明一个实施例的对指令进行转换的流程图;
图12A说明了根据本发明一个实施例的对目标指令进行转换的流程图;
图12B说明了根据本发明一个实施例的对初值指令进行转换的流程图;
图13说明了根据本发明一个实施例的对类型转换指令进行转换的流程图;
图14说明了根据本发明一个实施例的对堆栈处理指令进行转换的流程图;
图15说明了根据本发明一个实施例的对算术表达式进行转换的流程图;
图16说明了根据本发明一个实施例的用于确定所优化的指令类型的方法的流程图;
图17说明了根据本发明一个实施例的用于确定结果类型及结果溢出的方法的流程图;
图18说明了根据本发明一个实施例的用于记录返回点(rollbackpoint)的方法的流程图;
图19说明了根据本发明一个实施例的用于返回转换处理的方法的流程图;
图20说明了根据本发明一个实施例的用于传播(propagating)指令优化结果的流程图;
图21说明了根据本发明一个实施例的对来自不同控制路径的转换信息进行合并的流程图;
图22A说明了根据本发明一个实施例的指令转换的方框图;
图22B说明了根据本发明一个实施例的指令转换的方框图。
具体实施方式
本领域普通技术人员会明白以下对本发明的描述仅是说明性的。对受益于本发明描述的技术人员来说,易于想到本发明的其它实施例。
本发明涉及计算机系统。尤其是,本发明涉及n基数类型算术表达式的优化。本发明进一步涉及机器可读介质,在其上存储有(1)本发明的设计参数和/或(2)利用本发明在计算机上执行运算的程序指令。这种介质包括例如磁带、磁盘、诸如CD ROM这样的光学可读介质、以及诸如PCMCIA卡这样的半导体存储器。所述介质还可采取诸如硬盘驱动或计算机RAM这样较大的或固定的对象的形式。
与典型的台式计算机和类似设备相比,资源受限设备一般被认为是在内存和/或计算能力或速度上相对受限的设备。举例来说,其它资源受限设备包括蜂窝式电话、边界扫描设备、现场编程设备、个人数字助理(PDA)和传呼机以及其它微型或小体积设备。本发明还可用在非资源受限的设备中。
为本说明的目的,术语“处理器”可用于指实体计算机或虚拟机。
现在转向图4A,提出了用于说明根据本发明的一个实施例,对在资源受限设备上所执行的算术表达式进行转换的方框图。编译器获得用高级语言62所编写的并将操作数扩展到更大整数类型的算术表达式60,生成更大基数类型的指令64以便在典型台式机66上执行。该更大基数类型指令64被优化到语义相等的较小基数类型的指令68,以便在资源受限设备70上执行。例如用短整数类型加指令来运算短整数类型操作数,而结果是短整数类型。
根据本发明另一实施例,优化到语义相等的较小基数类型的指令是适时(just-in-time)代码生成器的一部分。就在第一次执行一组指令之前,未优化的指令被优化为语义相等的较小基数类型的指令,以便在资源受限设备上执行。随后使用这组优化指令来执行同一组指令。
根据本发明另外一个实施例,当要求较大类型的指令64来保存算术指令的语义,而目标处理机不支持较大类型的指令时,该算术表达式即因不受支持而被拒绝。
现在转向图4B,提出了用于说明根据本发明的一个实施例对指令进行转换的方框图。JavaTM类文件72通过Java CardTM类文件转换器74而被接收,该JavaTM类文件72包含具有32位操作数的指令。转换器74生成优化的指令76以在资源受限设备上执行。所述优化包括,举例说明,提供较少的堆栈使用量、较小的程序长度以及更快的执行。
目标机支持n型算术运算符。JavaTM虚拟机支持整数类型的运算符,而JavaTM虚拟机支持短整数类型的运算符并选择性地支持整数类型的运算符。其它设备可能仅支持字节类型的算术运算,或所有的字节类型、短整数类型、整数类型的运算。通常在8位或16位处理器上执行16位运算需要相对少的时间,而在相同处理器上执行32位运算需要相对较多的时间。
因为在优化时期内不知道在算术操作中所使用的实际数值,优化必须为每个操作数假定一个最坏情况的数值。根据输入操作数的类型来确定每个操作数的最坏情况的数值。较小类型的运算可具有要求较大类型的表示或溢出到较大类型的结果。因此,根据本发明,算术运算符被分类成受溢出作用的运算符和具有产生溢出可能性的运算符。为了公开这个目的,溢出包括负值的下溢(underflow)。如果产生结果的运算符属于可能会生成溢出到较大类型表示的一组运算符时,较小类型的运算结果被认为可能进位溢出。只要中间数值不被用作属于受溢出作用的一组运算符的操作数,即允许中间数值可能进位溢出。
具有产生溢出可能性的运算符包括加法、减法、乘法、除法、求反及左移位。表1给出了这些运算符的JavaTM字节码。
表1-具有溢出可能性的运算
  JavaTM字节码
  iadd
  isub
  imul
  idiv
  meg
  ishl
表2给出了受溢出作用的运算符。受溢出作用的算术运算符包括除法、求余、求反、右移位及无符号右移位。受溢出作用的非算术运算符包括数组运算、转换运算及比较运算。
表2-受溢出作用的运算
  JavaTM字节码   运算类型   受溢出作用的运算符
  idiv   计算   两个输入操作数
  irem   计算   两个输入操作数
  meg   计算   只有一个操作数
  ishr   计算   只被移位的操作数
  iushr   计算   只被移位的操作数
  if<*>   比较   只有一个操作数
  If_icmp<*>   比较   两个操作数比较
  tableswitch   转换   转换数值
  lookupswitch   转换   转换数值
 *newarray   数组   元素的数目
 *aload   数组   数组下标
 *astore   数组   数组下标
当表1的运算优化为较小类型时,结果可溢出为较大类型。如果表达式的一个操作数是中间数值并包含可能溢出的数据,那么在表2中具有一个运算符的表达式的结果会失去精确性。为了实现优化并保存高级源代码的语义,当结果输入到表2中的一个运算时,必须利用明确的源级类型转换(cast)来将可能的溢出校正为结果的类型。
如果表2中的任意一个运算的输入操作数是表1中运算的结果并且不存在明确的高级源代码类型转换,则不可能发生优化。这样的错误优化不能保证语义相等的结果。换句话说,为在资源受限设备上执行而生成的被优化代码提供了与为台式计算机而生成的非优化代码不同的结果。例如,溢出数据可存在于操作数的JavaTM32位表示中,但是不存在于Java CardTM16位表示中。
如果使用了具有较小类型的运算符,那么具有表1所列运算符的运算结果可导致溢出。图5A-8B提供了将目标为台式计算机平台的指令优化到目标为资源受限设备平台的这些相关问题的例子。这些例子假定台式计算机基于32位体系结构并具有相对充足的内存。资源受限设备被假定基于具有相对较少内存的16位体系结构。本领域普通技术人员可认识到本发明可用于具有不同体系结构的计算平台。
图5A-8B还使用带符号数值。本领域普通技术人员也可认识到不管数值是带符号还是不带符号,溢出都可发生。
现在转向图5B,提出了一个代码例子,该例子说明了在台式计算机上对两个短整数类型数值进行相加。数值“a”包括可由16位带符号短整数类型所表示的最大数值。如上所述,即使数值是16位短整数类型数值,也使用整数类型加法。因此,在结果数值中存在从16位区域到32位区域的溢出,并且溢出的结果是生成了较大的32位正值。
现在转向图5B,提出了一个代码例子,该例子说明了在如图5A所示的资源受限设备上对相同的数值进行相加。因为运行是在资源受限设备上执行的并且两个数值都是16位短整数类型,对指令进行优化以使用短整数类型加法,从而使用较少堆栈空间。然而,因为用16位加法代替了32位加法,加法在符号位产生溢出。尽管台式计算机计算出数值32768,在资源受限设备实例中计算出的结果是-32768,一个负值。这个结果是不可接受的,因为它与台式计算机的结果不同,阻止了跨多计算机平台的互用性。
现在转向图6A,提出了一个代码例子,该例子说明了对两个相同的数值进行相加并立即对出现的结果进行类型转换。这个例子与图5A的例子相同,除了相加的结果被转换为短整数类型。将类型转换为短整数类型是对最重要的16位进行舍位(truncate),使之成为一个短整数类型数值并且符号延伸至32位数值。可能进位溢出的运算(加法运算)的结果经类型转换而成为短整数类型,从而消除了任何可能的溢出问题。图6B说明了在资源受限设备上对图6A所示的两个相同的数值进行相加,这两个相同的数值被表示为16位数值。台式计算机和资源受限设备的结果数值相同。
现在转向图7A,提出了一个代码例子,该例子说明了在台式计算机上对三个短整数类型的数值进行相加。在这个例子中,整数类型加法被用于使16位的数值“a”和“b”相加,并将结果加到“c”上。最后的结果经类型转换成为短整数类型。
现在转向图7B,提出了一个代码例子,该例子说明了在资源受限设备上执行不受操作数溢出作用的运算的代码例子,该操作数是由可能进位溢出的运算生成的。因为此例中所有数值都是16位短整数类型,短整数类型加法被用于所有的中间数值加法。如表1所示,加法运算符可能产生溢出,但是不受溢出的作用。因此“a”和“b”相加生成了可能进位溢出的数值。该数值被加到“c”上,生成了另一个可能进位溢出的数值。尽管第二个加运算包含可能进位溢出的一个操作数(a+b结果),该加运算不受进位溢出的操作数的作用。最后的结果经类型转换成为短整数类型,除去了来自加法运算的可能溢出。这样,台式计算机和资源受限设备的结果数值相同。
现在转向图8A,提出了一个代码例子,该例子说明了在台式计算机上对两个短整数类型的数值进行相加并将结果除以短整数类型的数值。因为运行是在台式计算机上执行的,使用了整数类型运算。利用整数类型加法将数值“a”和“b”相加。中间数值除以“c”。
现在转向图8B,提出一个代码例子,该例子说明了在资源受限设备上执行受操作数溢出作用的运算的代码例子,该操作数是由可能进位溢出的运算生成的。因为运行是在资源受限设备上执行的,使用短整数类型运算。利用短整数类型加法将数值“a”和“b”相加。中间数值除以“c”。与图7B中所用的加法运算符不一样,这里运算符受到溢出作用,如表2所示。16位数值被认为是负值,因为设置了最高位。这样,台式计算机和资源受限设备实例即提供了不同结果,该结果未经如图6A-7B中所示程序的类型转换修正。
根据本发明,根据操作数的类型,利用最佳的类型指令对算术表达式进行优化。优化处理一直进行,直到遇见可能溢出的问题。此时,算术表达式的输入操作数被再次访问并被转换到下一级更大类型的指令。该处理重复执行,直到选择了指令的合适类型,使得台式计算机上的算术表达式提供与具有优化指令集的资源受限设备相同的结果。
在转换处理期间保持几个关系。这些关系涉及指令以及在目标机上执行指令时所产生的数值。关系数据包括数值的实际上的和所希望的类型。关系数据还包括源指令,一旦在目标机上执行该指令,则其将在目标机上产生数值。每个指令还被链接到其操作数关系数据。此外,结果的关系数据被链接到使用该结果的指令。每个关系数据还被链接到如在目标机上执行则可导致溢出的指令(如果有的话)。该指令被称为返回点。因为当可能进位溢出的数值由被对溢出敏感的运算符使用时会产生错误的最后结果,当转换处理不能进一步进行时,将所生成的数值链接到可引起溢出的指令,这提供了返回到引起溢出问题的指令的途径。
可进一步使用一个中间数值,作为后继指令的操作数。如果中间数值可能进位溢出,则返回指令也在结果中传播。在转换表达式期间对此重复执行。返回动作总是作用于中间数值(和操作数),并且返回到其中要求重新转换的指令。以下讨论用于确定返回指令的方法以及优化的其它细节。
现在转向图9,提出了用于说明根据本发明的一个实施例对n基数型算术表达式进行优化的方法流程图。在附图标记80,接收要转换的指令。在附图标记82,判断是否任一个输入操作数可能进位溢出。如果至少一个操作数可能进位溢出,在附图标记84处判断被转换的指令是否对溢出敏感。在此所用的JAVATM字节码列于表2。本领域普通技术人员会认识到,所列的受溢出作用的运算符随不同的高级语言而变化,并且本发明同样适用于其它语言。
在附图标记86,如果被转换的指令对溢出敏感,则转换处理返回到为问题源的指令,并利用具有较宽基数的类型来转换该指令。例如,8位字节类型可被加宽到16位字(word)类型,16位字类型可被加宽到32位字类型。将操作数加宽到更宽类型需要将后续操作数的指令加以转换,以使用对应于更大类型的指令。
如果被转换的指令不对溢出敏感,或者没有输入操作数可能进位溢出,在附图标记88指令被转换到最优类型,以便在资源受限设备上执行。在附图标记90,判断是否尚有更多指令要进行转换。如果留有更多的指令,下一指令的转换开始于附图标记80。当最后的指令已经转换,则转换处理在附图标记90结束。
现在转向图10,提出了一个详细的流程图,该流程图说明了根据本发明一个实施例对n基数型算术表达式进行优化。在附图标记100,产生转换未完成的指示。在附图标记102,产生应执行第一指令转换的指示。在附图标记104,判断指令转换是否已完成。如果指令转换已完成,在附图标记106结束执行。如果转换没有完成,在附图标记108产生转换完成的指示。在附图标记110,获得第一指令。在附图标记112,判断指令是否应被转换。
如果指令应被转换,在附图标记114和116分别产生转换未结束的指示和当前指令不应再次转换的指示。在附图标记118,指令被转换为另一个被优化的指令,以便用于具有较小基数类型的目标机。在附图标记120,判断在附图标记118的转换是否触发了返回。如果返回被触发,在附图标记122获得返回点的指令并在附图标记104重新开始返回点的指令的转换。如果返回没有被触发,在附图标记124结果类型和所需类型进行匹配。在附图标记126,转换指令被传播给每一控制路径的后继指令。
在附图标记128,判断是否留存更多指令。如果留存更多的指令,在附图标记130获得下一指令并在附图标记112继续执行。当最后的指令已被转换时转换处理结束。
现在转向图11,提出了一个流程图,该流程图说明了根据本发明的一个实施例来转换指令。在附图标记140,判断当前指令是否是算术指令。如果是算术指令,它在附图标记142被转换。类似地,在附图标记146、150、154和158,分别进行堆栈处理、目标、类型转换及转换初值指令的转换。在图11中根据指令是否是算术、堆栈操作、类型转换或初值指令的指令分类仅用于说明目的。本领域普通技术人员会认识到本发明可适用于许多其它的指令类型或分类。
现在转向图12A,提出了一个流程图,该流程图说明了根据本发明的一个实施例来转换目标指令的方法。在JavaTM虚拟机指令集中,目标指令包括分支、转换、数组存取、数组建立和变量存储/输入指令,以及计算机语言中的堆栈处理、类型转换、初值指令或算术表达式之外的其它类型的敏感的非算术指令。
在附图标记160,判断所需的指令操作数的类型。在附图标记162,判断目标机所使用的操作数是否具有比所需的目标指令类型更小的类型。如果操作数具有比所需的更小的类型,在附图标记164,返回具有较小类型的操作数的转换处理。如果操作数不具有比所需的更小的类型,在附图标记166,判断操作数是否可能进位溢出。如果操作数由表1所列出的一个操作数来生成,或如果其由在操作数中传播溢出的运算符来生成,则该操作数可能进位溢出。举例来说,传播溢出的运算符包括“与”、“或”及“异或”(xor)运算符。如果没有可能进位溢出的操作数,则在附图标记167优化指令。如果至少一个操作数可能进位溢出,在附图标记164,返回具有较小类型的操作数的转换处理。
现在转向图12B,提出了一个流程图,该流程图说明了根据本发明的一个实施例来转换初值指令的方法。初值指令的例子包括取/载入指令及其它载入变量的指令。初值指令还包括方法调用(methodinvocation)指令,该指令返回方法结果(method result)。这些指令被称为“初值”指令,因为该指令所产生的数值不是中间计算的结果。在附图标记168,接收变量、返回的数值及常量的类型。在附图标记169,根据变量或常量的类型来优化初值指令。例如,为载入短类型的局部变量,iload指令被优化为sload。
现在转向图13,提出了一个流程图,该流程图说明了根据本发明的一个实施例来转换类型转换指令的方法。类型转换指令可将操作数转换为更大类型或更小类型。例如,将32位整数类型转换为16位短整数类型是将操作数转换为较小的类型。类似地,将8位字节类型转换为32位整数类型是将操作数转换为较大的类型。在后面的类型转换中,字节类型被称为操作数类型,而整数类型被称为目标类型。
在附图标记170接收指令。在附图标记172和174分别确定操作数类型及目标类型。如果操作数类型大于目标类型,则在附图标记178将操作数类型变窄为目标类型。如果操作数类型小于目标类型,在附图标记180判断操作数是否可能进位溢出。如果操作数可能进位溢出,则在附图标记182使转换处理返回以修正类型。如果操作数进位不可能溢出,则在附图标记184将操作数加宽到目标类型。
现在转向图14,提出了一个流程图,该流程图说明了根据本发明的一个实施例来转换堆栈处理指令的方法。在JavaTM虚拟机指令集中,堆栈处理指令包括“复制”、“交换”及“弹出”指令。在附图标记190接收指令。在附图标记192判断指令是否为复制指令。如果是复制指令,在附图标记194判断是否存在用于初始堆栈入口的返回点。如果初始堆栈入口不具有返回点,则在附图标记196将用于复制的堆栈入口的返回点设置为初始堆栈入口的返回点。如果初始堆栈入口具有返回点,在附图标记198,将用于复制的堆栈入口的返回点设置为初始堆栈入口的源指令。在附图标记200,指令被转换。
现在转向图15,提出了一个流程图,该流程图说明了根据本发明的一个实施例来转换算术表达式的方法。在附图标记210,判断操作数是否可能进位溢出。如果操作数进位不可能溢出,在附图标记212产生操作数不具有溢出可能的指示。如果操作数可能进位溢出,在附图标记214判断指令是否受溢出作用。如果指令不受溢出作用,在附图标记216产生操作数具有溢出可能的指示。如果指令受溢出作用,在附图标记218转换返回到具有溢出的第一操作数。如果转换没有被返回,在附图标记220确定优化的指令类型,在附图标记222优化指令并在附图标记224确定结果类型和结果溢出。
现在转向图16,提出了一个流程图,该流程图说明了根据本发明的一个实施例来确定优化的指令类型的方法。在附图标记230,接收至少一个操作数。在附图标记232,所需的指令类型被设置为与操作数相关的最大类型。在附图标记234,判断任一个操作数是否具有比所需指令类型更小的类型。如果至少一个操作数具有比所需类型更小的类型,则在附图标记236将该较小类型的操作数返回以修正类型。
现在转向图17,提出了一个流程图,该流程图说明了根据本发明的一个实施例来确定结果类型和结果溢出的方法。在附图标记240,结果类型被设置为指令类型。在表3至10总结了Java CardTM结果类型和所返回的溢出指示。每一个表表示基于一个或多个操作数类型的结果类型和溢出指示。
表3-加法,乘法,减法
  类型(A)   与/或   类型(B)   结果类型   溢出
  字节   与   字节   短整数   假
  整数   或   整数   整数   假
  其它   短整数   真
表4-除法
  类型(A)   与/或   类型(B)   结果类型   溢出
  字节   与   字下   短整数   假
  字节   与   短整数   短整数   假
  整数   或   整数   整数   假
  其它   短整数   真
表5-左移位
  类型(A)   结果类型   溢出
  字节   短整数   真
  短整数   短整数   真
  整数   整数   假
表6-右移位
  类型(A)   结果类型   溢出
  字节   字节   假
  短整数   短整数   假
  整数   整数   假
表7-求反
  类型(A)   结果类型   溢出
  字节   短整数   假
  短整数   短整数   真
  整数   整数   假
表8-无符号右移
  类型(A)   结果类型   溢出
  字节   短整数   真
  短整数   短整数   真
  整数   整数   假
表9-求余
  类型(A)   与/或   类型(B)   结果类型   溢出
  整数   或   整数   整数   假
  其它   短整数   假
表10-和、或、异或
  类型(A)   与/或   类型(B)   结果类型   溢出
  字节   与   字节   字节   假
  整数   或   整数   整数   假
  其它   短整数   =溢出(操作数)
图17中使用Java CardTM结果类型和溢出指示仅用于说明目的。本领域普通技术人员会认识到本发明还适用于其它的具有其它类型的高级语言。
在附图标记244,判断是否可能由于使用更加优化的指令而导致结果进位溢出。如果结果进位不可能溢出,在附图标记246判断任意操作数是否传播溢出。如至少一个操作数传播溢出或如结果可能进位溢出,在附图标记248记录结果的返回点并且在附图标记250产生结果具有溢出可能的指示。
现在转向图18,提出了一个流程图,该流程图说明了根据本发明的一个实施例来记录返回点的方法。在附图标记260,判断第一操作数是否具有与其有关的返回点。如果第一操作数具有与其相关的返回点,在附图标记262将当前指令的返回点设置为该第一操作数的返回点。如果第一操作数不具有与其相关的返回点,在附图标记264判断第二操作数是否具有与其相关的返回点。如果第二操作数具有与其相关的返回点,在附图标记266将指令的返回点设置为该第二操作数的返回点。如果两者都不具有与其相关的返回点,则在附图标记268将指令的返回点设置到用于第一操作数的源指令。
根据本发明的特定实施例,如图18所示,“第一操作数”是指第一个被生成的操作数。将返回点设置为较老操作数的源指令可避免必须执行较新操作数的额外的返回操作,因为修正与较老操作数相关的类型可修正被较新操作数随后使用的类型。
现在转向图19,提出了一个流程图,该流程图说明了根据本发明的一个实施例来返回转换处理的方法。在附图标记270,优先取得当前指令的转换。在附图标记272,判断操作数是否具有返回点。如果操作数不具有返回点,在附图标记276将返回指令设置为生产操作数的源指令。如果操作数具有返回点,在附图标记274将返回指令设置到同一个返回点。在附图标记278加宽返回指令的所需类型。在附图标记280,产生返回点指令应被转换的指示。在附图标记282,在返回指令处重新进行转换操作。在附图标记284,根据新的所需类型而转换返回指令。
现在转向图20,提出了一个流程图,该流程图说明了根据本发明的一个实施例来传播指令优化的结果。在附图标记290,获得后继的指令。后继指令是与当前指令处于相同控制路径上的指令,并且在当前指令之后立即出现。本领域普通技术人员知道单一指令可以是许多控制路径的一部分。
在附图标记292,判断后继指令是否在转换处理中经过预先访问。如果后继指令曾经被预先访问,则在附图标记294将用于后继指令的转换信息设置为与当前指令的转换信息相等,并在附图标记296产生后继指令应被转换的指示。该转换信息可包括当前转换点的运行状态。例如,由当前或先前的指令所生成的数值尚未被使用。该数值将被用作控制路径中后继指令的操作数。对于每一个数值都记录类型、源指令及返回点。如果后继路径已被预先访问,在附图标记298,记录在后继指令中的先前的转换信息与当前的转换信息合并。在附图标记298,判断该合并信息内的数值是否已在附图标记300被修改。如果数值已被修改,在附图标记296产生后继指令应被转换的指示。对每一个后继指令重复进行这一处理。
现在转向图21,提出了一个流程图,该流程图说明了根据本发明的一个实施例来合并不同控制路径的转换信息。在附图标记310,比较两个控制路径的相应输入,在附图标记312,判断相应输入的类型是否不相同。如果类型不相同,在附图标记314返回具有较小类型的输入。对每个操作数重复进行这一处理。
现在转向图22,提出了一个流程图,该流程图说明了根据本发明的一个实施例的指令转换。这表明本发明适用于可被优化的算术表达式。图22A说明了用于JavaTM表达式的转换处理
短整数c=(short)((short)(a+b)/c)其中数值a、b和c是短整数类型。在附图标记316给出了这一表达式的JavaTM字节码序列。
指令转换开始于iload_a指令。与第一个、较小的类型相关的指令被用于载入指令和加指令。如表1所指定的,加法指令产生可能的溢出,但是在源级经显式(explicit)类型转换成为短整数类型而消除了溢出的可能性。DIV 330指令受图2所示的溢出的作用。然而,因为该显式类型转换,所以不存在可能的溢出。因此,不会有必要“返回”到加法操作以生成一个较大的类型。
为了进一步有助于理解本发明,参考图10至21,对以上讨论的实施例做更加详细的说明。
iload是一个源指令。在附图标记160,“a”操作数的所需类型是短整数类型。在附图标记162,操作数“a”是短整数类型。在附图标记166,操作数进位不可能溢出,因为它们被直接载入并因此而不会由生成溢出的运算所产生。因此,在附图标记167,短整数类型指令被用于将iload指令转换成sload_a指令。类似地,iload_b指令被转换成sload_b指令。
接下来,处理iadd指令。因为iadd是可产生溢出的指令,在附图标记210进行检查以判断其操作数是否可能进位溢出。直接载入两个操作数以使其进位不可能溢出。此后在附图标记220判断优化的结果类型。在附图标记232,指令类型被设置为最大操作数类型。在这个实例中,最大操作数类型是短整数类型,因为操作数“a”和操作数“b”是短整数类型。因为两个操作数的类型相同于指令类型,在附图标记238返回作为指令类型的短整数类型。
接下来,在附图标记222优化指令。因为指令类型是短整数类型,优化指令是“sadd”。接下来,在附图标记224判断结果类型和溢出指示。在附图标记240,结果类型被设置为短整数类型,该类型为指令类型。此外,根据表3产生结果具有可能溢出的指示。因为结果包含可能的溢出,在附图标记248记录用于(a+b)结果的返回点。两个操作数都没有返回点时,使得在附图标记268将用于结果的返回点设置为用于操作数“a”(第一操作数)的源指令。在附图标记250,产生结果具有可能溢出的指示。
接下来,处理i2s指令。在附图标记176,将操作数类型(短整数)与目标类型相比较(短整数)。因为两者类型相同,在附图标记178将类型变窄为短整数类型,消除可能的溢出。
最后,处理istore_c指令。因为所需的类型是短整数类型并且操作数进位不会溢出,在附图标记187将istore_c指令优化到sstore_c指令。在附图标记318给出了所转换的字节码。
现在转向图22B,提出了一个流程图,该流程图说明了根据本发明的一个实施例的指令转换。这表明本发明适用于不可被优化的算术表达式。经转换的代码与未经转换的代码仍然在语义上相等。图22说明了用于JavaTM表达式的转换处理
短整数c=(short)((short)(a+b)/c)其中数值a、b和c是短整数类型。在附图标记316给出了该表达式的JavaTM字节码序列。
指令转换开始于iload_a指令,如附图标记322所示。与第一个较小的类型相关的指令被用于载入指令322、324和加指令326。如表1所指定的,加法指令326产生了可能的溢出,但是不需利用第二个较大的类型。然而,DIV 330指令受溢出的作用,表2表明了这点。因此,必须修正产生溢出问题的指令。通过“返回”到附图标记322并使用第二个较大类型的用于操作数“a”的指令来解决这个问题。
在附图标记332,第二次进行指令转换,直到确定操作数“b”也必须被转换成较大类型,需要再次返回为止。在附图标记334指令转换随后第三次进行,直到确定用于操作数“c”的指令必须使用较大的类型为止。第三次执行返回,在附图标记336,操作数“c”的类型被修正并且在继续进行了第四次转换处理之后,结束该转换处理。
为了进一步有助于理解本发明,参考附图10至21,对以上所讨论的图22B的实例做更加详细的说明。
iload_a、iload_b和iadd指令的初始转换如前面实施例中所描述的进行。接下来在附图标记167,iload_c指令被转换成sload_c指令。随后处理idiv指令。如表2所指定的,idiv是受溢出作用的指令。“a+b”运算符具有溢出可能,因为它是由运算符“+”所生成的并且该运算符可产生如表1所示的溢出。因为至少一个运算符具有溢出可能,在附图标记218执行返回到具有溢出的第一操作数。
在附图标记270,先取得当前指令的转换。在附图标记274,溢是与a+b操作数相关联,所以将返回点设置为a+b操作数的返回点。在附图标记278,所需的返回指令的类型被从短整数类型加宽到整数类型。在附图标记280,产生对返回指令进行转换的指示。在附图标记282,在iload_a指令处恢复转换处理,该iload_a指令在先前被转换成sload_a指令。在附图标记284,转换iload_a指令。
作为返回的结果,在附图标记338处理iload_a指令。在附图标记124,使结果类型和所需的类型进行匹配。因为结果类型是短整数类型而所需类型是整数类型,类型不匹配。于是,生成S2I指令以将短整数类型提升为整数类型。对iload_b指令和iadd指令继续进行处理。在附图标记210,iadd的操作数进位不可能溢出,所以在附图标记220判断优化的结果类型。在附图标记234,比较操作数类型。因为“a”操作数现在是整数类型而“b”操作数仍然是短整数类型,执行“b”操作数的返回。在附图标记276,返回指令被设置为iload_b指令340。在附图标记278,所需的指令类型被设置为整数。在附图标记280,产生转换当前指令的指示。在附图标记283和284,在iload_b指令处恢复转换处理并且指令被转换。
在附图标记124,使结果类型和所需类型进行匹配。因为结果类型是短整数类型而所需类型是整数类型,类型不匹配。于是生成S2I指令以将短整数类型提升为整数类型。
接下来处理iadd指令。在第二次返回之后,没有一个操作数具有溢出的可能。因此在附图标记210产生操作数不可能进位溢出的指示并在附图标记220确定优化的指令类型。在附图标记232,指令类型被设置为最大操作数类型。因为a+b操作数是整数类型并且“c”操作数是短整数类型,指令类型被设置为整数。因为“c”操作数类型不同于指令类型,在附图标记236处执行“c”操作数的返回。在附图标记278,将返回指令的所需类型从短整数类型加宽到整数类型。在iload_c指令342处继续转换处理。
在附图标记124,将结果类型和所需类型进行匹配。因为结果类型是短整数类型而所需类型是整数类型,类型不匹配。于是生成S21指令以将短整数类型提升为整数类型。
接下来,处理idiv指令。在附图标记238,将优化指令类型设置为整数,因为两个操作数都是整数类型。在附图标记222,选择整数类型指令(idiv)。图22的附图标记344表示最后的指令序列。
尽管以上就整数类型而对本发明进行了描述,但是本领域普通技术人员会认识到本发明还可应用于浮点算术表达式。另外,虽然就JavaCardTM技术而对本发明进行了说明,但本领域普通技术人员会认识到本发明还可适用于许多其它平台。这些平台包括,举例来说,K虚拟机(KVM)技术,在太阳微系统公司(Sun Microsystem,Inc.)1999年6月8日出版的“K虚拟机(KVM)-白皮书”中描述了KVM技术。
本发明还可以用软件或固件来实现。它也可用其它处理器以及可编程门阵列设备、专用集成电路(ASIC)、及其它硬件来实现,
这样就描述了用于算术表达式的自适应优化的新方法。统一类型的指令被转换成语义相等的第二个较小的整数类型(具有较少的位数)的类型指令,以便在资源受限设备上执行,从而提供了相对高效的堆栈利用率并提高了执行速度。尽管显示并描述了本发明的实施例及应用,对受益于本说明的本领域普通技术人员来说显而易见,在不脱离本发明基本原理的情况下能够进行比以上所述更多的修改。因此本发明仅仅为所附权利要求的精神所限定。

Claims (25)

1.一种用于优化算术表达式的方法,包括:
接收为具有第一基数的第一处理器而定义的第一指令,所述指令包括一个运算符和至少一个操作数;
当所述至少一个操作数不可能进位溢出超出第二基数时,或当所述运算符对溢出无反应时,将所述第一指令转换成为具有该第二基数的第二处理器而优化的第二指令,所述第二基数小于所述第一基数;
当所述至少一个操作数可能进位溢出超出所述第二基数时,并且当所述运算符对溢出有反应时,转换成更宽基数的第三指令,该第三指令是与所述至少一个操作数相关的可能溢出的源,所述第三指令在先前已被优化,所述更宽基数大于所述第二基数而小于或等于所述第一基数。
2.如权利要求1的方法,其中所述转换成更宽基数进一步包括在所述转换到更宽基数之前舍弃所述第三指令的先前转换结果。
3.如权利要求1的方法,进一步包括拒绝不能在所述第二处理器上被优化为较小基数的表达式。
4.如权利要求1的方法,其中所述转换成更宽基数进一步包括当所述第二处理器不支持所述更宽基数时,拒绝所述第一指令。
5.如权利要求1的方法,其中所述第一指令是运算。
6.如权利要求1的方法,其中所述第一指令包括一个非运算的类型敏感型指令。
7.如权利要求5的方法,进一步包括:在对所述第一指令进行所述转换之后,返回接收所述第一指令,直到为所述第一处理器而定义的全部指令被转换为止。
8.如权利要求7的方法,进一步包括:将每一个指令链接到所有控制路径上的后继的指令。
9.如权利要求8的方法,其中对所述第一指令进行的所述转换进一步包括:
将每一个指令的结果链接到使用所述结果的所有指令上;
如果所述转换包括生成一个数值,则将所述数值链接到产生所述数值的指令;及
如果所述数值可能进位溢出,则将所述数值链接到最初导致所述溢出的指令。
10.如权利要求1的方法,包括:
所述第一处理器包括JavaTM虚拟机;以及
所述第二处理器包括Java CardTM虚拟机。
11.如权利要求1的方法,包括:
所述第一基数被所述第一处理器使用以执行至少一个数据类型的算术运算,所述至少一个数据类型具有比所述第一基数的长度更小的长度;以及
所述第二基数被第二处理器使用以执行至少一个数据类型的算术运算,所述第二基数具有与所述至少一个数据类型相同的长度。
12.如权利要求1的方法,其中
所述第一处理器由32位处理器构成;以及
所述第二处理器由资源受限的16位处理器构成。
13.如权利要求9的方法,其中
所述第一基数被所述第一处理器使用以执行至少一个数据类型的算术运算,所述至少一个数据类型具有比所述第一基数的长度更小的长度;以及
所述第二基数被所述第二处理器使用以执行至少一个数据类型的算术运算,所述第二基数具有比所述至少一个数据类型的长度更大的长度。
14.如权利要求13的方法,其中
所述第一处理器由32位处理器构成;以及
所述第二处理器由资源受限的16位处理器构成。
15.一种对至少一个指令的算术表达式进行优化的方法,该至少一个指令以具有第一基数的处理器为目标,所述方法包括:
在一处理器上接收一软件程序,所述软件程序根据一包括以下步骤的方法而加以优化:
接收为具有第一基数的第一处理器而定义的第一指令,所述第一指令包括一个运算符和至少一个操作数;
当所述至少一个操作数不可能进位溢出超出第二基数时,或当所述运算符对溢出无反应时,将所述第一指令转换成为具有该第二基数的第二处理器而优化的第二指令,所述第二基数小于所述第一基数;以及
当所述至少一个操作数可能进位溢出超出所述第二基数时,并且当所述运算符对溢出有反应时,转换成更宽基数的第三指令,该第三指令是与所述至少一个操作数相关的可能溢出的源,所述第三指令在先前已被优化,所述更宽基数大于所述第二基数而小于或等于所述第一基数;以及
在所述处理器上执行指令序列。
16.如权利要求15的方法,进一步包括将所述至少一个指令存储在资源受限设备上。
17.一种用于优化算术表达式的方法,包括:
接收为具有第一基数的第一处理器而定义的第一指令,所述指令包括一个运算符和至少一个操作数;以及
基于所述至少一个操作数是否进位溢出以及所述运算符是否对溢出有反应来指示所述至少一个操作数是否具有溢出可能;其中所述指示进一步包括;
当所述至少一个操作数不进位溢出时,指示所述至少一个操作数不具有溢出可能;
当所述至少一个操作数进位溢出并且当所述运算符对溢出有反应时,指示所述第一指令具有溢出可能。
18.如权利要求17的方法,其中所述方法进一步包括:
当所述至少一个操作数不进位溢出超出第二基数时,或当所述运算符对溢出无反应时,将所述第一指令转换成为具有第二基数的第二处理器而优化的第二指令,所述第二基数小于所述第一基数。
19.如权利要求18的方法,进一步包括拒绝不能在所述第二处理器上被优化为较小基数的表达式。
20.如权利要求17的方法,其中所述第一指令是运算。
21.如权利要求17的方法,其中所述第一指令包括一个非运算的类型敏感型指令。
22.如权利要求18的方法,其中所述第一处理器包括虚拟机;而且所述第二处理器包括虚拟机。
23.如权利要求18的方法,其中所述第一基数被所述第一处理器用来执行至少一个数据类型的算术运算,所述至少一个数据类型具有比所述第一基数的长度更小的长度;以及
所述第二基数被所述第二处理器用来执行至少一个数据类型的算术运算,所述第二基数具有与所述至少一个数据类型的长度相同的长度。
24.如权利要求18的方法,其中所述第一处理器由32位处理器构成;而且
所述第二处理器由资源受限的16位处理器构成。
25.如权利要求24的方法,进一步包括将所述第一指令存储在资源受限设备上。
CNB008181950A 1999-11-12 2000-11-10 用于算术表达式优化的方法和装置 Expired - Lifetime CN1287257C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/439,113 US6363523B1 (en) 1999-11-12 1999-11-12 Optimization of N-base typed arithmetic expressions
US09/439,113 1999-11-12

Publications (2)

Publication Number Publication Date
CN1421001A CN1421001A (zh) 2003-05-28
CN1287257C true CN1287257C (zh) 2006-11-29

Family

ID=23743348

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB008181950A Expired - Lifetime CN1287257C (zh) 1999-11-12 2000-11-10 用于算术表达式优化的方法和装置

Country Status (8)

Country Link
US (3) US6363523B1 (zh)
EP (1) EP1232430B1 (zh)
JP (2) JP4786101B2 (zh)
KR (1) KR20020087384A (zh)
CN (1) CN1287257C (zh)
AU (1) AU1484901A (zh)
DE (1) DE1232430T1 (zh)
WO (1) WO2001035201A1 (zh)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8631066B2 (en) * 1998-09-10 2014-01-14 Vmware, Inc. Mechanism for providing virtual machines for use by multiple users
US7200842B1 (en) 1999-02-02 2007-04-03 Sun Microsystems, Inc. Object-oriented instruction set for resource-constrained devices
JP2001005675A (ja) * 1999-06-21 2001-01-12 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
US7010786B2 (en) * 1999-11-12 2006-03-07 Sun Microsystems, Inc. Predictive arithmetic overflow detection
US6363523B1 (en) * 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
US8453133B2 (en) * 1999-11-12 2013-05-28 Oracle America, Inc. Optimization of N-base typed arithmetic instructions via rework
US7207037B2 (en) * 1999-11-12 2007-04-17 Sun Microsystems, Inc. Overflow sensitive arithmetic instruction optimization using chaining
US7107581B2 (en) * 1999-11-12 2006-09-12 Sun Microsystems, Inc. Overflow predictive arithmetic instruction optimization using chaining
US20010007146A1 (en) * 1999-12-23 2001-07-05 Uwe Hansmann Method for providing a set of software components
US20100174717A1 (en) * 2002-02-28 2010-07-08 Olivier Fambon Interative serialisation procedure for structured software objects
US7171438B2 (en) * 2002-11-12 2007-01-30 Sandbridge Technologies, Inc. Method for recognition of full-word saturating addition and subtraction
US8056064B2 (en) * 2002-11-12 2011-11-08 Aspen Acquisition Corporation Method for recognition of acyclic instruction patterns
US7661096B2 (en) * 2004-02-13 2010-02-09 Microsoft Corporation Interaction with nested and non-nested streams
JP2006227939A (ja) * 2005-02-17 2006-08-31 Matsushita Electric Ind Co Ltd 演算装置
CN100410873C (zh) * 2005-04-12 2008-08-13 威盛电子股份有限公司 分离饱和加减功能以改善处理器管线的关键执行阶段时程
US7512842B2 (en) 2005-08-29 2009-03-31 Searete Llc Multi-voltage synchronous systems
US8209524B2 (en) 2005-08-29 2012-06-26 The Invention Science Fund I, Llc Cross-architecture optimization
US7725693B2 (en) 2005-08-29 2010-05-25 Searete, Llc Execution optimization using a processor resource management policy saved in an association with an instruction group
US7739524B2 (en) * 2005-08-29 2010-06-15 The Invention Science Fund I, Inc Power consumption management
US7779213B2 (en) * 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
US7877584B2 (en) * 2005-08-29 2011-01-25 The Invention Science Fund I, Llc Predictive processor resource management
US7539852B2 (en) * 2005-08-29 2009-05-26 Searete, Llc Processor resource management
US20070050606A1 (en) * 2005-08-29 2007-03-01 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Runtime-based optimization profile
US8423824B2 (en) 2005-08-29 2013-04-16 The Invention Science Fund I, Llc Power sparing synchronous apparatus
US8255745B2 (en) * 2005-08-29 2012-08-28 The Invention Science Fund I, Llc Hardware-error tolerant computing
US7647487B2 (en) 2005-08-29 2010-01-12 Searete, Llc Instruction-associated processor resource optimization
US7627739B2 (en) * 2005-08-29 2009-12-01 Searete, Llc Optimization of a hardware resource shared by a multiprocessor
US8214191B2 (en) * 2005-08-29 2012-07-03 The Invention Science Fund I, Llc Cross-architecture execution optimization
US8375247B2 (en) 2005-08-29 2013-02-12 The Invention Science Fund I, Llc Handling processor computational errors
US8181004B2 (en) * 2005-08-29 2012-05-15 The Invention Science Fund I, Llc Selecting a resource management policy for a resource available to a processor
US8516300B2 (en) * 2005-08-29 2013-08-20 The Invention Science Fund I, Llc Multi-votage synchronous systems
US20070050605A1 (en) * 2005-08-29 2007-03-01 Bran Ferren Freeze-dried ghost pages
US8689194B1 (en) 2007-08-20 2014-04-01 The Mathworks, Inc. Optimization identification
CN101814009B (zh) * 2009-02-25 2011-12-21 慧国(上海)软件科技有限公司 闪存装置、资料储存系统、以及传送特殊命令至闪存装置的方法
US9003377B2 (en) * 2010-01-07 2015-04-07 Microsoft Technology Licensing, Llc Efficient resumption of co-routines on a linear stack
US8572594B2 (en) 2010-12-22 2013-10-29 Microsoft Corporation Invasion analysis to identify open types
US9652358B1 (en) 2016-04-14 2017-05-16 Semmle Limited Type widening for source code analysis
JP7163697B2 (ja) * 2018-09-28 2022-11-01 富士通株式会社 生成プログラム,情報処理装置及び生成方法

Family Cites Families (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US574041A (en) * 1896-12-29 Mcolure
US3805045A (en) 1972-10-30 1974-04-16 Amdahl Corp Binary carry lookahead adder using redundancy terms
US3993891A (en) 1975-07-03 1976-11-23 Burroughs Corporation High speed parallel digital adder employing conditional and look-ahead approaches
JPS55112651A (en) 1979-02-21 1980-08-30 Fujitsu Ltd Virtual computer system
US4429370A (en) * 1981-04-23 1984-01-31 Data General Corporation Arithmetic unit for use in a data processing system for computing exponent results and detecting overflow and underflow conditions thereof
US4504924A (en) 1982-06-28 1985-03-12 International Business Machines Corporation Carry lookahead logical mechanism using affirmatively referenced transfer gates
US4941119A (en) * 1988-11-30 1990-07-10 Control Data Corporation Method and apparatus for predicting an overflow in an integer multiply
US5617574A (en) 1989-05-04 1997-04-01 Texas Instruments Incorporated Devices, systems and methods for conditional instructions
JPH03100827A (ja) 1989-09-14 1991-04-25 Mitsubishi Electric Corp オーバフロー検出回路
US5107451A (en) 1990-01-30 1992-04-21 The Boeing Company Method and apparatus for pipelined detection of overflow in residue arithmetic multiplication
US5058048A (en) * 1990-04-02 1991-10-15 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
US5301341A (en) 1990-11-28 1994-04-05 International Business Machines Corporation Overflow determination for three-operand alus in a scalable compound instruction set machine which compounds two arithmetic instructions
US5102645A (en) * 1990-06-21 1992-04-07 Liquid Carbonic Corporation Method for manufacture of high purity carbon monoxide
IL100986A (en) * 1991-02-27 1997-01-10 Digital Equipment Corp Method for compiling code
IL100987A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Method and device for encoding
US5432795A (en) * 1991-03-07 1995-07-11 Digital Equipment Corporation System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program
US5305456A (en) 1991-10-11 1994-04-19 Security Integration, Inc. Apparatus and method for computer system integrated security
US5418959A (en) * 1992-11-30 1995-05-23 Intel Corporation Instruction operation size optimization
US5606677A (en) 1992-11-30 1997-02-25 Texas Instruments Incorporated Packed word pair multiply operation forming output including most significant bits of product and other bits of one input
US5408670A (en) 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
DE69434971T2 (de) * 1993-05-27 2008-01-17 Matsushita Electric Industrial Co., Ltd., Kadoma Programmumsetzungseinheit
JP2847688B2 (ja) * 1993-05-27 1999-01-20 松下電器産業株式会社 プログラム変換装置およびプロセッサ
US5446901A (en) 1993-06-30 1995-08-29 Digital Equipment Corporation Fault tolerant distributed garbage collection system and method for collecting network objects
US5825407A (en) 1993-09-13 1998-10-20 Albrit Technologies Ltd. Cable television audio messaging systems
US5748964A (en) 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5630066A (en) 1994-12-20 1997-05-13 Sun Microsystems, Inc. System and method for locating object view and platform independent object
US5668999A (en) 1994-12-20 1997-09-16 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US5659754A (en) 1995-03-31 1997-08-19 Sun Microsystems, Inc. Method and apparatus for an improved optimizing compiler
CA2173695A1 (en) 1995-04-14 1996-10-15 Panagiotis Kougiouris Method and system for providing interoperability among processes written to execute on different operating systems
US5724279A (en) 1995-08-25 1998-03-03 Microsoft Corporation Computer-implemented method and computer for performing modular reduction
US5878266A (en) 1995-09-26 1999-03-02 Advanced Micro Devices, Inc. Reservation station for a floating point processing unit
US5732263A (en) 1995-10-03 1998-03-24 International Business Machines Corporation Systems, methods and computer program products for generating and validating user defined object classes in an object oriented programming environment after build time
US6151618A (en) 1995-12-04 2000-11-21 Microsoft Corporation Safe general purpose virtual machine computing system
US6067575A (en) 1995-12-08 2000-05-23 Sun Microsystems, Inc. System and method for generating trusted, architecture specific, compiled versions of architecture neutral programs
US5790859A (en) 1995-12-21 1998-08-04 International Business Machines Corporation Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
US5784553A (en) 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
JP2000501217A (ja) * 1996-01-24 2000-02-02 サン・マイクロシステムズ・インコーポレイテッド 配列アクセス境界チェックを加速したプロセッサ
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
US5802373A (en) * 1996-01-29 1998-09-01 Digital Equipment Corporation Method for providing a pipeline interpreter for a variable length instruction set
US6075863A (en) 1996-02-28 2000-06-13 Encanto Networks Intelligent communication device
US5794049A (en) 1996-06-05 1998-08-11 Sun Microsystems, Inc. Computer system and method for executing architecture specific code with reduced run-time memory space requirements
US5844218A (en) * 1996-07-16 1998-12-01 Transaction Technology, Inc. Method and system for using an application programmable smart card for financial transactions in multiple countries
PT932865E (pt) * 1996-10-25 2002-12-31 Schlumberger Systems & Service Utilizacao de linguagem de programacao de nivel elevado com um microcontrolador
US5884316A (en) 1996-11-19 1999-03-16 Microsoft Corporation Implicit session context system with object state cache
US5920720A (en) 1997-02-25 1999-07-06 Microsoft Corporation Efficient computer based virtual machine object structure
ATE281680T1 (de) * 1997-03-24 2004-11-15 Visa Int Service Ass System und verfahren für eine mehrzweckchipkarte die eine nachträgliche speicherung einer anwendung auf dieser karte ermöglicht
US6003038A (en) 1997-03-31 1999-12-14 Sun Microsystems, Inc. Object-oriented processor architecture and operating method
US6092147A (en) * 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US6202143B1 (en) * 1997-08-21 2001-03-13 Samsung Electronics Co., Ltd. System for fetching unit instructions and multi instructions from memories of different bit widths and converting unit instructions to multi instructions by adding NOP instructions
US6026237A (en) 1997-11-03 2000-02-15 International Business Machines Corporation System and method for dynamic modification of class files
US5978825A (en) * 1997-11-14 1999-11-02 Crystal Semiconductor Corp. Zero detection circuitry and methods
US6247174B1 (en) 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
US6247116B1 (en) * 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers
US6292935B1 (en) * 1998-05-29 2001-09-18 Intel Corporation Method for fast translation of java byte codes into efficient native processor code
US6093216A (en) 1998-05-29 2000-07-25 Intel Corporation Method of run-time tracking of object references in Java programs
US6212633B1 (en) 1998-06-26 2001-04-03 Vlsi Technology, Inc. Secure data communication over a memory-mapped serial communications interface utilizing a distributed firewall
FR2797963B1 (fr) 1999-08-23 2002-11-29 Trusted Logic Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants
US6363523B1 (en) * 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
GB2365610A (en) 2000-08-02 2002-02-20 Ncr Int Inc Self-service terminal
US6988119B2 (en) 2001-06-29 2006-01-17 Intel Corporation Fast single precision floating point accumulator using base 32 system

Also Published As

Publication number Publication date
KR20020087384A (ko) 2002-11-22
JP5325925B2 (ja) 2013-10-23
US20040073894A1 (en) 2004-04-15
EP1232430A1 (en) 2002-08-21
US7316007B2 (en) 2008-01-01
US20020129344A1 (en) 2002-09-12
JP4786101B2 (ja) 2011-10-05
DE1232430T1 (de) 2003-02-06
US6687898B2 (en) 2004-02-03
CN1421001A (zh) 2003-05-28
JP2003515203A (ja) 2003-04-22
JP2011150727A (ja) 2011-08-04
US6363523B1 (en) 2002-03-26
EP1232430A4 (en) 2007-01-10
EP1232430B1 (en) 2020-05-20
AU1484901A (en) 2001-06-06
WO2001035201A1 (en) 2001-05-17

Similar Documents

Publication Publication Date Title
CN1287257C (zh) 用于算术表达式优化的方法和装置
CN1101019C (zh) 数据序列产生方法及设备、转换方法及计算机
CN1153129C (zh) 用于处理器定制操作的设备
CN1613058A (zh) 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备
CN1302380C (zh) 处理器和编译器
CN1264089C (zh) 编译设备和编译方法
CN1269027C (zh) 数据并行右移合并的方法与装置
CN1672133A (zh) 优化的代码生成
CN1802632A (zh) 用于在程序代码转换期间执行解释器优化的方法和装置
CN1127016C (zh) 计算机处理装置和方法
CN1672150A (zh) 用于软件原子化的视图
CN1922574A (zh) 无需额外的代码分析来进行链接时代码优化的方法和系统
CN1918546A (zh) 程序转换装置及程序转换方法
CN1234551A (zh) 动态优化字节编码程序的方法和装置
CN1961284A (zh) 使用n位乘加操作实现不变量除数的整数除法的方法和系统
CN1930552A (zh) 优化编码自动生成系统
CN1245684C (zh) 用于在赋值语句中查找归约变量的方法和系统
CN1608247A (zh) 自动指令集体系结构的产生
CN1795434A (zh) 程序执行控制设备,程序执行控制方法,控制程序和记录介质
CN1975662A (zh) 算术运算单元、信息处理设备和算术运算方法
CN1532666A (zh) 信息处理装置、该装置的时钟脉冲控制方法及控制程序
CN1143774A (zh) 优化器
CN1823322A (zh) 用于程序代码转换的共享代码缓存方法及设备
CN1731402A (zh) 用协处理器加速文件系统操作的方法及装置
CN1811632A (zh) 一种数控代码编译器以及基于其建立数控系统软件的方法

Legal Events

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

Granted publication date: 20061129