CN116627502A - 跳转指令的优化方法、指令的跳转方法、装置、电子设备 - Google Patents
跳转指令的优化方法、指令的跳转方法、装置、电子设备 Download PDFInfo
- Publication number
- CN116627502A CN116627502A CN202310901271.3A CN202310901271A CN116627502A CN 116627502 A CN116627502 A CN 116627502A CN 202310901271 A CN202310901271 A CN 202310901271A CN 116627502 A CN116627502 A CN 116627502A
- Authority
- CN
- China
- Prior art keywords
- instruction
- jump
- target
- original
- operand
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 83
- 238000005457 optimization Methods 0.000 title claims description 34
- 230000006872 improvement Effects 0.000 claims description 72
- 238000007906 compression Methods 0.000 claims description 29
- 230000006835 compression Effects 0.000 claims description 28
- 238000001514 detection method Methods 0.000 claims description 16
- 238000012217 deletion Methods 0.000 claims description 4
- 230000037430 deletion Effects 0.000 claims description 4
- 230000009191 jumping Effects 0.000 claims description 3
- 239000000523 sample Substances 0.000 claims 1
- 238000003860 storage Methods 0.000 abstract description 25
- 230000006870 function Effects 0.000 description 33
- 238000010586 diagram Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000002349 favourable 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
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000008054 signal transmission 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
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- 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
本申请涉及计算机技术领域,公开了一种跳转指令的优化方法,包括:获取包括原始跳转指令与目标指令的链接关系的初始指令流;其中,初始指令流中的指令信息包括指令地址;删除初始指令流中的目标指令,并建立原始跳转指令与跳转目标指令的链接关系;更新初始指令流中所有指令的指令地址;将更新后的初始指令流中的原始跳转指令转换为改进跳转指令,形成优化指令流;其中,改进跳转指令的指令码指示跳转方向和操作数数组类型,操作数数组指示跳转距离。本申请通过将原始跳转指令转换为改进跳转指令,提高指令的执行效率,减少指令占用的存储空间。本申请还公开一种跳转指令的优化装置、指令的跳转方法及装置和电子设备。
Description
技术领域
本申请涉及计算机技术领域,例如涉及一种跳转指令的优化方法、指令的跳转方法、装置、电子设备。
背景技术
目前,资源受限设备(Resource Constrained Device)通常是指电量供应有限,计算能力有限,以及存储容量有限的电子设备,例如智能卡(Smart Card)和安全单元(SecureElement)。在这些设备上通常运行有片内操作系统(Chip Operating System,COS),COS可以通过输入/输出接口和外部接口设备进行通信,接收外部接口设备的命令,在其内部完成命令处理,把命令响应发送给外部接口设备,为接口设备提供私密信息的安全存储、重要程序的安全执行、用户身份鉴别等安全访问、控制功能。
WebAssembly(简称wasm)技术是一个虚拟指令集体系架构,其初始目标是为C/C++等语言编写的程序经过编译,在确保安全和接近原生应用的运行速度更好地在Web(WorldWide Web,全球广域网)平台上运行。
由于WebAssembly原生指令为64或32位指令集,占用NVM(Non-Volatile Memory,非易失性存储器)存储空间大,运行时消耗RAM(Random Access Memory,随机存取存储器)资源多。尤其是当高级语言实现的业务逻辑复杂时,生成的WebAssembly字节码指令块结构嵌套的层级会特别多,指令块起始和结束指令占用的存储空间会特别大,含有冗余信息,不适合下载到资源受限设备运行。而且,虚拟机解释执行跳转相关字节码时需要依次、逐级向外查找目标指令块,查找到目标指令块后,还需要根据目标指令块的类型才能确定是重新执行该代码块还是结束执行该指令块,执行效率极为低下。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
为了对披露的实施例的一些方面有基本的理解,下面给出了简单的概括。所述概括不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围,而是作为后面的详细说明的序言。
本公开实施例提供了一种跳转指令的优化方法、指令的跳转方法、装置、电子设备,减少了指令占用的存储空间,提高了指令的执行效率,并使得WebAssembly模块更适合运行于资源受限设备。
在一些实施例中,跳转指令的优化方法包括:获取包括原始跳转指令与目标指令的链接关系的初始指令流;其中,初始指令流中的指令信息包括指令地址;删除初始指令流中的目标指令,并建立原始跳转指令与跳转目标指令的链接关系;更新初始指令流中所有指令的指令地址;将更新后的初始指令流中的原始跳转指令转换为改进跳转指令,形成优化指令流;其中,改进跳转指令的指令码指示跳转方向和操作数数组类型,改进跳转指令的操作数数组指示跳转距离。
可选地,按照如下方式建立原始跳转指令与目标指令的链接关系:根据原始跳转指令的初始操作数数组,确定原始跳转指令所链接的目标指令块;获得原始跳转指令所链接的目标指令块的结构;根据原始跳转指令所链接的目标指令块的结构,确定原始跳转指令所链接的目标指令;将原始跳转指令的跳转目标索引数组的元素设置为所链接的目标指令的指令索引。
可选地,目标指令块的结构包括block-end结构或loop-end结构。其中,block-end结构包括块起始block指令和块结束end指令;loop-end结构包括块起始loop指令和块结束end指令。
可选地,确定原始跳转指令所链接的目标指令,包括:在目标指令块的结构为block-end结构的情况下,确定原始跳转指令所链接的目标指令为目标指令块的块起始block指令所匹配的块结束end指令;在目标指令块的结构为loop-end结构的情况下,确定原始跳转指令所链接的目标指令为目标指令块的块起始loop指令。
可选地,建立原始跳转指令与跳转目标指令的链接关系,包括:确定原始跳转指令所链接的跳转目标指令为原始跳转指令所链接的目标指令后面第一条未删除的指令;将原始跳转指令的跳转目标索引数组的元素设置为所链接的跳转目标指令的指令索引。
可选地,原始跳转指令包括表征无条件跳转指令的br指令、表征条件跳转指令的br_if指令和表征跳转表指令的br_table指令中的一个或多个。
可选地,改进跳转指令包括长操作数改进跳转指令和/或短操作数改进跳转指令。
可选地,将原始跳转指令转换为改进跳转指令,包括:根据原始跳转指令的跳转目标索引数组的元素,确定原始跳转指令所链接的跳转目标指令的指令地址;将原始跳转指令的指令码替换为改进跳转指令的指令码,将原始跳转指令的操作数数组的元素替换为所链接的跳转目标指令的指令地址,以得到改进跳转指令中的长操作数改进跳转指令;其中,长操作数改进跳转指令包括br指令转换得到的br_u16指令、br_if指令转换得到的br_if_u16指令和br_table指令转换得到的br_table_u16指令中的一个或多个。
可选地,将原始跳转指令转换为改进跳转指令,还包括:在得到改进跳转指令中的长操作数改进跳转指令之后,更新优化指令流中所有指令的指令地址;根据更新后的优化指令流中指令的指令地址和长操作数改进跳转指令的跳转目标索引数组的元素,确定压缩标志的检测值;在压缩标志的检测值为正确值的情况下,将改进跳转指令中的长操作数改进跳转指令替换为短操作数改进跳转指令。
可选地,将改进跳转指令中的长操作数改进跳转指令替换为短操作数改进跳转指令,包括:调整长操作数改进跳转指令的指令码和操作数数组,以获得短操作数改进跳转指令;更新调整后的优化指令流中所有指令的指令地址,并再次确定压缩标志的检测值。
可选地,在长操作数改进跳转指令包括br_u16/br_if_u16指令的情况下,调整长操作数改进跳转指令的指令码和操作数数组,包括:根据br_u16/br_if_u16指令的跳转目标索引数组的第一个元素,确定br_u16/br_if_u16指令所链接的跳转目标指令的指令地址;在跳转目标指令的指令地址大于br_u16/br_if_u16指令的指令地址的情况下,计算跳转目标指令的开始地址与br_u16/br_if_u16指令的结束地址的差值,获得第一差值;在第一差值小于预设差值的情况下,调整br_u16/br_if_u16指令的指令码为br_fw_u8/br_if_fw_u8,调整br_u16/br_if_u16指令的操作数数组的第一个元素为第一差值;在跳转目标指令的指令地址小于br_u16/br_if_u16指令的指令地址的情况下,计算br_u16/br_if_u16指令的开始地址与跳转目标指令的开始地址的差值,获得第二差值;在第二差值小于预设差值的情况下,调整br_u16/br_if_u16指令的指令码为br_bw_u8/br_if_bw_u8,调整br_u16/br_if_u16指令的操作数数组的第一个元素为第二差值;和/或,在长操作数改进跳转指令包括br_table_u16指令的情况下,调整长操作数改进跳转指令的指令码和操作数数组,包括:根据br_table_u16指令的跳转目标索引数组的每个元素,确定br_table_u16指令的每个跳转分支所链接的跳转目标指令的指令地址;分别计算每个跳转分支所链接的跳转目标指令的开始地址与br_table_u16指令的结束地址的差值,获得第三差值;在第三差值均小于预设差值的情况下,调整br_table_u16指令的指令码为br_table_u8,调整br_table_u16指令的操作数数组的每个元素为每个跳转分支所获得的第三差值。
在一些实施例中,指令的跳转方法包括:通过如上述的优化方法产生的优化指令流执行改进跳转指令的跳转操作。
在一些实施例中,跳转指令的优化装置,包括:指令获取模块,被配置为获取包括原始跳转指令与目标指令的链接关系的初始指令流;其中,初始指令流中的指令信息包括指令地址;指令删除模块,被配置为删除初始指令流中的目标指令;指令链接模块,被配置为建立原始跳转指令与跳转目标指令的链接关系;指令更新模块,被配置为更新初始指令流中所有指令的指令地址;指令优化模块,被配置为将更新后的初始指令流中的原始跳转指令转换为改进跳转指令,形成优化指令流;其中,改进跳转指令的指令码指示跳转方向、操作数数组类型,改进跳转指令的操作数数组指示跳转距离。
在一些实施例中,指令的跳转装置,包括处理器和存储有程序指令的存储器,处理器被配置为在执行程序指令时,执行:如上述的跳转指令的优化方法;或,如上述的指令的跳转方法。
在一些实施例中,电子设备包括:电子设备主体;和,安装于电子设备主体的如上述的跳转指令的优化装置;或,安装于电子设备主体的如上述的指令的跳转装置。
可选地,电子设备主体包括物理机或虚拟机。
本公开实施例提供的跳转指令的优化方法、指令的跳转方法、装置、电子设备,可以实现以下技术效果:
通过建立原始跳转指令与目标指令的链接关系,能够将原始跳转指令直接与目标指令对应起来,在解释执行原始跳转指令时不再需要依次、逐级向外查找确定目标指令。通过删除初始指令流中的目标指令,减小占用的NVM存储空间。由于删除初始指令流中的目标指令,使初始指令流中所有指令的指令地址发生变化,因此更新初始指令流中所有指令的指令地址后,再将原始跳转指令转换为改进跳转指令。转换后的改进跳转指令的指令码可用于指示跳转方向和操作数数组类型,操作数数组可用于指示跳转距离,即操作数数组为目标地址,使转换后的改进跳转指令字节码与其他字节码无关联关系,易于电子设备解释执行,提高WebAssembly模块的指令的执行效率,同时减少了指令占用的存储空间,更适合运行于资源受限设备。
此外,本申请的优化方法可以由位于资源受限设备外部的转换器完成,转换器通过将优化后的指令流重新生成WebAssembly模块直接提供给资源受限设备执行,从而减少了电子设备在执行指令时的工作量,进一步加快了执行速度。
以上的总体描述和下文中的描述仅是示例性和解释性的,不用于限制本申请。
附图说明
一个或多个实施例通过与之对应的附图进行示例性说明,这些示例性说明和附图并不构成对实施例的限定,附图中具有相同参考数字标号的元件示为类似的元件,附图不构成比例限制,并且其中:
图1是本公开实施例提供的一个栈式虚拟机的结构示意图;
图2为本公开实施例提供的一个跳转指令的优化方法的示意图;
图3为本公开实施例提供的一个函数信息表的示意图;
图4为本公开实施例提供的另一个跳转指令的优化方法的示意图;
图5为本公开实施例提供的另一个跳转指令的优化方法的示意图;
图6为本公开实施例提供的一个跳转指令的优化装置的示意图;
图7为本公开实施例提供的一个指令的跳转装置的示意图。
具体实施方式
为了能够更加详尽地了解本公开实施例的特点与技术内容,下面结合附图对本公开实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本公开实施例。在以下的技术描述中,为方便解释起见,通过多个细节以提供对所披露实施例的充分理解。然而,在没有这些细节的情况下,一个或多个实施例仍然可以实施。在其它情况下,为简化附图,熟知的结构和装置可以简化展示。
本公开实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开实施例的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
除非另有说明,术语“多个”表示两个或两个以上。
本公开实施例中,字符“/”表示前后对象是一种“或”的关系。例如,A/B表示:A或B。
术语“和/或”是一种描述对象的关联关系,表示可以存在三种关系。例如,A和/或B,表示:A或B,或,A和B这三种关系。
术语“对应”可以指的是一种关联关系或绑定关系,A与B相对应指的是A与B之间是一种关联关系或绑定关系。
需要说明的是,在不冲突的情况下,本公开实施例中的实施例及实施例中的特征可以相互组合。
以下对本公开实施例用到的技术术语进行解释:
指令(Instruction):指的是单个指示电子设备(包括物理机或虚拟机)硬件执行某种运算、处理功能的命令。由指令码和可选的若干操作数数组成。
指令集(Instruction Set):一台电子设备(包括物理机或虚拟机)上全部指令的集合,就是这台电子设备的指令系统。指令系统也称指令集,是这台电子设备全部功能的体现。
指令码(Operation Code):也称操作码,指计算机程序中所规定的要执行操作的那一部分指令或字段(通常用代码表示),其实就是指令序列号,用来告诉CPU需要执行哪一条指令。
操作数数组(Operand):操作数数组指出指令执行的操作所需要数据的来源。
WebAssembly模块:WebAssembly是一种以安全有效的方式运行可移植程序的新技术,主要针对Web平台。其目标是对高级程序中间表示的适当低级抽象,即,WebAssembly代码旨在由编译器生成。称之为“模块(module)”,是因为使用WebAssembly并没有“程序”和“库”之间的区别,只有“模块”,彼此之间可以搭配,亦可通信,每个“模块”都有函数。
虚拟机:由资源受限设备本地编译器编译源码形成机器码作为固件固化在资源受限设备上,解释运行固化或下载至资源受限设备上的WebAssembly模块。
指令流:由WebAssembly编译器编译应用源码形成的WebAssembly模块函数段中指令从前向后排列成的指令流数据。
操作数栈:位于资源受限设备的随机存取存储器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位的指令集,占用NVM存储空间大,运行时消耗RAM资源多。尤其是当高级语言实现的业务逻辑复杂时,生成的WebAssembly字节码指令块结构嵌套的层级会特别多,指令块起始和结束指令占用的存储空间会特别大,含有冗余信息,不适合下载、运行于资源受限设备。而且,在解释执行跳转相关字节码时需要依次、逐级向外查找目标指令块,然后还需要根据目标指令块的类型才能确定是重新执行该代码块还是结束执行该指令块,执行效率极为低下。
有鉴于此,本公开实施例提供一种跳转指令的优化方法,经过该优化方法优化后的WebAssembly模块可以应用于电子设备。该电子设备可以为资源受限设备。本公开实施例提供的优化方法可以由位于资源受限设备外部的转换器完成。
结合图2所示,本公开实施例提供一个跳转指令的优化方法,该优化方法包括:
S201:转换器获取包括原始跳转指令与目标指令的链接关系的初始指令流。
其中,初始指令流中的指令信息包括指令地址。
S202:转换器删除初始指令流中的目标指令,并建立原始跳转指令与跳转目标指令的链接关系。
S203:转换器更新初始指令流中所有指令的指令地址。
S204:转换器将更新后的初始指令流中的原始跳转指令转换为改进跳转指令,形成优化指令流。
其中,改进跳转指令的指令码指示跳转方向和操作数类型,改进跳转指令的操作数数组指示跳转距离。
本公开实施例提供的上述优化方法,通过建立原始跳转指令与目标指令的链接关系,能够将原始跳转指令直接与目标指令对应起来,在解释执行原始跳转指令时不再需要依次、逐级向外查找确定目标指令。通过删除初始指令流中的目标指令,减小占用的NVM存储空间。由于删除初始指令流中的目标指令,使初始指令流中所有指令的指令地址发生变化,因此更新初始指令流中所有指令的指令地址后,再将原始跳转指令转换为改进跳转指令。转换后的改进跳转指令的指令码可用于指示跳转方向和操作数数组类型,操作数数组可用于指示跳转距离,即操作数数组为目标地址,使转换后的改进跳转指令字节码与其他字节码无关联关系,易于电子设备解释执行。因此本公开实施例提供的优化方法,减少指令占用的存储空间,提高WebAssembly模块的指令的执行效率,更适合运行于资源受限设备。
可选地,初始指令流位于原始WebAssembly模块中。
可选地,在形成优化指令流之后,转换器重新生成优化WebAssembly模块。转换器通过将优化后的WebAssembly模块直接提供给资源受限设备执行,从而减少电子设备在执行指令时的工作量,进一步加快了执行速度。
可选地,转换器获取初始指令流包括:为原始WebAssembly模块内部每个函数按照指令顺序建立一个包含初始指令的函数信息表,获取初始指令流。
其中,函数信息表的每一个表项为一条WebAssembly模块的指令信息。指令信息包含:指令码OPCode、操作数数组OperandArray、指令索引OPIndex、指令长度OPLen、指令地址OPAddr、匹配索引MatchIndex、跳转目标索引数组DestOPIndexArray。
结合图3所示,函数信息表的示例参数如下:
指令码:指令码为原始WebAssembly模块中的初始指令流的指令码和/或本申请提出的改进跳转指令的指令码。其中,原始WebAssembly模块中的初始指令流的原始跳转指令的指令码包括br、br_if和br_table中的一个或多个。本申请提出的改进跳转指令的指令码包括br_u16、br_if_u16、br_fw_u8、br_if_fw_u8、br_bw_u8、br_if_bw_u8、br_table_u16和br_table_u8中的一个或多个。
操作数数组:操作数数组的每个元素为该指令码的一个操作数。在该指令的指令码包括无条件跳转/条件跳转类型的指令码的情况下,该指令的操作数数组仅有一个元素。在该指令的指令码包括跳转表类型的指令码的情况下,该指令的操作数数组有(N+2)个元素,N是跳转表指令的第一个操作数。其中,无条件跳转类型的指令码包括br、br_u16、br_fw_u8和br_bw_u8中的一个或多个。条件跳转类型的指令码包括br_if、br_if_u16、br_if_fw_u8和br_if_bw_u8。跳转表类型的指令码包括br_table、br_table_u16和br_table_u8中的一个或多个。
指令索引:为初始指令流中该指令的序号,可以唯一识别该指令。其中,初始指令流中第一条指令的指令索引设置为0,其余指令的指令索引为其前一条指令的指令索引加1。
指令长度:该指令的指令长度等于该指令的指令码长度和操作数长度之和。在该指令被删除的情况下,将该指令的指令长度设置为0,输出模块时不输出该指令。
指令地址:该指令在初始指令流中的逻辑地址。其中,初始指令流中第一条指令的指令地址为0,其他指令的指令地址为该指令前一条指令的指令地址与指令长度之和。
匹配索引:该参数仅对目标指令有效。目标指令包括块起始指令和块结束指令。块起始指令包括block指令和loop指令。块结束指令包括end指令。其中,block指令或loop指令的匹配索引等于与该block指令或loop指令配对的end指令的指令索引。end指令的匹配索引等于与该end指令配对的block或loop指令的指令索引。
跳转目标索引数组:该参数仅对跳转类型指令有效。跳转类型指令包括br指令、br_if指令、br_u16指令、br_if_u16指令、br_fw_u8指令、br_if_fw_u8指令、br_bw_u8指令、br_if_bw_u8指令、br_table指令、br_table_u16指令和br_table_u8指令中的一个或多个。其中,br指令、br_if指令、br_u16指令、br_if_u16指令、br_fw_u8指令、br_if_fw_u8指令、br_bw_u8指令和br_if_bw_u8指令的跳转目标索引数组仅有一个元素,其第一个元素为该指令的目标指令的指令索引;br_table指令、br_table_u16指令和br_table_u8指令的跳转目标索引数组有(N+1)个元素,其每个元素对应一个跳转表指令跳转分支的目标指令的指令索引。
可选地,目标指令块的结构包括:由block指令和end指令配对组成block-end结构;或,由loop指令和end指令配对组成loop-end结构。
可选地,转换器按照如下方式建立原始跳转指令与目标指令的链接关系:根据原始跳转指令的初始操作数数组,确定原始跳转指令所链接的目标指令块。获得原始跳转指令所链接的目标指令块的结构。根据原始跳转指令所链接的目标指令块的结构,确定原始跳转指令所链接的目标指令。将原始跳转指令的跳转目标索引数组的元素设置为所链接的目标指令的指令索引。
可选地,确定原始跳转指令所链接的目标指令包括:在目标指令块的结构为block-end结构的情况下,确定原始跳转指令所链接的目标指令为目标指令块的块起始block指令所匹配的块结束end指令。在目标指令块的结构为loop-end结构的情况下,确定原始跳转指令所链接的目标指令为目标指令块的块起始loop指令。
可选地,原始跳转指令包括表征无条件跳转指令的br指令、表征条件跳转指令的br_if指令和表征跳转表指令的br_table指令中的一个或多个。
由于原始Webassembly模块的br指令、br_if指令、br_table指令,根据目标指令块的结构不同,虚拟机的执行方式有所不同。以虚拟机执行br指令为例:当目标指令块为block-end结构的情况下,虚拟机在执行完br指令后跳转到目标block-end结构的end指令处,即,结束该指令块的执行。当目标指令块为loop-end结构时,虚拟机执行完br指令后跳转到loop-end结构的loop指令处,再次执行该指令块。因此,本公开实施例提供的上述优化方法,直接将原始跳转指令与目标指令建立链接,使虚拟机执行跳转指令时不再需要依次、逐级向外遍历初始指令流,即能找到对应的目标指令块。在找到对应的目标指令块后,虚拟机也不再需要根据目标指令块的类型即能确定执行方式。该方法在指令码嵌套的层级多时依旧能够高效执行,大幅提高了指令码执行效率。
可选地,在原始跳转指令包括br/br_if指令的情况下,根据原始跳转指令的初始操作数数组,确定原始跳转指令所链接的目标指令块包括:基于该br/br_if指令,向外层数“初始操作数”层指令块,确定该br/br_if指令所链接的目标指令块。
可选地,在原始跳转指令包括br_table指令的情况下,根据原始跳转指令的初始操作数数组,确定原始跳转指令所链接的目标指令块包括:基于该br_table指令的每个跳转分支,分别向外层数“每个跳转分支所对应的初始操作数”层指令块,确定该br_table指令的每个跳转分支所链接的目标指令块。
可选地,在原始跳转指令包括br/br_if指令,且目标指令块的结构为block-end结构的情况下,将原始跳转指令的跳转目标索引数组的元素设置为所链接的目标指令的指令索引包括:将br/br_if指令的跳转目标索引数组的第一个元素设置为该br/br_if指令所链接的目标指令块的块起始block指令所匹配的块结束end指令的指令索引。
可选地,在原始跳转指令包括br_table指令,且目标指令块的结构为block-end结构的情况下,将原始跳转指令的跳转目标索引数组的元素设置为所链接的目标指令的指令索引包括:将br_table指令的跳转目标索引数组的每个元素设置为该br_table指令的每个跳转分支所链接的目标指令块的块起始block指令所匹配的块结束end指令的指令索引。
可选地,在原始跳转指令包括br/br_if指令,且目标指令块的结构为loop-end结构的情况下,将原始跳转指令的跳转目标索引数组的元素设置为所链接的目标指令的指令索引包括:将br/br_if指令的跳转目标索引数组的第一个元素设置为该br/br_if指令所链接的目标指令块的块起始loop指令的指令索引。
可选地,在根据原始跳转指令的初始操作数数组,确定目标指令之前还包括:建立目标指令之间的匹配关系。
可选地,建立目标指令之间的匹配关系包括:遍历初始指令流中的指令,并取出初始指令流中的block指令、loop指令和end指令。确定block/loop指令与end指令的配对关系。设置block/loop指令的匹配索引等于与该block/loop指令所配对的end指令的指令索引;设置end指令的匹配索引等于与该end指令所配对的block指令或loop指令的指令索引。由于指令块指令的block/loop指令和end指令配对出现,且一一对应,因此,按照上述原则建立目标指令之间的对应关系,使虚拟机在执行原始跳转指令时,能够直接确定是重新执行指令块还是结束执行指令块,从而提高执行效率。
可选地,确定block/loop指令与end指令的配对关系包括:将从函数头自前向后数第k个block/loop指令与从函数尾自后向前数第k个end指令进行配对。
可选地,转换器删除初始指令流中的目标指令包括:设置目标指令的指令长度等于0。将目标指令的指令长度设置为0,在输出模块时不输出该指令。
可选地,转换器建立原始跳转指令与跳转目标指令的链接关系包括:确定原始跳转指令所链接的跳转目标指令为原始跳转指令所链接的目标指令后面第一条未删除的指令。将原始跳转指令的跳转目标索引数组的元素设置为所链接的跳转目标指令的指令索引。
其中,在原始跳转指令包括br/br_if指令的情况下,确定br/br_if指令所链接的跳转目标指令为该br/br_if指令所链接的目标指令后面第一条未删除的指令。在原始跳转指令包括br_table指令的情况下,确定br_table指令的每个跳转分支所链接的跳转目标指令为该br_table指令的每个跳转分支所链接的目标指令后面第一条未删除的指令。
本公开实施例提供的上述优化方法,由于目标指令的块起始指令和块结束指令必须配对出现,指示了该指令所对应的指令块的起始和结束。指令块字节码本身在运行时仅起到了提供指令块边界的作用,却占用了3个字节,当指令块较多时会消耗极大的NVM空间。因此在建立原始跳转指令与目标指令的链接关系之后,删除了目标指令,能够减少初始指令流中的指令条数,且降低了占用的存储空间。同时,通过建立原始跳转指令与跳转目标指令的链接关系,使跳转指令的跳转目标变成了非指令块的目标指令,虚拟机解释原始跳转指令时,无需再去查找目标指令所对应的指令块、判断该指令块类型,而是直接运行对应的跳转目标指令,提升了执行速度。
可选地,在原始跳转指令包括br/br_if指令的情况下,将原始跳转指令的跳转目标索引数组的元素设置为所链接的跳转目标指令的指令索引包括:将br/br_if指令的跳转目标索引数组的第一个元素设置为该br/br_if指令所链接的跳转目标指令的指令索引。
可选地,在原始跳转指令包括br_table指令的情况下,将原始跳转指令的跳转目标索引数组的元素设置为所链接的跳转目标指令的指令索引包括:将br_table指令的跳转目标索引数组的每个元素设置为该br_table指令的每个跳转分支所链接的跳转目标指令的指令索引。
可选地,改进跳转指令包括长操作数改进跳转指令和/或短操作数改进跳转指令。长操作数改进跳转指令包括br_u16指令、br_if_u16指令和br_table_u16指令中的一个或多个。短操作数改进跳转指令包括br_fw_u8指令、br_bw_u8指令、br_if_fw_u8指令、br_if_bw_u8指令和br_table_u8指令中的一个或多个。
可选地,转换器将原始跳转指令转换为改进跳转指令包括:根据原始跳转指令的跳转目标索引数组的元素,确定原始跳转指令所链接的跳转目标指令的指令地址。将原始跳转指令的指令码替换为改进跳转指令的指令码,将原始跳转指令的操作数数组的元素替换为所链接的跳转目标指令的指令地址,以得到改进跳转指令中的长操作数改进跳转指令。
其中,将原始跳转指令中的br指令替换成本实施例的长操作数改进跳转指令中的br_u16指令,将原始跳转指令中的br_if指令替换成本实施例的长操作数改进跳转指令中的br_if_u16指令,将原始跳转指令中的br_table指令替换成本实施例的长操作数改进跳转指令中的br_table_u16指令。
本公开实施例提供的优化方法,由于初始指令流中原始跳转指令,以br指令<brlabelidx>为例:执行该指令时会根据其操作数labelidx找到其要跳转到的目标指令块,然后根据找到的目标指令块是loop、block才能决定是前向跳转还是后向跳转,就是在执行br指令时还不知道跳转方向也不知道跳转多少距离,要先根据labelidx找到目标指令loop/block后才能知道跳转方向及跳转距离。而替换后的改进跳转指令的指令码指示了跳转方向和操作数数组类型,操作数数组指示了跳转距离,因此,改进跳转指令本身与其他字节码无关联。与初始指令流中的原始跳转指令相比,少了查找和计算距离的过程,速度快。同时,在前述原始跳转指令与跳转目标指令的链接关系中,已经确定原始跳转指令的跳转目标索引数组的元素为该原始跳转指令所链接的跳转目标指令的指令索引,因此,此处可直接找出对应的跳转目标指令,再确定跳转目标指令的指令地址。
可选地,在原始跳转指令包括br/br_if指令的情况下,将原始跳转指令的指令码替换为改进跳转指令的指令码包括:将br指令的指令码br替换为br_u16。将br_if指令的指令码br_if替换为br_if_u16。
可选地,在原始跳转指令包括br_table指令的情况下,将原始跳转指令的指令码替换为改进跳转指令的指令码包括:将br_table指令的指令码br_table替换为br_table_u16。
可选地,在原始跳转指令包括br/br_if指令的情况下,将原始跳转指令的操作数数组的元素替换为所链接的跳转目标指令的指令地址包括:将br/br_if指令的操作数数组的第一个元素替换为该br/br_if指令所链接的跳转目标指令的指令地址。
可选地,在原始跳转指令包括br_table指令的情况下,将原始跳转指令的操作数数组的元素替换为所链接的跳转目标指令的指令地址包括:将br_table指令的操作数数组的每个元素替换为该br_table指令的每个跳转分支所链接的跳转目标指令的指令地址。
本公开实施例提出的优化指令流,改变了原始跳转指令先跳转至目标指令、再由目标指令跳转至跳转目标指令的步骤,直接将初始指令流中的原始跳转指令转换为优化指令流中的改进跳转指令。改进跳转指令的指令码指示跳转方向和操作数类型,操作数数组指示跳转距离。本申请提出的优化指令流由于占用存储空间小,有利于下载、运行至资源受限设备。
本公开实施例提出的改进跳转指令中的长操作数改进跳转指令如表1所示:
表1
本公开实施例提出的改进跳转指令中的长操作数改进跳转指令的执行说明如表2所示
表2
可选地,将原始跳转指令转换为改进跳转指令还包括:在得到改进跳转指令中的长操作数改进跳转指令之后,更新优化指令流中所有指令的指令地址。根据更新后的优化指令流中指令的指令地址和长操作数改进跳转指令的跳转目标索引数组的元素,确定压缩标志的检测值。在压缩标志的检测值为正确值的情况下,将改进跳转指令中的长操作数改进跳转指令替换为短操作数改进跳转指令。
其中,压缩标志的检测值包括正确值和错误值。在长操作数改进跳转指令符合压缩条件的情况下,压缩标志的检测值为正确值。在长操作数改进跳转指令不符合压缩条件的情况下,压缩标志的检测值为错误值。
本公开实施例提供的上述方法,在压缩标志的检测值为正确值的情况下,表明该长操作数改进跳转指令能够被替换成操作数更短的改进跳转指令,则采用改进跳转指令中的操作数更短的短操作数改进跳转指令替换优化指令流中对应的长操作数改进跳转指令,使指令流中指令的字节码占用空间进一步减少,运行速度进一步加快。
可选地,在长操作数改进跳转指令包括br_u16/br_if_u16指令的情况下,确定压缩标志的检测值包括:根据br_u16/br_if_u16指令的跳转目标索引数组的第一个元素,确定br_u16/br_if_u16指令所链接的跳转目标指令的指令地址。在跳转目标指令的指令地址大于br_u16/br_if_u16指令的指令地址的情况下,计算跳转目标指令的开始地址(OPAddr)与br_u16/br_if_u16指令的结束地址(OPAddr+OPLen)的差值,获得第一差值。在第一差值小于预设差值的情况下,确定该br_u16/br_if_u16指令的压缩标志的检测值为正确值。在跳转目标指令的指令地址小于br_u16/br_if_u16指令的指令地址的情况下,计算br_u16/br_if_u16指令的开始地址(OPAddr)与跳转目标指令的开始地址(OPAddr)的差值,获得第二差值。在第二差值小于预设差值的情况下,确定该br_u16/br_if_u16指令的压缩标志的检测值为正确值。
其中,预设差值设置为256。
可选地,在长操作数改进跳转指令包括br_table_u16指令的情况下,确定压缩标志的检测值包括:根据br_table_u16指令的跳转目标索引数组的每个元素,确定br_table_u16指令的每个跳转分支所链接的跳转目标指令的指令地址。分别计算每个跳转分支所链接的跳转目标指令的开始地址(OPAddr)与br_table_u16指令的结束地址(OPAddr+OPLen)的差值,获得第三差值。在第三差值均小于预设差值的情况下,确定该br_table_u16指令的压缩标志的检测值为正确值。
可选地,将改进跳转指令中的长操作数改进跳转指令替换为短操作数改进跳转指令包括:调整长操作数改进跳转指令的指令码和操作数数组,以获得短操作数改进跳转指令。更新调整后的优化指令流中所有指令的指令地址,并再次确定压缩标志的检测值。这样,该替换过程需要以函数为单位循环进行,直至本函数内没有长操作数改进跳转指令可以被替换为止。
可选地,在长操作数改进跳转指令包括br_u16/br_if_u16指令的情况下,调整长操作数改进跳转指令的指令码和操作数数组包括:在第一差值小于预设差值的情况下,调整br_u16/br_if_u16指令的指令码为br_fw_u8/br_if_fw_u8,调整br_u16/br_if_u16指令的操作数数组的第一个元素为第一差值。在第二差值小于预设差值的情况下,调整br_u16/br_if_u16指令的指令码为br_bw_u8/br_if_bw_u8,调整br_u16/br_if_u16指令的操作数数组的第一个元素为第二差值。
可选地,在长操作数改进跳转指令包括br_table_u16指令的情况下,调整长操作数改进跳转指令的指令码和操作数数组包括:调整br_table_u16指令的指令码为br_table_u8,调整br_table_u16指令的操作数数组的每个元素为该br_table_u16指令的每个跳转分支所获得的第三差值。
本公开实施例提出的改进跳转指令中的短操作数改进跳转指令如表3所示:
表3
本公开实施例提出的改进跳转指令中的短操作数改进跳转指令的执行说明如表4所示:
表4
可选地,更新指令流中指令的指令地址包括:更新指令流中指令的指令长度。根据指令流中指令的指令长度,计算指令流中指令的指令地址。
可选地,br_u16/br_if_u16指令的指令长度计算方法为:br_u16/br_if_u16指令的指令码长度为1字节,操作数为2字节,则br_u16/br_if_u16指令的指令长度为3字节。
可选地,br_fw_u8/br_bw_u8/br_if_fw_u8/br_if_bw_u8指令的指令长度计算方法为:br_fw_u8/br_bw_u8/br_if_fw_u8/br_if_bw_u8指令的指令码长度为1字节,br_fw_u8/br_bw_u8/br_if_fw_u8/br_if_bw_u8的操作数为1字节,则br_fw_u8/br_bw_u8/br_if_fw_u8/br_if_bw_u8指令的指令长度2字节。
可选地,br_table_u16指令的指令长度计算方法为:br_table_u16指令的指令码长度为1字节,操作数数组长度为LEB128(n)+(n+1)×2,则br_table_u16指令的指令长度为1+LEB128(n)+(n+1)×2。其中,LEB128(n)为数字n的LEB128编码所占的字节数,的代表该跳转表指令的分支个数,长度不固定,但是个立即数(通常把在立即寻址方式指令中给出的数称为立即数)。
可选地,br_table_u8指令的指令长度计算方法为:由于br_table_u8指令是通过br_table_u16指令进行压缩获得的,因此,br_table_u8指令的指令长度为压缩前的br_table_u16指令的指令长度减去分支数目,获得br_table_u8指令的指令长度。
可选地,根据指令流中指令的指令长度计算指令流中指令的指令地址包括:设置指令流中的第一条指令的指令地址为0。设置其他指令的指令地址为该指令前一条指令的指令地址与指令长度之和。
结合图4所示,为本公开实施例提供的另一个跳转指令的优化方法,该优化方法包括:
S401:转换器获取原始WebAssembly模块中包括跳转指令与目标指令的链接关系的初始指令流,为指令流中的每条指令分配指令地址。
S402:转换器删除初始指令流中的目标指令,并建立跳转指令与跳转目标指令的链接关系。
S403:转换器更新初始指令流中所有指令的指令地址。
S404:转换器根据原始跳转指令的跳转目标索引数组的元素,确定原始跳转指令所链接的跳转目标指令的指令地址。
S405:转换器将原始跳转指令的指令码替换为改进跳转指令的指令码,将原始跳转指令的操作数数组的元素替换为所链接的跳转目标指令的指令地址,以得到改进跳转指令中的长操作数改进跳转指令。
S406:转换器更新优化指令流中所有指令的指令地址。
S407:转换器根据更新后的优化指令流中指令的指令地址和长操作数改进跳转指令的跳转目标索引数组的元素,确定压缩标志的检测值。
S408:转换器在压缩标志的检测值为正确值的情况下,将改进跳转指令中的长操作数改进跳转指令替换为短操作数改进跳转指令。
S409:转换器在压缩标志的检测值为错误值的情况下,结束压缩流程,并输出优化后的Webassembly模块。
其中,在输出优化后的Webassembly模块时,仅仅输出函数信息表中的指令码和操作数数组,其余指令信息均不输出。该优化后的Webassembly模块下载到资源受限设备上运行。
本公开实施例提供的上述方法,压缩过程需要以函数为单位不断进行,直至本函数内没有长操作数改进跳转指令可以被短操作数改进跳转指令替换为止。这样,经过优化后的跳转相关指令字节码与其他字节码无关联关系,且跳转相关的操作数包含跳转目标字节码地址或相对地址,易于虚拟机解释执行,处理速度更快。
结合图5所示,为本公开实施例提供的另一个跳转指令的优化方法,该优化方法包括:
S501:转换器读入原始WebAssembly模块。
其中,转换器会校验原始WebAssembly模块格式的合法性。扫描原始WebAssembly模块内部每个函数的大小,确保每个函数所有指令总长度小于64K,每条指令的地址可以用2个字节表示。
S502:转换器为原始WebAssembly模块内部每个函数按照指令流顺序建立一个包含初始指令流的函数信息表。
S503:转换器初始化函数信息表。
其中,初始化函数信息表包括:将指令码设置为初始指令流中指令的初始指令码;操作数数组的每个元素设置为初始指令流中指令的一个初始操作数;初始指令流中第一条指令的指令索引设置为0,其余指令的指令索引为该指令前一条指令的指令索引加1;指令长度设置为该指令的指令码长度和操作数长度之和;初始指令流中第一条指令的指令地址为0,其他指令的指令地址为该指令前一条指令的指令地址与指令长度之和;匹配索引和跳转目标索引数组设置为无效状态。
S504:转换器在包含初始指令流的函数信息表中建立原始跳转指令与目标指令的链接关系。
S505:转换器删除初始指令流中的目标指令,并建立原始跳转指令与跳转目标指令的链接关系。
S506:转换器更新初始指令流中所有指令的指令地址。
S507:转换器根据原始跳转指令的跳转目标索引数组的元素,确定原始跳转指令所链接的跳转目标指令的指令地址。
S508:转换器将原始跳转指令的指令码替换为改进跳转指令的指令码,将原始跳转指令的操作数数组的元素替换为所链接的跳转目标指令的指令地址,以得到改进跳转指令中的长操作数改进跳转指令。
S509:转换器更新优化指令流中所有指令的指令地址。
S510:转换器根据更新后的优化指令流中指令的指令地址和长操作数改进跳转指令的跳转目标索引数组的元素,确定压缩标志的检测值。
S511:转换器在压缩标志的检测值为正确值的情况下,调整长操作数改进跳转指令的指令码和操作数数组,以获得短操作数改进跳转指令。
S512:转换器更新调整后的优化指令流中所有指令的指令地址,并重新执行S510。
S513:转换器在压缩标志的检测值为错误值的情况下,结束优化流程。
S514:转换器根据优化指令流中指令的指令码和操作数数组,重新生成WebAssembly模块,并输出WebAssembly模块。
本公开实施例提供的上述方法,由于跳转类型指令能表达的最大距离为16位地址,即65535。因此,确保每个函数所有指令总长度小于64K、每条指令的地址可以用2个字节表示,从而确保该模块可以使用本公开实施例的优化指令流进行转化,进而使优化指令流重新生成的WebAssembly模块应用于资源受限设备。
本公开实施例提供了一个指令的跳转方法。该跳转方法通过如上述的优化指令流执行指令的跳转操作。
结合图6所示,本公开实施例提供一种跳转指令的优化装置200,包括指令获取模块21、指令删除模块22、指令链接模块23、指令更新模块24和指令优化模块25。指令获取模块21被配置为获取包括原始跳转指令与目标指令的链接关系的初始指令流。其中,初始指令流中的指令信息包括指令地址。指令删除模块22被配置为删除初始指令流中的目标指令。指令链接模块23被配置为建立原始跳转指令与跳转目标指令的链接关系。指令更新模块24被配置为更新初始指令流中所有指令的指令地址。指令优化模块25被配置为将更新后的初始指令流中的原始跳转指令转换为改进跳转指令,形成优化指令流;其中,改进跳转指令的指令码指示跳转方向、操作数数组类型,改进跳转指令的操作数数组指示跳转距离。
结合图7所示,本公开实施例提供一个指令的跳转装置700,包括处理器(processor)100和存储器(memory)101。可选地,该指令的跳转装置700还可以包括通信接口(Communication Interface)102和总线103。其中,处理器100、通信接口102、存储器101可以通过总线103完成相互间的通信。通信接口102可以用于信息传输。处理器100可以调用存储器101中的逻辑指令,以执行如上述的跳转指令的优化方法;或,如上述的指令的跳转方法。
此外,上述的存储器101中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器101作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令/模块。处理器100通过运行存储在存储器101中的程序指令/模块,从而执行功能应用以及数据处理,即实现上述实施例的跳转指令的优化方法,或,如上述的指令的跳转方法。
存储器101可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器101可以包括高速随机存取存储器,还可以包括非易失性存储器。
本公开实施例提供了一种电子设备,包括:电子设备主体和安装于电子设备主体的如上述的跳转指令的优化装置;或,安装于电子设备主体的如上述的指令的跳转装置。这里所表述的安装关系,并不仅限于在电子设备主体内部放置,还包括了与产品的其他元器件的安装连接,包括但不限于物理连接、电性连接或者信号传输连接等。本领域技术人员可以理解的是,跳转指令的优化装置或指令的跳转装置可以适配于可行的电子设备主体,进而实现其他可行的实施例。
可选地,电子设备主体包括物理机或虚拟机。在电子设备是物理机的情况下,跳转指令的优化装置或指令的跳转装置可以安装于物理机外部;在电子设备是虚拟机的情况下,跳转指令的优化装置或指令的跳转装置可以安装于内部。
本公开实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为执行上述实施例的跳转指令的优化方法,或,指令的跳转方法。
本公开实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述实施例的跳转指令的优化方法或指令的跳转方法。
上述的计算机可读存储介质可以是暂态计算机可读存储介质,也可以是非暂态计算机可读存储介质。
本公开实施例的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括一个或多个指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开实施例所述方法的全部或部分步骤。而前述的存储介质可以是非暂态存储介质,包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
以上描述和附图充分地示出了本申请的实施例,以使本领域的技术人员能够实践它们。其他实施例可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施例的部分和特征可以被包括在或替换其他实施例的部分和特征。而且,本申请中使用的用词仅用于描述实施例并且不用于限制权利要求。如在实施例以及权利要求的描述中使用的,除非上下文清楚地表明,否则单数形式的“一个”(a)、“一个”(an)和“所述”(the)旨在同样包括复数形式。类似地,如在本申请中所使用的术语“和/或”是指包含一个或一个以上相关联的列出的任何以及所有可能的组合。另外,当用于本申请中时,术语“包括”(comprise)及其变型“包括”(comprises)和/或包括(comprising)等指陈述的特征、整体、步骤、操作、元素,和/或组件的存在,但不排除一个或一个以上其它特征、整体、步骤、操作、元素、组件和/或这些的分组的存在或添加。在没有更多限制的情况下,由语句“包括一个…”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。本文中,每个实施例重点说明的可以是与其他实施例的不同之处,各个实施例之间相同相似部分可以互相参见。对于实施例公开的方法、产品等而言,如果其与实施例公开的方法部分相对应,那么相关之处可以参见方法部分的描述。
本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,可以取决于技术方案的特定应用和设计约束条件。所述技术人员可以对每个特定的应用来使用不同方法以实现所描述的功能,但是这种实现不应认为超出本公开实施例的范围。所述技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本文所披露的实施例中,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例。另外,在本公开实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
附图中的流程图和框图显示了根据本公开实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。在附图中的流程图和框图所对应的描述中,不同的方框所对应的操作或步骤也可以以不同于描述中所披露的顺序发生,有时不同的操作或步骤之间不存在特定的顺序。例如,两个连续的操作或步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
Claims (13)
1.一种跳转指令的优化方法,其特征在于,包括:
获取包括原始跳转指令与目标指令的链接关系的初始指令流;其中,初始指令流中的指令信息包括指令地址;
删除初始指令流中的目标指令,并建立原始跳转指令与跳转目标指令的链接关系;
更新初始指令流中所有指令的指令地址;
将更新后的初始指令流中的原始跳转指令转换为改进跳转指令,形成优化指令流;其中,改进跳转指令的指令码指示跳转方向和操作数数组类型,改进跳转指令的操作数数组指示跳转距离。
2.根据权利要求1所述的优化方法,其特征在于,按照如下方式建立原始跳转指令与目标指令的链接关系:
根据原始跳转指令的初始操作数数组,确定原始跳转指令所链接的目标指令块;
获得原始跳转指令所链接的目标指令块的结构;
根据原始跳转指令所链接的目标指令块的结构,确定原始跳转指令所链接的目标指令;
将原始跳转指令的跳转目标索引数组的元素设置为所链接的目标指令的指令索引。
3.根据权利要求2所述的优化方法,其特征在于,目标指令块的结构包括block-end结构或loop-end结构;其中,block-end结构包括块起始block指令和块结束end指令;loop-end结构包括块起始loop指令和块结束end指令;确定原始跳转指令所链接的目标指令,包括:
在目标指令块的结构为block-end结构的情况下,确定原始跳转指令所链接的目标指令为目标指令块的块起始block指令所匹配的块结束end指令;
在目标指令块的结构为loop-end结构的情况下,确定原始跳转指令所链接的目标指令为目标指令块的块起始loop指令。
4.根据权利要求1所述的优化方法,其特征在于,建立原始跳转指令与跳转目标指令的链接关系,包括:
确定原始跳转指令所链接的跳转目标指令为原始跳转指令所链接的目标指令后面第一条未删除的指令;
将原始跳转指令的跳转目标索引数组的元素设置为所链接的跳转目标指令的指令索引。
5.根据权利要求1所述的优化方法,其特征在于,原始跳转指令包括表征无条件跳转指令的br指令、表征条件跳转指令的br_if指令和表征跳转表指令的br_table指令中的一个或多个;改进跳转指令包括长操作数改进跳转指令;将原始跳转指令转换为改进跳转指令,包括:
根据原始跳转指令的跳转目标索引数组的元素,确定原始跳转指令所链接的跳转目标指令的指令地址;
将原始跳转指令的指令码替换为改进跳转指令的指令码,将原始跳转指令的操作数数组的元素替换为所链接的跳转目标指令的指令地址,以得到改进跳转指令中的长操作数改进跳转指令;其中,长操作数改进跳转指令包括br指令转换得到的br_u16指令、br_if指令转换得到的br_if_u16指令和br_table指令转换得到的br_table_u16指令中的一个或多个。
6.根据权利要求5所述的优化方法,其特征在于,改进跳转指令还包括短操作数改进跳转指令;将原始跳转指令转换为改进跳转指令,还包括:
在得到改进跳转指令中的长操作数改进跳转指令之后,更新优化指令流中所有指令的指令地址;
根据更新后的优化指令流中指令的指令地址和长操作数改进跳转指令的跳转目标索引数组的元素,确定压缩标志的检测值;
在压缩标志的检测值为正确值的情况下,将改进跳转指令中的长操作数改进跳转指令替换为短操作数改进跳转指令。
7.根据权利要求6所述的优化方法,其特征在于,将改进跳转指令中的长操作数改进跳转指令替换为短操作数改进跳转指令,包括:
调整长操作数改进跳转指令的指令码和操作数数组,以获得短操作数改进跳转指令;
更新调整后的优化指令流中所有指令的指令地址,并再次确定压缩标志的检测值。
8.根据权利要求7所述的方法,其特征在于,
在长操作数改进跳转指令包括br_u16/br_if_u16指令的情况下,调整长操作数改进跳转指令的指令码和操作数数组,包括:
根据br_u16/br_if_u16指令的跳转目标索引数组的第一个元素,确定br_u16/br_if_u16指令所链接的跳转目标指令的指令地址;
在跳转目标指令的指令地址大于br_u16/br_if_u16指令的指令地址的情况下,计算跳转目标指令的开始地址与br_u16/br_if_u16指令的结束地址的差值,获得第一差值;在第一差值小于预设差值的情况下,调整br_u16/br_if_u16指令的指令码为br_fw_u8/br_if_fw_u8,调整br_u16/br_if_u16指令的操作数数组的第一个元素为第一差值;
在跳转目标指令的指令地址小于br_u16/br_if_u16指令的指令地址的情况下,计算br_u16/br_if_u16指令的开始地址与跳转目标指令的开始地址的差值,获得第二差值;在第二差值小于预设差值的情况下,调整br_u16/br_if_u16指令的指令码为br_bw_u8/br_if_bw_u8,调整br_u16/br_if_u16指令的操作数数组的第一个元素为第二差值;
和/或,
在长操作数改进跳转指令包括br_table_u16指令的情况下,调整长操作数改进跳转指令的指令码和操作数数组,包括:
根据br_table_u16指令的跳转目标索引数组的每个元素,确定br_table_u16指令的每个跳转分支所链接的跳转目标指令的指令地址;
分别计算每个跳转分支所链接的跳转目标指令的开始地址与br_table_u16指令的结束地址的差值,获得第三差值;
在第三差值均小于预设差值的情况下,调整br_table_u16指令的指令码为br_table_u8,调整br_table_u16指令的操作数数组的每个元素为每个跳转分支所获得的第三差值。
9.一种指令的跳转方法,其特征在于,包括:
通过如权利要求1至8任一项所述的优化方法产生的优化指令流执行改进跳转指令的跳转操作。
10.一种跳转指令的优化装置,其特征在于,包括:
指令获取模块,被配置为获取包括原始跳转指令与目标指令的链接关系的初始指令流;其中,初始指令流中的指令信息包括指令地址;
指令删除模块,被配置为删除初始指令流中的目标指令;
指令链接模块,被配置为建立原始跳转指令与跳转目标指令的链接关系;
指令更新模块,被配置为更新初始指令流中所有指令的指令地址;
指令优化模块,被配置为将更新后的初始指令流中的原始跳转指令转换为改进跳转指令,形成优化指令流;其中,改进跳转指令的指令码指示跳转方向、操作数数组类型,改进跳转指令的操作数数组指示跳转距离。
11.一种指令的跳转装置,包括处理器和存储有程序指令的存储器,其特征在于,处理器被配置为在执行程序指令时,执行:
如权利要求1至8任一项所述的跳转指令的优化方法;或,
如权利要求9所述的指令的跳转方法。
12.一种电子设备,其特征在于,包括:
电子设备主体;和,
安装于电子设备主体的如权利要求10所述的跳转指令的优化装置;或,
安装于电子设备主体的如权利要求11所述的指令的跳转装置。
13.根据权利要求12所述的电子设备,其特征在于,
电子设备主体包括物理机或虚拟机。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310901271.3A CN116627502B (zh) | 2023-07-21 | 2023-07-21 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310901271.3A CN116627502B (zh) | 2023-07-21 | 2023-07-21 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116627502A true CN116627502A (zh) | 2023-08-22 |
CN116627502B CN116627502B (zh) | 2023-11-14 |
Family
ID=87642112
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310901271.3A Active CN116627502B (zh) | 2023-07-21 | 2023-07-21 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116627502B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117950726A (zh) * | 2024-03-26 | 2024-04-30 | 武汉凌久微电子有限公司 | 基于gpu指令集的spir-v链式操作指令处理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110167242A1 (en) * | 2007-11-27 | 2011-07-07 | Oracle America, Inc. | Multiple instruction execution mode resource-constrained device |
CN102156635A (zh) * | 2011-04-21 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 实现值关联间接跳转预测的装置 |
CN115543331A (zh) * | 2021-06-30 | 2022-12-30 | 华为技术有限公司 | 虚拟线性内存的硬件、软件协同扩展方法及电子设备 |
CN116361810A (zh) * | 2023-03-29 | 2023-06-30 | 中国石油大学(华东) | 一种基于符号执行的智能合约漏洞检测方法 |
-
2023
- 2023-07-21 CN CN202310901271.3A patent/CN116627502B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110167242A1 (en) * | 2007-11-27 | 2011-07-07 | Oracle America, Inc. | Multiple instruction execution mode resource-constrained device |
CN102156635A (zh) * | 2011-04-21 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 实现值关联间接跳转预测的装置 |
CN115543331A (zh) * | 2021-06-30 | 2022-12-30 | 华为技术有限公司 | 虚拟线性内存的硬件、软件协同扩展方法及电子设备 |
CN116361810A (zh) * | 2023-03-29 | 2023-06-30 | 中国石油大学(华东) | 一种基于符号执行的智能合约漏洞检测方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117950726A (zh) * | 2024-03-26 | 2024-04-30 | 武汉凌久微电子有限公司 | 基于gpu指令集的spir-v链式操作指令处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116627502B (zh) | 2023-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021036174A1 (zh) | 部署和执行智能合约的方法及装置 | |
US8832669B2 (en) | Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization | |
CN116627502B (zh) | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 | |
US9753730B2 (en) | Decoding instructions from multiple instructions sets | |
CN116466995B (zh) | 基于复合指令的指令及其操作数的优化方法及装置 | |
CN112905242B (zh) | 分支路径跳转方法、装置、存储介质及电子装置 | |
CN102508635A (zh) | 一种处理器装置及其循环处理方法 | |
CN105404635A (zh) | 字符串匹配的方法、设备和异构计算系统 | |
CN112487092B (zh) | 一种基于区块链的智能合约调用方法及装置 | |
EP2577464B1 (en) | System and method to evaluate a data value as an instruction | |
US9158545B2 (en) | Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler | |
CN112596792B (zh) | 分支预测方法、装置、介质及设备 | |
US20060288019A1 (en) | Flexible data file format | |
US20150089149A1 (en) | Arithmetic processing device and control method for arithmetic processing device | |
CN110515659B (zh) | 一种原子指令的执行方法和装置 | |
CN106295327B (zh) | 可执行文件的加固方法和装置 | |
CN111095197B (zh) | 代码处理方法和设备 | |
US9141357B2 (en) | Computer-readable recording medium, compiling method, and information processing apparatus | |
JP6579095B2 (ja) | プログラム書き込み方法、装置の制御方法、プログラム書き込みのためのプログラム、および装置の制御プログラム | |
CN117251387A (zh) | 一种数据预取方法、编译方法及相关装置 | |
JP2010140233A (ja) | エミュレーションシステム及びエミュレーション方法 | |
CN113050948A (zh) | 动态库优化方法、装置、设备及存储介质 | |
CN112486580A (zh) | 一种实现VxWorks操作系统快速启动的方法及装置 | |
CN101770368B (zh) | .net文件中命名空间的压缩方法和装置 | |
CN117667738A (zh) | 用于WebAssembly模块异常处理的方法、装置和电子设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |