CN116820568A - 指令翻译方法及装置、存储介质和终端 - Google Patents
指令翻译方法及装置、存储介质和终端 Download PDFInfo
- Publication number
- CN116820568A CN116820568A CN202310686324.4A CN202310686324A CN116820568A CN 116820568 A CN116820568 A CN 116820568A CN 202310686324 A CN202310686324 A CN 202310686324A CN 116820568 A CN116820568 A CN 116820568A
- Authority
- CN
- China
- Prior art keywords
- instruction
- code segment
- basic
- instructions
- atomic operation
- 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 76
- 238000013519 translation Methods 0.000 title claims abstract description 61
- 238000006243 chemical reaction Methods 0.000 claims abstract description 93
- 238000013507 mapping Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 12
- 238000000354 decomposition reaction Methods 0.000 claims description 12
- 238000012217 deletion Methods 0.000 claims description 12
- 230000037430 deletion Effects 0.000 claims description 12
- 230000005540 biological transmission Effects 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 2
- 238000013461 design Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000015572 biosynthetic process Effects 0.000 description 5
- 238000003786 synthesis reaction Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000002035 prolonged effect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- 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
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种指令翻译方法及装置、存储介质和终端,其中方法包括基于待翻译程序的程序信息将待翻译程序拆分为多个代码段,再将每段代码段拆分为多个基本指令,并获取每段代码段的原始起始地址信息;对每段代码段中所有基本指令依次进行转化操作,获取每段代码段所对应的原子操作指令,并基于每段代码段的原始起始地址信息获取每段代码段的中间起始地址信息;对每段代码段中所有原子操作指令依次进行合并,并基于预设放置规则将每段代码段所对应的新基本指令放置于预设格式指令字中,获取每段代码段的新起始地址信息;本发明实现了老版本软件到新版本软件的指令直接转化,不会消耗CPU运算资源,大大提高CPU兼容性,解决软件兼容性问题。
Description
技术领域
本发明涉及计算机程序技术领域,尤其涉及一种指令翻译方法及装置、存储介质和终端。
背景技术
CPU商业上的成功会受到其所采用指令集的生态成熟度制约。历史上有一些系列CPU虽然架构技术比较先进,但是由于其指令集的生态成熟度不够友好,最终无法流行起来,比如Intel和HP共同开发的IA-64架构。IA-64架构不能流行起来的一个重要原因在于由于其采用VLIW架构,程序指令间依赖性完全由编译器来解决。这样一旦CPU架构有所改变或者升级,比如整条指令字长加长,并行指令数变多等,原有的软件都需要重新编译才能在新的架构上运行。这就导致新架构的IA-64不能兼容老架构的软件,进而使得生态友好度变差。
抛去升级架构后IA-64不能兼容老架构的软件的问题,IA-64架构上实际上有不少可取之处。首先由于程序指令间依赖性完全由编译器来解决,IA-64不用考虑实现指令动态调度,逻辑设计大大简化,有利于提高运行频率。另外没有动态调度,CPU功耗也会大大降低,有利于CPU热设计。因此如果能保证原有的软件不重新编译就能在新的架构上运行,那么就可以利用VLIW的架构优势,同时保持较好的生态友好度。
目前有些公司已经开发了类似的指令翻译软件,如苹果的Rosetta 2。不过这些指令翻译软件需要运行在CPU上,由CPU完成相应的指令翻译,同时它采用的是虚拟机技术,在指令翻译中首先要先将原始的运行指令映射为虚拟机指令,然后由虚拟机任务程序执行,翻译过程比较复杂且消耗资源。
发明内容
本发明所要解决的技术问题是现有指令翻译方法依赖于CPU完成指令翻译,且其采用虚拟机技术,也增加了CPU运算资源的消耗。
为了解决上述技术问题,本发明提供了一种指令翻译方法,包括:
基于待翻译程序的程序信息将所述待翻译程序拆分为多个代码段,再将每段所述代码段拆分为多个基本指令,并获取每段所述代码段的原始起始地址信息;
对每段所述代码段中所有所述基本指令依次进行转化操作,获取每段所述代码段所对应的原子操作指令,并基于每段所述代码段的原始起始地址信息获取每段所述代码段的中间起始地址信息;
基于预设合并规则对每段所述代码段中所有所述原子操作指令依次进行合并,获取每段所述代码段所对应的新基本指令,并基于预设放置规则将每段所述代码段所对应的新基本指令放置于预设格式指令字中,获取每段所述代码段所对应的超长指令字,并基于每段所述代码段的中间起始地址信息获取每段所述代码段的新起始地址信息;
将所有所述代码段的超长指令字依次存储于输出文件中;
其中,所述预设合并规则和所述预设放置规则均基于新代码程序的程序信息获取。
可选地是,对所述代码段中所有所述基本指令依次进行转化操作包括:
依次对所述代码段中所有所述基本指令进行转化判断,并基于每条所述基本指令的转化判断结果对相应所述基本指令进行转化操作,同步更新转换地址增减量;
其中,,所述转换操作包括删除操作、分解操作和替换操作。
可选地是,依次对所述代码段中所有所述基本指令进行转化判断,并基于每条所述基本指令的转化判断结果对相应所述基本指令进行转化操作,同步更新转换地址增减量包括:
基于转换规则判断所述代码段中第n个所述基本指令是否可做删除操作,若是则删除所述代码段中第n个所述基本指令,并将当前转换地址增减量减去所述第n个所述基本指令所占用地址数,否则
基于转换规则判断所述代码段中第n个所述基本指令是否可做分解操作,若是则将所述代码段中第n个所述基本指令分解为多个原子操作指令,并将当前转换地址增减量加上指令分解地址差,所述指令分解地址差为所述代码段中第n个所述基本指令分解所得的多个原子操作指令所占用总地址数减去所述代码段中第n个所述基本指令所占用地址数,否则
基于转换规则判断所述代码段中第n个所述基本指令是否可做替换操作,若是则用相应替换原子操作指令替换所述代码段中第n个所述基本指令,并将当前转换地址增减量加上替换地址差,所述替换地址差为相应替换原子操作指令所占用地址数减去所述代码段中第n个所述基本指令所占用地址数,否则将所述代码段中所述第n个所述基本指令作为原子操作指令;
当将删除所述代码段中第n个所述基本指令后,或将所述代码段中第n个所述基本指令分解为多个原子操作指令后,或用相应替换原子操作指令替换所述代码段中第n个所述基本指令后,或将所述代码段中所述第n个所述基本指令作为原子操作指令后,判断n是否等于N,若是则当前转换地址增减量作为所述代码段的最终转换地址增减量,否则将n加1,并重新基于转换规则判断所述代码段中第n个所述基本指令是否可做删除操作,直到所述代码段中所有所述基本指令均完成转化操作;
其中,n的初始值为1,N为所述代码段中基本指令个数。
可选地是,基于所述代码段的原始起始地址信息获取所述代码段的中间起始地址信息包括:
将当前所述代码段的原始起始地址信息加上当前所述代码段之前所有所述代码段的最终转换地址增减量,即得到当前所述代码段的中间起始地址信息。
可选地是,基于预设合并规则对所述代码段中所有所述原子操作指令依次进行合并包括:
基于预设合并规则对所述代码段中第m个原子操作指令至第m+j个原子操作指令进行合并操作,获取所述代码段中第m个原子操作指令至第m+j个原子操作指令所能合并出的最优基本指令,将最优基本指令作为所述代码段的新基本指令,将当前合并地址增减量加上合并地址差值,将m加i,并重新基于预设合并规则对所述代码段中第m个原子操作指令至第m+j个原子操作指令进行合并操作,直到所述代码段中所有原子操作指令均完成合并操作,此时将当前合并地址增减量作为所述代码段的最终合并地址增减量;
其中,假设第m个原子操作指令至第m+i-1个原子操作指令所合并的新基本指令为第m个原子操作指令至第m+j个原子操作指令所能合并出的最优基本指令,所述合并地址差值为最优基本指令所占用地址数减去第m个原子操作指令至第m+i-1个原子操作指令所占用地址数,j为原子操作指令合并搜索最大范围。
可选地是,基于预设放置规则将所述代码段所对应的新基本指令放置于预设格式指令字中包括:
判断当前待放置指令字中是否还有空位,
若当前待放置指令字中还有空位,则基于预设放置规则判断所述代码段中第k个新基本指令是否可放置于当前待放置指令字中的首个空位中,若是将所述代码段中第k个新基本指令放置于当前所述待放置指令字的首个空位中,否则将空操作放置于当前待放置指令字的首个空位中,将当前放置地址增加量加上预设地址数,并重新判断当前待放置指令字中是否还有空位;
若当前待放置指令字中没有空位,则将当前所述待放置指令字作为所述代码段的超长指令字,分派一条全空的预设格式指令字作为新的待放置指令字,并重新判断当前待放置指令字中是否还有空位;
当所述代码段中第k个新基本指令放置于待放置指令字的空位中后,将k加1,并重新判断当前待放置指令字中是否还有空位,直到获取所述代码段的所有超长指令字,此时将当前放置地址增加量作为所述代码段的最终放置地址增加量;
其中,k的初始值为1,所述预设地址数就是空操作对应所占用地址数。
可选地是,基于所述代码段的中间起始地址信息获取所述代码段的新起始地址信息包括:
将当前所述代码段的中间起始地址信息加上当前所述代码段之前所有所述代码段的最终合并地址增减量和最终放置地址增减量,即得到当前所述代码段的新起始地址信息。
可选地是,指令翻译方法还包括:
基于所有所述代码段的原始起始地址信息和所有所述代码段的新起始地址信息获取代码段地址映射表;
获取所述输出文件中的所有跳转指令,基于所述代码段地址映射表将所有所述跳转指令中的原始起始地址信息替换为对应的新起始地址信息,以获取新代码程序。
为了解决上述技术问题,本发明还提供了一种指令翻译装置,设置于程序外存储介质和数据传送网络之间,包括程序拆分模块、指令转化模块、指令合并模块和输出文件生成模块;
所述程序拆分模块,用于基于待翻译程序的程序信息将所述待翻译程序拆分为多个代码段,再将每段所述代码段拆分为多个基本指令,并获取每段所述代码段的原始起始地址信息;
所述指令转化模块,用于对每段所述代码段中所有所述基本指令依次进行转化操作,获取每段所述代码段所对应的原子操作指令,并基于每段所述代码段的原始起始地址信息获取每段所述代码段的中间起始地址信息;
所述指令合并模块,用于基于预设合并规则对每段所述代码段中所有所述原子操作指令依次进行合并,获取每段所述代码段所对应的新基本指令,并基于预设放置规则将每段所述代码段所对应的新基本指令放置于预设格式指令字中,获取每段所述代码段所对应的超长指令字,并基于每段所述代码段的中间起始地址信息获取每段所述代码段的新起始地址信息;
所述输出文件生成模块,用于将所有所述代码段的超长指令字依次存储于输出文件中;
其中,所述预设合并规则和所述预设放置规则均基于新代码程序的程序信息获取。
为了解决上述技术问题,本发明还提供了一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现所述的指令翻译方法。
为了解决上述技术问题,本发明还提供了一种终端,包括:处理器以及存储器,所述存储器与所述处理器之间通信连接;
所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行如所述的指令翻译方法。
与现有技术相比,上述方案中的一个或多个实施例可以具有如下优点或有益效果:
应用本发明实施例提供的指令翻译方法,通过将待翻译程序拆分为多个代码段,并将代码段中基本指令转换为原子操作指令,实现原始程序指令的分解;再基于新代码程序规则对原子操作指令进行合并及形成超长指令字,实现合成符合新代码程序规则的指令,进而无论新代码程序的基本指令更改,还是整条指令字长加长并行指令数变多,都可实现老版本软件到新版本软件的指令直接转化,无需依赖于CPU,因此不会消耗CPU运算资源,同时也不会增加CPU功耗,大大提高CPU兼容性,解决软件兼容性问题。本发明方法提供了老版本软件翻译为新版本软件过程中每段代码段起始地址信息的变更方法,实现了老版本软件到新版本软件的翻译。本发明指令翻译方法使得CPU设计在一定程度上摆脱了软件生态的限制,以采用更有利的CPU架构,比如类似IA-64的VLIW架构。
本发明的其它特征和优点将在随后的说明书中阐述,并且部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1示出了本发明实施例一指令翻译方法的流程示意图;
图2示出了本发明实施例一中对代码段中基本代码进行转化操作的流程示意图;
图3示出了本发明实施例一中对代码段中原子操作指令进行合并的流程示意图;
图4示出了本发明实施例一中将代码段中新基本指令放置于预设格式指令字中的流程示意图;
图5示出了本发明实施例二指令翻译装置的结构示意图;
图6示出了本发明实施例四终端的结构示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
软件程序通常会有对应的程序信息,程序信息中存储有该软件的跳转指令、软件版本、所包含代码段、所包含基本指令类型、超长指令字中基本指令放置数量及规则等信息,软件的指令翻译过程需基于软件的程序信息实现。软件程序的二进制代码中之所以会有代码段,是因为程序中存在跳转指令,跳转的目标地址就是某个代码段的起始地址。因此在程序指令翻译过程中需实现代码段起始地址信息的更新。编译器在编译原始程序的时候,是可以分析出所有代码段的起始地址信息的。
本实施例中还引入了原子操作的概念,原子操作其实是某种形式的指令。使用原子操作的目的在于方便翻译优化,比如两条相邻旧基本指令分拆后的原子操作,尽管有些原子操作属于前一条基本指令,有些属于后一条基本指令,这些原子操作也可能可以合并成新的基本指令,从而减少指令数。老版本软件VLIW指令字中的基本指令和老版本软件VLIW指令字中的基本指令均可以分解为原子操作指令,反之原子操作也可以合并成老版本软件VLIW指令字中的基本指令和新版本软件VLIW指令字中的基本指令,每个原子操作根据其复杂度具有其指令长度。通常软件程序的基本指令中会存在跳转指令,跳转指令的跳转地址是一个寄存器。
实施例一
为解决现有技术中存在的技术问题,本发明实施例提供了一种指令翻译方法。
图1示出了本发明实施例一指令翻译方法的流程示意图;参考图1所示,本发明实施例指令翻译方法包括如下步骤。
步骤S101,基于待翻译程序的程序信息将待翻译程序拆分为多个代码段,再将每段代码段拆分为多个基本指令,并获取每段代码段的原始起始地址信息。
具体地,将待进行翻译的老版本软件程序作为待翻译程序。基于待翻译软件的程序信息,将待翻译软件拆分为多段代码段。每段代码段包括多个超长指令字,每个超长指令字又包括多个基本指令,本实施例中需基于程序信息将每段代码段拆分为多个超长指令字,并将每个指令字拆分为多个基本指令。最后基于程序信息获取每段代码段的起始地址信息作为每段代码段的原始起始地址信息。此时每段代码段的起始地址信息即为每段代码段中起始基本指令的起始地址信息。
老版本软件程序和要翻译为的新代码程序均可设置为面向risc指令集,也可以设置为面向其他类型的指令集。
为了便于理解,表1给出了某程序中各代码段的示意形式,以下某程序中各代码段采用的是VLIW架构,其中一个超长指令字包含两条基本指令。
表1
其中显示,该程序二进制代码有三段代码段:第一段代码段包括基本指令1至基本指令7,其起始地址信息为基本指令1的起始地址信息(标记为原始label1,它是个地址);第二个代码段包括基本指令8至基本指令14,其起始地址信息为基本指令8的起始地址信息(标记为原始label2,它是个地址);第三个代码段包括基本指令15至基本指令18,其起始地址信息为基本指令15的起始地址信息(标记为原始label3,它是个地址)。每一行表示一个超长指令字,每个超长指令字中放置有两个基本指令。
步骤S102,对每段代码段中所有基本指令依次进行转化操作,获取每段代码段所对应的原子操作指令,并基于每段代码段的原始起始地址信息获取每段代码段的中间起始地址信息。
具体地,对每段代码段中的所有基本指令分别进行转换操作,以将每段代码段中基本指令转化为原子操作指令。进一步地依次对每段代码段中所有基本指令进行转化判断,并基于每条基本指令的转化判断结果对相应基本指令进行转化操作,且在对基本指令进行转化操作过程中同步更新转换地址增减量。转换地址增减量初始值可设置为0,也可设置为其他合理数值,转换操作具体包括替换操作、删除操作和分解操作。上述转化操作会导致整个代码段所占用地址数更改(即老版本基本指令所占用地址数跟其所分解出的原子操作指令所对应地址数可能不同,替换操作和删除操作的发生则更会改变所占地址数),因此需记录基本指令转换操作过程中的地址增减量。
图2示出了本发明实施例一中对代码段中基本代码进行转化操作的流程示意图;参考图2所示,本实施例中对任一代码段中所有基本指令依次进行转化操作,并获取该段代码段的中间起始地址信息过程包括:以代码段中第n个基本指令的转化操作为例,n的初始值设置为1;首先基本指令转换为原子操作指令的转换规则,判断代码段中第n个基本指令是否可以做删除操作,若是则对第n个基本指令做删除操作。此时该段代码段的地址转换增减量需减去当前第n个基本指令所占用地址数。其中需删除的基本指令类型包括空操作。
若代码段中第n个基本指令无法做删除操作,则需基于转换规则判断代码段中的第n个基本指令是否可做分解操作,若是则需基于转换规则将第n个基本指令分解为多个原子操作指令。此时该段代码段的地址转换增减量需加上指令分解地址差。其中地址分解差即为第n个基本指令分解所得的多个原子操作指令,所占用总地址数减去代码段中第n个基本指令所占用地址数。
而若代码段中第n个基本指令无法做分解操作,则需进一步基于转换规则判断代码段中的第n个基本指令是否可做替换操作,若是则需基于转换规则用相应替换的原子操作指令替换代码段的第n个基本指令。此时该段代码段的地址转换增减量需加上替换地址差。其中替换地址差为相应替换原子操作指令所占用地址数减去代码段中第n个基本指令所占用地址数。
若代码段中第n个基本指令也无法做分解操作,直接将第n个基本指令作为原子操作指令。此时该段代码段的地址转换增减量并不发生变化。
在对代码段中第n个基本指令完成上述转换操作后(即当删除代码段中第n个所述基本指令后,或将代码段中第n个所述基本指令分解为多个原子操作指令后,或用相应替换原子操作指令替换代码段中第n个基本指令后,或将代码段中第n个基本指令直接作为原子操作指令后),需判断n是否等于N,N为该代码段中基本指令个数。若是则表示当前代码段中所有基本指令均完成转化操作,并将当前的转换地址增减量作为该代码段的最终转换地址增减量,否则将n加1,并重复上述过程,直到该代码段中所有基本指令均完成转化操作。此时即可获取该代码段所对应的所有原子操作指令,代码段所对应的所有原子操作按转化操作顺序依次排序。需要说明的是,此时代码段的中间起始地址信息即为该代码段中起始原子操作指令的起始地址信息。
表2给出表1所对应程序,各代码段所对应所有原子操作指令的示意形式。
表2
上述过程中代码段的地址转换增减量初始值可设置为0,也可设置为其他合理数值,此时该代码段的中间起始地址信息为当前代码段的原始起始地址信息加上当前代码段之前所有代码段的最终转换地址增减量。上述过程中代码段的地址转换增减量初始值还可设置为上一段代码段的最终转化地址增减量加一个地址数,此时该代码段的地址转换增减量初始值即为该代码段的中间起始地址信息,获取的最终转换地址增减量以用于为获取下一代码段的中间起始地址信息时使用。
重复上述过程即可实现所有段代码段中基本指令的转换操作,以及每段代码段的中间起始地址信息的获取。
步骤S103,基于预设合并规则对每段代码段中所有原子操作指令依次进行合并,获取每段代码段所对应的新基本指令,并基于预设放置规则将每段代码段所对应的新基本指令放置于预设格式指令字中,获取每段代码段所对应的超长指令字,并基于每段代码段的中间起始地址信息获取每段代码段的新起始地址信息。
具体地,基于所需翻译为的新代码程序的程序信息,获取原子操作合并规则及新基本指令在超长指令字中的放置规则,即获取预设合并规则和预设放置规则。而后基于预设合并规则分别对每段代码段中的原子操作指令进行合并,以形成新基本指令;并将合并成的基本指令放置于预设格式的指令字中,进而获取每段代码段所对应的超长指令字。
图3示出了本发明实施例一中对代码段中原子操作指令进行合并的流程示意图;参考图3所示,基于预设合并规则对代码段中所有原子操作指令进行合并具体包括:获取原子操作指令合并搜索最大范围为j,以第m个原子操作指令为例,设定m的初始值为1;按照代码段中原子操作指令顺序,基于预设合并规则将代码段中第m个原子操作指令至第m+j个原子操作指令进行合并操作,获取代码段中第m个原子操作指令至第m+j个原子操作指令所能合并出的最优基本指令,并将最优基本指令作为代码段的新基本指令。
其中,原子操作指令合并搜索最大范围j表示最多可选定几个原子操作来进行合并操作,j不是所有原子操作可能的进行合并的组合中最大的合并数。而是一个设定值,j通常会大于所有原子操作可能的进行合并的组合中最大的合并数。j的设定可以来于经验值,j越大,计算量越大,优化效果会越好。
优选地,最优基本指令可设置为按序具有最大原子操作指令合并数的基本指令。例如假设j为5,m为1,此时需判断代码段中第1至第5个原子操作指令是否可合成基本指令,若是则将该基本指令作为最优基本指令,否则需基于预设合并规则判断代码段中第1至第4个原子操作指令是否可合成基本指令,若是则将该基本指令作为最优基本指令,否则需基于预设合并规则判断代码段中第1至第3个原子操作指令是否可合成基本指令,依次类推,直到获取最优基本指令。
优选地,最优基本指令还可设置为具有最短执行周期的基本指令。此时基于预设合并规则将代码段中第m个原子操作指令至第m+j个原子操作指令进行合并操作具体包括:对代码段中第m个原子操作指令至第m+j个原子操作指令进行合并,获取第m个原子操作指令至第m+j个原子操作指令之间连续合并的所有合并组合,并从所有合并组合中获取组合执行周期最短的合并组合作为最优合并组合,将最优合并组合中包含第m个原子操作指令的基本指令作为最优基本指令。假设j为5,m为1,代码段中第1至第5个原子操作指令连续合并方式有多种组合,例如第1至第5个原子操作指令可直接合并为一个基本指令,此时将该基本指令作为一个合并组合;第1至第4个原子操作指令可合并为一个基本指令,剩下的第5个原子操作指令也作为合成的基本操作指令,此时第1至第4个原子操作指令所合并的基本指令和第5个原子操作指令合成的基本操作指令作为一个合并组合;第1至第3个原子操作指令可合并为一个基本指令,判断剩下的第4和第5个原子操作指令是否可合并为一个基本指令,若是则第1至第3个原子操作指令合并的基本指令、第4和第5个原子操作指令合并的基本指令作为一个合并组合,否则第4和第5个原子操作指令分别作为一个基本指令,此时第1至第3个原子操作指令合并的基本指令、第4个原子操作指令合成的基本操作指令和第5个原子操作指令合成的基本操作指令组成一个组合;依次类推,即可获取第1至第5个原子操作指令中所有类型的合并组合。
需要说明的是,每个合并组合在合并基本指令时,均是在相连续的原子操作指令之间进行的;例如第1个原子操作指令与第2个原子操作指令可以合并为基本指令;第1个原子操作指令至第3个原子操作指令之间可以合并为基本指令;第1个原子操作指令至第4个原子操作指令之间可以合并为基本指令;但第1个原子操作指令无法跳过第2个原子操作指令,直接与第3个原子操作合并为基本指令。
由于原子操作指令合并过程也会导致整个代码段所占用地址数更改,因此需记录原子操作指令合并过程中的合并地址增减量。设定合并地址增减量初始值为0,也可设置为其他合理数值,当代码段中原子操作指令合并出一个新基本指令后,当前合并地址增减量就需加上合并地址差值。设定第m个原子操作指令至第m+i-1个原子操作指令所合并的新基本指令为第m个原子操作指令至第m+j个原子操作指令所能合并出的最优基本指令,则合并地址差值即为最优基本指令所占用地址数减去第m个原子操作指令至第m+i-1个原子操作指令所占用地址数。
而后判断m+i-1是否已经是当前代码段的原子操作指令个数,若是则表示当前代码段中所有原子操作指令完成合并,并将当前合并地址增减量作为代码段的最终合并地址增减量;否则将m+i,并重复上述过程,直到代码段中所有原子操作指令均完成合并操作。
当代码段中原子操作指令合并成新基本指令后,还需将新基本指令放置于预设格式指令字中,形成对应代码段的超长指令字。在将新基本指令放置于指令字中之前,需先基于新代码程序的程序信息获取该新代码程序所对应指令字的格式信息,指令字格式信息包括指令字中所能放置基本指令数以及指令字每个空位所放置基本指令的类型,设定新代码程序所对应指令字为预设格式指令。
图4示出了本发明实施例一中将代码段中新基本指令放置于预设格式指令字中的流程示意图,参考图4所示,基于预设放置规则将代码段所对应的新基本指令放置于预设格式指令字中具体包括:在进行新基本指令放置操作前先配置一条全空的预设格式指令字以作为待放置指令字,以将代码段所对应第k个新基本指令放置到指令字过程为例进行说明,k的初始值为1。先判断当前待放置指令字中是否还有空位,若当前待放置指令字中还有空位,则表示当前待放置指令字还未填充满。而后基于预设放置规则判断代码段中第k个新基本指令是否可放置于当前待放置指令字所有空位的首个空位中,若是则直接将第k个新基本指令放置于当前待放置指令字的首个空位中;否则需用空操作填充当前待放置指令字的首个空位,并重新判断当前待放置指令字中是否还有空位,重复上述过程。
其中,第k个新基本指令是否可放置于当前待放置指令字中首个空位中的判断具体包括:判断第k个新基本指令类型是否符合当前待放置指令字中首个空位的基本指令类型要求,例如假设当前待放置指令字中首个空位只能放置A类型的基本指令,若第k个新基本指令类型为A类型,则表示第k个新基本指令类型符合当前待放置指令字中首个空位的基本指令类型要求。若第k个新基本指令类型符合当前待放置指令字中首个空位的基本指令类型要求,则需进一步判断第k个新基本指令是否与当前待放置指令字中已具有的新基本指令有冲突,若没有冲突则可认定第k个新基本指令可放置于当前待放置指令字中首个空位中,否则表示第k个新基本指令不可放置于当前待放置指令字中首个空位中。
上述过程中空操作的放置会导致代码段所占用地址数的更改,因此需记录基本指令放置过程中的地址增减量。即当存在空操作放置于待放置指令字空位中时,当前放置地址增加量需加上预设地址数,预设地址数即为空操作所占用地址数。设定放置地址增加量的初始值设置为0,也可设置为其他合理数值。
在对当前待放置指令字中是否存在空位判断过程中,若判定当前待放置指令字中没有空位,即表示当前待放置指令字填充完全,此时需将当前待放置指令字作为代码段的超长指令字,并重新分派一条全空的预设格式指令字作为新的待放置指令字,然后再重新进行当前待放置指令字中是否还有空位的判断。
而当将代码段中第k个新基本指令放置于待放置指令字的空位中后,需判断第k个新基本指令是否为所属代码段的最后一个新基本指令。若是则用空操作填充待放置指令字剩下所有空位,并将填充后的当前待放置指令作为代码段的超长指令字,基于放置的空操作对当前放置地址增加量需进行相应调整,结束该代码段超长指令字获取过程。此时将当前放置地址增加量作为代码段的最终放置地址增加量。否则需将k加1,并实现新第k个新基本指令放置于指令字的操作。重复上述过程即可获取每段代码段所对应的超长指令之。
表3给出表1所对应程序,各代码段所对应所有超长指令字的示意形式,以下某程序中各代码段采用的也是VLIW架构,其中一个超长指令字包含三条基本指令,增加了并行执行能力。
表3
需要说明的是,新基本指令的合成过程与新基本指令的放置过程可同步存在,即一旦生成新基本指令,即可将该新基本指令放置于指令字中。
经过上述代码段中原子操作指令合并过程和新基本指令放置过程,由于合并地址增减量和放置地址增加量的存在,每段代码段的起始地址信息均会发生改变。单段代码段的最终起始地址信息获取方式为:将当前代码段的中间起始地址信息,加上当前代码段之前所有代码段的最终合并地址增减量和最终放置地址增减量。例如假设当前代码段为第三段代码段,则第三段代码段的最终起始地址信息为第三段代码段的中间起始地址信息,加上第二段代码段的最终合并地址增减量和最终放置地址增减量,再加上第一段代码段的最终起始地址信息的最终合并地址增减量和最终放置地址增减量。
步骤S104,将所有代码段的超长指令字存储于输出文件中。
具体地,将所有代码段的超长指令字依次存储于输出文件中。
步骤S105,对输出文件中跳转指令的跳转地址进行更新,形成新代码程序。
在软件程序翻译过程中,由于翻译前后跳转指令的跳转地址的一致性,使得相同代码段中翻译前后的跳转指令具有相同的跳转地址,在翻译过程中需要将跳转指令跳转地址中的老地址转换为新地址。
具体地,需基于所有代码段的原始起始地址信息和所有代码段的新起始地址信息获取代码段地址映射表;代码段地址映射表中相同代码段的原始起始地址信息与新起始地址信息为对应映射关系。而后获取输出文件所有超长指令字中所有跳转指令。最后基于代码段地址映射表将所有超长指令字所有跳转指令中的原始起始地址信息替换为新起始地址信息。
本发明实施例提供的指令翻译方法,通过将待翻译程序拆分为多个代码段,并将代码段中基本指令转换为原子操作指令,实现原始程序指令的分解;再基于新代码程序规则对原子操作指令进行合并及形成超长指令字,实现合成符合新代码程序规则的指令,进而无论新代码程序的基本指令更改,还是整条指令字长加长并行指令数变多,都可实现老版本软件到新版本软件的指令直接转化,无需依赖于CPU,因此不会消耗CPU运算资源,同时也不会增加CPU功耗,大大提高CPU兼容性,解决软件兼容性问题。本发明方法还提供了老版本软件翻译为新版本软件过程中每段代码段起始地址信息的变更方法,进一步实现了老版本软件到新版本软件的翻译。本发明指令翻译方法使得CPU设计在一定程度上摆脱了软件生态的限制,以采用更有利的CPU架构,比如类似IA-64的VLIW架构。
实施例二
为解决现有技术中存在的技术问题,本发明实施例还提供了一种指令翻译装置。
老架构的软件程序或者运行在其他指令集CPU上的软件在运行的时候,会读取到CPU可以就近访问的存储空间,例如动态内存、cache、虚拟内存等。图5示出了本发明实施例二指令翻译装置的结构示意图;参考图5所示,本实施例指令翻译装置设置于程序外存储介质和数据传送网络之间,能够把不兼容的软件中的指令翻译成当前CPU可以运行的指令。对于兼容的软件,指令翻译装置可以不做翻译,直接发给数据传送网络。
进一步地,本发明实施例指令翻译装置包括程序拆分模块、指令转化模块、指令合并模块和输出文件生成模块。
程序拆分模块用于基于待翻译程序的程序信息将待翻译程序拆分为多个代码段,再将每段代码段拆分为多个基本指令,并获取每段代码段的原始起始地址信息。
指令转化模块用于对每段代码段中所有基本指令依次进行转化操作,获取每段代码段所对应的原子操作指令,并基于每段代码段的原始起始地址信息获取每段代码段的中间起始地址信息。
指令合并模块用于基于预设合并规则对每段代码段中所有原子操作指令依次进行合并,获取每段代码段所对应的新基本指令,并基于预设放置规则将每段代码段所对应的新基本指令放置于预设格式指令字中,获取每段代码段所对应的超长基本指令字,并基于每段代码段的中间起始地址信息获取每段代码段的新起始地址信息。
输出文件生成模块用于将所有代码段的超长指令字依次存储于输出文件中;
其中,预设合并规则和预设放置规则均基于新代码程序的程序信息获取。
为了便于理解,以下以一个实际例子对本发明实施例提供的指令翻译装置翻译过程进行说明。其中老版本软件程序和要翻译为的新代码程序均可设置为面向risc指令集,也可以设置为面向其他类型的指令集。本发明实施例指令翻译装置的输入是老版本软件程序的二进制代码文件,以及该程序的程序信息,程序信息中至少包括老版本软件程序中每段代码段的起始地址;输出是翻译后的新代码程序以及新代码程序的程序信息。其中的老版本软件程序即为待翻译程序。
表4为老版本软件程序中各代码段的示意形式,对应老版本软件程序的CPU采用的是VLIW架构,其中一个超长指令字包含两条基本指令。我们要将该代码段翻译为新版本CPU可识别的新代码程序,使得新版本CPU完全兼容老版本基本指令集,新代码程序一个超长指令字包含三条基本指令,增加了并行执行能力。
表4
表4的一行代表一条老版本软件程序的超长指令字,通常一条超长指令字中可以包含多条基本指令,本示例中一条超长指令字包含两条基本指令。
本发明实施例指令翻译装置中的程序拆分模块,基于待翻译程序的程序信息将待翻译程序拆分为三个代码段;再将每段代码段拆分为多个基本指令,进一步即第一段代码段包括基本指令1至基本指令7,其起始地址信息为基本指令1的起始地址信息(标记为原始label1,它是个地址);第二个代码段包括基本指令8至基本指令14,其起始地址信息为基本指令8的起始地址信息(标记为原始label2,它是个地址);第三个代码段包括基本指令15至基本指令18,其起始地址信息为基本指令15的起始地址信息(标记为原始label3,它是个地址)。最后获取每段代码段的原始地址信息(即原始label1、原始label2和原始label3)。
指令转化模块分别对三段代码段中所有基本指令依次进行转化操作,获取每段代码段所对应的原子操作指令,并基于每段代码段的原始起始地址信息获取每段代码段的中间起始地址信息。转换操作包括删除操作、分解操作和替换操作,且在对基本指令进行转化操作时,针对每个基本指令仅会执行删除操作、分解操作和替换操作中的任意一个。转换操作的删除操作、分解操作和替换操作均会导致整个代码段占用地址数的增减(老版本基本指令占用地址数跟其对应的原子操作对应地址数有可能不同,如替换和删除发生则会更有可能不同),要记录这个增减。
上述过程具体包括依次对代码段中所有基本指令进行转化判断,并基于每条基本指令的转化判断结果对相应基本指令进行转化操作,以获取每条基本执行的转化操作结果,即获取每条基本指令转化操作后所得到的原子操作指令。将基于每条基本指令所得到的原子操作指令有序排列,然后把这些原子操作指令按照原来的基本指令顺序串接形成一个输出文件(如表5所示)。期间伴随着每段代码段的起始地址增减数的计算,最后计算出各个代码段的新的起始地址(即每段代码段的中间起始地址信息,进一步即中间Label 1、中间Label 2和间Label 3)。对每段代码段中所有基本指令进行转化操作的具体过程如实施例一中所述,在此不对其进行过多赘述。
表5给出表4所对应老版本软件程序各代码段所对应所有原子操作指令的示意形式。
表5
上述过程本实施例中引入了原子操作的概念,原子操作其实是某种形式的指令。使用原子操作的目的在于方便翻译优化,比如两条相邻旧基本指令分拆后的原子操作指令,尽管有些原子操作指令属于前一条基本指令,有些属于后一条基本指令,这些原子操作指令也可能可以合并成新的基本指令,从而减少指令数。老版本软件VLIW指令字中的基本指令和老版本软件VLIW指令字中的基本指令均可以分解为原子操作指令,反之原子操作也可以合并成老版本软件VLIW指令字中的基本指令和新版本软件VLIW指令字中的基本指令,每个原子操作根据其复杂度具有其指令长度。
指令合并模块基于预设合并规则对每段代码段中所有原子操作指令依次进行合并,获取每段代码段所对应的新基本指令。其中新基本指令的具体合并方式与实施例一中相同,在此不对其进行过多赘述。同时还基于预设放置规则将每段代码段所对应的新基本指令放置于预设格式指令字中,获取每段代码段所对应的超长基本指令字,并基于每段代码段的中间起始地址信息获取每段代码段的新起始地址信息(即最终Label1、最终Label和最终Label1)。
进一步即将按照顺序把原子操合并形为新本版CPU可以支持的基本指令,然后将这些基本指令按照新版本VLIW指令可以支持的方式进行并行化排布,形成新的程序代码,期间伴随着每个代码段的起始地址增减数计算,最后计算出各个代码段的新的起始地址。
表6给出表4所对应老版本软件程序各代码段所对应所有超长指令字的示意形式,以下各代码段采用的也是VLIW架构,其中一个超长指令字包含三条基本指令,增加了并行执行能力。
表6
需要说明的是,新基本指令的合成过程与新基本指令的放置过程可同步存在,即一旦生成新基本指令,即可将该新基本指令放置于指令字中。
输出文件生成模块将所有代码段的超长指令字依次存储于输出文件中;而后对输出文件中跳转指令的跳转地址进行更新,形成新代码程序。
在软件程序翻译过程中,由于翻译前后跳转指令的跳转地址的一致性,使得相同代码段中翻译前后的跳转指令具有相同的跳转地址,在翻译过程中需要将跳转指令跳转地址中的老地址转换为新地址。
具体地,需基于所有代码段的原始起始地址信息和所有代码段的新起始地址信息获取代码段地址映射表;代码段地址映射表中相同代码段的原始起始地址信息与新起始地址信息为对应映射关系。而后获取输出文件所有超长指令字中所有跳转指令。最后基于代码段地址映射表将所有超长指令字所有跳转指令中的原始起始地址信息替换为新起始地址信息。
进一步即扫描新指令代码,如果发现跳转指令而且跳转地址就是程序代码段起始地址,我们可以拿到该起始地址,根据地址映射表,可以得到该起始地址对应的新的起始地址,然后把该起始地址替换掉,得到新代码程序。
该例子中,由于新版本CPU完全兼容老版本基本指令集,只是超长指令字加长,增加了并行度,因此指令翻译相对简单。通常来说对于同一家公司的VLIW架构CPU,新版本CPU完全兼容老版本基本指令集并不是很困难,因此指令翻译器的可实现性是很高的。对于不同公司完全不同的指令集,指令翻译将会复杂很多,但是如果指令翻译在算法和技术上是可以实现,指令翻译这个组件就是可以实现和使用,那么利用本专利所描述组件就可以大大提高CPU的兼容性。本发明实施例可以让CPU设计上一定程度上摆脱软件生态的限制,采用更有利的CPU架构,比如类似IA-64的VLIW架构。
本发明实施例提供的指令翻译装置,通过将待翻译程序拆分为多个代码段,并将代码段中基本指令转换为原子操作指令,实现原始程序指令的分解;再基于新代码程序规则对原子操作指令进行合并及形成超长指令字,实现合成符合新代码程序规则的指令,进而无论新代码程序的基本指令更改,还是整条指令字长加长并行指令数变多,都可实现老版本软件到新版本软件的指令直接转化,无需依赖于CPU,因此不会消耗CPU运算资源,同时也不会增加CPU功耗,大大提高CPU兼容性,解决软件兼容性问题。本发明装置还提供了老版本软件翻译为新版本软件过程中每段代码段起始地址信息的变更方法,进一步实现了老版本软件到新版本软件的翻译。本发明指令翻译方法使得CPU设计在一定程度上摆脱了软件生态的限制,以采用更有利的CPU架构,比如类似IA-64的VLIW架构。
实施例三
为解决现有技术中存在的上述技术问题,本发明实施例还提供了一种存储介质,其存储有计算机程序,该计算机程序被处理器执行时可实现实施例一中所述的指令翻译方法中的所有步骤。
所述的艉轴管分段划分方法的具体步骤以及应用本发明实施例提供的可读存储介质获取的有益效果均与实施例一相同,在此不在对其进行赘述。
需要说明的是:存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
实施例四
为解决现有技术中存在的上述技术问题,本发明实施例还提供了一种终端。
图6示出了本发明实施例四终端结构示意图,参照图6,本实施例终端包括相互连接的处理器及存储器;存储器用于存储计算机程序,处理器用于执行存储器存储的计算机程序,以使终端执行时可实现实施例一中所述的指令翻译方法中的所有步骤。
所述的指令翻译方法的具体步骤以及应用本发明实施例提供的终端获取的有益效果均与实施例一相同,在此不在对其进行赘述。
需要说明的是,存储器可能包含随机存取存储器(Random Access Memory,简称RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。同理处理器也可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所公开的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (11)
1.一种指令翻译方法,包括:
基于待翻译程序的程序信息将所述待翻译程序拆分为多个代码段,再将每段所述代码段拆分为多个基本指令,并获取每段所述代码段的原始起始地址信息;
对每段所述代码段中所有所述基本指令依次进行转化操作,获取每段所述代码段所对应的原子操作指令,并基于每段所述代码段的原始起始地址信息获取每段所述代码段的中间起始地址信息;
基于预设合并规则对每段所述代码段中所有所述原子操作指令依次进行合并,获取每段所述代码段所对应的新基本指令,并基于预设放置规则将每段所述代码段所对应的新基本指令放置于预设格式指令字中,获取每段所述代码段所对应的超长指令字,并基于每段所述代码段的中间起始地址信息获取每段所述代码段的新起始地址信息;
将所有所述代码段的超长指令字依次存储于输出文件中;
其中,所述预设合并规则和所述预设放置规则均基于新代码程序的程序信息获取。
2.根据权利要求1所述的指令翻译方法,其特征在于,对所述代码段中所有所述基本指令依次进行转化操作包括:
依次对所述代码段中所有所述基本指令进行转化判断,并基于每条所述基本指令的转化判断结果对相应所述基本指令进行转化操作,同步更新转换地址增减量;
其中,所述转换操作包括删除操作、分解操作和替换操作。
3.根据权利要求2所述的指令翻译方法,其特征在于,依次对所述代码段中所有所述基本指令进行转化判断,并基于每条所述基本指令的转化判断结果对相应所述基本指令进行转化操作,同步更新转换地址增减量包括:
基于转换规则判断所述代码段中第n个所述基本指令是否可做删除操作,若是则删除所述代码段中第n个所述基本指令,并将当前转换地址增减量减去所述第n个所述基本指令所占用地址数,否则
基于转换规则判断所述代码段中第n个所述基本指令是否可做分解操作,若是则将所述代码段中第n个所述基本指令分解为多个原子操作指令,并将当前转换地址增减量加上指令分解地址差,所述指令分解地址差为所述代码段中第n个所述基本指令分解所得的多个原子操作指令所占用总地址数减去所述代码段中第n个所述基本指令所占用地址数,否则
基于转换规则判断所述代码段中第n个所述基本指令是否可做替换操作,若是则用相应替换原子操作指令替换所述代码段中第n个所述基本指令,并将当前转换地址增减量加上替换地址差,所述替换地址差为相应替换原子操作指令所占用地址数减去所述代码段中第n个所述基本指令所占用地址数,否则将所述代码段中所述第n个所述基本指令作为原子操作指令;
当将删除所述代码段中第n个所述基本指令后,或将所述代码段中第n个所述基本指令分解为多个原子操作指令后,或用相应替换原子操作指令替换所述代码段中第n个所述基本指令后,或将所述代码段中所述第n个所述基本指令作为原子操作指令后,判断n是否等于N,若是则当前转换地址增减量作为所述代码段的最终转换地址增减量,否则将n加1,并重新基于转换规则判断所述代码段中第n个所述基本指令是否可做删除操作,直到所述代码段中所有所述基本指令均完成转化操作;
其中,n的初始值为1,N为所述代码段中基本指令个数。
4.根据权利要求3所述的指令翻译方法,其特征在于,基于所述代码段的原始起始地址信息获取所述代码段的中间起始地址信息包括:
将当前所述代码段的原始起始地址信息加上当前所述代码段之前所有所述代码段的最终转换地址增减量,即得到当前所述代码段的中间起始地址信息。
5.根据权利要求1所述的指令翻译方法,其特征在于,基于预设合并规则对所述代码段中所有所述原子操作指令依次进行合并包括:
基于预设合并规则对所述代码段中第m个原子操作指令至第m+j个原子操作指令进行合并操作,获取所述代码段中第m个原子操作指令至第m+j个原子操作指令所能合并出的最优基本指令,将最优基本指令作为所述代码段的新基本指令,将当前合并地址增减量加上合并地址差值,将m加i,并重新基于预设合并规则对所述代码段中第m个原子操作指令至第m+j个原子操作指令进行合并操作,直到所述代码段中所有原子操作指令均完成合并操作,此时将当前合并地址增减量作为所述代码段的最终合并地址增减量;
其中,假设第m个原子操作指令至第m+i-1个原子操作指令所合并的基本指令为第m个原子操作指令至第m+j个原子操作指令所能合并出的最优基本指令,所述合并地址差值为最优基本指令所占用地址数减去第m个原子操作指令至第m+i-1个原子操作指令所占用地址数,j为原子操作指令合并搜索最大范围。
6.根据权利要求5所述的指令翻译方法,其特征在于,基于预设放置规则将所述代码段所对应的新基本指令放置于预设格式指令字中包括:
判断当前待放置指令字中是否还有空位,
若当前待放置指令字中还有空位,则基于预设放置规则判断所述代码段中第k个新基本指令是否可放置于当前待放置指令字中的首个空位中,若是将所述代码段中第k个新基本指令放置于当前所述待放置指令字的首个空位中,否则将空操作放置于当前待放置指令字的首个空位中,将当前放置地址增加量加上预设地址数,并重新判断当前待放置指令字中是否还有空位;
若当前待放置指令字中没有空位,则将当前所述待放置指令字作为所述代码段的超长指令字,分派一条全空的预设格式指令字作为新的待放置指令字,并重新判断当前待放置指令字中是否还有空位;
当所述代码段中第k个新基本指令放置于待放置指令字的空位中后,将k加1,并重新判断当前待放置指令字中是否还有空位,直到获取所述代码段的所有超长指令字,此时将当前放置地址增加量作为所述代码段的最终放置地址增加量;
其中,k的初始值为1,所述预设地址数就是空操作对应所占用地址数。
7.根据权利要求6所述的指令翻译方法,其特征在于,基于所述代码段的中间起始地址信息获取所述代码段的新起始地址信息包括:
将当前所述代码段的中间起始地址信息加上当前所述代码段之前所有所述代码段的最终合并地址增减量和最终放置地址增减量,即得到当前所述代码段的新起始地址信息。
8.根据权利要求1所述的指令翻译方法,其特征在于,还包括:
基于所有所述代码段的原始起始地址信息和所有所述代码段的新起始地址信息获取代码段地址映射表;
获取所述输出文件中的所有跳转指令,基于所述代码段地址映射表将所有所述跳转指令中的原始起始地址信息替换为对应的新起始地址信息,以获取新代码程序。
9.一种指令翻译装置,其特征在于,设置于程序外存储介质和数据传送网络之间,包括程序拆分模块、指令转化模块、指令合并模块和输出文件生成模块;
所述程序拆分模块,用于基于待翻译程序的程序信息将所述待翻译程序拆分为多个代码段,再将每段所述代码段拆分为多个基本指令,并获取每段所述代码段的原始起始地址信息;
所述指令转化模块,用于对每段所述代码段中所有所述基本指令依次进行转化操作,获取每段所述代码段所对应的原子操作指令,并基于每段所述代码段的原始起始地址信息获取每段所述代码段的中间起始地址信息;
所述指令合并模块,用于基于预设合并规则对每段所述代码段中所有所述原子操作指令依次进行合并,获取每段所述代码段所对应的新基本指令,并基于预设放置规则将每段所述代码段所对应的新基本指令放置于预设格式指令字中,获取每段所述代码段所对应的超长指令字,并基于每段所述代码段的中间起始地址信息获取每段所述代码段的新起始地址信息;
所述输出文件生成模块,用于将所有所述代码段的超长指令字依次存储于输出文件中;
其中,所述预设合并规则和所述预设放置规则均基于新代码程序的程序信息获取。
10.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至8中任一项所述指令翻译方法。
11.一种终端,其特征在于,包括:处理器以及存储器,所述存储器与所述处理器之间通信连接;
所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行如权利要求1至8中任一项所述指令翻译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310686324.4A CN116820568B (zh) | 2023-06-09 | 2023-06-09 | 指令翻译方法及装置、存储介质和终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310686324.4A CN116820568B (zh) | 2023-06-09 | 2023-06-09 | 指令翻译方法及装置、存储介质和终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116820568A true CN116820568A (zh) | 2023-09-29 |
CN116820568B CN116820568B (zh) | 2024-01-05 |
Family
ID=88142181
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310686324.4A Active CN116820568B (zh) | 2023-06-09 | 2023-06-09 | 指令翻译方法及装置、存储介质和终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116820568B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030046669A1 (en) * | 2001-09-05 | 2003-03-06 | Moataz Mohamed | Methods, systems, and computer program products for translating machine code associated with a first processor for execution on a second processor |
CN102087609A (zh) * | 2011-02-23 | 2011-06-08 | 中国人民解放军国防科学技术大学 | 多处理器平台下的动态二进制翻译方法 |
US20140281323A1 (en) * | 2013-03-14 | 2014-09-18 | Nvidia Corporation | Migration directives in a unified virtual memory system architecture |
CN105630479A (zh) * | 2014-11-28 | 2016-06-01 | 中兴通讯股份有限公司 | 程序运行过程中的异常处理方法及装置 |
CN110580220A (zh) * | 2019-08-12 | 2019-12-17 | 百富计算机技术(深圳)有限公司 | 测量代码段执行时间的方法及终端设备 |
CN114924947A (zh) * | 2022-04-07 | 2022-08-19 | 网宿科技股份有限公司 | 代码测试方法、装置、电子设备及存储介质 |
CN115328454A (zh) * | 2021-05-10 | 2022-11-11 | 阿里云计算有限公司 | 程序编译和程序加载方法 |
CN115543547A (zh) * | 2022-11-30 | 2022-12-30 | 北京太极信息系统技术有限公司 | 一种异构虚拟化平台中虚拟机的迁移方法及系统 |
CN115705194A (zh) * | 2021-08-13 | 2023-02-17 | 华为技术有限公司 | 一种硬件内存序架构下的代码处理方法及相应装置 |
CN116126350A (zh) * | 2023-04-17 | 2023-05-16 | 龙芯中科技术股份有限公司 | 一种二进制翻译方法、二进制翻译器及电子设备 |
-
2023
- 2023-06-09 CN CN202310686324.4A patent/CN116820568B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030046669A1 (en) * | 2001-09-05 | 2003-03-06 | Moataz Mohamed | Methods, systems, and computer program products for translating machine code associated with a first processor for execution on a second processor |
CN102087609A (zh) * | 2011-02-23 | 2011-06-08 | 中国人民解放军国防科学技术大学 | 多处理器平台下的动态二进制翻译方法 |
US20140281323A1 (en) * | 2013-03-14 | 2014-09-18 | Nvidia Corporation | Migration directives in a unified virtual memory system architecture |
CN105630479A (zh) * | 2014-11-28 | 2016-06-01 | 中兴通讯股份有限公司 | 程序运行过程中的异常处理方法及装置 |
CN110580220A (zh) * | 2019-08-12 | 2019-12-17 | 百富计算机技术(深圳)有限公司 | 测量代码段执行时间的方法及终端设备 |
CN115328454A (zh) * | 2021-05-10 | 2022-11-11 | 阿里云计算有限公司 | 程序编译和程序加载方法 |
CN115705194A (zh) * | 2021-08-13 | 2023-02-17 | 华为技术有限公司 | 一种硬件内存序架构下的代码处理方法及相应装置 |
CN114924947A (zh) * | 2022-04-07 | 2022-08-19 | 网宿科技股份有限公司 | 代码测试方法、装置、电子设备及存储介质 |
CN115543547A (zh) * | 2022-11-30 | 2022-12-30 | 北京太极信息系统技术有限公司 | 一种异构虚拟化平台中虚拟机的迁移方法及系统 |
CN116126350A (zh) * | 2023-04-17 | 2023-05-16 | 龙芯中科技术股份有限公司 | 一种二进制翻译方法、二进制翻译器及电子设备 |
Non-Patent Citations (3)
Title |
---|
YUE, FENG .ET: "The Synchronization Treatment in Implementing Data-Parallel programming languages on CPUs", 《2013 IEEE 15TH INTERNATIONAL CONFERENCE ON HIGH PERFORMANCE COMPUTING AND COMMUNICATIONS & 2013 IEEE INTERNATIONAL CONFERENCE ON EMBEDDED AND UBIQUITOUS COMPUTING (HPCC_EUC)》 * |
李晖;王振华;靳国杰;: "基于双TLB的二进制翻译访存性能优化", 计算机工程, no. 12 * |
陈雪城: "基于申威CPU的RISC-V指令系统实时仿真研究", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 * |
Also Published As
Publication number | Publication date |
---|---|
CN116820568B (zh) | 2024-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5733860B2 (ja) | 依存問題の効率的並列計算 | |
Marwedel et al. | Code generation for embedded processors | |
CN109144702B (zh) | 一种用于行列并行粗粒度可重构阵列多目标优化自动映射调度方法 | |
JP3180075B2 (ja) | 異なる命令コード相互間の動的変換装置及び方法 | |
US7877741B2 (en) | Method and corresponding apparatus for compiling high-level languages into specific processor architectures | |
US6877150B1 (en) | Method of transforming software language constructs to functional hardware equivalents | |
JP2011527788A5 (zh) | ||
JP2008217134A (ja) | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム | |
KR20110112810A (ko) | 데이터 처리 방법 및 장치 | |
CN103748550B (zh) | 用于存储熵编码指令序列及将其翻译成可执行形式的方法和设备 | |
WO2013032446A1 (en) | Hardware-based array compression | |
CN108595917A (zh) | 基于fpga的面向基因测序串匹配算法的加速平台及设计方法 | |
Araujo et al. | Challenges in code generation for embedded processors | |
CN116820568B (zh) | 指令翻译方法及装置、存储介质和终端 | |
CN105447285A (zh) | 一种提高OpenCL硬件执行效率的方法 | |
CN113791770B (zh) | 代码编译器、代码编译方法、代码编译系统和计算机介质 | |
Nguyen et al. | An implementation of membrane computing using reconfigurable hardware | |
US8645758B2 (en) | Determining page faulting behavior of a memory operation | |
Sun et al. | Designing high-quality hardware on a development effort budget: A study of the current state of high-level synthesis | |
CN100583030C (zh) | 一种risc处理器及其数据访存方法 | |
Baloukas et al. | Mapping embedded applications on MPSoCs: the MNEMEE approach | |
Kim et al. | Output-based intermediate representation for translation of test-pattern program | |
US10983947B2 (en) | Method and dynamically reconfigurable processor adapted for management of persistence of information across multiple instruction cycles | |
CN115495226A (zh) | 内存管理方法、装置、设备及计算机可读存储介质 | |
CN112214443A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |