CN102541611A - 指令翻译装置和方法、指令处理装置和处理器 - Google Patents
指令翻译装置和方法、指令处理装置和处理器 Download PDFInfo
- Publication number
- CN102541611A CN102541611A CN2010105978084A CN201010597808A CN102541611A CN 102541611 A CN102541611 A CN 102541611A CN 2010105978084 A CN2010105978084 A CN 2010105978084A CN 201010597808 A CN201010597808 A CN 201010597808A CN 102541611 A CN102541611 A CN 102541611A
- Authority
- CN
- China
- Prior art keywords
- instruction
- array
- target
- predetermined
- source 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
Images
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)
- Executing Machine-Instructions (AREA)
Abstract
一种指令翻译装置和方法、指令处理装置和处理器,所述指令处理装置包括,拆分单元,将逻辑运算指令拆分为多条单逻辑运算指令;转换单元,将所述单逻辑运算指令转换成具有预定格式的中间指令,所述预定格式包含逻辑值、源操作数和目标操作数;合并单元,合并预定指令及其定值点指令生成具有所述预定格式的合并指令;所述预定指令是指源操作数具有定值点指令的中间指令,所述预定指令的定值点指令是指对该预定指令的源操作数进行赋值的中间指令;所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值生成。本发明的指令翻译装置和方法、指令处理装置和处理器,提高了处理器处理逻辑运算的效率,降低了处理器的功耗。
Description
技术领域
本发明涉及计算机领域,特别涉及指令翻译装置和方法、指令处理装置和处理器。
背景技术
编译过程是将源代码(通常为高阶语言)翻译为能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的过程。且经过翻译后的目标代码的功能与源代码的功能相同,最后计算机通过处理器执行目标代码来得到源代码所要实现的功能。
一般来讲,编译器就是将高级语言翻译成机器语言的程序。其工作流程为:源代码(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标代码(object code)→链接器(Linker)→可执行程序(executables)。而编译器又包括编译器前端(frontend)、编译器分析(compileranalysis)和编译器后端(backend)。
编译器前端主要负责解析输入的源代码,由语法分析器和语意分析器协同工作。语法分析器负责把源代码中的“单词”找出来,语意分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句,函数等等。编译器前端同时还负责语义的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。编译器分析主要是对由前端生成并传递过来的中间代码进行分析,而编译器后端主要是负责分析,优化中间代码并生成机器代码。
随着计算机编程技术的迅猛发展,越来越多的逻辑运算被应用在源程序中。由于现有的编译器中只能识别出简单的单逻辑操作,例如:a|b、a^b、a&b,故现有技术在对含有逻辑运算的指令进行编译时,往往会将其翻译成多条汇编指令,其无法用一条逻辑指令来表示多个逻辑运算,例如:对于逻辑运算表达式c=(a|b)^b,编译器在翻译时,则需要将其拆分成两条相应的单逻辑运算tmp1=a|b,c=tmp1^b。
当逻辑运算比较复杂,涉及的操作数比较多时,如果仍将其翻译成多条汇编指令,计算机的处理器要执行多条汇编指令才能完成多操作数的逻辑运算,因而处理逻辑运算的效率会明显的降低,同时处理器的功耗也会增加。
申请号为200710047697.8的中国专利申请,公开了一种利用中间指令集的二进制翻译方法,其设计了一套中间指令集来作为将一套物理指令翻译成另一套物理指令的中间层,隔开了源机器及目标机器。但对于提高处理器处理逻辑运算的效率方面并未涉及。
发明内容
本发明解决的问题是,现有技术处理器处理逻辑运算的效率低,处理器的功耗大。
为解决上述技术问题,本发明提供一种指令翻译装置,包括,
拆分单元,用于将逻辑运算指令拆分为多条单逻辑运算指令;
转换单元,用于将单逻辑运算指令转换成具有预定格式的中间指令,所述预定格式包含逻辑值、源操作数和目标操作数,所述中间指令的源操作数为所述单逻辑运算指令的源操作数,所述中间指令的目标操作数为所述单逻辑运算指令的目标操作数,所述中间指令的逻辑值为对所述单逻辑运算指令的源操作数进行单逻辑运算生成的真值表中的值组合;
合并单元,用于合并预定指令及其定值点指令生成具有所述预定格式的合并指令;其中,所述预定指令是指源操作数具有定值点指令的中间指令,所述预定指令的定值点指令是指对该预定指令的源操作数进行赋值的中间指令;所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得,所述合并指令的源操作数包括所述预定指令及其定值点指令的源操作数的并集,且不包括所述定值点指令的目标操作数;所述合并指令的目标操作数为所述预定指令的目标操作数;
若没有可合并的中间指令则将所述生成的合并指令作为目标指令输出,否则将所述生成的合并指令作为中间指令。
可选的,所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得包括:
将所述定值点指令转换成定值点数组,所述定值点数组的下标为所述定值点指令的源操作数,所述定值点数组的元素分别为所述定值点指令的逻辑值中与所述定值点数组的下标取值对应的值;
将所述预定指令转换成预定数组,所述预定数组的下标为所述预定指令的源操作数,所述预定数组的元素分别为所述预定指令的逻辑值中与所述预定数组的下标取值对应的值;
建立合并数组,所述合并数组的下标为所述合并指令的源操作数,所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及定值点数组的元素获得;
将所述合并数组的元素组合成所述合并指令的逻辑值。
可选的,所述目标指令为二进制码。
为解决上述技术问题,本发明还提供一种指令处理装置,包括,
上述指令翻译装置,用于生成目标指令;
解析单元,用于解析所述目标指令,获取所述目标指令的逻辑值、源操作数和目标操作数;
多路选择单元,包括多路数据输入端、多个选择输入端和输出端,所述多路数据输入端分别输入所述目标指令的逻辑值中与所述目标指令的源操作数取值对应的值,所述多个选择输入端分别输入所述目标指令的源操作数;所述多路选择单元用于根据所述多个选择输入端的值选择其中一路数据输入端的值,输出至所述输出端以赋给所述目标操作数。
可选的,所述目标指令的源操作数为二个,所述多路选择单元包括4选1多路选择器。
可选的,所述目标指令的源操作数为三个,所述多路选择单元包括8选1多路选择器。
可选的,所述目标指令的源操作数为四个,所述多路选择单元包括16选1多路选择器。
可选的,所述多路选择单元包括多个多路选择器,所述多路选择器的个数与所述目标指令的源操作数的位数相同。
为解决上述技术问题,本发明还提供一种包括上述指令处理装置的处理器。
为解决上述技术问题,本发明还提供一种指令翻译方法,包括如下步骤:
将逻辑运算指令拆分为多条单逻辑运算指令;
将单逻辑运算指令转换成具有预定格式的中间指令,所述预定格式包含逻辑值、源操作数和目标操作数,所述中间指令的源操作数为所述单逻辑运算指令的源操作数,所述中间指令的目标操作数为所述单逻辑运算指令的目标操作数,所述中间指令的逻辑值为对所述单逻辑运算指令的源操作数进行单逻辑运算生成的真值表中的值组合;
合并预定指令及其定值点指令生成具有所述预定格式的合并指令;其中,所述预定指令是指源操作数具有定值点指令的中间指令,所述预定指令的定值点指令是指对该预定指令的源操作数进行赋值的中间指令;
所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得,所述合并指令的源操作数包括所述预定指令及其定值点指令的源操作数的并集,且不包括所述定值点指令的目标操作数;所述合并指令的目标操作数为所述预定指令的目标操作数;
若没有可合并的中间指令则将所述生成的合并指令作为目标指令输出,否则将所述生成的合并指令作为中间指令。
可选的,所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得包括:
将所述定值点指令转换成定值点数组,所述定值点数组的下标为所述定值点指令的源操作数,所述定值点数组的元素分别为所述定值点指令的逻辑值中与所述定值点数组的下标取值对应的值;
将所述预定指令转换成预定数组,所述预定数组的下标为所述预定指令的源操作数,所述预定数组的元素分别为所述预定指令的逻辑值中与所述预定数组的下标取值对应的值;
建立合并数组,所述合并数组的下标为所述合并指令的源操作数,所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及定值点数组的元素获得;
将所述合并数组的元素组合成所述合并指令的逻辑值。
可选的,所述目标指令为二进制码。
本发明的指令翻译装置,将单逻辑运算指令转换成具有预定格式的中间指令,通过对预定指令与其定值点指令的合并,最终将逻辑运算表达式转换为一条目标指令,使得处理器只需执行一条指令即可完成复杂的逻辑运算,与现有技术将多逻辑运算表达式翻译成多条指令,处理器需要执行多条指令相比,加快了处理器处理逻辑运算的效率,提高了处理器的应用性能,有效的降低了处理器的功耗。
本发明的指令处理装置,通过指令翻译装置生成目标指令,通过多路选择单元处理解析后的目标指令,从而输出最终逻辑运算表达式的结果。其结构简单,在硬件上容易实现,所述指令处理装置嵌入于处理器中,提高了处理器处理逻辑运算的效率,降低了处理器的功耗。
本发明的指令翻译方法,通过将单逻辑运算指令转换成具有预定格式的中间指令,进而通过对预定指令与其定值点指令的合并将逻辑运算表达式转换为一条目标指令,使得处理器只需执行一条指令即可完成复杂的逻辑运算,与现有技术将逻辑运算表达式翻译成多条指令,处理器需要执行多条指令相比,提高了处理器处理逻辑运算的效率以及处理器的应用性能,有效地降低了处理器的功耗。
附图说明
图1是本发明具体实施方式的指令翻译装置的结构示意图;
图2是本发明具体实施方式的单逻辑运算指令对应的预定格式的中间指令;
图3是本发明一实施例单逻辑运算或的真值表;
图4是本发明一实施例单逻辑运算异或的真值表;
图5是本发明具体实施方式的指令处理装置的结构示意图;
图6是本发明一具体实施例的一八选一多路选择器的结构示意图;
图7是本发明一具体实施例的多路选择单元结构示意图。
具体实施方式
发明人发现,现有技术的编译器在处理逻辑运算指令时,会将其直接翻译成多条单逻辑运算指令来执行。这是因为现有技术的编译器只能识别出简单的单逻辑运算,例如‘a|b’、‘a^b’、‘a&b’等,故编译器在翻译时会将逻辑运算拆分成多个单逻辑运算,而每一个单逻辑运算分别对应于一条单逻辑运算指令。本实施例中的单逻辑运算指令一般指求单个逻辑运算的值即只包括一个逻辑运算符。本实施例中逻辑运算指令用于求逻辑运算表达式的值,逻辑运算一般指多逻辑运算,所述逻辑运算表达式包括多个逻辑运算符。所述逻辑运算指令可以为任何一种语言,例如:C语言、VC等所描述的逻辑运算表达式。
举例来说:对于逻辑运算表达式c=(a|b)^b而言,编译器无法将其翻译成一条逻辑运算指令,而是要将其拆分成两条单逻辑运算指令‘or tmp,a,b’,‘xor c,b,tmp’,当逻辑运算比较复杂,涉及的操作数比较多时,如果仍将其翻译成多条单逻辑运算指令,处理器要执行多条单逻辑运算指令才能完成多操作数的逻辑运算,因而导致处理器处理逻辑运算的效率明显降低,处理器的功耗增加。
本发明的具体实施方式提供一种指令翻译装置,将单逻辑运算指令转换成具有预定格式的中间指令,通过对中间指令的合并,最终将逻辑运算表达式转换为一条目标指令,使得处理器只需执行一条指令即可完成复杂的逻辑运算,提高了逻辑运算的效率,降低了处理器的功耗。
以下结合附图和实施例,对本发明具体实施方式进行详细说明。
参见图1,图1为本发明具体实施方式的指令翻译装置的示意图,如图1所示,本发明具体实施方式的指令翻译装置包括:
拆分单元101,用于将逻辑运算指令拆分为多条单逻辑运算指令;
转换单元103,用于将单逻辑运算指令转换成具有预定格式的中间指令,所述预定格式包含逻辑值、源操作数和目标操作数,所述中间指令的源操作数为所述单逻辑运算指令的源操作数,所述中间指令的目标操作数为所述单逻辑运算指令的目标操作数,所述中间指令的逻辑值为对所述单逻辑运算指令的源操作数进行单逻辑运算生成的真值表中的值组合;
合并单元105,用于合并预定指令及其定值点指令生成具有所述预定格式的合并指令;其中,所述预定指令是指源操作数具有定值点指令的中间指令,所述预定指令的定值点指令是指对该预定指令的源操作数进行赋值的中间指令;
所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得,所述合并指令的源操作数包括所述预定指令及其定值点指令的源操作数的并集,且不包括所述定值点指令的目标操作数;所述合并指令的目标操作数为所述预定指令的目标操作数;
若没有可合并的中间指令则将所述生成的合并指令作为目标指令输出,否则将所述生成的合并指令作为中间指令。
实施例一
现以参与逻辑运算表达式的操作数为2个,逻辑运算表达式分别为下述表达方式,对本发明具体实施方式的指令翻译装置进行相应的说明。
(1)逻辑运算表达式为c=a&(a^b)
本实施例中,对于逻辑运算表达式c=a&(a^b)(也即逻辑运算指令),编译器前端首先会识别出参与逻辑运算的逻辑运算符,拆分单元101会将逻辑运算指令c=a&(a^b)拆分成两条单逻辑运算指令:xor tmp,a,b,and c,a,tmp。上述的拆分过程,也即对逻辑运算指令c=a&(a^b)进行翻译生成了与所述逻辑运算指令相应的中间代码xor tmp,a,b,and c,a,tmp,(需要注意的是对于不同的编译器,中间代码的表示格式都不相同,上述中间代码仅为一示例,不能作为对本发明的限定)。
转换单元103将拆分单元101拆分逻辑运算指令c=a&(a^b)而获得的单逻辑运算指令xor tmp,a,b,and c,a,tmp;转换成具有预定格式的中间指令。
本实施例中,转换单元103将单逻辑运算指令xor tmp,a,b,转换为具有预定格式的中间指令Flog2(6,tmp,a,b),其中,Flog2为操作符,其表达形式并不唯一,为自定义的符号,例如也可以为log2等;本实施例中,具有预定格式的中间指令Flog2(6,tmp,a,b)中的操作符Flog2并无一定的含义,此处仅仅起到标识的作用。
所述具有预定格式的中间指令Flog2(6,tmp,a,b)中包含逻辑值6、源操作数a,b和目标操作数tmp,所述具有预定格式的中间指令Flog2(6,tmp,a,b)的源操作数a,b即为所述单逻辑运算指令xor tmp,a,b的源操作数,所述具有预定格式的中间指令Flog2(6,tmp,a,b)的目标操作数tmp即为所述单逻辑运算指令xor tmp,a,b,的目标操作数;而所述中间指令Flog2(6,tmp,a,b)中所包含的逻辑值6,则是对单逻辑运算指令xor tmp,a,b的源操作数a,b进行单逻辑运算生成的真值表的值组合,本实施例中即对源操作数a,b进行逻辑异或运算生成的真值表的值组合。
如图3所示,图3给出了对源操作数a,b进行逻辑异或运算所生成的真值表,对于二进制的源操作数a,b的四种状态00,01,10,11其逻辑异或运算所对应的真值表的值分别为0,1,1,0;将所述真值表的值从右至左组合(对应于图3,即将所述真值表中的值自下而上组合)并以十六进制表示,即将0,1,1,0从右至左组合为0110其16进制即为6。
而对于单逻辑运算指令and c,a,tmp,同样地转换单元103会将其转换为具有预定格式的中间指令Flog2(8,c,a,tmp),其中Flog2(8,c,a,tmp)的源操作数a,tmp即为单逻辑运算指令and的源操作数;Flog2(8,c,a,tmp)的目标操作数c即为单逻辑运算指令and的目标操作数。操作符Flog2与上述Flog2(6,tmp,a,b)指令中操作符的含义相同,此处不再赘述。不同的是逻辑运算与的逻辑值为8。
参见图4,图4给出了对源操作数a和tmp进行逻辑与运算所生成的真值表,对于二进制的源操作数a,tmp的四种状态00,01,10,11其逻辑与运算所对应的真值表的值分别为0,0,0,1;将所述真值表的值从右至左组合(对应于图4,即将所述真值表中的值自下而上组合)并以十六进制表示,即将0,0,0,1从右至左组合为1000其16进制即为8。
请参考图2,图2给出了本发明具体实施方式的单逻辑运算指令对应的预定格式的中间指令,如图2所示,对于其他的单逻辑运算指令如:逻辑运算OR,转换单元103会将其转换成为预定格式的中间指令Flog2(e,tmp,a,b),对于单逻辑运算指令EQV,转换单元103会将其转换成为预定格式的中间指令Flog2(9,tmp,a,b),而对于其他的单逻辑运算指令所对应的预定格式的中间指令具体请参见图2,此处不再赘述。
由上述可知,对于任何一条单逻辑运算指令,转换单元103都会将其转换成预定格式的中间指令Flog2(truth,tmp,a,b),其中,Flog2(truth,tmp,a,b)的源操作数a,b即为单逻辑运算指令的源操作数,Flog2(truth,tmp,a,b)的目标操作数tmp即为单逻辑运算指令的目标操作数,Flog2(truth,tmp,a,b)的逻辑值truth即为对所述单逻辑运算指令的源操作数进行单逻辑运算生成的真值表的值组合的16进制表示。
合并单元105,用于合并预定指令及其定值点指令生成具有所述预定格式的合并指令。本实施例中,对于由转换单元103获得的中间指令Flog2(6,tmp,a,b)和Flog2(8,c,a,tmp),编译器首先会按顺序分析中间指令Flog2(6,tmp,a,b)是否为预定指令,对于中间指令Flog2(6,tmp,a,b)而言,源操作数为a,b,编译器分析发现不存在对源操作数为a,b进行赋值的中间指令(即对中间指令Flog2(6,tmp,a,b)之前的指令进行分析,本实施例中并未写出,实际过程中,应为对a和b进行赋值的指令,例如:a=1,b=0),即源操作数a,b不具有定值点指令,故该中间指令不是预定指令。
编译器继续对中间指令Flog2(8,c,a,tmp)进行分析,发现其源操作数tmp具有定值点指令,即对源操作数tmp进行赋值的中间指令Flog2(6,tmp,a,b),故该中间指令Flog2(8,c,a,tmp)为预定指令,而中间指令Flog2(6,tmp,a,b)为对该预定指令Flog2(8,c,a,tmp)的源操作数tmp进行赋值的中间指令,即定值点指令。
合并单元105将上述预定指令Flog2(8,c,a,tmp)及其定值点指令Flog2(6,tmp,a,b)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog2(truth,c,a,b)。所述合并指令Flog2(truth,c,a,b)的逻辑值truth通过数组索引所述预定指令Flog2(8,c,a,tmp)及其定值点指令Flog2(6,tmp,a,b)的逻辑值获得(关于合并指令的逻辑值truth如何获得将在下面详细介绍),所述合并指令的源操作数包括所述预定指令Flog2(8,c,a,tmp)及其定值点指令的Flog2(6,tmp,a,b)源操作数的并集即a,b,tmp,且不包括所述定值点指令Flog2(6,tmp,a,b)的目标操作数tmp,故合并指令的源操作数为a,b;所述合并指令的目标操作数为所述预定指令Flog2(8,c,a,tmp)的目标操作数c。
对上述预定指令和定值点指令进行合并生成合并指令后,若没有再可以与其合并的中间指令,即不存在预定指令,则将所述生成的合并指令作为目标指令输出,否则将所述生成的合并指令仍然作为中间指令,与其他中间指令继续合并。
本实施例中,逻辑运算指令c=a&(a^b)由转换单元105转换获得定值点指令Flog2(6,tmp,a,b)和预定指令Flog2(8,c,a,tmp),因此,没有可以再进行合并的中间指令,故,合并指令Flog2(truth,c,a,b)即为目标指令。
需要注意的是,对于目标指令Flog2(truth,c,a,b),其操作符为Flog2,如上所述作为中间指令的的操作符Flog2而言,其并没有具体的含义;而作为目标指令的操作符Flog2(本实施例中源操作数为2,故操作符为Flog2,当源操作数为3,4,...,n时,操作符也可以相应的为Flog3,Flog4,...,Flogn)而言,其含义为根据源操作数a,b来选择逻辑值中的一个值赋给目标操作数c,也即求逻辑运算表达式的结果。
以下对合并指令Flog2(truth,c,a,b)(即目标指令)中逻辑值truth的获得进行详细的说明。
首先,将所述定值点指令Flog2(6,tmp,a,b)转换成定值点数组,所述定值点数组的下标为所述定值点指令的源操作数,所述定值点数组的元素分别为所述定值点指令的逻辑值中与所述定值点数组的下标取值对应的值。
具体地,对于定值点指令Flog2(6,tmp,a,b)而言,其所对应的定值点数组为A1[a][b]={0,1,1,0};其中,a,b为定值点指令F1og2(6,tmp,a,b)的源操作数,其组合状态对应了定值点数组的下标,在二进制中,源操作数a与b的组合有4种状态,即00,01,10,11,故所述定值点数组的下标也对应了4种状态00,01,10,11。
定值点数组的元素{0,1,1,0}为定值点指令的逻辑值中与所述定值点数组的下标00,01,10,11对应的值;对于定值点指令F1og2(6,tmp,a,b)而言,其逻辑值为6,即二进制的0110,由上述可知0110即为源操作数a,b取00,01,10,11时所对应的单逻辑运算真值表的值自右至左的组合(即图3中真值表的值自下而上的组合),故,与源操作数a,b取00,01,10,11时所对应的逻辑值中的值应为0,1,1,0。
即,对于定值点指令Flog2(6,tmp,a,b)的定值点数组而言,数组下标00对应的数组元素值为0;数组下标01对应的数组元素值为1;数组下标10对应的数组元素值为1;数组下标11对应的数组元素值为0;也即A1[0][0]=0;A1[0][1]=1;A1[1][0]=1;A1[1][1]=0,而目标操作数tmp的值可以为定值点数组中的任一数组元素值。
同样地,对于预定指令Flog2(8,c,a,tmp),将其转换成预定数组,所述预定数组的下标为所述预定指令的源操作数,所述预定数组的元素分别为所述预定指令的逻辑值中与所述预定数组的下标取值对应的值;
具体地,对于预定指令Flog2(8,c,a,tmp)而言,其所对应的预定数组为A2[a][tmp]={0,0,0,1};其中,a,tmp为Flog2(8,c,a,tmp)源操作数,其组合状态对应了预定数组的下标,在二进制中,操作数a与tmp的组合有4种状态,即00,01,10,11,故所述预定数组的下标也对应了4种状态00,01,10,11。
预定数组的元素{0,0,0,1}为预定指令的逻辑值中与所述预定数组的下标00,01,10,11对应的值;对于预定指令Flog2(8,c,a,tmp)而言,其逻辑值为8,即二进制的1000,由上述可知1000即为源操作数a,tmp取00,01,10,11时所对应的单逻辑运算真值表的值自右至左的组合(即图4中真值表的值自下而上的组合),故,与源操作数a,tmp取00,01,10,11时所对应的逻辑值中的值应为0,0,0,1。
即,对于预定指令Flog2(8,c,a,tmp)的预定数组而言,数组下标00对应的数组元素值为0;数组下标01对应的数组元素值为0;数组下标10对应的数组元素值为0;数组下标11对应的数组元素值为1;也即A2[0][0]=0;A2[0][1]=0;A2[1][0]=0;A2[1][1]=1,而目标操作数c的值可以为预定数组中的任一数组元素值。
建立合并数组,所述合并数组的下标为所述合并指令的源操作数,故合并数组A可以表示为A[a][b];所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得,具体地:
建立与合并指令对应的合并数组A,所述合并数组A的下标为所述合并指令的源操作数,故合并数组A可以表示为A[a][b];同样地,对于二进制a,b的四种状态,所述合并数组A[a][b]的下标也对应了四种状态,而与所述合并数组A[a][b]的下标取值所对应的数组元素的值通过如下方式获得:
由上述可知定值点指令Flog2(6,tmp,a,b)的输出tmp即为预定指令Flog2(8,c,a,tmp)的输入,则通过数组索引合并得到合并数组A的过程为:合并数组A[a][b]=A2[a][tmp]=A2[a][A1[a][b]]。
由上述可知:A1[a][b]={0,1,1,0},A2[a][tmp]={0,0,0,1},故,对于A[0][0]而言,A[0][0]=A2[a][A1[a][b]]=A2[0][A1[0][0]],由上述可知A1[0][0]=0,则A2[0][A1[0][0]]=A2[0][0],而A2[0][0]=0,所以A[0][0]=0。依此类推:
A[0][1]=A2[a][A1[a][b]]=A2[0][A1[0][1]]=A2[0][1]=0;
A[1][0]=A2[a][A1[a][b]]=A2[1][A1[1][0]]=A2[1][1]=1;
A[1][1]=A2[a][A1[a][b]]=A2[1][A1[1][1]]=A2[1][0]=0;
得到所述合并数组为A[a][b]={0,0,1,0}。将合并数组的元素自右至左组合并以16进制表示,即将0100表示为16进制得到所述合并指令的逻辑值4,即truth的值为4。
至此,通过对上述定值点指令的定值点数组元素和预定指令的预定数组元素进行索引(即对定值点指令和预定指令的逻辑值进行索引)获得了所述合并指令的逻辑值,也就获得了所述合并指令,本实施例中所述合并指令Flog2(4,c,a,b)即为目标指令。通过指令翻译装置,逻辑运算指令被翻译为一条目标指令,处理器进行逻辑运算时,只需要执行一条目标指令即可获得逻辑运算表达式的结果。
(2)逻辑运算表达式为c=(a&b)|(a^b)
本实施例中对逻辑运算表达式c=(a&b)|(a^b)的目标指令的生成进行简单的说明。
拆分单元101将逻辑运算指令c=(a&b)|(a^b)拆分成三条单逻辑运算指令:
and tmp1,a,b;
xor tmp2,a,b;
or c,tmp1,tmp2;
转换单元103分别对上述三条单逻辑运算指令转换为具有预定格式的中间指令:
Flog2(8,tmp1,a,b)
Flog2(6,tmp2,a,b)
Flog2(e,c,tmp1,tmp2)
编译器按顺序分析上述三条中间指令是否为预定指令。对于中间指令Flog2(8,tmp1,a,b)而言,源操作数为a,b,编译器分析发现不存在对源操作数a,b进行赋值的中间指令,即源操作数a,b不具有定值点指令,故该中间指令不是预定指令。
同理,对于中间指令Flog2(6,tmp2,a,b)而言,其源操作数a,b也不具有定值点指令,故其也不是预定指令。
编译器继续对中间指令Flog2(e,c,tmp1,tmp2)进行分析,发现其源操作数tmp1具有定值点指令,即对源操作数tmp1进行赋值的中间指令Flog2(8,tmp1,a,b),其源操作数tmp2也具有定值点指令,即对源操作数tmp2进行赋值的中间指令Flog2(6,tmp2,a,b),故该中间指令Flog2(e,c,tmp1,tmp2)为预定指令。
合并单元105将上述预定指令Flog2(e,c,tmp1,tmp2)及其定值点指令Flog2(8,tmp1,a,b)、Flog2(6,tmp2,a,b)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog2(truth,c,a,b)(本实施例中所述合并指令即为目标指令)。
所述合并指令的源操作数包括所述预定指令Flog2(e,c,tmp1,tmp2)及其定值点指令Flog2(8,tmp1,a,b),Flog2(6,tmp2,a,b)源操作数的并集即a,b,tmp1,tmp2,且不包括所述定值点指令Flog2(8,tmp1,a,b),Flog2(6,tmp2,a,b)的目标操作数tmp1,tmp2,故合并指令的源操作数为a,b;所述合并指令的目标操作数为所述预定指令Flog2(e,c,tmp1,tmp2)的目标操作数c。
所述合并指令Flog2(truth,c,a,b)的逻辑值truth通过数组索引所述预定指令Flog2(e,c,tmp1,tmp2)及其定值点指令Flog2(8,tmp1,a,b)、Flog2(6,tmp2,a,b)的逻辑值获得,具体地为:
将所述定值点指令Flog2(8,tmp1,a,b)、Flog2(6,tmp2,a,b)分别转换为定值点数组:
对于定值点指令Flog2(8,tmp1,a,b)而言,其所对应的定值点数组为A1[a][b]={0,0,0,1}。
对于定值点指令Flog2(6,tmp2,a,b)而言,其所对应的定值点数组为A2[a][b]={0,1,1,0}。
对于预定指令Flog2(e,c,tmp1,tmp2)而言,其所对应的预定数组为A3[tmp1][tmp2]={0,1,1,1}。
建立合并数组A[a][b];所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得;
由上述可知定值点指令Flog2(8,tmp1,a,b)、Flog2(6,tmp2,a,b)的输出分别为tmp1和tmp2,其为预定指令Flog2(e,c,tmp1,tmp2)的输入,则,通过数组索引合并得到合并数组A的过程为:合并数组A[a][b]=A3[tmp1][tmp2]=A3[A1[a][b]][A2[a][b]]。
由上述可知:A1[a][b]={0,0,0,1},A2[a][b]={0,1,1,0},A3[tmp1][tmp2]={0,1,1,1};故对于A[0][0]而言,
A[0][0]=A3[A1[a][b]][A2[a][b]]=A3[A1[0][0]][A2[0][0]]
由上述可知A1[0][0]=0,A2[0][0]=0,则A3[A1[0][0]][A2[0][0]]=A3[0][0],而A3[0][0]=0,所以A[0][0]=0。依此类推:
A[0][1]=A3[A1[0][1]][A2[0][1]]=A3[0][1]=1;
A[1][0]=A3[A1[1][0]][A2[1][0]]=A3[0][1]=1;
A[1][1]=A3[A1[1][1]][A2[1][1]]=A3[1][0]=1;
得到所述合并数组为A[a][b]={0,1,1,1}。将合并数组的元素自右至左组合并以16进制表示,即将1110表示为16进制得到所述合并指令的逻辑值e,即tmth的值为e。因此,本实施例中的目标指令为Flog2(e,c,a,b)。
(3)两条逻辑运算表达式b=a&(a|b),d=(a|b)&(a^b)
本实施例中对两条逻辑运算表达式b=a&(a|b),d=(a|b)&(a^b)合并生成目标指令进行简单的说明。
拆分单元101将逻辑运算指令b=a&(a|b),d=(a|b)&(a^b)拆分成五条单逻辑运算指令:
or tmp1,a,b;
and b1,a,tmp1;
or tmp2,a,b1;
xor tmp3,a,b1;
and d,tmp2,tmp3;
需要注意的是,对于上述拆分得到的第二条指令的目标操作数为b1,而并非b,是由编译器中的识别系统(静态单赋值变量识别SSA)来识别的,其会给每个变量制定唯一的定值点。
转换单元103分别将上述五条单逻辑运算指令转换为具有预定格式的中间指令:
Flog2(e,tmp1,a,b) ①
Flog2(8,b1,a,tmp1) ②
Flog2(e,tmp2,a,b1) ③
Flog2(6,tmp3,a,b1) ④
Flog2(8,d,tmp2,tmp3) ⑤
编译器按顺序分析上述五条中间指令是否为预定指令。对于中间指令Flog2(e,tmp1,a,b)而言,源操作数为a,b,编译器分析发现不存在对源操作数a,b进行赋值的中间指令,即源操作数a,b不具有定值点指令,故该中间指令不是预定指令。
对于中间指令Flog2(8,b1,a,tmp1)而言,其源操作数tmp1具有定值点指令即对源操作数tmp1进行赋值的中间指令Flog2(e,tmp1,a,b),故该中间指令为预定指令。
合并单元105将上述预定指令Flog2(8,b1,a,tmp1)及其定值点指令Flog2(e,tmp1,a,b)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog2(truth1,b1,a,b)(本实施例中所述合并指令并非目标指令),并将其插入到第二条指令之后,即
Flog2(e,tmp1,a,b) ①
Flog2(8,b1,a,tmp1) ②
Flog2(truth1,b1,a,b)
Flog2(e,tmp2,a,b1) ③
Flog2(6,tmp3,a,b1) ④
Flog2(8,d,tmp2,tmp3) ⑤
编译器继续对第三条中间指令Flog2(e,tmp2,a,b1)进行分析,发现其源操作数b1具有定值点指令,即对源操作数b1进行赋值的中间指令Flog2(truth1,b1,a,b)(即对b1进行最近一次赋值的中间指令),故该中间指令Flog2(e,tmp2,a,b1)为预定指令。
合并单元105继续将上述预定指令Flog2(e,tmp2,a,b1)及其定值点指令Flog2(truth1,b1,a,b)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog2(truth2,tmp2,a,b),并将其插入到第三条指令之后,即
Flog2(e,tmp1,a,b) ①
Flog2(8,b1,a,tmp1) ②
Flog2(truth1,b1,a,b)
Flog2(e,tmp2,a,b1) ③
Flog2(truth2,tmp2,a,b)
Flog2(6,tmp3,a,b1) ④
Flog2(8,d,tmp2,tmp3) ⑤
编译器继续对第四条中间指令Flog2(6,tmp3,a,b1)进行分析,发现其源操作数b1具有定值点指令,即对源操作数b1进行赋值的中间指令Flog2(truth1,b1,a,b),故该中间指令Flog2(6,tmp3,a,b1)为预定指令。
合并单元105继续将上述预定指令Flog2(6,tmp3,a,b1)及其定值点指令Flog2(truth1,b1,a,b)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog2(truth3,tmp3,a,b),并将其插入到第四条指令之后,即
Flog2(e,tmp1,a,b) ①
Flog2(8,b1,a,tmp1) ②
Flog2(truth1,b1,a,b)
Flog2(e,tmp2,a,b1) ③
Flog2(truth2,tmp2,a,b)
Flog2(6,tmp3,a,b1) ④
Flog2(truth3,tmp3,a,b)
Flog2(8,d,tmp2,tmp3) ⑤
编译器继续对第五条中间指令Flog2(8,d,tmp2,tmp3)进行分析,发现其源操作数tmp2、tmp3均具有定值点指令,即对源操作数tmp2进行赋值的中间指令Flog2(truth2,tmp2,a,b)及对源操作数tmp3进行赋值的中间指令Flog2(truth3,tmp3,a,b),故该中间指令Flog2(8,d,tmp2,tmp3)为预定指令。
合并单元105继续将上述预定指令Flog2(8,d,tmp2,tmp3)及其定值点指令Flog2(truth2,tmp2,a,b)、Flog2(truth3,tmp3,a,b)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog2(truth,d,a,b),并将其插入到第五条指令之后,即
Flog2(e,tmp1,a,b) ①
Flog2(8,b1,a,tmp1) ②
Flog2(truth1,b1,a,b)
Flog2(e,tmp2,a,b1) ③
Flog2(truth2,tmp2,a,b)
Flog2(6,tmp3,a,b1) ④
Flog2(truth3,tmp3,a,b)
Flog2(8,d,tmp2,tmp3) ⑤
Flog2(truth,d,a,b)
该指令即为最终的目标指令。
以下对上述合并指令逻辑值的获得进行一一说明。
所述合并指令Flog2(truth1,b1,a,b)的逻辑值truth1通过数组索引所述预定指令Flog2(8,b1,a,tmp1)及其定值点指令Flog2(e,tmp1,a,b)的逻辑值获得,具体地为:
对于定值点指令Flog2(e,tmp1,a,b)而言,其所对应的定值点数组为A1[a][b]={0,1,1,1}。
对于预定指令Flog2(8,b1,a,tmp1)而言,其所对应的预定数组为A2[a][tmp1]={0,0,0,1}。
建立合并数组A1[a][b];所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得。
由上述可知定值点指令Flog2(e,tmp1,a,b)的输出为tmp1,其为预定指令Flog2(8,b1,a,tmp1)的输入,则通过数组索引合并得到合并数组A1的过程为:数组A1[a][b]=A2[a][tmp1]=A2[a][A1[a][b]]。
由上述可知:A1[a][b]={0,1,1,1},A2[a][tmp1]={0,0,0,1},故对于A1[0][0]而言,A1[0][0]=A2[a][tmp1]=A2[a][A1[a][b]]=A2[0][A1[0][0]]
由上述可知A1[0][0]=0,则A2[0][A1[0][0]]=A2[0][0],而A2[0][0]=0,所以A1[0][0]=0。依此类推:
A1[0][1]=A2[0][A1[0][1]]=A2[0][1]=0;
A1[1][0]=A2[1][A1[1][0]]=A2[1][1]=1;
A1[1][1]=A2[1][A1[1][1]]=A2[1][1]=1;
得到所述合并数组为A1[a][b]={0,0,1,1}。将合并数组的元素自右至左组合并以16进制表示,即将1100表示为16进制得到所述合并指令的逻辑值c,即truth1的值为c。
所述合并指令Flog2(truth2,tmp2,a,b)的逻辑值truth2通过数组索引所述预定指令Flog2(e,tmp2,a,b1)及其定值点指令Flog2(c,b1,a,b)的逻辑值获得,具体地为:
对于定值点指令Flog2(c,b1,a,b)而言,其所对应的定值点数组为A3[a][b]={0,0,1,1}。
对于预定指令Flog2(e,tmp2,a,b1)而言,其所对应的预定数组为A4[a][b1]={0,1,1,1}。
建立合并数组A2[a][b],所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得。
由上述可知定值点指令Flog2(c,b1,a,b)的输出为b1,其为预定指令Flog2(e,tmp2,a,b1)的输入,则通过数组索引合并得到合并数组A2的过程为:数组A2[a][b]=A4[a][b1]=A4[a][A3[a][b]]。
由上述可知:A3[a][b]={0,0,1,1},A4[a][b1]={0,1,1,1},故对于A2[0][0]而言,A2[0][0]=A4[a][b1]=A4[a][A3[a][b]]=A4[0][A3[0][0]]
由上述可知A3[0][0]=0,则A4[0][A3[0][0]]=A4[0][0],而A4[0][0]=0,所以A2[0][0]=0。依此类推:
A2[0][1]=A4[0][A3[0][1]]=A4[0][0]=0;
A2[1][0]=A4[1][A3[1][0]]=A4[1][1]=1;
A2[1][1]=A4[1][A3[1][1]]=A4[1][1]=1;
得到所述合并数组A2[a][b]={0,0,1,1},将合并数组的元素自右至左组合并以16进制表示,即将1100表示为16进制得到所述合并指令的逻辑值c,即truth2的值为c。
所述合并指令Flog2(truth3,tmp3,a,b)的逻辑值truth3通过数组索引所述预定指令Flog2(6,tmp3,a,b1)及其定值点指令Flog2(c,b1,a,b)的逻辑值获得,具体地为:
对于定值点指令Flog2(c,b1,a,b)而言,其所对应的定值点数组为A5[a][b]={0,0,1,1}。
对于预定指令Flog2(6,tmp3,a,b1)而言,其所对应的预定数组为A6[a][b1]={0,1,1,0}。
建立合并数组As[a][b],所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得。
由上述可知定值点指令Flog2(c,b1,a,b)的输出为b1,其为预定指令Flog2(6,tmp3,a,b1)的输入,则通过数组索引合并得到合并数组A3的过程为:数组A3[a][b]=A6[a][b1]=A6[a][A5[a][b]]。
由上述可知:A5[a][b]={0,0,1,1},A6[a][b1]={0,1,1,0},故对于A3[0][0]而言,A3[0][0]=A6[a][b1]=A6[a][A5[a][b]]=A6[0][A5[0][0]]
由上述可知A5[0][0]=0,则A6[0][A5[0][0]]=A6[0][0],而A6[0][0]=0,所以A3[0][0]=0。依此类推,
A3[0][1]=A6[0][A5[0][1]]=A6[0][0]=0;
A3[1][0]=A6[1][A5[1][0]]=A6[1][1]=0;
A3[1][1]=A6[1][A5[1][1]]=A6[1][1]=0;
得到所述合并数组为A3[a][b]={0,0,0,0},将合并数组的元素自右至左组合并以16进制表示,得到所述合并指令的逻辑值0,即truth3的值为0。
所述合并指令Flog2(truth,c,a,b)的逻辑值truth通过数组索引所述预定指令Flog2(8,d,tmp2,tmp3)及其定值点指令Flog2(0,tmp3,a,b),Flog2(c,tmp2,a,b)的逻辑值获得,具体地为:
对于定值点指令Flog2(c,tmp2,a,b)而言,其所对应的定值点数组为A7[a][b]={0,0,1,1}。
对于定值点指令Flog2(0,tmp3,a,b)而言,其所对应的定值点数组为A8[a][b]={0,0,0,0}。
对于预定指令Flog2(8,d,tmp2,tmp3)而言,其所对应的预定数组为A9[tmp2][tmp3]={0,0,0,1}。
建立合并数组A[a][b],所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得。
由上述可知定值点指令Flog2(c,tmp2,a,b),Flog2(0,tmp3,a,b)的输出tmp2,tmp3,为预定指令Flog2(8,d,tmp2,tmp3)的输入,则通过数组索引合并得到合并数组A 的过程为:合并数组A[a][b]=A9[tmp2][tmp3]=A9[A7[a][b]][A8[a][b]]。
由上述可知:A7[a][b]={0,0,1,1},A8[a][b]={0,0,0,0},A9[tmp2][tmp3]={0,0,0,1}。
故对于A[0][0]而言,A[0][0]=A9[tmp2][tmp3]=A9[A7[a][b]][A8[a][b]]=A9[A7[0][0]][A8[0][0]]
由上述可知A7[0][0]=0,A8[0][0]=0则A9[A7[0][0]][A8[0][0]]=A9[0][0],而A9[0][0]=0,所以A[0][0]=0。依此类推,
A[0][1]=A9[A7[0][1]][A8[0][1]]=A9[0][0]=0;
A[1][0]=A9[A7[1][0]][A8[1][0]]=A9[1][1]=1;
A[1][1]=A9[A7[1][1]][A8[1][1]]=A9[1][1]=1;
得到所述合并数组为A[a][b]={0,0,1,1},将合并数组的元素自右至左组合并以16进制表示,得到所述合并指令的逻辑值c,即truth的值为c。
至此,得到本实施例中的合并指令也即目标指令为Flog2(c,d,a,b),通过上述指令翻译装置,逻辑运算指令被翻译为一条目标指令,处理器进行逻辑运算时,只需要执行一条目标指令即可获得逻辑运算表达式的结果。
此外,需要说明的是,在对上述的中间指令进行合并完成直至生成目标指令后,编译器暂时不会将所述中间指令删除,而是将新生成的目标指令插入到中间指令堆之后,接下来以函数为单位,分析定值引用链进行无用代码的删除。而在代码生成阶段,编译器会将上述实施例中的目标指令编译成二进制代码,以(1)中生成的目标指令Flog2(4,c,a,b)为例,编译器会将其编译成目标代码即二进制代码,所述二进制代码包括操作符(如上述的Flog2)对应的二进制代码、逻辑值对应的二进制代码(如上述的4)、源操作数对应的二进制代码(如上述的a,b),目标操作数对应的二进制代码(如上述的c),处理器对所述二进制代码进行识别进而控制硬件进行相应的操作(即执行目标指令),得到c=a&(a^b)的值。
有关处理器如何控制硬件进行操作,执行所述目标指令将在指令处理装置中进行详细的说明。
实施例二:
为了能够对本发明的指令翻译装置更好的理解,仍然参考图1指令翻译装置的结构示意图,以参与逻辑表达式的操作数为3个,逻辑表达式分别为下述方式,对本实施例的指令翻译装置进行详细说明。
(1)逻辑表达式为d=(a&b)|c
本实施例中,拆分单元101及转换单元103对于逻辑运算表达式d=(a&b)|c(也即逻辑运算指令)进行拆分和转换与实施例一中类似,故本实施例中不再详细赘述,即对于逻辑运算表达式d=(a&b)|c拆分单元101将其拆分成两条单逻辑运算指令:and tmp,a,b;or d,,tmp,c;转换单元103将上述单逻辑运算指令转换成具有预定格式的两条中间指令Flog2(8,tmp,a,b),Flog2(e,d,tmp,c)
合并单元105,用于合并预定指令及其定值点指令生成具有所述预定格式的合并指令。本实施例中,对于由转换单元103获得的中间指令Flog2(8,tmp,a,b)和Flog2(e,d,tmp,c)编译器首先会按顺序分析中间指令Flog2(8,tmp,a,b)是否为预定指令,对于中间指令Flog2(8,tmp,a,b)而言,源操作数为a,b,编译器分析发现不存在对源操作数为a,b进行赋值的中间指令(即对中间指令Flog2(8,tmp,a,b)之前的指令进行分析,本实施例中并未写出,实际过程中,应为对a和b进行赋值的指令,例如:a=1,b=0),即源操作数a,b不具有定值点指令,故该中间指令不是预定指令。
编译器继续对中间指令Flog2(e,d,tmp,,c)进行分析,发现其源操作数tmp具有定值点指令,即对源操作数tmp进行赋值的中间指令Flog2(8,tmp,a,b),故该中间指令Flog2(e,d,tmp,,c)为预定指令,而中间指令Flog2(8,tmp,a,b)为对该预定指令Flog2(e,d,tmp,c)的源操作数tmp进行赋值的中间指令,即定值点指令。
合并单元105将上述预定指令Flog2(e,d,tmp,c)及其定值点指令Flog2(8,tmp,a,b)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog3(truth,d,a,b,c)。所述合并指令Flog3(truth,d,a,b,c)的逻辑值truth通过数组索引所述预定指令Flog2(e,d,tmp,c)及其定值点指令Flog2(8,tmp,a,b)的逻辑值获得(关于合并指令的逻辑值truth如何获得将在下面详细介绍),所述合并指令的源操作数包括所述预定指令Flog2(e,d,tmp,c)及其定值点指令的Flog2(8,tmp,a,b)源操作数的并集即a,b,tmp,c且不包括所述定值点指令Flog2(8,tmp,a,b)的目标操作数tmp,故合并指令的源操作数为a,b,c;所述合并指令的目标操作数为所述预定指令Flog2(e,d,tmp,c)的目标操作数d。
对上述预定指令和定值点指令进行合并生成合并指令后,若没有再可以与其合并的中间指令,即不存在预定指令,则将所述生成的合并指令作为目标指令输出,否则将所述生成的合并指令仍然作为中间指令,与其他中间指令继续合并。
本实施例中,逻辑运算指令d=(a&b)|c由转换单元105转换获得定值点指令Flog2(8,tmp,a,b)和预定指令Flog2(e,d,tmp,c),因此没有可以再进行合并的中间指令,故合并指令Flog3(truth,d,a,b,c)即为目标指令。
需要注意的是,作为中间指令的操作符Flog2其并没有具体的含义,而对于目标指令Flog3(truth,d,a,b,c)的操作符Flog3,其含义为根据源操作数a,b,c来选择逻辑值truth中的一个值赋给目标操作数d,也即求逻辑运算表达式的结果。
以下对合并指令Flog3(truth,d,a,b,c)(即目标指令)中逻辑值truth的获得进行说明。
对于将预定指令及定值点指令分别转换为与其对应的预定数组及定值点数组与实施例一中相同,故本实施例中只给出与预定指令及定值点指令所对应预定数组及定值点数组,对其获得过程不再赘述。
对于定值点指令Flog2(8,tmp,a,b)而言,其所对应的定值点数组为A1[a][b]={0,0,0,1}。
对于预定指令Flog2(e,d,tmp,c)而言,其所对应的预定数组为A2[tmp][c]={0,1,1,1}。
建立合并数组A[a][b][c],所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得。
由上述可知定值点指令Flog2(8,tmp,a,b)的输出为tmp,其为预定指令Flog2(e,d,tmp,c)的输入,则通过数组索引合并得到合并数组A的过程为:合并数组A[a][b][c]=A2[tmp][c]=A2[A1[a][b]][c]
由上述可知:A1[a][b]={0,0,0,1},A2[tmp][c]={0,1,1,1},对于A[0][0][0]而言,A[0][0][0]=A2[A1[a][b]][c]=A2[A1[0][0]][0]由上述可以知道A1[0][0]=0,则A2[A1[0][0]][0]=A2[0][0],而A2[0][0]=0,所以A[0][0][0]=0。依此类推:
A[0][0][1]=A2[A1[a][b]][c]=A2[A1[0][0]][1]=A2[0][1]=1;
A[0][1][0]=A2[A1[a][b]][c]=A2[A1[0][1]][0]=A2[0][0]=0;
A[0][1][1]=A2[A1[a][b]][c]=A2[A1[0][1]][1]=A2[0][1]=1;
A[1][0][0]=A2[A1[a][b]][c]=A2[A1[1][0]][0]=A2[0][0]=0;
A[1][0][1]=A2[A1[a][b]][c]=A2[A1[1][0]][1]=A2[0][1]=1;
A[1][1][0]=A2[A1[a][b]][c]=A2[A1[1][1]][0]=A2[1][0]=1;
A[1][1][1]=A2[A1[a][b]][c]=A2[A1[1][1]][1]=A2[1][1]=1;
得到所述合并数组为A[a][b][c]={0,1,0,1,0,1,1,1},将合并数组的元素自右至左组合并以16进制表示,即将11101010表示为16进制得到所述合并指令的逻辑值ea。至此,通过对预定数组及定值点数组的元素进行索引(即预定数组及定值数组的逻辑值进行索引)获得了所述合并指令的逻辑值,也就获得了所述合并指令Flog3(ea,d,a,b,c),本实施例中所述合并指令即为目标指令。
(2)逻辑运算表达式为d=(a&b)|(a^c)&b
本实施例中对逻辑运算表达式d=(a&b)|(a^c)&b的目标指令的生成进行简单的说明。
拆分单元101将逻辑运算指令d=(a&b)|(a^c)&b拆分成四条单逻辑运算指令:
and tmp1,a,b;
xor tmp2,a,c;
or tmp3,tmp1,tmp2;
and d,tmp3,b;
转换单元103分别对上述四条单逻辑运算指令转换为具有预定格式的中间指令:
Flog2(8,tmp1,a,b) ①
Flog2(6,tmp2,a,c) ②
Flog2(e,tmp3,tmp1,tmp2) ③
Flog2(8,d,tmp3,b) ④
编译器按顺序分析上述四条中间指令是否为预定指令。对于中间指令Flog2(8,tmp1,a,b)而言,源操作数为a,b,编译器分析发现不存在对源操作数为a,b进行赋值的中间指令,即源操作数a,b不具有定值点指令,故该中间指令不是预定指令。
同理,对于中间指令Flog2(6,tmp2,a,c)而言,其源操作数a,c也不具有定值点指令,故其也不是预定指令。
编译器继续对中间指令Flog2(e,tmp3,tmp1,tmp2)进行分析,发现其源操作数tmp1具有定值点指令,即对源操作数tmp1进行赋值的中间指令Flog2(8,tmp1,a,b),其源操作数tmp2也具有定值点指令,即对源操作数tmp2进行赋值的中间指令Flog2(6,tmp2,a,c),故该中间指令Flog2(e,tmp3,tmp1,tmp2)为预定指令。
合并单元105将上述预定指令Flog2(e,tmp3,tmp1,tmp2)及其定值点指令Flog2(8,tmp1,a,b),Flog2(6,tmp2,a,c)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog2(truth1,tmp3,a,b,c)并将其插入到第三条指令之后,即
Flog2(8,tmp1,a,b) ①
Flog2(6,tmp2,a,c) ②
Flog2(e,tmp3,tmp1,tmp2) ③
Flog3(truth1,tmp3,a,b,c)
Flog2(8,d,tmp3,b) ④
编译器继续对第四条中间指令Flog2(8,d,tmp3,b)进行分析,发现其源操作数tmp3具有定值点指令,即对源操作数tmp3进行赋值的中间指令Flog3(truth1,tmp3,a,b,c),故该中间指令Flog2(8,d,tmp3,b)为预定指令。
合并单元105继续将上述预定指令Flog2(8,d,tmp3,b)及其定值点指令Flog3(truth1,tmp3,a,b,c)进行合并,生成与上述中间指令的预定格式相同的合并指令Flog3(truth,d,a,b,c)(即目标指令)。并将其插入到第四条指令之后。
以下对上述合并指令逻辑值的获得进行一一说明。
所述合并指令Flog3(truth1,tmp3,a,b,c)的逻辑值truth1通过数组索引所述预定指令Flog2(e,tmp3,tmp1,tmp2)及其定值点指令Flog2(8,tmp1,a,b)、Flog2(6,tmp2,a,c)的逻辑值获得,具体地为:
对于定值点指令Flog2(8,tmp1,a,b)而言,其所对应的定值点数组为A1[a][b]={0,0,0,1}。
对于定值点指令Flog2(6,tmp2,a,c)而言,其所对应的定值点数组为A2[a][c]={0,1,1,0}。
对于预定指令Flog2(e,tmp3,tmp1,tmp2)而言,其所对应的预定数组为A3[tmp1][tmp2]={0,1,1,1}。
建立合并数组A1[a][b][c],所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得。
由上述可知定值点指令Flog2(8,tmp1,a,b),Flog2(6,tmp2,a,c)的输出分别为tmp1和tmp2,其为预定指令Flog2(e,tmp3,tmp1,tmp2)的输入,则通过数组索引合并得到合并数组A1的过程为:合并数组A1[a][b][c]=A3[tmp 1][tmp2]=A3[A1[a][b]][A2[a][c]]。
由上述可知:A1[a][b]={0,0,0,1},A2[a][c]={0,1,1,0},A3[tmp1][tmp2]={0,1,1,1};故对于A1[0][0][0]而言,
A1[0][0][0]=A3[A1[a][b]][A2[a][c]]=A3[A1[0][0]][A2[0][0]]
由上述可知A1[0][0]=0,A2[0][0]=0,则A3[A1[0][0]][A2[0][0]]=A3[0][0],而A3[0][0]=0,所以A1[0][0][0]=0。依此类推:
A1[0][0][1]=A3[A1[a][b]][A2[a][c]]=A3[A1[0][0]][A2[0][1]]=A3[0][1]=1;
A1[0][1][0]=A3[A1[a][b]][A2[a][c]]=A3[A1[0][1]][A2[0][0]]=A3[0][0]=0;
A1[0][1][1]=A3[A1[a][b]][A2[a][c]]=A3[A1[0][1]][A2[0][1]]=A3[0][1]=1;
A1[1][0][0]=A3[A1[a][b]][A2[a][c]]=A3[A1[1][0]][A2[1][0]]=A3[0][1]=1;
A1[1][0][1]=A3[A1[a][b]][A2[a][c]]=A3[A1[1][0]][A2[1][1]]=A3[0][0]=0;
A1[1][1][0]=A3[A1[a][b]][A2[a][c]]=A3[A1[1][1]][A2[1][0]]=A3[1][1]=1;
A1[1][1][1]=A3[A1[a][b]][A2[a][c]]=A3[A1[1][1]][A2[1][1]]=A3[1][0]=1;
得到所述合并数组为A1[a][b][c]={0,1,0,1,1,0,1,1},将合并数组的元素自右至左组合并以16进制表示,即将11011010表示为16进制得到所述合并指令的逻辑值da,即truth1的值为da。
所述合并指令Flog3(truth,d,a,b,c)的逻辑值truth通过数组索引所述预定指令Flog2(8,d,tmp3,b)及其定值点指令Flog3(da,tmp3,a,b,c)的逻辑值获得,具体地为:
对于定值点指令Flog3(da,tmp3,a,b,c)而言,其所对应的定值点数组为A4[a][b][c]={0,1,0,1,1,0,1,1}。
对于预定指令Flog2(8,d,tmp3,b)而言,其所对应的预定数组为A5[tmp3][b]={0,0,0,1}。
建立合并数组A[a][b][c],所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及其定值点数组的元素获得,
由上述可知定值点指令Flog3(da,tmp3,a,b,c)的输出tmp3为预定指令Flog2(8,d,tmp3,b)的输入,则通过数组索引合并得到合并数组A的过程为:合并数组A[a][b][c]=A5[tmp3][b]=A5[A4[a][b][c]][b]。
由上述可知:A4[a][b][c]={0,1,0,1,1,0,1,1},A5[tmp3][b]={0,0,0,1};故对于A[0][0][0]而言,A[0][0][0]=A5[A4[a][b][c]][b]=A5[A4[0][0][0]][0]
由上述可知A4[0][0][0]=0,则A5[A4[0][0][0]][0]=A5[0][0],而A5[0][0]=0,所以A[0][0][0]=0。依此类推,
A[0][0][1]=A5[A4[a][b][c]][b]=A5[A4[0][0][1]][0]=A5[1][1]=1;
A[0][1][0]=A5[A4[a][b][c]][b]=A5[A4[0][1][0]][1]=A5[0][0]=0;
A[0][1][1]=A5[A4[a][b][c]][b]=A5[A4[0][1][1]][1]=A5[1][1]=1;
A[1][0][0]=A5[A4[a][b][c]][b]=A5[A4[1][0][0]][0]=A5[1][0]=0;
A[1][0][1]=A5[A4[a][b][c]][b]=A5[A4[1][0][1]][0]=A5[0][1]=0;
A[1][1][0]=A5[A4[a][b][c]][b]=A5[A4[1][1][0]][1]=A5[1][0]=0;
A[1][1][1]=A5[A4[a][b][c]][b]=A5[A4[1][1][1]][1]=A5[1][1]=1;
得到所述合并数组为A[a][b][c]={0,1,0,1,0,0,0,1}。将合并数组的元素自右至左组合并以16进制表示,即将10001010表示为16进制得到所述合并指令的逻辑值8a,即truth的值为8a。故所述目标指令为Flog3(8a,d,a,b,c)。
实施例三
本发明的具体实施方式还提供一种指令处理装置,参考图5,图5为本发明具体实施例的指令处理装置的结构示意图,所述指令处理装置包括:指令翻译装置102,用于生成目标指令,为上述的指令翻译装置;解析单元104,用于解析所述目标指令,获取所述目标指令的逻辑值、源操作数和目标操作数;多路选择单元106,包括多路数据输入端、多个选择输入端和输出端,所述多路数据输入端分别输入所述目标指令的逻辑值中与所述目标指令的源操作数取值对应的值,所述多个选择输入端分别输入所述目标指令的源操作数;所述多路选择单元用于根据所述多个选择输入端的值选择其中一路数据输入端的值,输出至所述输出端以赋给所述目标操作数。
本实施例以实施例二中指令翻译装置102生成的三操作数的逻辑运算d=(a&b)|c的目标指令Flog3(ea,d,a,b,c)为例对本实施例的指令处理装置进行相应的说明。
对于由指令翻译装置102生成的目标指令Flog3(ea,d,a,b,c),编译器会将其转换为目标代码并存储在程序存储器中,解析单元104从程序存储器中读出目标指令Flog3(ea,d,a,b,c)所对应的二进制代码,处理器根据指令集中对该指令的定义,首先,取出与目标指令的源操作数取值所对应的逻辑值ea,本实施例中为11101010,同时找到储存于寄存器中源操作数a,b,c的值,然后将逻辑值11101010这8个值送到多路选择器的多路数据输入端。本实施例中由于目标指令的源操作数为3个,因此其逻辑值的状态为8种(即逻辑值二进制的状态),所以其多路选择器可以为一8选1的多路选择器,如图6所示,包括8路数据输入端i_truth[7]至i_truth[0],3个选择输入端s2、s1、s0和输出端O。
仍然参考图6,将逻辑值11101010这8个值分别输入至多路选择器的8路数据输入端i_truth[7]至i_truth[0],即,i_truth[7]输入1,i_truth[6]输入1,i_truth[5]输入1,i_truth[4]输入0,i_truth[3]输入1,i_truth[2]输入0,i_truth[1]输入1,i_truth[0]输入0;同时将源操作数a,b,c分别输入至多路选择器的3个选择输入端s2、s1、s0,即s2输入a、s1输入b、s0输入c。多路选择器根据3个选择输入端输入的a,b,c的值,选择8路数据输入端中的一路输入(与源操作数a,b,c的取值对应的逻辑值)值输出至输出端O,输出端O的值会被赋给目标操作数d。
例如,本实施例中目标指令的源操作数为a=1,b=1,c=0(即参与逻辑运算d=(a&b)|c的操作数)时,多路选择器的输出端O会输出数据输入端i_truth[6]的值即1,并赋给目标操作数d。
对于实施例一,由于目标指令的源操作数为2个,因此其逻辑值的状态为4种,所以其多路选择器可为一4选1的多路选择器。在其他实施例中,目标指令的源操作数也可以多于3个,例如,对于源操作数为4个的目标指令,其对应的逻辑值的状态有16种,因此,其多路选择器可为一16选1的多路选择器。对于源操作数为n个的目标指令,对应的逻辑值的状态有2n种,则选择2n选1的多路选择器。
需要注意的是,为了能够清楚地表达本发明的宗旨,上述实施例中仅以目标指令中的源操作数(即参与逻辑运算的操作数)的1bit位为例来说明的,实际应用中,由于处理器处理位数的不同,目标指令的源操作数可能是8位、16位、32位、64位或更多。现仍以3操作数的逻辑运算表达式d=(a&b)|c为例,目标指令的源操作数为32位来说明本实施例的指令处理装置。若
源操作数a的二进制代码为01001011101101000100110110110001
源操作数b的二进制代码为10010110111101001001010101000001
源操作数c的二进制代码为10101010010101011111111100000001
对于由指令翻译装置102生成的目标指令Flog3(ea,d,a,b,c),编译器将其转换成目标代码后,解析单元104所完成的功能与上述相同,此处不再赘述。处理器根据指令集中对该指令的定义,取出逻辑值ea,本实施例中为11101010,同时找到储存于寄存器中的a、b、c的值,此时a、b、c均为32位的二进制代码。本领域技术人员知晓,对于32位的二进制代码进行逻辑操作时,是按位进行逻辑运算的。但是不管源操作数的位数是32为还是64位,对于3操作数的逻辑运算来说,其逻辑值是唯一的,因此,处理器会将逻辑值11101010这8个值分别送入32个8选1的多路选择器的多路数据输入端,如图7所示,图中1~32分别表示第1~32个8选1的多路选择器。每个多路选择器均具有相同的结构。处理器将逻辑值11101010这8个值分别输入至1~32个8选1的多路选择器的8路数据输入端i_truth[7]至i_truth[0],即1~32个8选1的多路选择器的i_truth[7]均输入1,i_truth[6]均输入1,i_truth[5]均输入1,i_truth[4]均输入0,i_truth[3]均输入1,i_truth[2]均输入0,i_truth[1]均输入1,i_truth[0]均输入0。
将32位二进制表示的a、b、c的每一位由低到高按照a、b、c的顺序分别输入至1~32个8选1的多路选择器的3个选择输入端s2、s1、s0,(参见上述a、b、c的二进制代码表示)即,多路选择器1的s2、s1、s0输入1,1,1,多路选择器2的s2、s1、s0输入0,0,0;多路选择器3的s2、s1、s0输入0,0,0;多路选择器4的s2、s1、s0输入0,0,0;依此类推,......;多路选择器30的s2、s1、s0输入0,0,1;多路选择器31的s2、s1、s0输入的1,0,0;多路选择器32的s2、s1、s0输入0,1,1。
8选1的多路选择器1~32分别根据3个选择输入端输入的a、b、c的每一位的二进制值,分别选择8路数据输入端中的一路输入(与a、b、c的每一位的组合对应的逻辑值中的一个值)值输出至输出端O1~O32并赋给相应的目标操作数。
例如,对于上述的目标指令的源操作数a,b,c二进制代码而言,
多路选择器1的输出端O1会输出数据输入端i_truth[7]的值即1;
多路选择器2的输出端O2会输出数据输入端i_truth[0]的值即0;
多路选择器3的输出端O3会输出数据输入端i_truth[0]的值即0;
.....;
多路选择器30的输出端O30会输出数据输入端i_truth[1]的值即1;
多路选择器31的输出端O31会输出数据输入端i_truth[4]的值即0;
多路选择器32的输出端O32会输出数据输入端i_truth[3]的值即1;
最终得到逻辑运算d=(a&b)|c(即目标指令Flog3(ea,d,a,b,c)的目标操作数d)的结果为10101010111101011111111100000001。
对于实施例一中的二个源操作数而言,若处理器为32位,则需要32个4选1的多路选择器,若处理器为64位,则需要64个4选1的多路选择器。而对于本实施例二中的三个源操作数而言,若处理器为64位,则需要64个8选1的多路选择器。具体采用多少个多路选择器,应该根据源操作数的位数来决定。
本发明具体实施方式还提供一种包括上述指令处理装置的处理器,用于执行上述指令翻译装置生成的目标指令,所述处理器可以是计算机的中央处理器(CPU),也可以是微控制器(MCU)及其他可用于执行指令的装置。
本发明的具体实施方式还提供一种对应上述指令翻译装置的指令翻译方法,包括如下步骤:
将逻辑运算指令拆分为多条单逻辑运算指令,其中,前一条单逻辑运算指令的目标操作数为后一条单逻辑运算指令的源操作数;
将所述单逻辑运算指令转换成具有预定格式的中间指令,所述预定格式包含逻辑值、源操作数和目标操作数,所述中间指令的逻辑值为利用所述单逻辑运算指令的源操作数生成的真值表中的值组合,所述中间指令的源操作数为所述单逻辑运算指令的源操作数,所述中间指令的目标操作数为所述单逻辑运算指令的目标操作数;
合并前后两条中间指令生成具有所述预定格式的合并指令,所述合并指令的逻辑值由所述合并的两条中间指令的逻辑值生成,所述合并指令的源操作数包括所述合并的前一条中间指令的源操作数和后一条中间指令与前一条中间指令的源操作数、目标操作数不同的源操作数,所述合并指令的目标操作数为所述合并的后一条中间指令的目标操作数;
若所述合并的后一条中间指令不是最后一条中间指令则将所述生成的合并指令作为可与后一条中间指令进行合并的中间指令,否则将所述生成的合并指令作为目标指令输出。
综上所述,本发明的具体实施例所提供的指令翻译装置和方法、指令处理装置和处理器,将单逻辑运算指令转换成具有预定格式的中间指令,通过对中间指令的合并,最终将逻辑运算表达式转换为一条目标指令,使得处理器只需执行一条指令即可完成复杂的逻辑运算,与现有技术将多逻辑运算表达式翻译成多条指令,处理器需要执行多条指令相比,加快了处理器处理逻辑运算的效率,提高了处理器的应用性能,有效的降低了处理器的功耗。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (12)
1.一种指令翻译装置,其特征在于,包括:
拆分单元,用于将逻辑运算指令拆分为多条单逻辑运算指令;
转换单元,用于将单逻辑运算指令转换成具有预定格式的中间指令,所述预定格式包含逻辑值、源操作数和目标操作数,所述中间指令的源操作数为所述单逻辑运算指令的源操作数,所述中间指令的目标操作数为所述单逻辑运算指令的目标操作数,所述中间指令的逻辑值为对所述单逻辑运算指令的源操作数进行单逻辑运算生成的真值表中的值组合;
合并单元,用于合并预定指令及其定值点指令生成具有所述预定格式的合并指令;其中,所述预定指令是指源操作数具有定值点指令的中间指令,所述预定指令的定值点指令是指对该预定指令的源操作数进行赋值的中间指令;所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得,所述合并指令的源操作数包括所述预定指令及其定值点指令的源操作数的并集,且不包括所述定值点指令的目标操作数;所述合并指令的目标操作数为所述预定指令的目标操作数;
若没有可合并的中间指令则将所述生成的合并指令作为目标指令输出,否则将所述生成的合并指令作为中间指令。
2.如权利要求1所述的指令翻译装置,其特征在于,所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得包括:
将所述定值点指令转换成定值点数组,所述定值点数组的下标为所述定值点指令的源操作数,所述定值点数组的元素分别为所述定值点指令的逻辑值中与所述定值点数组的下标取值对应的值;
将所述预定指令转换成预定数组,所述预定数组的下标为所述预定指令的源操作数,所述预定数组的元素分别为所述预定指令的逻辑值中与所述预定数组的下标取值对应的值;
建立合并数组,所述合并数组的下标为所述合并指令的源操作数,所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及定值点数组的元素获得;
将所述合并数组的元素组合成所述合并指令的逻辑值。
3.如权利要求1所述的指令翻译装置,其特征在于,所述目标指令为二进制码。
4.一种指令处理装置,其特征在于,包括:
权利要求1至3任一项所述的指令翻译装置,用于生成目标指令;
解析单元,用于解析所述目标指令,获取所述目标指令的逻辑值、源操作数和目标操作数;
多路选择单元,包括多路数据输入端、多个选择输入端和输出端,所述多路数据输入端分别输入所述目标指令的逻辑值中与所述目标指令的源操作数取值对应的值,所述多个选择输入端分别输入所述目标指令的源操作数;所述多路选择单元用于根据所述多个选择输入端的值选择其中一路数据输入端的值,输出至所述输出端以赋给所述目标操作数。
5.如权利要求4所述的指令处理装置,其特征在于,所述目标指令的源操作数为二个,所述多路选择单元包括4选1多路选择器。
6.如权利要求4所述的指令处理装置,其特征在于,所述目标指令的源操作数为三个,所述多路选择单元包括8选1多路选择器。
7.如权利要求4所述的指令处理装置,其特征在于,所述目标指令的源操作数为四个,所述多路选择单元包括16选1多路选择器。
8.如权利要求4至7任一项所述的指令处理装置,其特征在于,所述多路选择单元包括多个多路选择器,所述多路选择器的个数与所述目标指令的源操作数的位数相同。
9.一种包括权利要求4至8任一项所述的指令处理装置的处理器。
10.一种指令翻译方法,其特征在于,包括如下步骤:
将逻辑运算指令拆分为多条单逻辑运算指令;
将单逻辑运算指令转换成具有预定格式的中间指令,所述预定格式包含逻辑值、源操作数和目标操作数,所述中间指令的源操作数为所述单逻辑运算指令的源操作数,所述中间指令的目标操作数为所述单逻辑运算指令的目标操作数,所述中间指令的逻辑值为对所述单逻辑运算指令的源操作数进行单逻辑运算生成的真值表中的值组合;
合并预定指令及其定值点指令生成具有所述预定格式的合并指令;其中,所述预定指令是指源操作数具有定值点指令的中间指令,所述预定指令的定值点指令是指对该预定指令的源操作数进行赋值的中间指令;
所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得,所述合并指令的源操作数包括所述预定指令及其定值点指令的源操作数的并集,且不包括所述定值点指令的目标操作数;所述合并指令的目标操作数为所述预定指令的目标操作数;
若没有可合并的中间指令则将所述生成的合并指令作为目标指令输出,否则将所述生成的合并指令作为中间指令。
11.如权利要求10所述的指令翻译方法,其特征在于,所述合并指令的逻辑值通过数组索引所述预定指令及其定值点指令的逻辑值获得包括:
将所述定值点指令转换成定值点数组,所述定值点数组的下标为所述定值点指令的源操作数,所述定值点数组的元素分别为所述定值点指令的逻辑值中与所述定值点数组的下标取值对应的值;
将所述预定指令转换成预定数组,所述预定数组的下标为所述预定指令的源操作数,所述预定数组的元素分别为所述预定指令的逻辑值中与所述预定数组的下标取值对应的值;
建立合并数组,所述合并数组的下标为所述合并指令的源操作数,所述合并数组的元素分别为与所述合并数组的下标取值对应的值,其通过数组索引所述预定数组及定值点数组的元素获得;
将所述合并数组的元素组合成所述合并指令的逻辑值。
12.如权利要求10所述的指令翻译方法,其特征在于,所述目标指令为二进制码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010597808.4A CN102541611B (zh) | 2010-12-21 | 2010-12-21 | 指令翻译装置和方法、指令处理装置和处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010597808.4A CN102541611B (zh) | 2010-12-21 | 2010-12-21 | 指令翻译装置和方法、指令处理装置和处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102541611A true CN102541611A (zh) | 2012-07-04 |
CN102541611B CN102541611B (zh) | 2014-09-03 |
Family
ID=46348579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010597808.4A Active CN102541611B (zh) | 2010-12-21 | 2010-12-21 | 指令翻译装置和方法、指令处理装置和处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102541611B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404497A (zh) * | 2015-10-26 | 2016-03-16 | 北京锐安科技有限公司 | 一种逻辑表达式的解析方法及装置 |
CN109937413A (zh) * | 2016-07-20 | 2019-06-25 | 深圳市东信时代信息技术有限公司 | 海量人群特征数据的处理方法及系统 |
CN110377339A (zh) * | 2019-08-17 | 2019-10-25 | 深圳芯英科技有限公司 | 长延时指令处理装置、方法以及设备、可读存储介质 |
CN111079916A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111078293A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
CN111079912A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111079911A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050060500A1 (en) * | 2003-09-11 | 2005-03-17 | Taiwan Semiconductor Manufacturing Company, Ltd. | General purpose memory compiler system and associated methods |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
CN101604255A (zh) * | 2009-07-23 | 2009-12-16 | 上海交通大学 | 中间语言的延迟跳转指令二进制翻译实现的方法 |
-
2010
- 2010-12-21 CN CN201010597808.4A patent/CN102541611B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050060500A1 (en) * | 2003-09-11 | 2005-03-17 | Taiwan Semiconductor Manufacturing Company, Ltd. | General purpose memory compiler system and associated methods |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
CN101604255A (zh) * | 2009-07-23 | 2009-12-16 | 上海交通大学 | 中间语言的延迟跳转指令二进制翻译实现的方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404497A (zh) * | 2015-10-26 | 2016-03-16 | 北京锐安科技有限公司 | 一种逻辑表达式的解析方法及装置 |
CN105404497B (zh) * | 2015-10-26 | 2018-05-25 | 北京锐安科技有限公司 | 一种逻辑表达式的解析方法及装置 |
CN109937413A (zh) * | 2016-07-20 | 2019-06-25 | 深圳市东信时代信息技术有限公司 | 海量人群特征数据的处理方法及系统 |
CN109937413B (zh) * | 2016-07-20 | 2023-04-21 | 深圳市东信时代信息技术有限公司 | 海量人群特征数据的处理方法及系统 |
CN111079916A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111078293A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
CN111079912A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111079911A (zh) * | 2018-10-19 | 2020-04-28 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111078293B (zh) * | 2018-10-19 | 2021-03-16 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
CN110377339A (zh) * | 2019-08-17 | 2019-10-25 | 深圳芯英科技有限公司 | 长延时指令处理装置、方法以及设备、可读存储介质 |
CN110377339B (zh) * | 2019-08-17 | 2024-03-01 | 中昊芯英(杭州)科技有限公司 | 长延时指令处理装置、方法以及设备、可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102541611B (zh) | 2014-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102541611B (zh) | 指令翻译装置和方法、指令处理装置和处理器 | |
EP3588285B1 (en) | Sequence optimizations in a high-performance computing environment | |
US10503634B1 (en) | Semantic comparison of computer compiler traces | |
US8799878B2 (en) | Multi level virtual function tables | |
CN100465895C (zh) | 编译器、编译方法 | |
CN102385524B (zh) | 一种基于混编指令集的编译链指令替换方法 | |
Cohen et al. | Processor virtualization and split compilation for heterogeneous multicore embedded systems | |
CN104239115A (zh) | 一种plc编程语言的编译方法 | |
EP2668575A2 (en) | Method and apparatus for compiling regular expressions | |
JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
CN103729235A (zh) | Java虚拟机的编译方法和Java虚拟机 | |
CN1278932A (zh) | 具有可变宽度指令的数字信号处理器 | |
CN103235724A (zh) | 基于原子操作语义描述的多源二进制代码一体化翻译方法 | |
CN101369233A (zh) | 程序编译方法和编译器 | |
CN109542446A (zh) | 一种编译系统、方法及编译器 | |
CN103116513A (zh) | 一种异构多核处理器编译器 | |
CN102446112B (zh) | 指令处理装置和处理器、指令翻译装置和方法 | |
Ellul et al. | Run-time compilation of bytecode in sensor networks | |
CN100559344C (zh) | 一种支持用规则记录变量访问专用寄存器组的处理方法 | |
CN104572234A (zh) | 生成用于并行计算架构的源代码的方法及源到源编译器 | |
CN102831004B (zh) | 一种基于C*core处理器的优化编译方法及编译器 | |
CN103019801B (zh) | 一种应用于高速数字io波形引擎的编译器 | |
Korobeynikov | Improving switch lowering for the llvm compiler system | |
Liang et al. | Semantics-recovering decompilation through neural machine translation | |
Kats et al. | Interactive disambiguation of meta programs with concrete object syntax |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |