CN111209039B - 指令处理方法及装置 - Google Patents
指令处理方法及装置 Download PDFInfo
- Publication number
- CN111209039B CN111209039B CN201811391809.6A CN201811391809A CN111209039B CN 111209039 B CN111209039 B CN 111209039B CN 201811391809 A CN201811391809 A CN 201811391809A CN 111209039 B CN111209039 B CN 111209039B
- Authority
- CN
- China
- Prior art keywords
- instruction
- bit
- renamed
- cond
- value
- 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.)
- Active
Links
Images
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/30181—Instruction operation extension or modification
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明提供一种指令处理方法及装置。所述方法包括:从指令缓冲中读出两条指令;判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果;若第1条指令或第2条指令的条件执行代码没有被重命名或者被重命名并且已经写回了结果,则根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行,若需要执行,则将第1条指令或第2条指令进行重命名和分派,否则将第1条指令或第2条指令直接丢弃,不进行重命名和分派;若第1条指令或第2条指令的条件执行代码被重命名但没有写回结果,则对所述第1条指令或第2条指令按照正常指令处理。本发明能够提高硬件资源利用率和指令的执行效率。
Description
技术领域
本发明涉及计算机架构技术领域,尤其涉及一种指令处理方法及装置。
背景技术
ARM指令集中有条件执行和IT指令,这两种指令可以归到一类为条件执行指令。这部分指令只有当执行条件判断为真时才执行,判断为假时,该指令不需要执行。这类指令在重命名阶段、分派、保留站和分配ROB(Re-Order Buffer,重排序缓冲)都正常为指令分配资源。该类指令在保留站中获得到需要的条件标志后,判断出该类指令是否需要执行,如果不需要执行,那么需要释放相关的硬件资源和恢复指令目的寄存器对应的物理寄存器。这类指令会消耗很多不必要的资源,从而导致处理器会存在大量的硬件资源被浪费掉。
在执行单元判断条件执行指令的时候,不应该执行的指令已经分配了资源,并且流水线级数较多,造成了大量硬件资源浪费和需要恢复不执行指令破坏的现场,比如重命名目的物理寄存器。
发明内容
本发明提供的指令处理方法及装置,能够在译码器阶段过滤可以识别的条件执行指令,提前丢弃不需要执行的指令,从而能够提高硬件资源利用率和指令的执行效率。
第一方面,本发明提供一种指令处理方法,包括:
从指令缓冲中读出两条指令;
判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果;
若第1条指令或第2条指令的条件执行代码没有被重命名或者被重命名并且已经写回了结果,则根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行,若需要执行,则将第1条指令或第2条指令进行重命名和分派,否则将第1条指令或第2条指令直接丢弃,不进行重命名和分派;
若第1条指令或第2条指令的条件执行代码被重命名但没有写回结果,则对所述第1条指令或第2条指令按照正常指令处理。
可选地,在将第1条指令进行重命名和分派之后,所述方法还包括:
检查影响标志位,判断第1条指令是否会影响第2条指令需要的标志位;
若不影响,则根据第2条指令的条件执行位判断第2条指令是否需要执行;
若影响,则将第2条指令进行重命名和分派。
可选地,所述判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果包括:判断读取C_RAT中标志位对应的物理寄存器中的值是否是最新值;
若第1条指令或第2条指令能够得到对应标志位最新的值,则根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
若第1条指令或第2条指令存在不能够得到对应标志位最新的值,则对所述第1条指令或第2条指令按照正常指令处理。
可选地,所述判断读取C_RAT中标志位对应的物理寄存器中的值是否是最新值包括:从C_RAT中得到指令结果标志位N、Z、C和V的物理寄存器编号,判断每个物理寄存器的有效位是否为1。
可选地,所述根据第1条指令或第2条指令的条件执行位判断第1条指令是否需要执行包括:根据标志位N、Z、C、V和指令执行条件判断第1条指令或第2条指令是否需要执行。
第二方面,本发明提供一种指令处理装置,包括:
读取单元,用于从指令缓冲中读出两条指令;
第一判断单元,用于判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果;
第二判断单元,用于当第一判断单元判定第1条指令或第2条指令的条件执行代码没有被重命名或者被重命名并且已经写回了结果时,根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
第一处理单元,用于当所述第二判断单元判定第1条指令或第2条指令需要执行时,将第1条指令或第2条指令进行重命名和分派;
第二处理单元,用于当所述第二判断单元判定第1条指令或第2条指令不需要执行时,将第1条指令或第2条指令直接丢弃,不进行重命名和分派;
第三处理单元,用于当所述第二判断单元判定第1条指令或第2条指令的条件执行代码被重命名但没有写回结果,对所述第1条指令或第2条指令按照正常指令处理。
可选地,所述装置还包括:
第三判断单元,用于在所述第一处理单元将第1条指令进行重命名和分派之后,检查影响标志位,判断第1条指令是否会影响第2条指令需要的标志位;
当所述第三判断单元判断第1条指令不影响第2条指令需要的标志位时,所述第二判断单元根据第2条指令的条件执行位判断第2条指令是否需要执行;
当所述第三判断单元判断第1条指令影响第2条指令需要的标志位时,所述第一处理单元将第2条指令进行重命名和分派。
可选地,所述第一判断单元,用于判断读取C_RAT中标志位对应的物理寄存器中的值是否是最新值;
若所述第一判断单元判定第1条指令或第2条指令能够得到对应标志位最新的值,则所述第二判断单元根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
若所述第一判断单元判定第1条指令或第2条指令存在不能够得到对应标志位最新的值,则所述第三处理单元对所述第1条指令或第2条指令按照正常指令处理。
可选地,所述第一判断单元,用于从C_RAT中得到指令结果标志位N、Z、C和V的物理寄存器编号,判断每个物理寄存器的有效位是否为1。
可选地,所述第一判断单元,用于根据标志位N、Z、C、V和指令执行条件判断第1条指令或第2条指令是否需要执行。
本发明实施例提供的指令处理方法及装置,在译码器阶段过滤不需要执行的指令,尽可能早地丢弃不需要执行的指令,避免了资源的浪费和破坏重命名目的物理寄存器现场,从而能够提高处理器的重命名物理寄存器、保留站、重排序缓冲等硬件资源的利用率和指令的执行效率。
附图说明
图1为本发明实施例提供的CPU部分流水阶段示意图;
图2为本发明实施例提供的指令处理方法的流程图;
图3为本发明实施例提供的微指令格式示意图;
图4为本发明实施例提供的标志位重命名C_RAT表;
图5为本发明实施例提供的指令选择示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,给出了CPU的部分流水线阶段功能,指令经过提取完成后,进入指令缓冲(inst_buffer)101中,inst_buffer中的指令还是没有完全译码的指令,需要进入解码器(Decoder)102中进一步译码,得到指令对应的UOP(微指令)。微指令进入重命名(rename)103阶段,完成指令的重命名。之后经过分派(dispatch)104分派指令到空闲的发射队列(Issue)105,即保留站单元。在保留站中等数据和执行条件准备好后,发射到执行单元(EXE)106执行。执行完成后在写回(WB)107阶段把结果写到物理寄存器中。
本发明实施例提供一种指令处理方法,为了说明本文的技术与方法,在下文的实例中是以指令发射带宽为2,每条UOP的源寄存器为4,目的寄存器为2进行说明。该技术和方法适应于任意指令发射带宽及指令格式。另外,本方法不限于用在译码器阶段,其它任意流水线阶段也适用。
ARM指令集中有条件执行和IT指令,这2种指令可以归到一类为条件执行指令。这部分指令只有当执行条件判断为真是才执行,判断为假时,该指令不需要执行。这类指令在重命名阶段,分派,保留站和分配ROB都正常为指令分配资源。该类指令在保留站中获得到需要的条件标志后,判断出该类指令是否需要执行,如果不需要执行,那么需要释放相关的硬件资源和恢复指令目的寄存器对应的物理寄存器。
在译码器阶段增加1个读取标志位重命名映射表C_RAT的端口,读取标志位的状态,从而判断该指令是否需要执行。在译码器阶段的时候先根据标志位N、Z、C、V和指令执行条件过滤不需要执行的指令,过滤的过程如图2所示。在S202读取标志位重命名映射表,并且得到映射表对应的物理寄存器的值状态。在S203中判断第1条指令是否需要执行;S207判断第2条指令是否需要执行。其它所有的阶段完成2条指令的处理过程。
如图2所示,所述指令处理方法具体包括以下步骤:
S201、2条指令过滤不需要执行的指令。
S202、先读取C_RAT中标志位对应的物理寄存器中的值是否是最新值,即判断标志位是没有被重命名或者被重命名并且已经写回了结果,若第1条指令能够得到对应标志位最新的值,则执行步骤203;若第2条指令能够得到对应标志位最新的值,则执行步骤207;2条指令中只要存在不能够得到最新的值,则执行步骤S204。
S203、根据第1条指令条件执行位判断第1条指令是否需要执行,若需要执行,则执行步骤S208;若不需要执行,则执行步骤S205。
S204、按照指令正常处理,并转至步骤S208。
S205、将第1条指令直接丢弃,不进行重命名,不进入分派阶段。
S206、将第2条指令直接丢弃,不进行重命名,不进入分派阶段。
S207、根据第2条指令条件执行位判断第2条指令是否需要执行,若需要执行,则执行步骤S210;若不需要执行,则执行步骤S206。
S208、将第1条指令进行重命名,重命名完成后进入分派阶段,然后检查影响标志位,转至步骤S209。
S209、判断第1条指令是否会影响第2条指令需要的标志位,若不影响,则执行步骤S207;若影响,则执行步骤S210。
S210、将第2条指令进行重命名,重命名完成后进入分派阶段。
在102Decoder中译码产生的UOP主要的域如图3所示。该微指令格式支持了A64/A32/T32指令集。具体的域定义如表1所示。
表1 指令组成结构
Dst_cc:表示指令的结果是否会影响结果标志位N、Z、C和V。1:表示会影响该标志位;0:表示不会影响该标志位,保持不变。
N:2个补码操作数的结果,如果符合位为1,表示负数,否则为0或者正数。
Z:如果指令执行的结果为0,那么Z为1,否则为0。
C:如果指令执行的无符号操作,产生了溢出,C为1,否则为0。
V:如果指令执行的有符号操作,产生了溢出,V为1,否则为0。
N,Z,C,V也可以作为指令集定义的其它用法,在此不一一列出。
表2 指令条件执行
每次从指令缓冲中读出2条指令,这2条指令进入102 decoder阶段,102 decoder阶段有2级流水线,在第2级流水线进行过滤条件执行指令,如果条件执行指令不需要执行,那么直接丢弃,不进入重命名阶段;否则进入重命名阶段处理。在102 decoder阶段都需要判断每条指令的条件执行代码是否没有被重命名或者被重命名的结果已经更新到物理寄存器中。
在重命名阶段,N、Z、C、V是合并在一起重命名。假设标志位N、Z、C和V的寄存器别名表为C_RAT。如图4所示,C_RAT一共有1行,行的内容代表了标志位N、Z、C和V映射的物理寄存器。
C_RAT项宽度为物理寄存器索引的宽度O的二维向量,并且2的O次幂等于M。N、Z、C和V被映射到一块物理寄存器physical file上,每个物理寄存器包括5bit,高bit表示N、Z、C和V的值,低bit表示该物理寄存器的值是否是最新的值。1表示是最新的值,0表示该物理寄存器被重命名后,还没有得到结果。
在译码器阶段,首先从C_RAT中得到指令结果标志位N、Z、C和V的物理寄存器编号,然后判断每个物理寄存器的有效位是否为1。如果有效位为1,那么我们可以根据条件码判断每条指令是否需要执行,如果需要执行,那么不做任何处理,如果判断该条指令不执行,那么直接终结该指令,该指令不参与重命名的过程,不送到下一级流水线,直接丢弃该条指令。
假设2条指令inst1和inst2进行重命名,先考虑2条指令的结果标志位的重命名过程。假设N个物理寄存器的有效位可以用一个N维的向量flag_v[N-1:0]表示,每行5个bit,高4bit表示NZCV的值,低1bit表示NZCV是否是最新的值。这里假设标志位N、Z、C和V会同时更新,因此只用bit0表示是否是最新的值,如果标志位N、Z、C和V不能同时更新,4个标志位分别用1位即可。
设标志位NZCV映射的物理寄存器为:NZCV_Phy=C_RAT[0],宽度为O;
同理可以得到下面的假设:
假设标志位N是否有效为N_val=flag_v[NZCV_phy][0],宽度为1bit;
假设标志位Z是否有效为Z_val=flag_v[NZCV_phy][0],宽度为1bit;
假设标志位C是否有效为C_val=flag_v[NZCV_phy][0],宽度为1bit;
假设标志位V是否有效为V_val=flag_v[NZCV_phy][0]宽度为1bit;
假设标志位N的值为N_value=flag_v[N_phy][4],宽度为1bit;
假设标志位Z的值为Z_value=flag_v[Z_phy][3],宽度为1bit;
假设标志位C的值为C_value=flag_v[C_phy][2],宽度为1bit;
假设标志位V的值为V_value=flag_v[V_phy][1],宽度为1bit;
同时假设第1条与第2条指令的条件执行码Condition code分别为cond_0与cond_1。Cond_0与cond_1对于的onehot形式的变量为Cond_onehot_0与Cond_onehot_1。
根据表2的条件执行码的判断,我们可以得到2条指令是否需要执行的逻辑表达式。
Cond_onehot_0[0]=((~cond_0[3])&(~cond_0[2])&(~cond_0[1])&(~cond_0[0]));
Cond_onehot_0[1]=((~cond_0[3])&(~cond_0[2])&(~cond_0[1])&cond_0[0]);
Cond_onehot_0[2]=((~cond_0[3])&(~cond_0[2])&cond_0[1]&(~cond_0[0]));
Cond_onehot_0[3]=((~cond_0[3])&(~cond_0[2])&cond_0[1]&cond_0[0]);
Cond_onehot_0[4]=((~cond_0[3])&cond_0[2]&(~cond_0[1])&(~cond_0[0]));
Cond_onehot_0[5]=((~cond_0[3])&cond_0[2]&(~cond_0[1])&cond_0[0]);
Cond_onehot_0[6]=((~cond_0[3])&cond_0[2]&cond_0[1]&(~cond_0[0]));
Cond_onehot_0[7]=((~cond_0[3])&cond_0[2]&cond_0[1]&cond_0[0]);
Cond_onehot_0[8]=(cond_0[3]&(~cond_0[2])&(~cond_0[1])&(~cond_0[0]));
Cond_onehot_0[9]=(cond_0[3]&(~cond_0[2])&(~cond_0[1])&cond_0[0]);
Cond_onehot_0[10]=(cond_0[3]&(~cond_0[2])&cond_0[1]&(~cond_0[0]));
Cond_onehot_0[11]=(cond_0[3]&(~cond_0[2])&cond_0[1]&cond_0[0]);
Cond_onehot_0[12]=(cond_0[3]&cond_0[2]&(~cond_0[1])&(~cond_0[0]));
Cond_onehot_0[13]=(cond_0[3]&cond_0[2]&(~cond_0[1])&cond_0[0]);
Cond_onehot_0[14]=(cond_0[3]&cond_0[2]&cond_0[1]&(~cond_0[0]));
Cond_onehot_0[15]=(cond_0[3]&cond_0[2]&cond_0[1]&cond_0[0]);
假设指令1根据指令执行操作码得到的不执行的信号为inst_invexe_0:
inst_invexe_0=((Cond_onehot_0[0]&Z_val&(~Z_value))|
(Cond_onehot_0[1]&Z_val&Z_value)|
(Cond_onehot_0[2]&C_val&(~C_value))|
(Cond_onehot_0[3]&C_val&C_value)|
(Cond_onehot_0[4]&N_val&(~N_value))|
(Cond_onehot_0[5]&N_val&N_value)|
(Cond_onehot_0[6]&V_val&(~V_value))|
(Cond_onehot_0[7]&V_val&V_value)|
(Cond_onehot_0[8]&((C_val&(~C_value))|(Z_val&Z_value))|
(Cond_onehot_0[9]&C_val&C_value&Z_val&(~Z_value))|
(Cond_onehot_0[10]&((N_val&N_value&V_val&(~V_value))|
(N_val&(~N_value)&V_val&V_value)))|
(Cond_onehot_0[11]&((N_val&N_value&
V_val&V_value)|(N_val&(~N_value)&V_val&(~V_value))))|
(Cond_onehot_0[12]&((Z_val&Z_value)|((N_val&N_value&V_val&(~
V_value))|(N_val&(~N_value)&V_val&V_value))))|
(Cond_onehot_0[13]&Z_val&(~Z_value)&((N_val&N_value&
V_val&V_value)|(N_val&(~N_value)&V_val&(~V_value)))))
第2条指令除了判断物理寄存器表中的标志位为最新状态外,还需要判断第1条指令的目的标志位是否和第2条指令的源标志位存在相关。首先,我们可以得到类似第1条指令的一个不执行条件,假设该条件为inst_invexe_a_1。同时假设第1条指令和第2条指令不存在相关的条件为inst_invexe_b_1。
inst_invexe_a_1=((Cond_onehot_1[0]&Z_val&(~Z_value))|
(Cond_onehot_1[1]&Z_val&Z_value)|
(Cond_onehot_1[2]&C_val&(~C_value))|
(Cond_onehot_1[3]&C_val&C_value)|
(Cond_onehot_1[4]&N_val&(~N_value))|
(Cond_onehot_1[5]&N_val&N_value)|
(Cond_onehot_1[6]&V_val&(~V_value))|
(Cond_onehot_1[7]&V_val&V_value)|
(Cond_onehot_1[8]&((C_val&(~C_value))|(Z_val&Z_value))|
(Cond_onehot_1[9]&C_val&C_value&Z_val&(~Z_value))|
(Cond_onehot_0[10]&((N_val&N_value&V_val&(~V_value))|
(N_val&(~N_value)&V_val&V_value)))|
(Cond_onehot_1[11]&((N_val&N_value&
V_val&V_value)|(N_val&(~N_value)&V_val&(~V_value))))|
(Cond_onehot_1[12]&((Z_val&Z_value)|((N_val&N_value&V_val&(~
V_value))|(N_val&(~N_value)&V_val&V_value))))|
(Cond_onehot_1[13]&Z_val&(~Z_value)&((N_val&N_value&
V_val&V_value)|(N_val&(~N_value)&V_val&(~V_value)))))
假设第1条指令影响标志位的信号为dst_cc_0。每个bit为1时表示该指令会影响该比特,否则不影响。因此这里需要判断第2条指令对于的条件操作码是否会被第1条指令影响。inst_invexe_b_1表示第1条指令的目的标志位与第2条指令的源标志位不同。
inst_invexe_b_1=((Cond_onehot_1[0]&(~dst_cc_0[2]))|
(Cond_onehot_1[1]&(~dst_cc_0[2]))|
(Cond_onehot_1[2]&(~dst_cc_0[1]))|
(Cond_onehot_1[3]&(~dst_cc_0[1]))|
(Cond_onehot_1[4]&(~dst_cc_0[3]))|
(Cond_onehot_1[5]&(~dst_cc_0[3]))|
(Cond_onehot_1[6]&(~dst_cc_0[0]))|
(Cond_onehot_1[7]&(~dst_cc_0[0]))|
(Cond_onehot_1[8]&(~dst_cc_0[1])&(~dst_cc_0[2]))|
(Cond_onehot_1[9]&(~dst_cc_0[1])&(~dst_cc_0[2]))|
(Cond_onehot_1[10]&(~dst_cc_0[0])&(~dst_cc_0[3]))|
(Cond_onehot_1[11]&(~dst_cc_0[0])&(~dst_cc_0[3]))|
(Cond_onehot_1[12]&(~dst_cc_0[0])&(~dst_cc_0[3])&(~dst_cc_0[2]))|
(Cond_onehot_1[13]&(~dst_cc_0[0])&(~dst_cc_0[3])&(~dst_cc_0[2]))|//指令1执行的情况下,判断指令1是否与指令2存在写后读相关inst_invexe_0)//指令1不执行
同理假设指令2根据指令执行操作码得到的不执行的信号为inst_invexe_1:
inst_invexe_1=(inst_invexe_a_1&inst_invexe_b_1)//指令2不执行信号。
inst_invexe_0有效时,指令1不进行重命名,并且不进入分派阶段,在译码器直接丢弃该指令。如果无效时,指令1进行重命名,并且进入分派阶段。同理inst_invexe_1有效时,指令2不进行重命名,并且不进入分派阶段,直接丢弃该指令。如果无效时,指令2进行重命名,并且进入分派阶段。
在译码器阶段根据inst_invexe_0和inst_invexe_1 2个信号决定哪条指令会进入重命名阶段,或者在进入重命名阶段之前就被丢弃了。
如图5所示,在501选择第1条指令的条件是:第1条指令没有被判断为条件不执行,即inst_invexe_0为0。选择第2条指令的条件是:第1条指令被判断为条件不执行,同时第2条指令没有被判断为条件不执行,即inst_invexe_0为1并且inst_invexe_1为0。在504选择第2条指令的条件是:第1条指令和第2条指令都没有判断为条件不执行,即inst_invexe_0为0并且inst_invexe_1为0。选择之后的502和505分别进入503和506中进行重命名。
本发明实施例提供的指令处理方法,在译码器阶段过滤不需要执行的指令,尽可能早地丢弃不需要执行的指令,避免了资源的浪费和破坏重命名目的物理寄存器现场,从而能够提高处理器的重命名物理寄存器、保留站、重排序缓冲等硬件资源的利用率和指令的执行效率。
本发明实施例还提供一种指令处理装置,所述装置包括:
读取单元,用于从指令缓冲中读出两条指令;
第一判断单元,用于判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果;
第二判断单元,用于当第一判断单元判定第1条指令或第2条指令的条件执行代码没有被重命名或者被重命名并且已经写回了结果时,根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
第一处理单元,用于当所述第二判断单元判定第1条指令或第2条指令需要执行时,将第1条指令或第2条指令进行重命名和分派;
第二处理单元,用于当所述第二判断单元判定第1条指令或第2条指令不需要执行时,将第1条指令或第2条指令直接丢弃,不进行重命名和分派;
第三处理单元,用于当所述第二判断单元判定第1条指令或第2条指令的条件执行代码被重命名但没有写回结果,对所述第1条指令或第2条指令按照正常指令处理。
本发明实施例提供的指令处理装置,在译码器阶段过滤不需要执行的指令,尽可能早地丢弃不需要执行的指令,避免了资源的浪费和破坏重命名目的物理寄存器现场,从而能够提高处理器的重命名物理寄存器、保留站、重排序缓冲等硬件资源的利用率和指令的执行效率。
可选地,所述装置还包括:
第三判断单元,用于在所述第一处理单元将第1条指令进行重命名和分派之后,检查影响标志位,判断第1条指令是否会影响第2条指令需要的标志位;
当所述第三判断单元判断第1条指令不影响第2条指令需要的标志位时,所述第二判断单元根据第2条指令的条件执行位判断第2条指令是否需要执行;
当所述第三判断单元判断第1条指令影响第2条指令需要的标志位时,所述第一处理单元将第2条指令进行重命名和分派。
可选地,所述第一判断单元,用于判断读取C_RAT中标志位对应的物理寄存器中的值是否是最新值;
若所述第一判断单元判定第1条指令或第2条指令能够得到对应标志位最新的值,则所述第二判断单元根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
若所述第一判断单元判定第1条指令或第2条指令存在不能够得到对应标志位最新的值,则所述第三处理单元对所述第1条指令或第2条指令按照正常指令处理。
可选地,所述第一判断单元,用于从C_RAT中得到指令结果标志位N、Z、C和V的物理寄存器编号,判断每个物理寄存器的有效位是否为1。
可选地,所述第一判断单元,用于根据标志位N、Z、C、V和指令执行条件判断第1条指令或第2条指令是否需要执行。
本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种指令处理方法,其特征在于,包括:
从指令缓冲中读出两条指令;
判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果;
若第1条指令或第2条指令的条件执行代码没有被重命名或者被重命名并且已经写回了结果,则根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行,若需要执行,则将第1条指令或第2条指令进行重命名和分派,否则将第1条指令或第2条指令直接丢弃,不进行重命名和分派;
若第1条指令或第2条指令的条件执行代码被重命名但没有写回结果,则对所述第1条指令或第2条指令按照正常指令处理。
2.根据权利要求1所述的方法,其特征在于,在将第1条指令进行重命名和分派之后,所述方法还包括:
检查影响标志位,判断第1条指令是否会影响第2条指令需要的标志位;
若不影响,则根据第2条指令的条件执行位判断第2条指令是否需要执行;
若影响,则将第2条指令进行重命名和分派。
3.根据权利要求1或2所述的方法,其特征在于,所述判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果包括:判断读取C_RAT中标志位对应的物理寄存器中的值是否是最新值;
若第1条指令或第2条指令能够得到对应标志位最新的值,则根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
若第1条指令或第2条指令存在不能够得到对应标志位最新的值,则对所述第1条指令或第2条指令按照正常指令处理。
4.根据权利要求3所述的方法,其特征在于,所述判断读取C_RAT中标志位对应的物理寄存器中的值是否是最新值包括:从C_RAT中得到指令结果标志位N、Z、C和V的物理寄存器编号,判断每个物理寄存器的有效位是否为1。
5.根据权利要求4所述的方法,其特征在于,所述根据第1条指令或第2条指令的条件执行位判断第1条指令是否需要执行包括:根据标志位N、Z、C、V和指令执行条件判断第1条指令或第2条指令是否需要执行。
6.一种指令处理装置,其特征在于,包括:
读取单元,用于从指令缓冲中读出两条指令;
第一判断单元,用于判断每条指令的条件执行代码是否没有被重命名或者被重命名并且已经写回了结果;
第二判断单元,用于当第一判断单元判定第1条指令或第2条指令的条件执行代码没有被重命名或者被重命名并且已经写回了结果时,根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
第一处理单元,用于当所述第二判断单元判定第1条指令或第2条指令需要执行时,将第1条指令或第2条指令进行重命名和分派;
第二处理单元,用于当所述第二判断单元判定第1条指令或第2条指令不需要执行时,将第1条指令或第2条指令直接丢弃,不进行重命名和分派;
第三处理单元,用于当所述第二判断单元判定第1条指令或第2条指令的条件执行代码被重命名但没有写回结果,对所述第1条指令或第2条指令按照正常指令处理。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第三判断单元,用于在所述第一处理单元将第1条指令进行重命名和分派之后,检查影响标志位,判断第1条指令是否会影响第2条指令需要的标志位;
当所述第三判断单元判断第1条指令不影响第2条指令需要的标志位时,所述第二判断单元根据第2条指令的条件执行位判断第2条指令是否需要执行;
当所述第三判断单元判断第1条指令影响第2条指令需要的标志位时,所述第一处理单元将第2条指令进行重命名和分派。
8.根据权利要求6或7所述的装置,其特征在于,所述第一判断单元,用于判断读取C_RAT中标志位对应的物理寄存器中的值是否是最新值;
若所述第一判断单元判定第1条指令或第2条指令能够得到对应标志位最新的值,则所述第二判断单元根据第1条指令或第2条指令的条件执行位判断第1条指令或第2条指令是否需要执行;
若所述第一判断单元判定第1条指令或第2条指令存在不能够得到对应标志位最新的值,则所述第三处理单元对所述第1条指令或第2条指令按照正常指令处理。
9.根据权利要求8所述的装置,其特征在于,所述第一判断单元,用于从C_RAT中得到指令结果标志位N、Z、C和V的物理寄存器编号,判断每个物理寄存器的有效位是否为1。
10.根据权利要求9所述的装置,其特征在于,所述第一判断单元,用于根据标志位N、Z、C、V和指令执行条件判断第1条指令或第2条指令是否需要执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811391809.6A CN111209039B (zh) | 2018-11-21 | 2018-11-21 | 指令处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811391809.6A CN111209039B (zh) | 2018-11-21 | 2018-11-21 | 指令处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111209039A CN111209039A (zh) | 2020-05-29 |
CN111209039B true CN111209039B (zh) | 2022-08-02 |
Family
ID=70787652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811391809.6A Active CN111209039B (zh) | 2018-11-21 | 2018-11-21 | 指令处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111209039B (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7624256B2 (en) * | 2005-04-14 | 2009-11-24 | Qualcomm Incorporated | System and method wherein conditional instructions unconditionally provide output |
CN100524208C (zh) * | 2006-10-26 | 2009-08-05 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
CN104216681B (zh) * | 2013-05-31 | 2018-02-13 | 华为技术有限公司 | 一种cpu指令处理方法和处理器 |
-
2018
- 2018-11-21 CN CN201811391809.6A patent/CN111209039B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111209039A (zh) | 2020-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8555039B2 (en) | System and method for using a local condition code register for accelerating conditional instruction execution in a pipeline processor | |
US6260138B1 (en) | Method and apparatus for branch instruction processing in a processor | |
US9195466B2 (en) | Fusing conditional write instructions having opposite conditions in instruction processing circuits, and related processor systems, methods, and computer-readable media | |
US8074060B2 (en) | Out-of-order execution microprocessor that selectively initiates instruction retirement early | |
US20160291982A1 (en) | Parallelized execution of instruction sequences based on pre-monitoring | |
CN110825437B (zh) | 用于处理数据的方法和装置 | |
US10162635B2 (en) | Confidence-driven selective predication of processor instructions | |
US20130262822A1 (en) | Caching optimized internal instructions in loop buffer | |
US20200042322A1 (en) | System and method for store instruction fusion in a microprocessor | |
WO2014090091A1 (en) | Tracking multiple conditions in a general purpose register and instruction therefor | |
CN115576608A (zh) | 处理器核、处理器、芯片、控制设备和指令融合方法 | |
KR100572040B1 (ko) | 명령들의 퇴거시 물리적인 레지스터들을 선택적으로 자유화하도록 구성된 프로세서 | |
EP3198400B1 (en) | Dependency-prediction of instructions | |
US20140047221A1 (en) | Fusing flag-producing and flag-consuming instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media | |
CN111209039B (zh) | 指令处理方法及装置 | |
KR20010077997A (ko) | 단일 사이클 파이프라인 기능 정지를 발생하기 위한파이프라인 프로세서 시스템 및 방법 | |
US11243774B2 (en) | Dynamic selection of OSC hazard avoidance mechanism | |
US11403109B2 (en) | Steering a history buffer entry to a specific recovery port during speculative flush recovery lookup in a processor | |
US10558462B2 (en) | Apparatus and method for storing source operands for operations | |
KR20070108936A (ko) | 조건부 명령어가 실행되지 않을 경우 소스 오퍼랜드를대기하는 것을 중지하는 방법 | |
KR100837400B1 (ko) | 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 | |
US7698537B2 (en) | Data processing apparatus for processing a stream of instructions in first and second processing blocks with the first processing block supporting register renaming and the second processing block not supporting register renaming | |
US20090031118A1 (en) | Apparatus and method for controlling order of instruction | |
EP3278212A1 (en) | Parallelized execution of instruction sequences based on premonitoring | |
US11868773B2 (en) | Inferring future value for speculative branch resolution in a microprocessor |
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 |