CN116466995A - 基于复合指令的指令及其操作数的优化方法及装置 - Google Patents
基于复合指令的指令及其操作数的优化方法及装置 Download PDFInfo
- Publication number
- CN116466995A CN116466995A CN202310715869.3A CN202310715869A CN116466995A CN 116466995 A CN116466995 A CN 116466995A CN 202310715869 A CN202310715869 A CN 202310715869A CN 116466995 A CN116466995 A CN 116466995A
- Authority
- CN
- China
- Prior art keywords
- instruction
- operand
- native
- compound
- operands
- 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.)
- Pending
Links
- 150000001875 compounds Chemical class 0.000 title claims abstract description 83
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000005457 optimization Methods 0.000 title claims abstract description 33
- 238000003860 storage Methods 0.000 claims abstract description 38
- 230000006870 function Effects 0.000 claims description 32
- 239000002131 composite material Substances 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 238000009434 installation Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- JEIPFZHSYJVQDO-UHFFFAOYSA-N iron(III) oxide Inorganic materials O=[Fe]O[Fe]=O JEIPFZHSYJVQDO-UHFFFAOYSA-N 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/30003—Arrangements for executing specific machine instructions
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及计算机技术领域,公开一种基于复合指令的指令及其操作数的优化方法及装置,其中,所述优化方法包括:从原生指令流中,获取数据操作指令以及所述数据操作指令对应的匹配指令;根据数据操作指令和匹配指令形成的指令组合,识别出所述指令组合对应的操作模型;根据所述操作模型对应的复合指令,对所述原生指令流中的原生指令码及其操作数进行优化。本申请通过对原生指令流中的原生指令码及其操作数进行优化,转换成本申请的复合指令,减少了WebAssembly模块中的指令条数、指令占用的存储空间、操作数个数以及运行时使用的操作数栈的深度,使得WebAssembly模块更加适合在资源受限设备上运行。
Description
技术领域
本申请涉及计算机技术领域,例如涉及一种基于复合指令的指令及其操作数的优化方法及装置。
背景技术
目前,资源受限设备(Resource Constrained Device)通常是指电量供应有限,计算能力有限,以及存储容量有限的电子设备,例如智能卡(Smart Card)和安全单元(SecureElement)。在这些设备上通常运行有片内操作系统(Chip Operating System,COS),COS可以通过输入/输出接口和外部接口设备进行通信,接收外部接口设备的命令,在其内部完成命令处理,把命令响应发送给外部接口设备,为接口设备提供私密信息的安全存储、重要程序的安全执行、用户身份鉴别等安全访问、控制功能。
同时,WebAssembly是一种可以在浏览器中可执行的字节码,也是一种以安全有效的方式运行可移植程序的技术,其主要解决浏览器性能的问题。
在实现本公开实施例的过程中,发现相关技术中至少存在如下问题:
由WebAssembly模块的原生指令码条数较多、指令操作数繁多且复杂,导致其原生指令流占用的存储空间较大,且运行时消耗随机存取存储器(Random Access Memory,RAM)的资源较多,不适合应用于资源受限设备。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
为了对披露的实施例的一些方面有基本的理解,下面给出了简单的概括。所述概括不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围,而是作为后面的详细说明的序言。
本公开实施例提供了一种基于复合指令的指令及其操作数的优化方法及装置、计算设备及存储介质,减少了指令占用的存储空间,提高了指令的运行速度,并使得WebAssembly模块更加适合在资源受限设备上运行。
在一些实施例中,所述基于复合指令的指令及其操作数的优化方法,包括:
从原生指令流中,获取数据操作指令以及所述数据操作指令对应的匹配指令;
根据数据操作指令和匹配指令形成的指令组合,识别出所述指令组合对应的操作模型;
根据所述操作模型对应的复合指令,对所述原生指令流中的原生指令码及其操作数进行优化。
在一些实施例中,所述基于复合指令的指令及其操作数的优化装置,安装于资源受限设备的内部,或者,位于资源受限设备的外部,包括:
指令匹配模块,被配置为从原生指令流中,获取数据操作指令以及所述数据操作指令对应的匹配指令;
模型识别模块,被配置为根据数据操作指令和匹配指令形成的指令组合,识别出所述指令组合对应的操作模型;
指令优化模块,被配置为根据所述操作模型对应的复合指令,对所述原生指令流中的原生指令码及其操作数进行优化。
在一些实施例中,所述计算设备,包括处理器和存储有程序指令的存储器,所述处理器被配置为在运行原生指令流中的原生指令时,执行如本申请所述的基于复合指令的指令及其操作数的优化方法,或者,所述处理器被配置为在运行所述程序指令时,执行如本申请所述的优化装置输出的根据复合指令优化后的指令流。
在一些实施例中,所述存储介质,存储有程序指令,所述程序指令在运行时,执行如本申请所述的用于指令码优化的方法。
本公开实施例提供的基于复合指令的指令及其操作数的优化方法及装置、计算设备及存储介质,可以实现以下技术效果:
本申请根据原生指令码及其指令操作各类变量的特性,获取数据操作指令以及所述数据操作指令对应的匹配指令,进而根据数据操作指令和匹配指令形成的指令组合,识别出指令组合对应的操作模型,通过操作模型对原生指令流中的原生指令码及其操作数进行优化,转换成本申请的复合指令,减少了WebAssembly模块中的指令条数、指令占用的存储空间、操作数个数以及运行时使用的操作数栈的深度,从而提高了指令的运行速度,使得WebAssembly模块更加适合在资源受限设备上运行。
此外,本申请的指令码优化过程可以由位于资源受限设备外部的转换器完成,转换器通过将优化后的指令直接提供给资源受限设备执行,从而减少了计算机在执行指令时的工作量,加快了执行速度。
以上的总体描述和下文中的描述仅是示例性和解释性的,不用于限制本申请。
附图说明
一个或多个实施例通过与之对应的附图进行示例性说明,这些示例性说明和附图并不构成对实施例的限定,附图中具有相同参考数字标号的元件示为类似的元件,附图不构成比例限制,并且其中:
图1是本公开实施例提供的一个栈式虚拟机的结构示意图;
图2是本公开实施例提供的一个用于指令码优化的方法的示意图;
图3是本公开实施例提供的另一个用于指令码优化的方法的示意图;
图4是本公开实施例的一个函数信息表的示意图;
图5是本公开实施例提供的一个用于指令码优化的方法的示意图;
图6是本公开实施例提供的一个数据操作指令的配对指令查找流程的示意图;
图7是本公开实施例提供的另一个用于指令码优化的方法的示意图;
图8是本公开实施例提供的另一个用于指令码优化的方法的示意图;
图9是本公开实施例提供的一个用于指令码优化的装置的示意图
图10是本公开实施例提供的一个资源受限设备的运行过程示意图;
图11是本公开实施例提供的一个计算设备的示意图。
具体实施方式
为了能够更加详尽地了解本公开实施例的特点与技术内容,下面结合附图对本公开实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本公开实施例。在以下的技术描述中,为方便解释起见,通过多个细节以提供对所披露实施例的充分理解。然而,在没有这些细节的情况下,一个或多个实施例仍然可以实施。在其它情况下,为简化附图,熟知的结构和装置可以简化展示。
本公开实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开实施例的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
除非另有说明,术语“多个”表示两个或两个以上。
以下对本公开实施例用到的技术术语进行解释:
指令(Instruction):指的是单个指示计算机(包括物理机和虚拟机)硬件执行某种运算、处理功能的命令。由操作码和可选的若干操作数组成。
指令集(Instruction Set):一台计算机(包括物理机和虚拟机)上全部指令的集合,就是这台计算机的指令系统。指令系统也称指令集,是这台计算机全部功能的体现。
指令码(Operation Code):也称操作码,指计算机程序中所规定的要执行操作的那一部分指令或字段(通常用代码表示),其实就是指令序列号,用来告诉CPU需要执行哪一条指令。
操作数(Operand):操作数指出指令执行的操作所需要数据的来源。
WebAssembly模块:WebAssembly是一种以安全有效的方式运行可移植程序的新技术,主要针对Web平台。其目标是对高级程序中间表示的适当低级抽象,即,WebAssembly代码旨在由编译器生成。称之为“模块(module)”,是因为使用WebAssembly并没有“程序”和“库”之间的区别,只有“模块”,彼此之间可以搭配,亦可通信,每个“模块”都有函数。
虚拟机:由资源受限设备的本地编译器编译源码,形成机器码作为固件固化在资源受限设备上,解释运行固化或下载至资源受限设备上的指令流。
指令流:由WebAssembly编译器编译应用源码形成的Wenassembly模块函数段的所有字节码,经转换器转换形成的指令流,预制在资源受限设备或后下载至资源受限设备的非易失性存储器NVM。
操作数栈:位于资源受限设备的随机存取存储器RAM,虚拟机解释指令流中指令,按照指令功能,从操作数栈弹出数据和指令操作数进行运算后,把运算结果压入操作数栈。
资源受限设备的内部硬件部分通常包括中央处理单元(Central ProcessingUnit,CPU)、随机存取存储器(Random Access Memory,RAM)、只读存储器(Read-OnlyMemory,简称ROM)、加/解密引擎、输入/输出接口和安全传感器等部分。早期资源受限设备的片内操作系统固化在芯片内,发行之后便不可修改,极大的限制了应用范围。然而,随着java技术的出现,该技术也被用在了资源受限设备上,例如Java卡平台(Java CardPlatform),该平台上包含运行环境、虚拟机和Java Card API等部分,可以运行Java卡应用(Java Card Applet)。同时,在Java 卡发行后,也可以把Java卡应用加载到Java卡上或修改Java卡上已有的应用。
此外,WebAssembly技术早期是在浏览器中可执行的字节码,主要解决的问题是浏览器性能。Web端把C、C++、Go、Rust等语言编译成WebAssembly模块下载至本地浏览器,该模块能在浏览器的虚拟机中高速运行,可达到原生的执行效率。在裁掉原生指令流中的浮点类型后,经过优化便可以把该技术应用在资源受限设备上,使用栈式虚拟机解释运行WebAssembly模块。其中,如图1所示,栈式虚拟机固件和WebAssembly模块的字节码存储在资源受限设备的NVM区,操作数栈位于资源受限设备的RAM区。应当注意的是,操作数栈中的栈数据并非与指令流中的指令码一一对应,即一些指令码不会从操作数栈上弹出栈数据,也不会往操作数栈上压入栈数据。一些指令还会从操作数栈上弹出多个栈数据,而不压入栈数据。一些指令会从操作数栈上弹出多个栈数据,压入一个栈数据;一些指令不会弹出栈数据,而压入等多种栈数据组合。
然而,WebAssembly模块的原生指令为64或32位的指令集,每条指令实现单一的功能,绝大部分指令中带有一个或两个操作数。其中,操作数使用的是LEB128格式进行编码,占用存储空间大。而且,如果操作数是变量地址、变量偏移、函数索引、表索引等则采用长格式LEB128编码,占用的存储空间更大,且运行时消耗RAM资源较多,不适合应用于资源受限设备。
为此,结合图2所示,本公开实施例提供一种基于复合指令的指令及其操作数的优化方法,包括:
步骤201:转换器从原生指令流中,获取数据操作指令以及数据操作指令对应的匹配指令。
步骤202:转换器根据数据操作指令和匹配指令形成的指令组合,识别出指令组合对应的操作模型。
步骤203:转换器根据操作模型对应的复合指令,对原生指令流中的原生指令码及其操作数进行优化。
采用本公开实施例提供的基于复合指令的指令及其操作数的优化方法,根据原生指令码及其指令操作各类变量的特性,获取数据操作指令以及数据操作指令对应的匹配指令,进而根据数据操作指令和匹配指令形成的指令组合,识别出指令组合对应的操作模型,通过操作模型对原生指令流中的原生指令码及其操作数进行优化,转换成本申请的复合指令,减少了WebAssembly模块中的指令条数、指令占用的存储空间、操作数个数以及运行时使用的操作数栈的深度,从而提高了指令的运行速度,使得WebAssembly模块更加适合在资源受限设备上运行。
可选地,在WebAssembly模块的原生指令中,其操作数如果是地址的偏移,使用足码LEB128编码,占用5个字节。由于资源受限设备上NVM和RAM资源受到限制,WebAssembly模块访问的地址空间和数据空间绝大部分不会超过64K。对此,本申请同时将部分LEB128格式的操作数改造成uint8_t、uint16_t型的操作数,当地址小于256时,使用一个字节操作数即可表示。当地址大于等于256并且小于65536时,用2个字节操作数表示。对于极少数超过64K的变量则保持原有访问方式不变,减少了字节码操作数占用的存储空间,方便解析和识别。
结合图3所示,本公开实施例提供另一种基于复合指令的指令及其操作数的优化方法,包括:
步骤301:转换器遍历包含原生指令流的函数信息表,查找数据操作指令。
步骤302:转换器在函数信息表对应的指令流中,根据数据操作指令所需的操作数个数及操作数栈的深度,获取数据操作指令对应的匹配指令。
步骤303:转换器根据数据操作指令和匹配指令形成的指令组合,识别出指令组合对应的操作模型。
步骤304:转换器根据操作模型对应的复合指令,对原生指令流中的原生指令码及其操作数进行优化。
在本申请的实施例中,结合图4所示,对于WebAssembly模块而言,函数信息表的每一个表项为一条WebAssembly的原生指令信息,其中,原生指令信息包括指令码OPCode、操作数组Operand Array、压栈个数PushNum、出栈个数PopNum。其中,指令码为WebAssembly的原生指令流中的指令码;操作数组每个元素为该指令的一个操作数,且为立即数格式。压栈个数为该条指令往操作数栈上压入的操作数个数,出栈个数为该条指令从操作数栈上弹出的操作数个数。如果指令码是函数调用指令call或call_indirect,被调函数输入参数个数作为该函数调用指令的出栈个数,返回值的个数作为入栈个数。
其中,对于WebAssembly模块而言,数据操作指令包括一个或多个类型,包括i32.store[type]、i32.load[type]和i32.operate中的部分或全部,即在函数信息表对应的指令流中,遍历查找数据操作指令i32.store[type]、i32.load[type]和i32.operate,然后根据查找到的任一数据操作指令,继续查找对应的匹配指令。
这样,根据WebAssembly的指令特性,选择适当的数据操作指令进行操作模型的识别,并根据识别出的操作模型利用本申请的复合指令进行替换,能够尽可能地减少存储空间的占用。
在本申请的实施例中,结合图5所示,对于步骤302,具体包括:
步骤501:在函数信息表对应的指令流中,转换器从当前数据操作指令开始,向前依次查找每条指令的压栈个数和出栈个数。
步骤502:转换器根据指令的压栈个数和出栈个数,计算每条指令对应的操作数栈上的操作数个数。
步骤503:转换器在当前数据操作指令所需操作数等于操作数栈上的操作数时,将把第一个操作数压入栈中的指令,作为当前数据操作指令对应的匹配指令。
例如,对于数据操作指令i32.store[type]、i32.load[type]和i32.operate,其中,数据操作指令i32.store[type] 和i32.load[type]的匹配指令为把变量基址base放到操作数栈上的那条指令。数据操作指令i32.operate的匹配指令为把值value放到操作数栈上的那条指令。同时,由于数据操作指令都需要两个操作数,因此,把第一个操作数压入栈中的指令即为数据操作指令对应的匹配指令。在指令流中,从数据操作指令向前查找,根据指令的压栈个数和出栈个数可以计算操作数栈上的数据个数。当数据栈上有两个操作数时,即找到匹配指令。匹配指令找到后,再从匹配指令开始校验,验证匹配指令压到操作数栈上的操作数不能被弹出,从而进一步确认当前数据操作指令对应的匹配指令。
在实际应用中,结合图6所示,数据操作指令的匹配指令查找及校验流程包括:
首先,根据数据操作指令K的指令信息,设置查找目标操作数个数DestNum:DestNum=PopNumk,即要查找的操作数个数为数据操作指令出栈个数;设置当前指令指针:k=K,即设置当前指令为数据操作指令;设置当前操作数栈上操作数个数:Num=0,即设置当前操作数栈上的个数为0。
其次,设置k-=1指向上一条指令,计算当前指令执行完后操作数栈上的操作数个数,令当前操作数栈操作数个数变量Num减去当前指令的出栈个数,再加上当前指令的入栈个数,即Num -= PopNumk;Num += PushNumk。
再次,比较当前操作数栈操作数个数变量Num和目标操作数个数DestNum是否相等。如果相等,则转到Step5;如果不相等执行Step4;
如果不相等,进一步判断当前指令变量k是否为指令流中的第一条指令;若是,则返回未找到匹配指令;若否,则需要继续在指令流中继续前向遍历,继续设置k-=1指向上一条指令。
如果相等,则找到匹配指令J。
然后,对匹配指令J进行匹配检查,从匹配指令J向后至数据操作指令K遍历指令流,判断匹配指令J到数据操作指令K之间的指令是否能弹出匹配指令J压倒操作数栈上的数据;如果匹配指令J压倒操作数栈上的数据未被弹出,则匹配检查成功,返回匹配指令J;如果弹出,则匹配检查失败,返回校验失败。
结合图7所示,本公开实施例提供另一种基于复合指令的指令及其操作数的优化方法,包括:
步骤701:转换器从原生指令流中,获取数据操作指令以及数据操作指令对应的匹配指令。
步骤702:转换器根据每个数据操作指令以及对应的匹配指令形成的指令组合,确定出指令组合对应的指令操作类型。
步骤703:转换器从多个单一类的操作模型中,识别出具有相同指令操作类型的单一类的操作模型。
步骤704:在满足预设条件的情况下,转换器将识别出的两个单一类的操作模型,合并为复合类的操作模型。
其中,预设条件包括两个单一类的操作模型之间存在内嵌关系,且两个单一类的操作模型的局部变量索引均相同。
步骤705:转换器获取单一类的操作模型和/或复合类的操作模型对应的多个复合指令。
步骤706:转换器使用复合指令,替换原生指令流中操作模型对应的原生指令码和操作数。
在本申请的实施例中,对于WebAssembly模块而言,数据操作指令包括一个或多个类型,包括i32.store[type]、i32.load[type]和i32.operate中的部分或全部,即在函数信息表对应的指令流中,遍历查找数据操作指令i32.store[type]、i32.load[type]和i32.operate,然后根据查找到的任一数据操作指令,继续查找对应的匹配指令。
在本申请的实施例中,本申请根据WebAssemble的原生指令流及其指令操作各类变量的特性,识别出如下若干类操作模型。每个操作模型可以利用一条复合指令替代原生若干条原生指令的操作,操作数少并且占用的空间小。
操作模型1:数值存储到全局变量,即global_varible=value。
数值value:可以是常量、变量、函数返回值,可以是char、unsigned char、short、unsigned short、int、unsigned int类型,通过其他一条或多条指令获得value并放到操作数栈上。
全局变量global_varible:编译WebAssembly模块时编译器为global_varible分配地址global_address,global_address地址被拆分成基址base和偏移offset两部分,即global_address=base+offset。基址base通过i32.const,base加载到操作数栈上,偏移offset以立即数形式作为存储指令的操作数2。
原生指令流由如下步骤实现“数值存储到全局变量”的操作:
第一步:通过一条i32.const,base指令,把base放到操作数栈上;
第二步:通过其他一条或多条指令获得value并放到操作数栈上;
第三步:通过存储指令从操作数栈上弹出base和value,然后把base和存储指令的操作数offset相加得到全局变量global_varible的地址global_address,之后把value截断后或直接存储到global_address,至此完成数值存储到全局变量。
其中,存储指令i32.store[type]根据value的类型可以是i32.store8、i32.store16、i32.store。存储指令的第一个操作数x代表地址对齐数值。i32.store8指令的x=0;i32.store16指令的x=1;i32.store指令的x=2;属于冗余操作数。
原生指令序列和操作数栈状态如下表1所示:
表1
使用本申请的复合指令,把基址入栈和存储两个操作合并成一个复合操作,该条复合指令实现value存储到全局变量。其中base+offset的计算得到global_address由转换器完成,无需资源受限虚拟机计算。
如果global_address小于256,操作数使用1字节表示,根据value类型复合指令i32.store[type]_cstAddrx可以是i32.store8_cstAddr1、i32.store16_cstAddr1、i32.store_cstAddr1;如果global_address大于256并且小于65536,操作数使用2字节表示,根据value类型复合指令i32.store[type]_cstAddrx可以是i32.store8_cstAddr2、i32.store16_cstAddr2、i32.store_cstAddr2。
复合指令序列和操作数栈状态如下表2所示:
表2
通过转换器对操作模型1进行优化后,使用的指令条数变少、设备计算量变少,设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
操作模型2:数值存储至局部指针指向的地址,即(pointer)=value。
数值value:可以是常量,可以是变量,可以是函数返回值,可以是char、unsignedchar、short、unsigned short、int、unsigned int类型;
局部指针pointer:原生WebAssembly编译时会为每个局部变量分配一个索引local_index,把pointer拆分成基址base和偏移offset,把base存储在局部变量索引local_index指向的局部变量中,存储指令的操作数包含offset,即pointer=base+offset;基址base通过i32.const,base加载到操作数栈上,偏移offset以立即数形式作为存储指令的操作数2。
原生指令流由如下步骤实现“数值存储至局部指针指向的地址”的操作:
第一步,通过一条local.get,local_index指令,把pointer的基址base放到操作数栈上;
第二步:通过其他一条或多条指令获得value并放到操作数栈上;
第三步:通过存储指令从操作数栈上弹出base和value,计算base与offset之和得到pointer,把value截断后或直接存储到pointer指向的地址,完成数值存储至局部变量指针指向的地址。
存储指令根据value类型可以是i32.store8、i32.store16、i32.store。存储指令的第一个操作数x代表地址对齐数值。i32.store8指令的x=0;i32.store16指令的x=1;i32.store指令的x=2;属于冗余操作数。
原生指令序列和操作数栈状态如下表3所示:
表3
使用本申请的复合指令,把基址压栈和存储两个操作合并成一个复合操作,该条复合指令的操作数包含local_index和offset,实现value存储到局部指针指向的地址。如果local_index和offset可以用1字节表示,存储i32.store[type]_loc_offxy指令根据value类型可以是i32.store8_loc_off1y、i32.store16_loc_off1y、i32.store_loc_off1y,其中,y比特local_index,(8-y)比特offset;如果local_index和offset必须用2字节表示,存储i32.store[type]_loc_offxy指令根据value类型可以是i32.store8_loc_off2y、i32.store16_loc_off2y、i32.store_loc_off2y,其中,y比特local_index,(8-y)比特offset。
复合指令序列和操作数栈状态如下表4所示:
表4
通过转换器对操作模型2进行优化后,使用的指令条数变少、设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
操作模型3:常量存储至局部指针指向的地址,即(pointer)=const。
const:常数,通过i32.const,const加载到操作数栈上;
局部指针pointer:原生WebAssembly编译时会为每个局部变量分配一个索引local_index,把pointer拆分成基址base和偏移offset,把base存储在局部变量索引local_index指向的局部变量中,存储指令的操作数包含offset,即pointer=base+offset;指针基址base通过i32.const,base加载到操作数栈上,偏移offset以立即数形式作为存储指令的操作数2。
原生指令流由如下步骤实现“常量存储至局部指针指向的地址”的操作:
第一步,通过一条local.get,local_index指令,把pointer的基址base放到操作数栈上;
第二步:通过一条i32.const,const指令,把常量放到操作数栈上;
第三步:通过存储指令从操作数栈上弹出base和const,然后把base和存储指令的操作数offset相加得到指针pointer,之后把const存储到pointer,至此完成常量存储至局部指针指向的地址。
其中,存储指令i32.store[type]根据局部指针指向的类型可以是i32.store8、i32.store16、i32.store。存储指令的第一个操作数x代表地址对齐数值。i32.store8指令的x=0;i32.store16指令的x=1;i32.store指令的x=2;属于冗余操作数。
原生指令序列和操作数栈状态如下表5所示:
表5
使用本申请的复合指令,把局部指针基址入栈、常量入栈和存储三个操作合并成一个复合操作。复合指令i32.loc_cst_store[type]_2xy的操作数共2个字节,分成3部分用来表示local_index、const、offset,其中,x比特local_index,y比特const,(16-x-y)比特offset,根据local_index、 const、offset范围选择适当的指令。复合指令i32.loc_cst_store[type]_2xy根据局部指针指向的类型可以是i32.loc_cst_store8_2xy、 i32.loc_cst_store16_2xy、i32.loc_cst_store_2xy。
复合指令序列和操作数栈状态如下表6所示:
表6
通过转换器对操作模型3进行优化后,使用的指令条数变少,设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
操作模型4:全局变量入栈,即push(global_varible)。
全局变量:编译时编译器为全局变量global_varible分配地址global_address,原生WebAssembly编译时会把global_address拆分成基址base和偏移offset之和,即global_address=base+offset。基址base通过i32.const,base加载到操作数栈上,偏移offset以立即数形式作为加载指令的操作数2。
原始指令集由如下步骤实现“全局变量入栈”的操作:
第一步,通过一条i32.const,base指令,把base放到操作数栈上;
第二步:无操作或其他指令操作,这些操作完后操作数个数不变;
第三步:通过加载指令从操作数栈上弹出base,把base和offset相加得到全局变量global_varible的地址global_address,把global_address位置的数据做符号扩展后或直接压到操作数栈上,完成全局变量入栈。
其中,加载指令i32.load[type]根据全局变量类型可以是i32.load8_s、i32.load8_u、i32.load16_s、i32.load16_u、i32.load。
原生指令序列和操作数栈状态如下表7所示:
表7
使用本申请的复合指令,把基址压栈和加载两个操作合并成一条复合指令,该条复合指令实现全局变量入栈。其中base+offset的计算得到global_address由转换器完成,无需资源受限虚拟机计算。如果global_address能用1个字节表示,加载指令i32.load[type]_cstAddrx根据全局变量类型可以是i32.load8_s_cstAddr1、i32.load8_u_cstAddr1、i32.load16_s_cstAddr1、i32.load16_u_cstAddr1、i32.load_cstAddr1;如果global_address必须用2个字节表示,加载指令i32.load[type]_cstAddrx根据全局变量类型可以是i32.load8_s_cstAddr2、i32.load8_u_cstAddr2、i32.load16_s_cstAddr2、i32.load16_u_cstAddr2、i32.load_cstAddr2。
复合指令序列和操作数栈状态如下表8所示:
表8
通过转换器对操作模型4进行优化后,使用的指令条数变少、设备计算量变少,设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
操作模型5:局部指针指向的数据入栈,即push((pointer))。
局部指针pointer:原生WebAssembly编译时会为每个局部变量分配一个索引local_index,把pointer拆分成基址base和偏移offset,把base存储在局部变量索引local_index指向的局部变量中,加载指令的操作数包含offset,即pointer=base+offset;基址base通过i32.const,base加载到操作数栈上,偏移offset以立即数形式作为加载指令的操作数2。
原始指令集由如下步骤实现“局部指针指向的数据入栈”的操作:
第一步,通过一条local.get,local_index指令,把pointer的基址base放到操作数栈上;
第二步:无操作或其他指令操作,这些操作完后操作数栈顶操作数仍为base;
第三步:通过加载指令从操作数栈上弹出base,计算base与offset之和得到pointer,pointer指向地址的数据做符号扩展后或直接入栈,完成局部变量指针指向的地址数据入栈。
其中,加载指令i32.load[type]根据pointer类型可以是i32.load8_s、i32.load8_u、i32.load16_s、i32.load16_u、i32.load。
原生指令序列和操作数栈状态如下表9所示:
表9
使用本申请的复合指令,把基址压栈和加载两个操作合并成一个复合操作,该条复合指令的操作数包含local_index和offset,实现局部指针指向数据入栈。如果local_index和offset可以用1字节表示,加载指令i32.load[type]_loc_offxy根据pointer类型可以是i32.load8_s_loc_off1y、i32.load8_u_loc_off1y、i32.load16_s_loc_off1y、i32.load16_u_loc_off1y、i32.load_loc_off1y;如果local_index和offset必须用2字节表示,加载指令i32.load[type]_loc_offxy根据pointer类型可以是i32.load8_s_loc_off2y、i32.load8_u_loc_off2y、i32.load16_s_loc_off2y、i32.load16_u_loc_off2y、i32.load_loc_off2y。y表示local_index表示占用位数,1字节操作数表示时offset表示占用位数为(8-y),2字节操作数表示时offset表示占用位数为(16-x)。
复合指令序列和操作数栈状态如下表10所示:
表10
通过转换器对操作模型5进行优化后,使用的指令条数变少、设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
模型6:局部变量跟常量进行计算后结果入栈,即push(local_varible operateconst)
局部变量local_varible:原生WebAssembly编译时会为每个局部变量分配一个索引local_index,加载、存储局部变量使用local_index指示;
operate:可以是加、减、与等操作;
const:是常量数据;
原生指令流由如下步骤实现“局部变量跟常量进行计算后结果入栈”的操作:
第一步,通过一条local.get,local_index指令,把local_varible的值value放到栈顶;
第二步:无操作或其他指令操作,这些操作完后操作数栈顶操作数仍为local_varible;
第三步:通过i32.const,const加载常量const到操作数栈;
第四步:通过运算指令从操作数栈上弹出value和const,计算value和const的运算结果得到result,result入栈,完成局部变量跟常量进行计算后结果入栈。其中,operate可以是add、sub、and等。
原生指令序列和操作数栈状态如下表11所示:
表11
使用本申请的复合指令,把局部变量入栈、常量入栈和运算这三个操作合并成一条复合操作,该条复合指令的操作数包含local_index和const,实现局部变量跟常量进行计算后结果入栈。根据运算类型复合指令i32.loc_cst_operatexy可以是i32.loc_cst_addxy、i32.loc_cst_subxy、i32.loc_cst_andxy,根据局部变量的索引和const的大小,复合指令操作数可以是一字节或两字节。如果const是0xFF或0xFFFF,复合指令可以是i32.loc_f2f4_and而无需操作数。x表示操作数字节数,y表示local_index表示占用位数,1字节操作数表示时const表示占用位数为(8-y),2字节操作数表示时const表示占用位数为(16-y)。
复合指令序列和操作数栈状态如下表12所示:
表12
通过转换器对操作模型6优化后,使用的指令条数变少、设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
操作模型7:栈顶数据value跟常量进行计算后结果入栈,即push(pop(value)operate const)
栈顶数据value:操作数栈最顶部数据,通过出栈获取;
operate:可以是加、减、与等操作;
const:是常量数据;
原始指令集由如下步骤实现“栈顶数据value跟常量进行计算后结果入栈”的操作:
第一步,通过一条或多条指令后value置于操作数栈顶;
第二步:无操作或其他指令操作,这些操作完后操作数栈顶操作数仍为value;
第三步:通过i32.const,const加载常量const到操作数栈;
第四步:通过运算指令从操作数栈上弹出value和const,计算value和const的运算结果得到result,result入栈,完成栈顶数据跟常量进行计算后结果入栈。其中,operate可以是add、sub、and等。
原生指令序列和操作数栈状态如下表13所示:
表13
使用本申请的复合指令,把常量入栈和运算这两个操作合并成一条复合操作,该条复合指令的操作数包含const,操作数栈顶数据跟常量进行计算后结果入栈。根据运算类型和操作数范围复合指令i32.operate_[type]可以是i32.add_u8、i32.add_u16、i32.sub_u8、i32.sub_u16、i32.and_u8、i32.and_u16。如果与操作时const是0xFF或0xFFFF,复合指令可以是i32.and_f2和i32.and_f4而无需操作数。
复合指令序列和操作数栈状态如下表14所示:
表14
通过转换器对操作模型7优化后,使用的指令条数变少、设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
操作模型8:使用局部指针进行变量赋值,即,pointer1=/>pointer2,其中pointer1和pointer指向同样地址空间。
指针pointer1、pointer2:原生WebAssembly编译时会把指针拆分成基址base和偏移offset。由于pointer1和pointer2位于同样的地址空间,被拆分成共同的基址base和offset1,offset2,即,pointer1=base+offset1,pointer2= base+offset2。为pointer1和pointer2的基址base分配一个索引为local_index局部变量。
原始指令集由如下步骤实现“使用局部指针进行变量赋值”的操作:
第一步,通过一条local.get,local_index指令,把pointer2的基址base放到操作数栈上;
第二步:通过一条local.get,local_index指令,把pointer1的基址base放到操作数栈上;
第三步:通过加载指令从操作数栈上弹出base,计算base与offset2之和得到pointer2。如果pointer2指向的类型是char或short类型的变量,需要把pointer2指向的地址数据进行符号扩展后入栈;如果pointer2指向的是unsigned char或unsigned short变量,需要把pointer2指向的地址数据高位补0后入栈;如果pointer2指向的是int或unsigned int变量,直接把pointer2指向的地址数据入栈。加载指令i32.load[type]根据pointer类型可以是i32.load8_s、i32. load 8_u、i32.load16_s、i32.load16_u、i32.load;
第四步:通过存储指令从操作数栈上弹出base和(pointer2),计算base与offset1之和得到pointer1。如果pointer1指向的是char、unsigned char、short、unsignedshort类型变量,把/>(pointer2)截断后存储到pointer1指向地址;如果pointer1指向的是int或unsigned int变量,直接把/>(pointer2) 存储到pointer1指向地址。存储指令i32.store[type]根据pointer类型可以是i32.store8、i32.store16、i32.store。
原生指令序列和操作数栈状态如下表15所示:
表15
/>
使用本申请的复合指令,把基址压栈、加载、存储等操作合并成一个复合操作,该条复合指令的操作数包含local_index、offset1和offset2,实现局部指针进行变量赋值。复合指令i32.copy_stack[type]_2xy的操作数共2个字节,分成3部分用来表示local_index、 offset1、offset2,其中,x比特local_index,y比特offset1,(16-x-y)比特offset2,根据local_index、 offset1、offset2范围选择适当的指令。复合指令i32.copy_stack[type]_2xy根据局部指针指向的类型可以是i32.copy_stack8_2xy、 i32.copy_stack16_2xy、i32.copy_stack_2xy。
复合指令序列和操作数栈状态如下表16所示:
表16
通过转换器对操作模型8进行优化后,使用的指令条数变少、设备上字节码更短、使用的操作数栈深度变小、避免对变量进行扩展和截断等特性,在资源受限设备上占用存储空间少、运行速度快。
操作模型9:全局指针加值操作,即,pointer=/>(pointer+const)。
全局指针pointer:原生WebAssembly编译时会把指针拆分成基址base和偏移offset,即,pointer=base+offset;
const:常量数据;
原始指令集由如下步骤实现“全局指针加值操作”的操作:
第一步,通过一条local.get,local_index指令,把pointer的基址base放到操作数栈上;
第二步:通过一条local.get,local_index指令,把pointer的基址base放到操作数栈上;
第三步:通过i32.const,const把加值的常量放到操作数栈;
第四步:通过i32.add完成加值操作;
第五步:通过存储指令从操作数栈上弹出base和(base+const),计算base与offset之和得到pointer,把(base+const)存储到pointer指向的地址。存储指令i32.store[type]根据pointer类型可以是i32.store 8、i32.store16、i32.store。
原生指令序列和操作数栈状态如下表17所示:
表17
使用本申请的复合指令,把基址压栈、常量压栈、加值操作、存储等多个操作合并成一个复合操作,该条复合指令的操作数包含local_index、const和offset,实数全局指针加值。复合指令i32.add_stack[type]_2xy的操作数共2个字节,分成3部分用来表示local_index、const、offset,其中,x比特local_index,y比特const,(16-x-y)比特offset,根据local_index、 const、offset范围选择适当的指令。复合指令i32.add_stack[type]_2xy根据局部指针指向的类型可以是i32.add _stack8_2xy、i32. add_stack16_2xy、i32. add_stack_2xy。
复合指令序列和操作数栈状态如下表18所示:
表18
通过转换器对操作模型9进行优化后,使用的指令条数变少、设备上字节码更短、使用的操作数栈深度变小,在资源受限设备上占用存储空间少、运行速度快。
应当注意的是,操作模型1至操作模型7为单一类的操作模型,操作模型8和操作模型9是由两个单一类的操作模型组成的复合类的操作模型,其中,操作模型8由操作操作模型2内嵌操作操作模型5组成,并且操作操作模型2和操作操作模型5的局部变量索引一致。操作模型9由操作模型2内嵌操作模型6组成,并且操作模型2和操作模型6的局部变量索引一致。
这样,将单操作的操作模型进一步合并成复合操作的操作模型,可以进一步减少字节码占用空间和指令执行效率。
在本申请的实施例中,对于WebAssembly模块而言,在对上述九个操作模型进行识别的过程中,如果数据操作指令是i32.store[type],匹配指令是i32.const,该操作模型为操作模型1。如果数据操作指令是i32.store[type],匹配指令是local.get,值加载指令不是i32.const,该操作模型为操作模型2。如果数据操作指令是i32.store[type],匹配指令是local.get,值加载指令是i32.const,该操作模型为操作模型3。如果数据操作指令是i32.load[type],匹配指令是i32.const,该操作模型为操作模型4。如果数据操作指令是i32.load[type],匹配指令是local.get,该操作模型为操作模型5。如果数据操作指令是i32.operate,匹配指令是local.get,该操作模型为操作模型6。如果数据操作指令是i32.operate,匹配指令不是local.get,该操作模型为操作模型7。
结合图8所示,本公开实施例提供另一种基于复合指令的指令及其操作数的优化方法,包括:
步骤801:转换器读入WebAssembly模块的原生指令流。
其中,转换器会校验WebAssembly模块格式的合法性,通过扫描WebAssembly模块的Global段,获取WebAssembly模块内部所有全局变量的地址和堆栈地址。
步骤802:转换器建立全局变量信息表。
其中,全局变量信息表的每个表项包含一个全局变量名称、全局变量地址、全局变量类型和全局变量长度
步骤803:转换器按照指令流顺序建立函数信息表。
其中,函数信息表的每一个表项包括一条原生指令信息,原生指令信息包括指令码、操作数组、压栈个数和出栈个数;其中,指令码为原生指令流中的指令码,操作数组的每个元素为指令码的一个操作数,且为立即数格式,压栈个数为该条指令往操作数栈上压入的操作数个数,出栈个数为该条指令从操作数栈上弹出的操作数个数。
步骤804:转换器查找数据操作指令的匹配指令。
其中,转换器遍历函数信息表,如果原生指令信息中数据操作指令i32.store[type]、i32.load[type]或i32.operate,则查找数据操作指令对应的匹配指令并进行校验。
步骤805:转换器根据数据操作指令和匹配指令形成的指令组合,识别出指令组合对应的操作模型。
步骤806:转换器根据操作模型使用本申请的复合指令,替换WebAssembly模块中的多个原生指令。
步骤807:转换器输出优化后的WebAssembly模块。
可选地,本申请复合指令的复合指令集如下表19所示:
表19
/>
/>
/>
/>
/>
/>
结合图9所示,本公开实施例提供一种基于复合指令的指令及其操作数的优化装置,安装于资源受限设备的内部,或者,或位于资源受限设备的外部,包括:
指令匹配模块901,被配置为从原生指令流中,获取数据操作指令以及数据操作指令对应的匹配指令;
模型识别模块902,被配置为根据数据操作指令和匹配指令形成的指令组合,识别出指令组合对应的操作模型;
指令优化模块903,被配置为根据操作模型对应的复合指令,对原生指令流中的原生指令码及其操作数进行优化。
在本申请的实施例中,在实际应用中,在基于复合指令的指令及其操作数的优化装置位于资源受限设备的外部的情况下,其可以是安装在计算机上的一个软件,该软件使用本申请的优化方法对原生WebAssembly模块进行优化,生成下载文件,下载到资源受限设备上并运行。
具体地,结合图10所示,应用源码是使用高级语言实现的多个应用程序组合,一个程序组合可以使用系统提供的API函数,也可以使用其他应用程序组合的函数,这些程序组合可以采用不同的高级语言实现,程序组合经过WebAssembly编译器编译生成WebAssembly模块。
转换器读入系统函数导出文件,将WebAssembly模块进行改造,生成可供下载到资源受限设备上的下载文件。下载文件经转换器改造过后适合下载到资源受限设备上的文件,经过下载器可以把下载文件下载到资源受限设备。
下载器把下载文件转换成下载指令流,下载到资源受限设备,并发送安装指令,以使资源受限设备下载并安装WebAssembly模块。资源受限设备已经完成固件灌装,具有安装器、虚拟机、运行环境、API模块、预安装应用模块、模块ID表、模块地址表等,可以接收外部下载器的下载模块,完成下载模块的安装,虚拟机可以解释执行应用模块完成特定的功能。
采用本公开实施例提供的用于指令码优化的装置,使得本申请的指令码优化过程可以由位于资源受限设备外部的转换器完成,转换器通过将优化后的指令直接提供给资源受限设备执行,从而减少了计算机在执行指令时的工作量,加快了执行速度。
结合图11所示,本公开实施例提供一种计算设备,包括处理器(processor)110和存储器(memory)111。可选地,该装置还可以包括通信接口(Communication Interface)112和总线113。其中,处理器110、通信接口112、存储器111可以通过总线113完成相互间的通信。通信接口112可以用于信息传输。处理器110可以调用存储器111中的逻辑指令,以执行上述实施例的基于复合指令的指令及其操作数的优化方法。
此外,上述的存储器111中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器111作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令/模块。处理器110通过运行存储在存储器111中的程序指令/模块,从而执行功能应用以及数据处理,即实现上述实施例中用于指令码优化的方法。
存储器111可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器111可以包括高速随机存取存储器,还可以包括非易失性存储器。
本公开实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为执行上述基于复合指令的指令及其操作数的优化方法。
上述的计算机可读存储介质可以是暂态计算机可读存储介质,也可以是非暂态计算机可读存储介质。
Claims (12)
1.一种基于复合指令的指令及其操作数的优化方法,其特征在于,包括:
从原生指令流中,获取数据操作指令以及所述数据操作指令对应的匹配指令;
根据数据操作指令和匹配指令形成的指令组合,识别出所述指令组合对应的操作模型;
根据所述操作模型对应的复合指令,对所述原生指令流中的原生指令码及其操作数进行优化。
2.根据权利要求1所述的优化方法,其特征在于,所述从原生指令流中,获取数据操作指令以及所述数据操作指令对应的匹配指令,包括:
遍历包含原生指令流的函数信息表,查找数据操作指令;
在函数信息表对应的指令流中,根据数据操作指令所需的操作数个数及操作数栈的深度,获取所述数据操作指令对应的匹配指令。
3.根据权利要求2所述的优化方法,其特征在于,所述数据操作指令,包括i32.store[type]、i32.load[type]和i32.operate中的一个或多个类型。
4.根据权利要求2所述的优化方法,其特征在于,所述根据数据操作指令所需的操作数个数及操作数栈的深度,获取数据操作指令对应的匹配指令,包括:
在函数信息表对应的指令流中,从当前数据操作指令开始,向前依次查找每条指令的压栈个数和出栈个数;
根据指令的压栈个数和出栈个数,计算每条指令对应的操作数栈上的操作数个数;
在当前数据操作指令所需操作数个数等于操作数栈上的操作数个数时,将把第一个操作数压入栈中的指令,作为所述当前数据操作指令对应的匹配指令。
5.根据权利要求2所述的优化方法,其特征在于,所述根据数据操作指令和匹配指令形成的指令组合,识别出所述指令组合对应的操作模型,包括:
根据数据操作指令以及对应的匹配指令形成的指令组合,确定出指令组合对应的指令操作类型;
从多个单一类的操作模型中,识别出具有相同指令操作类型的单一类的操作模型。
6.根据权利要求5所述的优化方法,其特征在于,还包括:
在满足预设条件的情况下,将识别出的两个单一类的操作模型,合并为复合类的操作模型;
其中,所述预设条件包括两个单一类的操作模型之间存在内嵌关系,且两个单一类的操作模型的局部变量索引均相同。
7.根据权利要求6所述的优化方法,其特征在于,所述根据所述操作模型对应的复合指令,对所述原生指令流中的原生指令码及其操作数进行优化,包括:
获取单一类的操作模型和/或复合类的操作模型对应的多个复合指令;
使用所述复合指令,替换原生指令流中操作模型对应的原生指令码和操作数。
8.根据权利要求1至7任一项所述的优化方法,其特征在于,在从原生指令流中,获取数据操作指令以及所述数据操作指令对应的匹配指令之前,还包括:
建立全局变量信息表;
其中,所述全局变量信息表的每个表项包含一个全局变量名称、全局变量地址、全局变量类型和全局变量长度。
9.根据权利要求8所述的优化方法,其特征在于,在建立全局变量信息表之后,还包括:
按照指令流顺序建立函数信息表;
其中,所述函数信息表用于记录原生指令流中每条指令信息,所述指令信息包括指令码、操作数组、压栈个数和出栈个数;其中,指令码为原生指令流中的指令码,操作数组的每个元素为指令码的一个操作数,压栈个数为指令码往操作数栈上压入的操作数个数,出栈个数为指令码从操作数栈上弹出的操作数个数。
10.一种基于复合指令的指令及其操作数的优化装置,安装于资源受限设备的内部,或者,位于资源受限设备的外部,其特征在于,包括:
指令匹配模块,被配置为从原生指令流中,获取数据操作指令以及所述数据操作指令对应的匹配指令;
模型识别模块,被配置为根据数据操作指令和匹配指令形成的指令组合,识别出所述指令组合对应的操作模型;
指令优化模块,被配置为根据所述操作模型对应的复合指令,对所述原生指令流中的原生指令码及其操作数进行优化。
11.一种计算设备,包括处理器和存储有程序指令的存储器,其特征在于,所述处理器被配置为在运行所述程序指令时,执行如权利要求1至9任一项所述的基于复合指令的指令及其操作数的优化方法,或者,所述处理器被配置为在运行所述程序指令时,执行如权利要求10所述的优化装置输出的根据复合指令优化后的指令流。
12.一种存储介质,存储有程序指令,其特征在于,所述程序指令在运行时,执行如权利要求1至9任一项所述的基于复合指令的指令及其操作数的优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310715869.3A CN116466995A (zh) | 2023-06-16 | 2023-06-16 | 基于复合指令的指令及其操作数的优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310715869.3A CN116466995A (zh) | 2023-06-16 | 2023-06-16 | 基于复合指令的指令及其操作数的优化方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116466995A true CN116466995A (zh) | 2023-07-21 |
Family
ID=87182836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310715869.3A Pending CN116466995A (zh) | 2023-06-16 | 2023-06-16 | 基于复合指令的指令及其操作数的优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116466995A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117008971A (zh) * | 2023-09-27 | 2023-11-07 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
CN117130722A (zh) * | 2023-08-04 | 2023-11-28 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的优化方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010013093A1 (en) * | 2000-02-08 | 2001-08-09 | Kabushiki Kaisha Toshiba | Instruction code conversion unit and information processing system and instruction code generation method |
WO2004097628A2 (de) * | 2003-04-29 | 2004-11-11 | Giesecke & Devrient Gmbh | Optimierung und ausführung eines programms |
CN104346133A (zh) * | 2013-08-01 | 2015-02-11 | 晶心科技股份有限公司 | 压缩指令的方法及执行压缩指令的处理器 |
CN112199163A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 分析解释例程的虚拟指令方法、装置、设备及存储介质 |
CN112631724A (zh) * | 2020-12-24 | 2021-04-09 | 北京握奇数据股份有限公司 | 一种字节码指令集精简方法和系统 |
CN114428639A (zh) * | 2021-12-24 | 2022-05-03 | 北京握奇数据股份有限公司 | 一种字节码指令集的指令精简方法和系统 |
CN115408004A (zh) * | 2022-07-29 | 2022-11-29 | 清华大学 | 一种Web应用系统存算一体化适配优化方法及装置 |
CN115509608A (zh) * | 2022-11-23 | 2022-12-23 | 成都登临科技有限公司 | 指令优化方法、装置、电子设备及计算机可读存储介质 |
-
2023
- 2023-06-16 CN CN202310715869.3A patent/CN116466995A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010013093A1 (en) * | 2000-02-08 | 2001-08-09 | Kabushiki Kaisha Toshiba | Instruction code conversion unit and information processing system and instruction code generation method |
WO2004097628A2 (de) * | 2003-04-29 | 2004-11-11 | Giesecke & Devrient Gmbh | Optimierung und ausführung eines programms |
CN104346133A (zh) * | 2013-08-01 | 2015-02-11 | 晶心科技股份有限公司 | 压缩指令的方法及执行压缩指令的处理器 |
CN112199163A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 分析解释例程的虚拟指令方法、装置、设备及存储介质 |
CN112631724A (zh) * | 2020-12-24 | 2021-04-09 | 北京握奇数据股份有限公司 | 一种字节码指令集精简方法和系统 |
CN114428639A (zh) * | 2021-12-24 | 2022-05-03 | 北京握奇数据股份有限公司 | 一种字节码指令集的指令精简方法和系统 |
CN115408004A (zh) * | 2022-07-29 | 2022-11-29 | 清华大学 | 一种Web应用系统存算一体化适配优化方法及装置 |
CN115509608A (zh) * | 2022-11-23 | 2022-12-23 | 成都登临科技有限公司 | 指令优化方法、装置、电子设备及计算机可读存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117130722A (zh) * | 2023-08-04 | 2023-11-28 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的优化方法及装置 |
CN117008971A (zh) * | 2023-09-27 | 2023-11-07 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
CN117008971B (zh) * | 2023-09-27 | 2023-12-29 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110675256B (zh) | 部署和执行智能合约的方法及装置 | |
CN116466995A (zh) | 基于复合指令的指令及其操作数的优化方法及装置 | |
KR100713739B1 (ko) | 토큰 기반 링크 | |
US6983460B1 (en) | Method for loading applications into a multiapplication embedded system equipped with data processing resources, corresponding embedded system and execution method | |
US6151618A (en) | Safe general purpose virtual machine computing system | |
EP2364481B1 (en) | Method for securing java bytecode. | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
CN110688122B (zh) | 编译和执行智能合约的方法及装置 | |
JP2002536743A (ja) | リソース制約デバイスのためのオブジェクト指向命令セット | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
CN115982784B (zh) | 一种WebAssembly模块调用函数的方法及装置 | |
KR101407629B1 (ko) | 자바 변환 가속 장치 및 방법 | |
CN110704064A (zh) | 编译和执行智能合约的方法及装置 | |
CN113946602A (zh) | 数据查找方法、装置、设备和介质 | |
KR20120050406A (ko) | 가상 머신에 의한 실행을 위한 프로그래밍의 중간 코드의 보안 프로세스, 컴퓨터 프로그램 및 장치 | |
CN116627502B (zh) | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 | |
CN111880800A (zh) | 应用下载方法与应用下载系统 | |
KR20110013175A (ko) | 분리 실행 기반의 컨텐츠용 코드 블록의 검증 시스템 및 방법 | |
JP2000330792A (ja) | バイトコードプログラム実行制御システム | |
CN111966443B (zh) | 一种智能卡及其工作方法 | |
CN117667738A (zh) | 用于WebAssembly模块异常处理的方法、装置和电子设备 | |
CN116820785B (zh) | 用于管理内存的方法及装置、资源受限设备、存储介质 | |
Zilli et al. | A light-weight compression method for Java Card technology | |
CN116611456A (zh) | 程序处理方法、装置、电子设备及可读介质 | |
CN114356359A (zh) | 应用程序安装方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |