CN109992529B - 虚拟地址确定方法及装置、处理器、存储介质 - Google Patents

虚拟地址确定方法及装置、处理器、存储介质 Download PDF

Info

Publication number
CN109992529B
CN109992529B CN201810005947.XA CN201810005947A CN109992529B CN 109992529 B CN109992529 B CN 109992529B CN 201810005947 A CN201810005947 A CN 201810005947A CN 109992529 B CN109992529 B CN 109992529B
Authority
CN
China
Prior art keywords
address
instruction
order
target
previous
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
Application number
CN201810005947.XA
Other languages
English (en)
Other versions
CN109992529A (zh
Inventor
劳咏仪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201810005947.XA priority Critical patent/CN109992529B/zh
Priority to PCT/CN2018/102225 priority patent/WO2019134376A1/zh
Publication of CN109992529A publication Critical patent/CN109992529A/zh
Application granted granted Critical
Publication of CN109992529B publication Critical patent/CN109992529B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本申请公开了一种虚拟地址确定方法及装置、处理器、存储介质,属于处理器技术领域。该方法包括:从待获取的目标指令的上一指令的指令空间中读取目标指令的低位地址,目标指令的低位地址为将该上一指令写入一级指令缓存之前计算得到并存储在该上一指令的指令空间中的地址;确定目标指令的剩余地址,目标指令的剩余地址的宽度与目标指令的低位地址的宽度之和等于该上一指令的虚拟地址的宽度;将目标指令的低位地址与目标指令的剩余地址合并,得到目标指令的虚拟地址。本申请有助于解决确定虚拟地址的时延较大,处理器的处理速度较慢的问题,减小确定虚拟地址的时延,提高处理器的处理速度。

Description

虚拟地址确定方法及装置、处理器、存储介质
技术领域
本申请涉及处理器技术领域,特别涉及一种虚拟地址确定方法及装置、处理器、存储介质。
背景技术
中央处理器的一个典型的运作流水线为:取指令(即,获取指令)、解码指令、发射指令、执行指令、访问记忆体和提交结果,取指令、解码指令、发射指令、执行指令、访问记忆体和提交结果中的任一项称为一个流水线级。中央处理器包括与每个流水线级对应的单元,每个单元用于执行相应的流水线级的操作,例如,中央处理器包括取指令单元,由取指令单元执行取指令的操作,需要获取的指令通常可以包括分支指令和非分支指令两种类型,且分支指令可以包括直接分支指令和非直接分支指令。在取指令的过程中,取指令单元首先需要确定待获取的目标指令的虚拟地址,然后基于该虚拟地址进行目标指令的获取。其中,虚拟地址可以为程序计数器(program counter,PC)地址。
相关技术中,取指令单元根据目标指令的上一指令的虚拟地址确定目标指令的虚拟地址,然后根据目标指令的虚拟地址和地址映射确定目标指令的物理地址,最后根据目标指令的物理地址从存储空间(例如一级指令缓存)中取出目标指令。其中,目标指令的上一指令为取指令单元已经取出的指令,当该上一指令为直接分支指令时,该上一指令中包含偏移地址,取指令单元根据目标指令的上一指令的虚拟地址确定目标指令的虚拟地址可以包括:取指令单元对该上一指令进行解码得到该上一指令所包含的偏移地址,然后对该偏移地址进行符号扩展(sign extend)得到扩展后的偏移地址,该扩展后的偏移地址与该上一指令的虚拟地址对齐且宽度相等,最后取指令单元将扩展后的偏移地址与该上一指令的虚拟地址相加得到目标指令的虚拟地址。
在实现本申请的过程中,发明人发现相关技术至少存在以下问题:
随着处理器的地址宽度的增加,将偏移地址与虚拟地址相加的计算量越来越大,因此,确定目标指令的虚拟地址的时延较大,中央处理器的处理速度较慢。
发明内容
本申请提供了一种虚拟地址确定方法及装置、处理器、存储介质,有助于解决确定虚拟地址的时延较大,处理器的处理速度较慢的问题。本申请的技术方案如下:
第一方面,提供了一种虚拟地址确定方法,该方法包括:
从待获取的目标指令的上一指令的指令空间中读取目标指令的低位地址,目标指令的低位地址为将该上一指令写入一级指令缓存之前计算得到并存储在该上一指令的指令空间中的地址;
确定目标指令的剩余地址,目标指令的剩余地址的宽度与目标指令的低位地址的宽度之和等于该上一指令的虚拟地址的宽度;
将目标指令的低位地址与目标指令的剩余地址合并,得到目标指令的虚拟地址。其中,一级指令缓存中,不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐。
本申请提供的方案,由于在确定目标指令的虚拟地址的过程中,无需计算目标指令的低位地址,只需要计算目标指令的剩余地址(剩余地址为目标指令的虚拟地址中除低位地址之外的地址),然后将目标指令的剩余地址与目标指令的低位地址合并就可以得到目标指令的虚拟地址,因此可以减小确定目标指令的虚拟地址的时延,提高处理器的处理速度。
可选地,在从待获取的目标指令的上一指令的指令空间中读取目标指令的低位地址之前,该方法还包括:
计算目标指令的低位地址;
将目标指令的低位地址存储至该上一指令的指令空间。
本申请提供的方案,通过预计算目标指令的低位地址,并将目标指令的低位地址存储至目标指令的上一指令的指令空间,可以便于在确定目标指令的虚拟地址的过程中,从该上一指令的指令空间读取目标指令的低位地址。
在第一种可能的实现方案中,计算目标指令的低位地址,包括:
确定该上一指令的虚拟地址和该上一指令所包含的偏移地址;
根据页表的大小,从该上一指令的虚拟地址中确定该上一指令的低位地址,并从偏移地址中确定该偏移地址的低位地址,该上一指令的低位地址与该偏移地址的低位地址对齐且宽度相等;
将该上一指令的低位地址与该偏移地址的低位地址相加,得到目标指令的低位地址,目标指令的低位地址与该上一指令的低位地址对齐且宽度相等。
本申请提供的方案,通过将目标指令的上一指令的低位地址与目标指令的所包含的偏移地址的低位地址相加产生目标指令的低位地址,便于目标指令的低位地址的确定。
可选地,在第一种可能的实现方案中,在将该上一指令的低位地址与该偏移地址的低位地址相加之后,该方法还包括:将低位进位存储至扩展指令空间,低位进位为将该上一指令的低位地址与该偏移地址的低位地址相加产生的进位,扩展指令空间为对该上一指令的指令空间进行扩展得到的指令空间。
本申请提供的方案,通过将低位进位存储至扩展指令空间,可以便于在确定目标指令的虚拟地址的过程中,从该扩展指令空间读取低位进位。
可选地,在第一种可能的实现方案中,剩余地址包括中位地址和高位地址,确定目标指令的剩余地址,包括:
从偏移地址中确定偏移地址的高位地址,偏移地址由偏移地址的高位地址和偏移地址的低位地址组成;
根据偏移地址的高位地址,从该上一指令的虚拟地址中确定该上一指令的中位地址,上该一指令的中位地址与偏移地址的高位地址对齐且宽度相等;
从扩展指令空间中读取低位进位;
将该上一指令的中位地址、偏移地址的高位地址和低位进位相加,得到目标指令的中位地址;
从该上一指令的虚拟地址中确定该上一指令的高位地址,该上一指令的虚拟地址由该上一指令的高位地址、该上一指令的中位地址和该上一指令的低位地址组成;
根据中位进位、该上一指令的高位地址和偏移地址的符号,确定目标指令的高位地址,中位进位为将该上一指令的中位地址、偏移地址的高位地址和低位进位相加产生的进位。
可选地,在第一种可能的实现方案中,根据中位进位、该上一指令的高位地址和偏移地址的符号,确定目标指令的高位地址,包括:
当中位进位为1且偏移地址的符号为0时,确定目标指令的高位地址等于该上一指令的高位地址加1;
当中位进位为0且偏移地址的符号为0,或者,中位进位为1且偏移地址的符号为1时,确定目标指令的高位地址等于该上一指令的高位地址;
当中位进位为0且偏移地址的符号为1时,确定目标指令的高位地址等于该上一指令的高位地址减1。
在第二种可能的实现方案中,计算目标指令的低位地址,包括:
确定该上一指令的虚拟地址和该上一指令所包含的偏移地址;
根据偏移地址确定该上一指令的低位地址,该上一指令的低位地址与偏移地址对齐且宽度相等;
将该上一指令的低位地址与偏移地址相加,得到目标指令的低位地址,目标指令的低位地址与该上一指令的低位地址对齐且宽度相等。
本申请提供的方案,通过将目标指令的上一指令的低位地址与偏移地址相加产生目标指令的低位地址,便于目标指令的低位地址的确定。
可选地,在第二种可能的实现方案中,剩余地址包括高位地址,在将该上一指令的低位地址与偏移地址相加之后,该方法还包括:
从该上一指令的虚拟地址中确定该上一指令的高位地址,该上一指令的虚拟地址由该上一指令的高位地址和该上一指令的低位地址组成;
根据低位进位、该上一指令的高位地址和偏移地址的符号,确定目标指令的高位地址,低位进位为将该上一指令的低位地址和偏移地址相加产生的进位;
生成地址指示符号,地址指示符号指示目标指令的高位地址;
将地址指示符号存储至扩展指令空间,该扩展指令空间为对该上一指令的指令空间进行扩展得到的指令空间。
本申请提供的方案,通过预确定目标指令的高位地址并生成地址指示符号,将地址指示符号存储至扩展指令空间,可以便于在确定目标指令的虚拟地址的过程中,从扩展指令空间读取地址指示符号,并根据地址指示符号确定目标指令的高位地址。
可选地,在第二种可能的实现方案中,确定目标指令的剩余地址,包括:
从扩展指令空间中读取地址指示符号;
根据地址指示符号确定目标指令的高位地址。
本申请提供的方案,通过根据地址指示符号确定目标指令的高位地址,可以节省计算目标指令的高位地址的时延,提高处理器的处理速度。
可选地,在第二种可能的实现方案中,根据低位进位、该上一指令的高位地址和偏移地址的符号,确定目标指令的高位地址,包括:
当低位进位为1且偏移地址的符号为0时,确定目标指令的高位地址等于该上一指令的高位地址加1;
当低位进位为0且偏移地址的符号为0,或者,低位进位为1且偏移地址的符号为1时,确定目标指令的高位地址等于该上一指令的高位地址;
当低位进位为0且偏移地址的符号为1时,确定目标指令的高位地址等于该上一指令的高位地址减1。
第二方面,提供了一种虚拟地址确定装置,该虚拟地址确定装置包括至少一个模块,该至少一个模块用于实现上述第一方面或第一方面的任一可选方式所提供的虚拟地址确定方法。
第三方面,提供了一种处理器,该处理器包括第二方面或第二方面的任一可选方式所提供的虚拟地址确定装置。
第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机的处理器上运行时,使得该处理器执行第一方面或第一方面的任一可选方式所提供的虚拟地址确定方法。
第五方面,提供了一种包含指令的计算机程序产品,当计算机程序产品在计算机的处理器上运行时,使得该处理器执行第一方面或第一方面的任一可选方式所提供的虚拟地址确定方法。
第六方面,提供了一种处理装置,该处理装置包括至少一个电路,该至少一个电路用于执行第一方面或第一方面的任一可选方式所提供的虚拟地址确定方法。
第七方面,提供了一种芯片,该芯片包括可编程逻辑电路和/或程序指令,当该芯片运行时用于实现第一方面或第一方面的任一可选方式所提供的虚拟地址确定方法。
本申请提供的技术方案带来的有益效果是:
本申请提供的虚拟地址确定方法及装置、处理器、存储介质,由于目标指令的低位地址是从目标指令的上一指令的指令空间中读取到的,在确定目标指令的虚拟地址的过程中,无需计算目标指令的低位地址,只需要计算目标指令的剩余地址(剩余地址为目标指令的虚拟地址中除低位地址之外的地址),然后将目标指令的剩余地址与目标指令的低位地址合并就可以得到目标指令的虚拟地址,因此可以减小确定目标指令的虚拟地址的计算量,有助于解决确定目标指令的虚拟地址的时延较大,处理器的处理速度较慢的问题,减小确定目标指令的虚拟地址的时延,提高处理器的处理速度。
附图说明
图1是本申请实施例所涉及的一种处理器的流水线的示意图;
图2是本申请实施例所涉及的一种地址映射示意图;
图3是本申请实施例所涉及的另一种地址映射示意图;
图4是本申请实施例所涉及的一种直接分支指令的指令空间的示意图;
图5是本申请实施例提供的一种虚拟地址确定方法的方法流程图;
图6是本申请实施例提供的另一种虚拟地址确定方法的方法流程图;
图7是本申请实施例提供的一种指令空间的示意图;
图8是本申请实施例提供的一种计算虚拟地址的示意图;
图9是本申请实施例提供的另一种计算虚拟地址的示意图;
图10是本申请实施例提供的再一种虚拟地址确定方法的方法流程图;
图11是本申请实施例提供的另一种指令空间的示意图;
图12是本申请实施例提供的再一种计算虚拟地址的示意图;
图13是本申请实施例提供的又一种计算虚拟地址的示意图;
图14是本申请实施例提供的一种虚拟地址确定装置的框图;
图15是本申请实施例提供的另一种虚拟地址确定装置的框图;
图16是本申请实施例提供的一种第一确定模块的框图;
图17是本申请实施例提供的再一种虚拟地址确定装置的框图。
具体实施方式
中央处理器是一种典型的处理器,大多数的中央处理器都以流水线的形式运作,流水线由多个不同的流水线级组成,中央处理器包括与每个流水线级对应的单元,每个单元用于执行相应的流水线级的操作,且根据中央处理器的速度需求的不同以及芯片工艺的不同,不同的流水线所包含的流水线级不同。如图1所示,其示出了中央处理器的一个典型的运作流水线,参见图1,该流水线包括:取指令、解码指令、发射指令、执行指令、访问记忆体和提交结果,取指令、解码指令、发射指令、执行指令、访问记忆体和提交结果中的每一项可以称为一个流水线级,中央处理器可以包括取指令单元(instruction fetch unit)、解码单元、发射单元、执行单元、访问单元和提交单元,取指令单元用于执行取指令操作,取指令单元取出指令后,将指令传送给解码单元,解码单元对指令进行解码,并将解码后的指令传送给发射单元,由发射单元将指令发射至执行单元,执行单元执行指令之后,将指令传送给访问单元,访问单元根据指令访问记忆体,之后提交单元提交结果。
本申请实施例主要涉及到上述流水线中的取指令,因此,这里主要对取指令单元取指令的过程进行说明。通常,取指令单元可以先确定待获取的目标指令的虚拟地址,然后根据目标指令的虚拟地址获取目标指令(也即是根据虚拟地址取指令)。虚拟地址又称为逻辑地址,例如,虚拟地址可以为PC地址。以下对取指令单元取指令的过程进行说明。
取指令单元在获取目标指令的过程中,如果目标指令的上一指令不是分支指令(branch instruction),则取指令单元在目标指令的上一指令的虚拟地址上加上一个地址数值(该地址数值取决于取指令单元一个周期内取多少条指令以及每条指令的宽度)得到目标指令的虚拟地址,并根据目标指令的虚拟地址获取目标指令。如果目标指令的上一指令是分支指令时,则目标指令可以跳转或不跳转,取指令单元可以对目标指令是否跳转进行预测。如果取指令单元预测出目标指令不跳转,则取指令单元在目标指令的上一指令的虚拟地址上加上一个地址数值得到目标指令的虚拟地址,并根据目标指令的虚拟地址取指令。如果取指令单元预测出目标指令跳转,则取指令单元需要计算出跳转目标地址(branchtarget address),然后根据跳转目标地址取指令,该跳转目标地址也即是目标指令的虚拟地址。通常,取指令单元可以在目标指令的上一指令的虚拟地址上加上一个偏移地址(offset address)得到跳转目标地址。其中,偏移地址可以位于目标指令的上一指令中,也可以位于寄存器中,如果偏移地址位于目标指令的上一指令中,则该目标指令的上一指令可以称为直接分支(directbranch)指令,如果偏移地址位于寄存器中,则该目标指令的上一指令可以称为非直接分支指令。当目标指令的上一指令是直接分支指令时,取指令单元可以对目标指令的上一指令进行解码得到偏移地址,然后将目标指令的上一指令的虚拟地址与解码得到的偏移地址相加得到跳转目标地址。当目标指令的上一指令是非直接分支指令时,由于取指令单元不能直接访问寄存器,因此,取指令单元可以采用分支目标缓冲器(branch target buffer,BTB)来预测跳转目标地址,或者,取指令单元等到后续的执行单元根据目标指令的上一指令从寄存器中读取出偏移地址,并将目标指令的上一指令的虚拟地址与从寄存器中读取出偏移地址相加之后,将执行单元相加得到的地址确定为跳转目标地址。需要说明的是,在处理器的流水线中,执行单元可以对指令进行识别,当执行单元识别出指令为非直接分支指令时,执行单元从寄存器中读取出偏移地址,可以根据偏移地址计算跳转目标地址,并向取指令单元反馈跳转目标地址。还需要说明的是,处理器上电之后,可以进行地址复位,取指令单元可以根据复位虚拟地址获取处理器上电之后的第一条指令,之后处理器按照上述方法取指令。
在本申请中,取指令单元根据目标指令的虚拟地址取指令可以包括:取指令单元根据目标指令的虚拟地址和地址映射确定目标指令的物理地址,根据目标指令的物理地址从存储空间中获取目标指令。其中,地址映射可以为物理指标物理标记(Physical IndexPhysical Tag,PIPT)地址映射或虚拟索引物理标记(Virtual Index Physical Tag,VIPT)地址映射,也可以为直接映射(direct map)。请参考图2,其示出了本申请实施例所涉及的一种地址映射示意图,该地址映射示意图可以表示PIPT地址映射或VIPT地址映射,参见图2,虚拟地址存储在虚拟地址空间中,物理地址存储在物理地址空间中,该物理地址空间通常为处理器的一级指令缓存,映射表用于记录虚拟地址空间中存储的虚拟地址与物理地址空间中存储的物理地址的映射关系,取指令单元可以根据目标指令的虚拟地址查找映射表得到目标指令的物理地址。如图2所示,在PIPT地址映射或VIPT地址映射中,不同的虚拟地址可以映射到相同的物理地址,相同的物理地址存储着相同的指令,从而该不同的虚拟地址存在相同的偏移地址,将该不同的虚拟地址分别与该偏移地址相加得到的跳转目标地址不同。但是需要说明的是,在PIPT地址映射或VIPT地址映射中,相互对应的虚拟地址和物理地址中,虚拟地址的低位地址等于物理地址的低位地址,因此,将该不同的虚拟地址分别与该相同的偏移地址相加得到的不同的跳转目标地址中,低位地址是相同的,该低位地址的宽度可以根据页表的大小(或称为页表的粒度)确定,示例地,当页表的大小为4KB(千字节)时,该低位地址的宽度等于12比特(bit)(4KB=212bit),也即是,虚拟地址中最低的12比特与物理地址中最低的12比特相同,当页表的大小为64KB时,该低位地址的宽度等于16比特(64KB=216bit),也即是,虚拟地址中最低的16比特与物理地址中最低的16比特相同。请参考图3,其示出了本申请实施例所涉及的另一种地址映射示意图,该地址映射示意图可以表示直接映射,参见图3,虚拟地址存储在虚拟地址空间中,物理地址存储在物理地址空间中,该物理地址空间通常为处理器的一级指令缓存。在直接映射中,无需根据采用映射表来查找物理地址,在根据目标指令的虚拟地址和地址映射确定目标指令的物理地址时,可以将目标指令的虚拟地址的低位地址确定为目标指令的物理地址,或者,将目标指令的虚拟地址确定为目标指令的物理地址,具体是将目标指令的虚拟地址的低位地址确定为目标指令的物理地址,还是将目标指令的虚拟地址确定为目标指令的物理地址,可以根据目标指令的物理地址的宽度来确定。
随着应用需求的增加,处理器的地址宽度不断的增加(例如处理器的地址宽度从32比特增加至64比特),使得将偏移地址与虚拟地址相加的计算量也相应增大,因此确定目标指令的虚拟地址的时延较大。此外,不同直接分支指令所包含的偏移地址的宽度可能不同,不同直接分支指令所包含的偏移地址在指令空间中可能没有对齐,偏移地址的宽度与目标指令的上一指令的虚拟地址的宽度可能不同,在将偏移地址与目标指令的上一指令的虚拟地址相加之前,需要先对偏移地址进行符号扩展,使偏移地址的宽度与目标指令的上一指令的虚拟地址的宽度相等,且偏移地址与目标指令的上一指令的虚拟地址对齐,然后再按位将偏移地址与目标指令的上一指令的虚拟地址相加得到目标指令的虚拟地址,这就导致确定目标指令的虚拟地址的时延进一步增大。示例地,请参考图4,其示出了本申请实施例所涉及的一种直接分支指令的示意图,参见图4,指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL均为直接分支指令,每个指令的指令空间(instructionfield)为第0比特至第31比特,imm*表示存储偏移地址的指令空间,*表示偏移地址的宽度。如图4所示,指令B.cond所包含的偏移地址的宽度、指令CBNZ所包含的偏移地址的宽度和指令CBZ所包含的偏移地址的宽度均为19比特,且指令B.cond中存储偏移地址的指令空间、指令CBNZ中存储偏移地址的指令空间和指令CBZ中存储偏移地址的指令空间均为第5比特至第23比特,指令TBNZ所包含的偏移地址的宽度和指令TBZ所包含的偏移地址的宽度均为14比特,且指令TBNZ中存储偏移地址的指令空间和指令TBZ中存储偏移地址的指令空间均为第5比特至18比特,指令B所包含的偏移地址的宽度和指令BL所包含的偏移地址的宽度均为26比特,且指令B中存储偏移地址的指令空间和指令BL中存储偏移地址的指令空间均为第0比特至第25比特。根据图4不难理解,指令B.cond、指令TBNZ以及指令B所包含的偏移地址在指令空间中没有对齐。
假设目标指令的上一指令的虚拟地址的宽度为64,取指令单元对偏移地址进行符号扩展,再按位将偏移地址与目标指令的上一指令的虚拟地址相加得到目标指令的虚拟地址可以采用下述方程式(1)来表示:
方程式(1)br_trgt[63:0]=cur_pc[63:0]+{{(64-*){imm[*]}},imm[(*-1):0]}
在该方程式(1)中,br_trgt[63:0]表示目标指令的虚拟地址(也即是跳转目标地址),cur_pc[63:0]表示目标指令的上一指令的虚拟地址,*表示偏移地址的宽度,imm[*]表示偏移地址的符号(也即是偏移地址的最高位的符号),imm[(*-1):0]表示偏移地址,{(64-*){imm[*]}是偏移地址的符号扩展,表示将imm[*]复制(64-*)比特,{{(64-*){imm[*]}},imm[(*-1):0]}表示扩展后的偏移地址。示例地,假设*=14,imm[(*-1):0]=10101010101010,则imm[*]=1,{(64-*){imm[*]}表示将1复制50(50=64-14)比特,{{(64-*){imm[*]}},imm[(*-1):0]}表示将复制的50比特的1添加在10101010101010的高位得到扩展后的偏移地址。需要说明的是,在该方程式(1)中,如果imm[*]为0,则该方程式(1)表示把64比特的虚拟地址(即,目标指令的上一指令的虚拟地址)与64比特的偏移地址(即,扩展后的偏移地址)相加得到64比特的虚拟地址(即,目标指令的虚拟地址),如果imm[*]为1,则该方程式(1)表示把64比特的虚拟地址与64比特的偏移地址相减得到64比特的虚拟地址。
根据以上描述不难理解,无论跳转目标地址是取指令单元根据直接分支指令中的偏移地址与目标指令的上一指令的虚拟地址计算得到的,还是执行单元根据偏移地址与目标指令的上一指令的虚拟地址计算得到的,或者,是取指令单元采用BTB预测出来的,由于处理器的地址宽度的增加,确定跳转目标地址的时延很大,此外,在同一级流水线的中,除了确定跳转目标地址之外,还需要做其他逻辑运算,导致处理器处理指令的时延很大,直接影响处理器的处理速度。
为了减小确定跳转目标地址的时延,相关技术中,在将指令写入缓存之前,预先将指令解码,然后再用简单的方法对指令进行重新编码,因此在取指令的过程中,只需对该重新编码后的指令进行简单的解码,可以节省取指令过程中对指令解码占用的时间,缩短确定跳转目标地址的时延,提高处理器的处理速度。但是该方案减小确定跳转目标地址的时延的力度较低。相关技术中,还可以在流水线中增加流水线级,以将部分的计算逻辑分配到增加的流水线级中,但是,增加流水线级会使整个流水线的长度增加,导致时延较大,且还会由于异常、预测错误和缓存丢失(cache miss)等导致处理器的性能下降。
本申请实施例提供的虚拟地址确定方法及装置、处理器、存储介质,在取指令之前预计算出目标指令的虚拟地址中的部分地址,在取指令的过程中,只需要计算目标指令的虚拟地址中的剩余地址,然后将预计算出的部分地址与剩余地址合并得到目标指令的虚拟地址(也即是跳转目标地址),由于预计算出了部分地址,因此在取指令的过程中需要计算的地址的宽度较小,可以减少确定跳转目标地址的时延,提高处理器的处理速度。本申请实施例提供的方案请参考下述各个实施例。需要说明的是,在下述各个实施例中,目标指令为需要获取的指令,“上一指令”为一名词,上一指令为目标指令的上一个指令,在获取目标指令之前,该上一指令已经获取,且在下述实施例中,所有的低位地址、所有的中位地址、所有的高位地址和所有的偏移地址等均指的是虚拟地址,偏移地址指的是上一指令所包含的偏移地址。
请参考图5,其示出了本申请实施例提供的一种虚拟地址确定方法的方法流程图,该虚拟地址确定方法可以用于确定目标指令的虚拟地址。参见图5,该方法包括:
步骤501、计算待获取的目标指令的低位地址。
在本申请实施例中,取指令单元可以根据目标指令的上一指令的虚拟地址的低位地址和目标指令的上一指令所包含的偏移地址计算目标指令的低位地址。其中,低位地址的宽度可以根据地址映射方法、页表的大小以及目标指令的上一指令所包含的偏移地址的宽度等确定。根据地址映射的不同,取指令单元可以采用不同的方式计算目标指令的低位地址。可选地,当地址映射为PIPT地址映射或VIPT地址映射时,取指令单元可以根据目标指令的上一指令的低位地址和目标指令的上一指令所包含的偏移地址的低位地址计算目标指令的低位地址,计算过程可以参考下述图6所示实施例;当地址映射为直接映射时,取指令单元可以根据目标指令的上一指令的低位地址和目标指令的上一指令所包含的偏移地址计算目标指令的低位地址,计算过程可以参考下述图10所示实施例。
步骤502、将目标指令的低位地址存储至目标指令的上一指令的指令空间。
取指令单元可以将目标指令的低位地址存储至目标指令的上一指令的指令空间,以便于后续确定目标指令的虚拟地址时,直接从目标指令的上一指令的指令空间读取目标指令的低位地址,从而节省计算目标指令的低位地址的时间,减小确定目标指令的虚拟地址的时延。
步骤503、将目标指令的上一指令写入一级指令缓存。
其中,一级指令缓存为用于存储指令的一级缓存,一级缓存与主存(取指令单元可以为主存中的单元)的交互速度较快,因此,取指令单元可以将目标指令的上一指令写入一级指令缓存,以便于取指令过程中能够快速的读取到目标指令的上一指令。在本申请实施例中,一级指令缓存中,不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐,因此,目标指令的上一指令的指令空间中存储的低位地址在该上一指令的指令空间的第0比特对齐,也即是,目标指令的低位地址与目标指令的上一指令的指令空间的第0比特对齐。
步骤504、从目标指令的上一指令的指令空间中读取目标指令的低位地址。
当取指令单元需要获取目标指令时,取指令单元可以从目标指令的上一指令的指令空间中读取目标指令的低位地址,根据步骤501至步骤503不难理解,该目标指令的低位地址为将目标指令的上一指令写入一级指令缓存之前计算得到并存储在该上一指令的指令空间中的地址。
步骤505、确定目标指令的剩余地址,目标指令的剩余地址的宽度与目标指令的低位地址的宽度之和等于目标指令的上一指令的虚拟地址的宽度。
取指令单元从目标指令的上一指令的指令空间中读取目标指令的低位地址后,可以确定目标指令的剩余地址,取指令单元可以采用目标指令的上一指令的虚拟地址的宽度减去目标指令的低位地址的宽度得到目标指令的剩余地址的宽度,进而确定目标指令的剩余地址。可选地,当一级指令缓存采用PIPT地址映射或VIPT地址映射时,该剩余地址包括中位地址和高位地址,取指令单元确定目标指令的剩余地址的过程可以参考下述图6所示实施例,当一级指令缓存采用直接映射时,该剩余地址包括高位地址,取指令单元确定目标指令的剩余地址的过程可以参考下述图10所示实施例。
步骤506、将目标指令的低位地址与目标指令的剩余地址合并,得到目标指令的虚拟地址。
取指令单元从目标指令的上一指令的指令空间中读取目标指令的低位地址,且确定出目标指令的剩余地址后,可以将目标指令的低位地址与目标指令的剩余地址合并,得到目标指令的虚拟地址。可选地,取指令单元可以按照地址位的高低将目标指令的低位地址与目标指令的剩余地址合并,且在同一虚拟地址中,地址位从右向左依次升高。例如,取指令单元将目标指令的剩余地址排布在目标指令的低位地址的高位,得到目标指令的虚拟地址。
综上所述,本申请实施例提供的虚拟地址确定方法,由于目标指令的低位地址是从目标指令的上一指令的指令空间中读取到的,在确定目标指令的虚拟地址的过程中,无需计算目标指令的低位地址,只需要计算目标指令的剩余地址(剩余地址为目标指令的虚拟地址中除低位地址之外的地址),然后将目标指令的剩余地址与目标指令的低位地址合并就可以得到目标指令的虚拟地址,因此可以减小确定目标指令的虚拟地址的计算量,有助于解决确定目标指令的虚拟地址的时延较大,处理器的处理速度较慢的问题,减小确定目标指令的虚拟地址的时延,提高处理器的处理速度。
请参考图6,其示出了本申请实施例提供的另一种虚拟地址确定方法的方法流程图,该虚拟地址确定方法可以用于确定目标指令的虚拟地址,该图6以地址映射为PIPT地址映射或VIPT地址映射为例进行说明,在PIPT地址映射或VIPT地址映射中,目标指令的剩余地址可以包括中位地址和高位地址。参见图6,该方法包括:
步骤601、确定目标指令的上一指令的虚拟地址和目标指令的上一指令所包含的偏移地址。
根据上文的描述不难理解,取指令单元通常根据指令的虚拟地址取指令,因此,当取指令单元取出目标指令的上一指令时,目标指令的上一指令的虚拟地址对于取指令单元而言是已知的。在本申请实施例中,目标指令的上一指令中包含偏移地址,取指令单元可以对目标指令的上一指令解码得到目标指令的上一指令所包含的偏移地址。
步骤602、根据页表的大小,从目标指令的上一指令的虚拟地址中确定目标指令的上一指令的低位地址,并从目标指令的上一指令所包含的偏移地址中确定目标指令的上一指令所包含的偏移地址的低位地址。
其中,目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址的低位地址对齐且宽度相等。在本申请实施例中,页表的大小也即是页表的粒度,页表的大小可以表示为2n,n为大于或等于1的整数,该n即为低位地址的宽度。取指令单元可以将目标指令的上一指令的虚拟地址中最低的n比特确定为目标指令的上一指令的低位地址,将目标指令的上一指令所包含的偏移地址中最低的n比特确定为该偏移地址的低位地址,其中,虚拟地址为可以PC地址。示例地,假设页表的大小为4KB,则n等于12,取指令单元可以将目标指令的上一指令的虚拟地址中最低的12比特确定为该上一指令的低位地址,将目标指令的上一指令所包含的偏移地址中最低的12比特确定为该偏移地址的低位地址。
示例地,假设虚拟地址为PC地址,cur_pc表示目标指令的上一指令的虚拟地址(由于在确定目标指令的虚拟地址时,目标指令的上一指令的虚拟地址是已知的,因此目标指令的上一指令的虚拟地址可以采用cur_pc表示),imm表示目标指令的上一指令所包含的偏移地址,cur_pc_lo表示目标指令的上一指令的低位地址,imm_lo表示目标指令的上一指令所包含的偏移地址的低位地址,则cur_pc_lo可以为cur_pc最低的n比特,imm_lo可以为imm最低的n比特。
步骤603、将目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址的低位地址相加,得到目标指令的低位地址。
取指令单元可以将目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址的低位地址按位相加,得到目标指令的低位地址,该目标指令的低位地址与目标指令的上一指令的低位地址对齐且宽度相等。示例地,当目标指令的上一指令的低位地址为目标指令的上一指令的虚拟地址中最低的12比特,且偏移地址的低位地址为偏移地址最低的12比特时,目标指令的低位地址也为12比特,且目标指令的低位地址与目标指令的上一指令的低位地址对齐。
可选地,假设虚拟地址为PC地址,br_trgt表示目标指令的虚拟地址,br_trgt_lo表示目标指令的低位地址,cur_pc_lo表示目标指令的上一指令的低位地址,imm_lo表示目标指令的上一指令所包含的偏移地址的低位地址,则br_trgt_lo为cur_pc_lo与imm_lo相加得到的目标指令的低位地址,br_trgt_lo与cur_pc_lo对齐且宽度相等。
需要说明的是,上述步骤601至步骤603可以理解为,在地址映射为PIPT地址映射或VIPT地址映射时,对图5所示实施例中的步骤501的细化。
步骤604、将目标指令的低位地址存储至目标指令的上一指令的指令空间。
其中,不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐。
可选地,取指令单元可以先对目标指令的上一指令的指令空间中存储的偏移地址进行位置调整,使该偏移地址在该上一指令的指令空间的第0比特对齐,然后再删除该偏移地址的低位地址得到空闲指令空间,将目标指令的低位地址存储至该空闲指令空间,从而使不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐。
示例地,请参考图7,其示出了本申请实施例提供的一种指令空间的示意图,参见图7,指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL中,每个指令的指令空间为第0比特至第31比特,指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL中均存储有低位地址,且不同指令中存储的可以是不同目标指令的低位地址,指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL的指令空间中存储的低位地址在指令空间的第0比特对齐。在本申请实施例中,目标指令的上一指令可以为图7中的指令B.cond,目标指令的低位地址可以为指令B.cond的指令空间中的br_trgt_lo[11:0],br_trgt_lo[11:0]表示目标指令的低位地址的宽度为12比特,且目标指令的低位地址从目标指令的上一指令的第0比特开始。对比图4和图7可以看出,取指令单元将图4所示的指令B.cond的指令空间中存储的偏移地址从第5比特至第23比特调整至第0比特至第18比特,且删除了偏移地址的最低的12比特得到空闲指令空间,该空闲指令空间为从指令B.cond的第0比特至第11比特的空间,取指令单元将br_trgt_lo[11:0]存储至该空闲指令空间。指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL的情况与指令B.cond的类似,在此不再赘述。
需要说明的是,在将目标指令的低位地址存储至目标指令的上一指令的指令空间的过程中,对于偏移地址的剩余地址,取指令单元通常仅调整偏移地址的剩余地址在指令空间中的位置,而不对该偏移地址的剩余地址进行修改,通常可以将偏移地址拆分为低位地址和高位地址,因此偏移地址的剩余地址也即是偏移地址的高位地址。示例地,请继续对比图4和图7,imm_hi[6:0]表示偏移地址的高位地址,在将br_trgt_lo[11:0]存储至指令B.cond的指令空间的过程中,取指令单元仅对imm_hi[6:0]的位置进行了调整。指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL的情况与指令B.cond的情况类似,在此不再赘述。
步骤605、将低位进位存储至扩展指令空间。
在本实施例中,低位进位为将目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址的低位地址相加产生的进位,该低位进位可以为0或1,当该低位进位为0时,可以理解为:在将目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址的低位地址按位相加的过程中没有产生进位。
其中,扩展指令空间为对上一指令的指令空间进行扩展得到的指令空间。可选地,取指令单元可以对目标指令的上一指令的指令空间进行扩展得扩展指令空间,然后将低位进位存储至扩展指令空间中。示例地,当目标指令的上一指令为图7中的指令B.cond时,取指令单元可以对指令B.cond的指令空间进行扩展,得到第32比特的指令空间,并将低位进位存储至指令B.cond的第32比特的指令空间中。
需要说明的是,本申请实施例将低位进位存储至扩展指令空间,可以便于确定目标指令的剩余地址的过程中,将低位进位与目标指令的上一指令的剩余地址相加,从而快速计算出目标指令的剩余地址。
步骤606、将目标指令的上一指令写入一级指令缓存。
其中,一级指令缓存中,不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐。示例地,图7所示的指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL均可以为一级指令缓存中的指令,指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL中存储的低位地址均在指令空间的第0比特对齐。可选地,取指令单元可以调用处理器的写命令将目标指令的上一指令写入一级指令缓存,详细的写入过程可以参考相关技术,本实施例在此不再赘述。
需要说明的是,上述步骤601至步骤606通常是在取指令单元获取目标指令之前进行的,下述步骤607至步骤614为取指令单元确定目标指令的虚拟地址的过程,该步骤607至步骤614可以发生在取指令单元获取目标指令的过程中。
步骤607、从目标指令的上一指令的指令空间中读取目标指令的低位地址。
根据步骤601至步骤606的描述不难理解,该目标指令的低位地址为将目标指令的上一指令写入一级指令缓存之前计算得到并存储在上一指令的指令空间中的地址。
可选地,取指令单元可以调用处理器的读命令从目标指令的上一指令的指令空间中读取目标指令的低位地址,详细的读取过程可以参考相关技术,本实施例在此不再赘述。
步骤608、从目标指令的上一指令所包含的偏移地址中确定目标指令的上一指令所包含的偏移地址的高位地址。
其中,目标指令的上一指令所包含的偏移地址由该偏移地址的高位地址和该偏移地址的低位地址组成。取指令单元可以将该偏移地址中,除上述步骤602中确定的偏移地址的低位地址之外的地址确定为该偏移地址的高位地址。示例地,假设目标指令的上一指令所包含的偏移地址为19比特,目标指令的上一指令所包含的偏移地址的低位地址为该偏移地址中最低的12比特,则目标指令的上一指令所包含的偏移地址的高位地址为该19比特的偏移地址中,除最低的12比特之外的地址,也即是,目标指令的上一指令所包含的偏移地址的高位地址为该偏移地址中最高的7比特。
可选地,假设虚拟地址为PC地址,imm表示目标指令的上一指令所包含的偏移地址,imm_lo表示目标指令的上一指令所包含的偏移地址的低位地址,imm_hi表示目标指令的上一指令所包含的偏移地址的高位地址,则imm_hi可以为imm中除imm_lo之外的地址。在本实施例中,imm、imm_hi和imm_lo的关系可以采用下述方程式(2)表示:
方程式(2)imm={imm_hi,imm_lo}。
步骤609、根据目标指令的上一指令所包含的偏移地址的高位地址,从目标指令的上一指令的虚拟地址中确定目标指令的上一指令的中位地址。
其中,目标指令的上一指令的中位地址与目标指令的上一指令所包含的偏移地址的高位地址对齐且宽度相等。取指令单元可以将目标指令的上一指令的虚拟地址中,与偏移地址的高位地址对齐且宽度相等的部分确定为目标指令的上一指令的中位地址,该目标指令的上一指令的中位地址与目标指令的上一指令的低位地址连续。可选地,取指令单元可以将与目标指令的上一指令的低位地址相邻的d比特确定为目标指令的上一指令的中位地址,d表示偏移地址的高位地址的宽度。示例地,假设目标指令的上一指令所包含的偏移地址为该偏移地址中最高的7比特,则取指令单元可以将目标指令的上一指令的虚拟地址中,与目标指令的上一指令的低位地址相邻的7比特确定为目标指令的上一指令的中位地址。
可选地,假设虚拟地址为PC地址,cur_pc表示目标指令的上一指令的虚拟地址,cur_pc_lo表示目标指令的上一指令的低位地址,cur_pc_mid表示目标指令的上一指令的中位地址,imm_hi表示目标指令的上一指令所包含的偏移地址的高位地址,则cur_pc_mid为cur_pc中与cur_pc_lo相邻的d比特,cur_pc_mid与imm_hi对齐且宽度相等。
步骤610、从扩展指令空间中读取低位进位。
其中,扩展指令空间为对上一指令的指令空间进行扩展得到的指令空间,该扩展指令空间为一级指令缓存中的指令空间,该低位进位也即是步骤605中,存储至扩展指令空间的进位。可选地,取指令单元可以调用处理器的读命令从扩展指令空间中读取低位进位,详细的读取过程可以参考相关技术,本实施例在此不再赘述。
步骤611、将目标指令的上一指令的中位地址、目标指令的上一指令所包含的偏移地址的高位地址和该低位进位相加,得到目标指令的中位地址。
取指令单元可以将目标指令的上一指令的中位地址、目标指令的上一指令所包含的偏移地址的高位地址和低位进位相加按位相加,得到目标指令的中位地址,该目标指令的中位地址与目标指令的上一指令的中位地址对齐且宽度相等。示例地,当目标指令的上一指令的中位地址为目标指令的上一指令的虚拟地址中,与该上一指令的低位地址相邻的7比特,且偏移地址的高位地址为偏移地址最高的7比特时,目标指令的中位地址也为7比特,且目标指令的中位地址与目标指令的上一指令的中位地址对齐。
可选地,假设虚拟地址为PC地址,br_trgt表示目标指令的虚拟地址,br_trgt_mid表示目标指令的中位地址,cur_pc_mid表示目标指令的上一指令的中位地址,imm_hi表示目标指令的上一指令所包含的偏移地址的高位地址,C1表示低位进位,则br_trgt_mid为cur_pc_mid、imm_hi与C1相加得到的目标指令的中位地址,br_trgt_mid与cur_pc_mid对齐且宽度相等。
步骤612、从目标指令的上一指令的虚拟地址中确定目标指令的上一指令的高位地址。
其中,目标指令的上一指令的虚拟地址由目标指令的上一指令的高位地址、目标指令的上一指令的中位地址和目标指令的上一指令的低位地址组成。
取指令单元可以将目标指令的上一指令的虚拟地址中,除上述602确定的目标指令的上一指令的低位地址,以及上述步骤609中确定的目标指令的上一指令的中位地址之外的地址确定为目标指令的上一指令的高位地址。示例地,假设目标指令的上一指令的虚拟地址为64比特,目标指令的上一指令的低位地址为该上一指令的虚拟地址中最低的12比特,目标指令的上一指令的中位地址为该上一指令的虚拟地址中与该最低的12比特相邻的7比特,则目标指令的上一指令的高位地址为目标指令的上一指令的虚拟地址中最高的45比特。
可选地,假设虚拟地址为PC地址,cur_pc表示目标指令的上一指令的虚拟地址,cur_pc_lo表示目标指令的上一指令的低位地址,cur_pc_mid表示目标指令的上一指令的中位地址,cur_pc_hi表示目标指令的上一指令的高位地址,则cur_pc_hi为cur_pc中,除cur_pc_lo和cur_pc_mid之外的地址。在本实施例中,cur_pc、cur_pc_lo、cur_pc_mid和cur_pc_hi的关系可以采用下述方程式(3)表示:
方程式(3)cur_pc={cur_pc_hi,cur_pc_mid,cur_pc_lo}。
步骤613、根据中位进位、目标指令的上一指令的高位地址和目标指令的上一指令所包含的偏移地址的符号,确定目标指令的高位地址。
其中,中位进位为将目标指令的上一指令的中位地址、目标指令的上一指令所包含的偏移地址的高位地址和低位进位相加产生的进位,中位进位可以为0或1,当该中位进位为0时,可以理解为:在将目标指令的上一指令的中位地址、目标指令的上一指令所包含的偏移地址的高位地址和低位进位按位相加的过程中没有产生进位。偏移地址的符号为偏移地址的最高位的符号,偏移地址的符号可以为0或1。
可选地,取指令单元根据中位进位、目标指令的上一指令的高位地址和目标指令的上一指令所包含的偏移地址的符号,确定目标指令的高位地址可以包括:当中位进位为1且偏移地址的符号为0时,取指令单元确定目标指令的高位地址等于目标指令的上一指令的高位地址加1;当中位进位为0且偏移地址的符号为0,或者,中位进位为1且偏移地址的符号为1时,取指令单元确定目标指令的高位地址等于目标指令的上一指令的高位地址;当中位进位为0且偏移地址的符号为1时,取指令单元确定目标指令的高位地址等于目标指令上一指令的高位地址减1。
可选地,假设虚拟地址为PC地址,br_trgt表示目标指令的虚拟地址,br_trgt_hi表示目标指令的高位地址,imm[*]表示偏移地址的符号,cur_pc_hi表示目标指令的上一指令的高位地址,C2表示中位进位,则当C2=1且imm[*]=0时,br_trgt_hi=cur_pc_hi+1;当C2=0且imm[*]=0,或者,C2=1且imm[*]=1时,br_trgt_hi=cur_pc_hi;当C2=0且imm[*]=1时,br_trgt_hi=cur_pc_hi-1。
需要说明的是,上述步骤608至步骤613可以理解为,在地址映射为PIPT地址映射或VIPT地址映射时,对图5所示实施例中的步骤505的细化。
步骤614、将目标指令的低位地址、目标指令的中位地址与目标指令的高位地址合并,得到目标指令的虚拟地址。
可选地,取指令单元可以按照地址位的高低将目标指令的低位地址、目标指令的中位地址与目标指令的高位地址合并,得到目标指令的虚拟地址,且在同一虚拟地址中,地址位从右向左依次升高。例如,取指令单元将目标指令的中位地址排布在目标指令的低位地址的高位,将目标指令的高位地址排布在目标指令的中位地址的高位,得到目标指令的虚拟地址。
可选地,假设虚拟地址为PC地址,br_trgt表示目标指令的虚拟地址,br_trgt_lo表示目标指令的低位地址,br_trgt_mid表示目标指令的中位地址,br_trgt_hi表示目标指令的高位地址,则在本实施例中,br_trgt、br_trgt_lo、br_trgt_mid和br_trgt_hi的关系可以采用下述方程式(4)表示:
方程式(4)br_trgt={br_trgt_hi,br_trgt_mid,br_trgt_lo}。
需要说明的是,本申请实施例提供的虚拟地址确定方法步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
综上所述,本申请实施例提供的虚拟地址确定方法,由于目标指令的低位地址是从目标指令的上一指令的指令空间中读取到的,在确定目标指令的虚拟地址的过程中,无需计算目标指令的低位地址,只需要计算目标指令的剩余地址(剩余地址为目标指令的虚拟地址中除低位地址之外的地址),然后将目标指令的剩余地址与目标指令的低位地址合并就可以得到目标指令的虚拟地址,因此可以减小确定目标指令的虚拟地址的计算量,有助于解决确定目标指令的虚拟地址的时延较大,处理器的处理速度较慢的问题,减小确定目标指令的虚拟地址的时延,提高处理器的处理速度。
本申请实施例提供的虚拟地址确定方法,大大减少了确定虚拟地址过程中,需要进行加法运算的地址宽度,减少了确定虚拟地址的时延;此外,本申请实施例提供的方案无需增加流水线级,避免由于增加流水线级导致的时延,以及避免由于异常、预测错误和缓存丢失等导致处理器的性能下降。
以下结合图8和图9对图6所示实施例提供的方案进行举例说明。该图8和图9以虚拟地址为PC地址,且图8以偏移地址的符号为0,图9以偏移地址的符号为1为例进行说明。
其中,在图8和图9中,cur_pc表示目标指令的上一指令的PC地址,cur_pc_lo表示目标指令的上一指令的低位地址,cur_pc_mid表示目标指令的上一指令的中位地址,cur_pc_hi表示目标指令的上一指令的高位地址;imm表示目标指令的上一指令所包含的偏移地址,imm_lo表示目标指令的上一指令所包含的偏移地址的低位地址,imm_hi表示目标指令的上一指令所包含的偏移地址的高位地址;br_trgt表示目标指令的PC地址,br_trgt_lo表示目标指令的低位地址,br_trgt_mid表示目标指令的中位地址,br_trgt_hi表示目标指令的高位地址;C1表示低位进位,C2表示中位进位,在执行图6所示实施例的方案之前,可以先根据imm的符号对imm进行符号扩展,使imm的宽度与cur_pc的宽度相等。
如图8和图9所示,在确定br_trgt之前,首先将cur_pc拆分成cur_pc_lo、cur_pc_mid和cur_pc_hi,将imm拆分成imm_lo和imm_hi,cur_pc_lo与imm_lo对齐,cur_pc_mid与imm_hi对齐,此过程可以与图6所示实施例的步骤601和步骤602部分对应;接着,根据步骤603提供的方案,采用公式{C1,br_trgt_lo}=cur_pc_lo+imm_lo计算得到br_trgt_lo并产生低位进位C1;之后,根据步骤604提供的方案将br_trgt_lo存储至目标指令的上一指令的指令空间,根据步骤605提供的方案将C1存储至扩展指令空间;最后,根据步骤606提供的方案将目标指令的上一指令写入一级指令缓存。
如图8和图9所示,在确定br_trgt的过程中,首先,根据步骤607提供的方案从目标指令的上一指令的指令空间中读取br_trgt_lo;接着,根据步骤608提供的方案确定imm_hi,并根据步骤609提供的方案确定cur_pc_mid;之后,步骤610提供的方案从扩展指令空间中读取C1;然后,根据步骤611提供的方案,采用公式{C2,br_trgt_mid}=cur_pc_mid+imm_hi+C1计算得到br_trgt_mid并产生中位进位C2;之后,根据步骤612提供的方案确定cur_pc_hi,并根据步骤613提供的方案,根据cur_pc_hi、偏移地址的符号和C2确定br_trgt_hi,如图8所示,如果C2=1且偏移地址的符号为0,则br_trgt_hi=cur_pc_hi+1,如果C2=0且偏移地址的符号为0,则br_trgt_hi=cur_pc_hi,如图9所示,如果C2=1且偏移地址的符号为1,则br_trgt_hi=cur_pc_hi,如果C2=0且偏移地址的符号为1,则br_trgt_hi=cur_pc_hi-1;最后,根据步骤614提供的方案将br_trgt_lo、br_trgt_mid和br_trgt_hi合并得到br_trgt,br_trgt={br_trgt_hi,br_trgt_mid,br_trgt_lo}。
根据以上描述可知,在确定br_trgt的过程中,br_trgt_lo可以从目标指令的上一指令的指令空间中读取到,br_trgt_hi可以根据C2以及偏移地址的符号在cur_pc_hi+1、cur_pc_hi和cur_pc_hi-1中选择,只需要计算出br_trgt_mid,就可以将br_trgt_lo、br_trgt_mid和br_trgt_hi合并得到br_trgt,大大减少了确定br_trgt的时延。例如,当cur_pc为一个64比特的虚拟地址,页表的大小为4KB(4KB=212bit),偏移地址的宽度为26比特时,由于12比特的br_trgt_lo可以预计算并存储目标指令的上一指令的指令空间中,38(38=64-26)比特的br_trgt_hi可以在前一级流水线级预先确定,因此,计算br_trgt的过程由相关技术中的宽度为64比特的cur_pc+imm的运算变成宽度为14(14=26-12,)比特的cur_pc_mid+imm_hi的运算,大大减少了确定br_trgt的时延。
请参考图10,其示出了本申请实施例提供的又一种虚拟地址确定方法的方法流程图,该虚拟地址确定方法可以用于确定目标指令的虚拟地址,该图10以地址映射为直接映射为例进行说明,在直接映射中,目标指令的剩余地址可以包括高位地址。参见图10,该方法包括:
步骤1001、确定目标指令的上一指令的虚拟地址和目标指令的上一指令所包含的偏移地址。
该步骤1001的实现过程可以参考图6所示实施例的步骤601,本实施例在此不再赘述。
步骤1002、根据目标指令的上一指令所包含的偏移地址确定目标指令的上一指令的低位地址。
其中,目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址对齐且宽度相等。可选地,假设目标指令的上一指令所包含的偏移地址的宽度为w,w为大于或等于1的整数,则取指令单元可以将目标指令的上一指令的虚拟地址中最低的w比特确定为目标指令的上一指令的低位地址,其中,虚拟地址为可以PC地址。
可选地,假设虚拟地址为PC地址,cur_pc表示目标指令的上一指令的虚拟地址,imm表示目标指令的上一指令所包含的偏移地址,cur_pc_lo表示目标指令的上一指令的低位地址,则cur_pc_lo可以为cur_pc最低的w比特,该cur_pc_lo与imm对齐且宽度相等。
步骤1003、将目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址相加,得到目标指令的低位地址。
取指令单元可以将目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址按位相加,得到目标指令的低位地址,该目标指令的低位地址与目标指令的上一指令的低位地址对齐且宽度相等。可选地,当目标指令的上一指令的低位地址为目标指令的上一指令的虚拟地址中最低的w比特,且偏移地址为w比特时,则目标指令的低位地址也为w比特,且目标指令的低位地址与目标指令的上一指令的低位地址对齐。
可选地,假设虚拟地址为PC地址,br_trgt表示目标指令的虚拟地址,br_trgt_lo表示目标指令的低位地址,imm表示目标指令的上一指令所包含的偏移地址,则br_trgt_lo为cur_pc_lo与imm相加得到的目标指令的低位地址,br_trgt_lo与cur_pc_lo对齐且宽度相等。
需要说明的是,上述步骤1001至步骤1003可以理解为,在地址映射为直接映射时,对图5所示实施例中的步骤501的细化。
步骤1004、将目标指令的低位地址存储至目标指令的上一指令的指令空间。
其中,不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐。
可选地,取指令单元可以先对目标指令的上一指令的指令空间中存储的偏移地址进行位置调整,使该偏移地址在该上一指令的指令空间的第0比特对齐,然后再删除该偏移地址的低位地址得到空闲指令空间,将目标指令的低位地址存储至该空闲指令空间,从而使不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐。
示例地,请参考图11,其示出了本申请实施例提供的一种指令空间的示意图,参见图11,指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL中,每个指令的指令空间为第0比特至第31比特,指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL中均存储有低位地址,且不同指令中存储的可以是不同目标指令的低位地址,指令B.cond、指令CBNZ、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL的指令空间中存储的低位地址在指令空间的第0比特对齐。在本申请实施例中,目标指令的上一指令可以为图11中的指令CBNZ,目标指令的低位地址可以为指令CBNZ的指令空间中的br_trgt_lo[18:0],br_trgt_lo[18:0]表示目标指令的低位地址的宽度为19比特,且目标指令的低位地址从目标指令的上一指令的第0比特开始。对比图4和图11可以看出,取指令单元将图4所示的指令CBNZ的指令空间中存储的偏移地址从第5比特至第23比特调整至第0比特至第18比特,且删除了偏移地址得到空闲指令空间,该空闲指令空间为从指令CBNZ的第0比特至第18比特的空间,取指令单元将br_trgt_lo[18:0]存储至该空闲指令空间。指令B.cond、指令CBZ、指令TBNZ、指令TBZ、指令B和指令BL的情况与指令CBNZ的情况类似,在此不再赘述。
步骤1005、从目标指令的上一指令的虚拟地址中确定目标指令的上一指令的高位地址。
其中,目标指令的上一指令的虚拟地址由该上一指令的高位地址和该上一指令的低位地址组成。取指令单元可以将目标指令的上一指令的虚拟地址中,除上述步骤1002中确定的低位地址之外的地址确定为目标指令的上一指令的高位地址。示例地,假设目标指令的上一指令的虚拟地址为64比特,目标指令的上一指令的低位地址为该上一指令的虚拟地址中最低的19比特,则目标指令的上一指令的高位地址为该64比特中,除最低的19比特之外的地址,也即是,目标指令的上一指令的高位地址为该上一指令的虚拟地址中最高的45比特。
可选地,假设虚拟地址为PC地址,cur_pc表示目标指令的上一指令的虚拟地址,cur_pc_lo表示目标指令的上一指令的低位地址,cur_pc_hi表示目标指令的上一指令的高位地址,则cur_pc_hi为cur_pc中除cur_pc_lo之外的地址。在本实施例中,cur_pc、cur_pc_lo和cur_pc_hi的关系可以采用下述方程式(5)表示:
方程式(5)cur_pc={cur_pc_hi,cur_pc_lo}。
步骤1006、根据低位进位、目标指令的上一指令的高位地址和目标指令的上一指令所包含的偏移地址的符号,确定目标指令的高位地址。
在本实施例中,低位进位为将目标指令的上一指令的低位地址和目标指令的上一指令所包含的偏移地址相加产生的进位,该低位进位可以为0或1,当该低位进位为0时,可以理解为:在将目标指令的上一指令的低位地址与目标指令的上一指令所包含的偏移地址按位相加的过程中没有产生进位。偏移地址的符号为偏移地址的最高位的符号,该偏移地址的符号可以为0或1。
可选地,取指令单元根据低位进位、目标指令的上一指令的高位地址和目标指令的上一指令所包含的偏移地址的符号,确定目标指令的高位地址可以包括:当低位进位为1且偏移地址的符号为0时,取指令单元确定目标指令的高位地址等于目标指令的上一指令的高位地址加1;当低位进位为0且偏移地址的符号为0,或者,低位进位为1且偏移地址的符号为1时,取指令单元确定目标指令的高位地址等于目标指令的上一指令的高位地址;当低位进位为0且偏移地址的符号为1时,取指令单元确定目标指令的高位地址等于目标指令的上一指令的高位地址减1。
可选地,假设虚拟地址为PC地址,br_trgt表示目标指令的虚拟地址,br_trgt_hi表示目标指令的高位地址,imm[*]表示偏移地址的符号,cur_pc_hi表示目标指令的上一指令的高位地址,C1表示低位进位,则当C1=1且imm[*]=0时,br_trgt_hi=cur_pc_hi+1;当C1=0且imm[*]=0,或者,C1=1且imm[*]=1时,br_trgt_hi=cur_pc_hi;当C1=0且imm[*]=1时,br_trgt_hi=cur_pc_hi-1。
步骤1007、生成地址指示符号,地址指示符号指示目标指令的高位地址。
取指令单元确定目标指令的高位地址后,由于目标指令的高位地址等于cur_pc_hi+1、cur_pc_hi或cur_pc_hi-1,因此取指令单元可以生成地址指示符号,该地址指示符号指示目标指令的高位地址。可选地,地址指示符号可以采用br_trgt_hi_sel来表示,且地址指示符号可以为2比特,例如,该地址指示符号可以为00、01或10,00指示目标指令的高位地址等于cur_pc_hi,01指示目标指令的高位地址等于cur_pc_hi+1,10指示目标指令的高位地址等于cur_pc_hi-1。需要说明的是,本申请实施例提供的地址指示符号仅仅是示例性的,实际应用中,地址指示符号还可以以其他形式体现,本申请实施例不对地址指示符号进行限定。
步骤1008、将地址指示符号存储至扩展指令空间。
取指令单元生成地址指示符号后,可以对目标指令的上一指令的指令空间进行扩展得扩展指令空间,然后将地址指示符号存储至该扩展指令空间,以便于后续确定目标指令的虚拟地址的过程中,从扩展指令空间中读取地址指示符号,并根据地址指示符号确定目标指令的高位地址,节省计算目标指令的高位地址的时延,减小确定目标指令的虚拟地址的时延。
示例地,当目标指令的上一指令为图11中的指令CBNZ时,取指令单元可以对指令CBNZ的指令空间进行扩展,得到第32比特和第33比特的指令空间,并将地址指示符号存储至指令CBNZ的第32比特和第33比特的指令空间中。
步骤1009、将目标指令的上一指令写入一级指令缓存。
该步骤1009的实现过程可以参考图6所示实施例的步骤606,本实施例在此不再赘述。
需要说明的是,上述步骤1001至步骤1009通常是在取指令单元获取目标指令之前进行的,下述步骤1010至步骤1013为取指令单元确定目标指令的虚拟地址的过程,该步骤1010至步骤1013可以发生在取指令单元获取目标指令的过程中。
步骤1010、从目标指令的上一指令的指令空间中读取目标指令的低位地址。
该步骤1010的实现过程可以参考图6所示实施例的步骤607,本实施例在此不再赘述。
步骤1011、从扩展指令空间中读取地址指示符号。
其中,该扩展指令空间也即是步骤1008中的扩展指令空间。可选地,取指令单元可以调用处理器的读命令从扩展指令空间中读取地址指示符号,详细的读取过程可以参考相关技术,本实施例在此不再赘述。
步骤1012、根据地址指示符号确定目标指令的高位地址。
取指令单元可以根据地址指示符号的指示确定目标指令的高位地址。
可选地,当地址指示符号为00时,取指令单元确定目标指令的高位地址等于cur_pc_hi,当地址指示符号为01时,取指令单元确定目标指令的高位地址等于cur_pc_hi+1,当地址指示符号为10时,取指令单元确定目标指令的高位地址等于cur_pc_hi-1。
需要说明的是,上述步骤1011至步骤1012可以理解为,在地址映射为直接映射时,对图5所示实施例中的步骤505的细化。
步骤1013、将目标指令的低位地址与目标指令的高位地址合并,得到目标指令的虚拟地址。
可选地,取指令单元可以按照地址位的高低将目标指令的低位地址与目标指令的高位地址合并,得到目标指令的虚拟地址,且在同一虚拟地址中,地址位从右向左依次升高。例如,取指令单元将目标指令的高位地址排布在目标指令的低位地址的高位得到目标指令的虚拟地址。
可选地,假设虚拟地址为PC地址,br_trgt表示目标指令的虚拟地址,br_trgt_lo表示目标指令的低位地址,br_trgt_hi表示目标指令的高位地址,则在本实施例中,br_trgt、br_trgt_lo和br_trgt_hi的关系可以采用下述方程式(6)表示:
方程式(6)br_trgt={br_trgt_hi,br_trgt_lo}。
需要说明的是,本申请实施例提供的虚拟地址确定方法步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
综上所述,本申请实施例提供的虚拟地址确定方法,由于目标指令的低位地址是从目标指令的上一指令的指令空间中读取到的,在确定目标指令的虚拟地址的过程中,无需计算目标指令的低位地址,只需要计算目标指令的剩余地址(剩余地址为目标指令的虚拟地址中除低位地址之外的地址),然后将目标指令的剩余地址与目标指令的低位地址合并就可以得到目标指令的虚拟地址,因此可以减小确定目标指令的虚拟地址的计算量,有助于解决确定目标指令的虚拟地址的时延较大,处理器的处理速度较慢的问题,减小确定目标指令的虚拟地址的时延,提高处理器的处理速度。
本申请实施例提供的虚拟地址确定方法,大大减少了确定虚拟地址过程中,需要进行加法运算的地址宽度,减少确定虚拟地址的时延;此外,本申请实施例提供的方案无需增加流水线级,避免由于增加流水线级导致的时延,以及避免由于异常、预测错误和缓存丢失等导致处理器的性能下降。
以下结合图12和图13对图10所示实施例提供的方案进行举例说明。该图12和图13以虚拟地址为PC地址,且图12以偏移地址的符号为0,图13以偏移地址的符号为1为例进行说明。
其中,在图12和图13中,cur_pc表示目标指令的上一指令的PC地址,cur_pc_lo表示目标指令的上一指令的低位地址,cur_pc_hi表示目标指令的上一指令的高位地址;imm表示目标指令的上一指令所包含的偏移地址;br_trgt表示目标指令的PC地址,br_trgt_lo表示目标指令的低位地址,br_trgt_hi表示目标指令的高位地址;C1表示低位进位,在执行图10所示实施例的方案之前,可以先根据imm的符号对imm进行符号扩展,使imm的宽度与cur_pc的宽度相等。
如图12和图13所示,在确定br_trgt之前,首先将cur_pc拆分成cur_pc_lo和cur_pc_hi,cur_pc_lo与imm对齐,此过程可以与图10所示实施例的步骤1001和步骤1002部分对应;接着,根据步骤1003提供的方案,采用公式{C1,br_trgt_lo}=cur_pc_lo+imm计算得到br_trgt_lo并产生低位进位C1;之后,根据步骤1004提供的方案将br_trgt_lo存储至目标指令的上一指令的指令空间,根据步骤1005提供的方案确定cur_pc_hi;接着,根据步骤1006提供的方案,根据cur_pc_hi、偏移地址的符号和C1确定br_trgt_hi,如图12所示,如果C1=1且偏移地址的符号为0,则br_trgt_hi=cur_pc_hi+1,如果C1=0且偏移地址的符号为0,则br_trgt_hi=cur_pc_hi,如图13所示,如果C1=1且偏移地址的符号为1,则br_trgt_hi=cur_pc_hi,如果C1=0且偏移地址的符号为1,则br_trgt_hi=cur_pc_hi-1;之后,根据步骤1007提供的方案,生成地址指示符号,并根据步骤1008提供的方案将地址指示符号存储至扩展指令空间;最后,根据步骤1009提供的方案将目标指令的上一指令写入一级指令缓存。
如图12和图13所示,在确定br_trgt的过程中,首先,根据步骤1010提供的方案从目标指令的上一指令的指令空间中读取br_trgt_lo;接着,根据步骤1011提供的方案从扩展指令空间中读取地址指示符号,并根据步骤1012提供的方案确定br_trgt_hi;最后,根据步骤1013提供的方案将br_trgt_lo和br_trgt_hi合并得到br_trgt,br_trgt={br_trgt_hi,br_trgt_lo}。
根据以上描述可知,在确定br_trgt的过程中,br_trgt_lo可以从目标指令的上一指令的指令空间中读取到,br_trgt_hi可以从目标指令的上一指令的指令空间中读取到的地址指示符号确定,将br_trgt_lo和br_trgt_hi合并得到br_trgt,从而在确定br_trgt的过程中,无需进行加法运算,大大减少了确定br_trgt的时延。
下述为本申请的装置实施例,可以用于执行本申请的方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参考图14,其示出了本申请实施例提供的一种虚拟地址确定装置1400的框图,该虚拟地址确定装置1400可以为处理器中的取指令单元。参见图14,该虚拟地址确定装置1400包括:
第一读取模块1401,用于从待获取的目标指令的上一指令的指令空间中读取目标指令的低位地址,目标指令的低位地址为将上一指令写入一级指令缓存之前计算得到并存储在上一指令的指令空间中的地址;
第一确定模块1402,用于确定目标指令的剩余地址,目标指令的剩余地址的宽度与目标指令的低位地址的宽度之和等于上一指令的虚拟地址的宽度;
合并模块1403,用于将目标指令的低位地址与目标指令的剩余地址合并,得到目标指令的虚拟地址。
综上所述,本申请实施例提供的虚拟地址确定装置,由于目标指令的低位地址是从目标指令的上一指令的指令空间中读取到的,在确定目标指令的虚拟地址的过程中,无需计算目标指令的低位地址,只需要计算目标指令的剩余地址(目标指令的虚拟地址中除低位地址之外的地址),然后将目标指令的剩余地址与目标指令的低位地址合并就可以得到目标指令的虚拟地址,因此可以减小确定目标指令的虚拟地址的计算量,有助于解决确定目标指令的虚拟地址的时延较大,处理器的处理速度较慢的问题,减小确定目标指令的虚拟地址的时延,提高处理器的处理速度。
进一步地,请参考图15,其示出了本申请实施例提供的另一种虚拟地址确定装置1400的框图,参见图15,在图14的基础上,该虚拟地址确定装置1400还包括:
计算模块1404,用于计算目标指令的低位地址;
第一存储模块1405,用于将目标指令的低位地址存储至上一指令的指令空间。
可选地,计算模块1404,用于:
确定上一指令的虚拟地址和上一指令所包含的偏移地址;
根据页表的大小,从上一指令的虚拟地址中确定上一指令的低位地址,并从偏移地址中确定偏移地址的低位地址,上一指令的低位地址与偏移地址的低位地址对齐且宽度相等;
将上一指令的低位地址与偏移地址的低位地址相加,得到目标指令的低位地址,目标指令的低位地址与上一指令的低位地址对齐且宽度相等。
进一步地,请继续参考图15,虚拟地址确定装置1400还包括:
第二存储模块1406,用于将低位进位存储至扩展指令空间,低位进位为将上一指令的低位地址与偏移地址的低位地址相加产生的进位,扩展指令空间为对上一指令的指令空间进行扩展得到的指令空间。
可选地,剩余地址包括中位地址和高位地址,请参考图16,其示出了本申请实施例提供的一种第一确定模块1402的框图,参见图16,第一确定模块1402包括:
第一确定子模块14021,用于从偏移地址中确定偏移地址的高位地址,偏移地址由偏移地址的高位地址和偏移地址的低位地址组成;
第二确定子模块14022,用于根据偏移地址的高位地址,从上一指令的虚拟地址中确定上一指令的中位地址,上一指令的中位地址与偏移地址的高位地址对齐且宽度相等;
读取子模块14023,用于从扩展指令空间中读取所述低位进位;
相加子模块14024,用于将上一指令的中位地址、偏移地址的高位地址和低位进位相加,得到目标指令的中位地址;
第三确定子模块14025,用于从上一指令的虚拟地址中确定上一指令的高位地址,上一指令的虚拟地址由上一指令的高位地址、上一指令的中位地址和上一指令的低位地址组成;
第四确定子模块14026,用于根据中位进位、上一指令的高位地址和偏移地址的符号,确定目标指令的高位地址,中位进位为将上一指令的中位地址、偏移地址的高位地址和低位进位相加产生的进位。
可选地,第四确定子模块10426,用于:
当中位进位为1且偏移地址的符号为0时,确定目标指令的高位地址等于上一指令的高位地址加1;
当中位进位为0且偏移地址的符号为0,或者,中位进位为1且偏移地址的符号为1时,确定目标指令的高位地址等于上一指令的高位地址;
当中位进位为0且偏移地址的符号为1时,确定目标指令的高位地址等于上一指令的高位地址减1。
可选地,计算模块1404,用于:
确定上一指令的虚拟地址和上一指令所包含的偏移地址;
根据偏移地址确定上一指令的低位地址,上一指令的低位地址与偏移地址对齐且宽度相等;
将上一指令的低位地址与偏移地址相加,得到目标指令的低位地址,目标指令的低位地址与上一指令的低位地址对齐且宽度相等。
可选地,剩余地址包括高位地址,请参考图17,其示出了本申请实施例提供的再一种虚拟地址确定装置1400的框图,参见图17,在图15的基础上,该虚拟地址确定装置1400还包括:
第二确定模块1407,用于从上一指令的虚拟地址中确定上一指令的高位地址,上一指令的虚拟地址由上一指令的高位地址和上一指令的低位地址组成;
第三确定模块1408,用于根据低位进位、上一指令的高位地址和偏移地址的符号,确定目标指令的高位地址,低位进位为将上一指令的低位地址和偏移地址相加产生的进位;
生成模块1409,用于生成地址指示符号,地址指示符号指示目标指令的高位地址;
第三存储模块1410,用于将地址指示符号存储至扩展指令空间,扩展指令空间为对上一指令的指令空间进行扩展得到的指令空间。
可选地,第一确定模块1402,用于:
从扩展指令空间中读取地址指示符号;
根据地址指示符号确定目标指令的高位地址。
可选地,第三确定模块1408,用于:
当低位进位为1且偏移地址的符号为0时,确定目标指令的高位地址等于上一指令的高位地址加1;
当低位进位为0且偏移地址的符号为0,或者,低位进位为1且偏移地址的符号为1时,确定目标指令的高位地址等于上一指令的高位地址;
当低位进位为0且偏移地址的符号为1时,确定目标指令的高位地址等于上一指令的高位地址减1。
可选地,一级指令缓存中,不同指令的指令空间中存储的低位地址在指令空间的第0比特对齐。
综上所述,本申请实施例提供的虚拟地址确定装置,由于目标指令的低位地址是从目标指令的上一指令的指令空间中读取到的,在确定目标指令的虚拟地址的过程中,无需计算目标指令的低位地址,只需要计算目标指令的剩余地址(目标指令的虚拟地址中除低位地址之外的地址),然后将目标指令的剩余地址与目标指令的低位地址合并就可以得到目标指令的虚拟地址,因此可以减小确定目标指令的虚拟地址的计算量,有助于解决确定目标指令的虚拟地址的时延较大,处理器的处理速度较慢的问题,减小确定目标指令的虚拟地址的时延,提高处理器的处理速度。
需要说明的是:上述实施例提供的虚拟地址确定装置在确定目标指令的虚拟地址时,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将设备的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。另外,上述实施例提供的虚拟地址确定装置与虚拟地址确定方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请实施例还提供了一种处理器,该处理器包括图14、图15或图17所示的虚拟地址确定装置1400。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机的处理器上运行时,使得处理器执行上述图5、图6或图10所描述的虚拟地址确定方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当计算机程序产品在计算机的处理器上运行时,使得处理器执行上述图5、图6或图10所描述的虚拟地址确定方法。
本申请实施例还提供了一种处理装置,该处理装置包括至少一个电路,该至少一个电路用于执行上述图5、图6或图10所描述的虚拟地址确定方法。
本申请实施例还提供了一种一种芯片,该芯片包括可编程逻辑电路和/或程序指令,当该芯片运行时用于实现图5、图6或图10所描述的虚拟地址确定方法。
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (24)

1.一种虚拟地址确定方法,其特征在于,所述方法包括:
从待获取的目标指令的上一指令的指令空间中读取所述目标指令的低位地址,所述目标指令的低位地址为将所述上一指令写入一级指令缓存之前计算得到并存储在所述上一指令的指令空间中的地址,其中,所述目标指令的低位地址根据所述上一指令的虚拟地址的低位地址和所述上一指令所包含的偏移地址计算得到;
确定所述目标指令的剩余地址,所述目标指令的剩余地址的宽度与所述目标指令的低位地址的宽度之和等于所述上一指令的虚拟地址的宽度;
将所述目标指令的低位地址与所述目标指令的剩余地址合并,得到所述目标指令的虚拟地址。
2.根据权利要求1所述的方法,其特征在于,在所述从待获取的目标指令的上一指令的指令空间中读取所述目标指令的低位地址之前,所述方法还包括:
计算所述目标指令的低位地址;
将所述目标指令的低位地址存储至所述上一指令的指令空间。
3.根据权利要求2所述的方法,其特征在于,所述计算所述目标指令的低位地址,包括:
确定所述上一指令的虚拟地址和所述上一指令所包含的偏移地址;
根据页表的大小,从所述上一指令的虚拟地址中确定所述上一指令的低位地址,并从所述偏移地址中确定所述偏移地址的低位地址,所述上一指令的低位地址与所述偏移地址的低位地址对齐且宽度相等;
将所述上一指令的低位地址与所述偏移地址的低位地址相加,得到所述目标指令的低位地址,所述目标指令的低位地址与所述上一指令的低位地址对齐且宽度相等。
4.根据权利要求3所述的方法,其特征在于,在将所述上一指令的低位地址与所述偏移地址的低位地址相加之后,所述方法还包括:
将低位进位存储至扩展指令空间,所述低位进位为将所述上一指令的低位地址与所述偏移地址的低位地址相加产生的进位,所述扩展指令空间为对所述上一指令的指令空间进行扩展得到的指令空间。
5.根据权利要求4所述的方法,其特征在于,所述剩余地址包括中位地址和高位地址,所述确定所述目标指令的剩余地址,包括:
从所述偏移地址中确定所述偏移地址的高位地址,所述偏移地址由所述偏移地址的高位地址和所述偏移地址的低位地址组成;
根据所述偏移地址的高位地址,从所述上一指令的虚拟地址中确定所述上一指令的中位地址,所述上一指令的中位地址与所述偏移地址的高位地址对齐且宽度相等;
从所述扩展指令空间中读取所述低位进位;
将所述上一指令的中位地址、所述偏移地址的高位地址和所述低位进位相加,得到所述目标指令的中位地址;
从所述上一指令的虚拟地址中确定所述上一指令的高位地址,所述上一指令的虚拟地址由所述上一指令的高位地址、所述上一指令的中位地址和所述上一指令的低位地址组成;
根据中位进位、所述上一指令的高位地址和所述偏移地址的符号,确定所述目标指令的高位地址,所述中位进位为将所述上一指令的中位地址、所述偏移地址的高位地址和所述低位进位相加产生的进位。
6.根据权利要求5所述的方法,其特征在于,所述根据中位进位、所述上一指令的高位地址和所述偏移地址的符号,确定所述目标指令的高位地址,包括:
当所述中位进位为1且所述偏移地址的符号为0时,确定所述目标指令的高位地址等于所述上一指令的高位地址加1;
当所述中位进位为0且所述偏移地址的符号为0,或者,所述中位进位为1且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址;
当所述中位进位为0且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址减1。
7.根据权利要求2所述的方法,其特征在于,所述计算所述目标指令的低位地址,包括:
确定所述上一指令的虚拟地址和所述上一指令所包含的偏移地址;
根据所述偏移地址确定所述上一指令的低位地址,所述上一指令的低位地址与所述偏移地址对齐且宽度相等;
将所述上一指令的低位地址与所述偏移地址相加,得到所述目标指令的低位地址,所述目标指令的低位地址与所述上一指令的低位地址对齐且宽度相等。
8.根据权利要求7所述的方法,其特征在于,所述剩余地址包括高位地址,在将所述上一指令的低位地址与所述偏移地址相加之后,所述方法还包括:
从所述上一指令的虚拟地址中确定所述上一指令的高位地址,所述上一指令的虚拟地址由所述上一指令的高位地址和所述上一指令的低位地址组成;
根据低位进位、所述上一指令的高位地址和所述偏移地址的符号,确定所述目标指令的高位地址,所述低位进位为将所述上一指令的低位地址和所述偏移地址相加产生的进位;
生成地址指示符号,所述地址指示符号指示所述目标指令的高位地址;
将所述地址指示符号存储至扩展指令空间,所述扩展指令空间为对所述上一指令的指令空间进行扩展得到的指令空间。
9.根据权利要求8所述的方法,其特征在于,所述确定所述目标指令的剩余地址,包括:
从所述扩展指令空间中读取所述地址指示符号;
根据所述地址指示符号确定所述目标指令的高位地址。
10.根据权利要求8所述的方法,其特征在于,所述根据低位进位、所述上一指令的高位地址和所述偏移地址的符号,确定所述目标指令的高位地址,包括:
当所述低位进位为1且所述偏移地址的符号为0时,确定所述目标指令的高位地址等于所述上一指令的高位地址加1;
当所述低位进位为0且所述偏移地址的符号为0,或者,所述低位进位为1且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址;
当所述低位进位为0且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址减1。
11.根据权利要求1至10任一所述的方法,其特征在于,所述一级指令缓存中,不同指令的指令空间中存储的低位地址在所述指令空间的第0比特对齐。
12.一种虚拟地址确定装置,其特征在于,所述装置包括:
第一读取模块,用于从待获取的目标指令的上一指令的指令空间中读取所述目标指令的低位地址,所述目标指令的低位地址为将所述上一指令写入一级指令缓存之前计算得到并存储在所述上一指令的指令空间中的地址,所述目标指令的低位地址根据所述上一指令的虚拟地址的低位地址和所述上一指令所包含的偏移地址计算得到;
第一确定模块,用于确定所述目标指令的剩余地址,所述目标指令的剩余地址的宽度与所述目标指令的低位地址的宽度之和等于所述上一指令的虚拟地址的宽度;
合并模块,用于将所述目标指令的低位地址与所述目标指令的剩余地址合并,得到所述目标指令的虚拟地址。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
计算模块,用于计算所述目标指令的低位地址;
第一存储模块,用于将所述目标指令的低位地址存储至所述上一指令的指令空间。
14.根据权利要求13所述的装置,其特征在于,所述计算模块,用于:
确定所述上一指令的虚拟地址和所述上一指令所包含的偏移地址;
根据页表的大小,从所述上一指令的虚拟地址中确定所述上一指令的低位地址,并从所述偏移地址中确定所述偏移地址的低位地址,所述上一指令的低位地址与所述偏移地址的低位地址对齐且宽度相等;
将所述上一指令的低位地址与所述偏移地址的低位地址相加,得到所述目标指令的低位地址,所述目标指令的低位地址与所述上一指令的低位地址对齐且宽度相等。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
第二存储模块,用于将低位进位存储至扩展指令空间,所述低位进位为将所述上一指令的低位地址与所述偏移地址的低位地址相加产生的进位,所述扩展指令空间为对所述上一指令的指令空间进行扩展得到的指令空间。
16.根据权利要求15所述的装置,其特征在于,所述剩余地址包括中位地址和高位地址,所述第一确定模块,包括:
第一确定子模块,用于从所述偏移地址中确定所述偏移地址的高位地址,所述偏移地址由所述偏移地址的高位地址和所述偏移地址的低位地址组成;
第二确定子模块,用于根据所述偏移地址的高位地址,从所述上一指令的虚拟地址中确定所述上一指令的中位地址,所述上一指令的中位地址与所述偏移地址的高位地址对齐且宽度相等;
读取子模块,用于从所述扩展指令空间中读取所述低位进位;
相加子模块,用于将所述上一指令的中位地址、所述偏移地址的高位地址和所述低位进位相加,得到所述目标指令的中位地址;
第三确定子模块,用于从所述上一指令的虚拟地址中确定所述上一指令的高位地址,所述上一指令的虚拟地址由所述上一指令的高位地址、所述上一指令的中位地址和所述上一指令的低位地址组成;
第四确定子模块,用于根据中位进位、所述上一指令的高位地址和所述偏移地址的符号,确定所述目标指令的高位地址,所述中位进位为将所述上一指令的中位地址、所述偏移地址的高位地址和所述低位进位相加产生的进位。
17.根据权利要求16所述的装置,其特征在于,所述第四确定子模块,用于:
当所述中位进位为1且所述偏移地址的符号为0时,确定所述目标指令的高位地址等于所述上一指令的高位地址加1;
当所述中位进位为0且所述偏移地址的符号为0,或者,所述中位进位为1且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址;
当所述中位进位为0且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址减1。
18.根据权利要求13所述的装置,其特征在于,所述计算模块,用于:
确定所述上一指令的虚拟地址和所述上一指令所包含的偏移地址;
根据所述偏移地址确定所述上一指令的低位地址,所述上一指令的低位地址与所述偏移地址对齐且宽度相等;
将所述上一指令的低位地址与所述偏移地址相加,得到所述目标指令的低位地址,所述目标指令的低位地址与所述上一指令的低位地址对齐且宽度相等。
19.根据权利要求18所述的装置,其特征在于,所述剩余地址包括高位地址,所述装置还包括:
第二确定模块,用于从所述上一指令的虚拟地址中确定所述上一指令的高位地址,所述上一指令的虚拟地址由所述上一指令的高位地址和所述上一指令的低位地址组成;
第三确定模块,用于根据低位进位、所述上一指令的高位地址和所述偏移地址的符号,确定所述目标指令的高位地址,所述低位进位为将所述上一指令的低位地址和所述偏移地址相加产生的进位;
生成模块,用于生成地址指示符号,所述地址指示符号指示所述目标指令的高位地址;
第三存储模块,用于将所述地址指示符号存储至扩展指令空间,所述扩展指令空间为对所述上一指令的指令空间进行扩展得到的指令空间。
20.根据权利要求19所述的装置,其特征在于,所述第一确定模块,用于:
从所述扩展指令空间中读取所述地址指示符号;
根据所述地址指示符号确定所述目标指令的高位地址。
21.根据权利要求19所述的装置,其特征在于,所述第三确定模块,用于:
当所述低位进位为1且所述偏移地址的符号为0时,确定所述目标指令的高位地址等于所述上一指令的高位地址加1;
当所述低位进位为0且所述偏移地址的符号为0,或者,所述低位进位为1且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址;
当所述低位进位为0且所述偏移地址的符号为1时,确定所述目标指令的高位地址等于所述上一指令的高位地址减1。
22.根据权利要求12至21任一所述的装置,其特征在于,所述一级指令缓存中,不同指令的指令空间中存储的低位地址在所述指令空间的第0比特对齐。
23.一种处理器,其特征在于,所述处理器包括权利要求12至22任一所述的虚拟地址确定装置。
24.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在计算机的处理器上运行时,使得所述处理器执行权利要求1至11任一所述的虚拟地址确定方法。
CN201810005947.XA 2018-01-03 2018-01-03 虚拟地址确定方法及装置、处理器、存储介质 Active CN109992529B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201810005947.XA CN109992529B (zh) 2018-01-03 2018-01-03 虚拟地址确定方法及装置、处理器、存储介质
PCT/CN2018/102225 WO2019134376A1 (zh) 2018-01-03 2018-08-24 虚拟地址确定方法及装置、处理器、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810005947.XA CN109992529B (zh) 2018-01-03 2018-01-03 虚拟地址确定方法及装置、处理器、存储介质

Publications (2)

Publication Number Publication Date
CN109992529A CN109992529A (zh) 2019-07-09
CN109992529B true CN109992529B (zh) 2021-07-16

Family

ID=67128625

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810005947.XA Active CN109992529B (zh) 2018-01-03 2018-01-03 虚拟地址确定方法及装置、处理器、存储介质

Country Status (2)

Country Link
CN (1) CN109992529B (zh)
WO (1) WO2019134376A1 (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN86103765A (zh) * 1985-06-28 1986-12-24 惠普公司 在指令串中嵌入数据的方法
JPH06231047A (ja) * 1993-02-05 1994-08-19 Fujitsu Ltd アドレス変換方法および装置
CN1649274A (zh) * 2004-01-29 2005-08-03 松下电器产业株式会社 可变长度解码装置和可变长度解码方法以及再现系统
CN103970507A (zh) * 2014-05-21 2014-08-06 龙芯中科技术有限公司 64位虚拟机处理访存指令的方法及装置
CN104049942A (zh) * 2013-03-14 2014-09-17 辉达公司 剖析代码部分以生成转译

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6374342B1 (en) * 2000-01-31 2002-04-16 Kabushiki Kaisha Toshiba Translation lookaside buffer match detection using carry of lower side bit string of address addition
US6592449B2 (en) * 2001-02-24 2003-07-15 International Business Machines Corporation Smart fan modules and system
JP4085328B2 (ja) * 2003-04-11 2008-05-14 ソニー株式会社 情報処理装置および方法、記録媒体、プログラム、並びに撮像装置
CN102841865B (zh) * 2011-06-24 2016-02-10 上海芯豪微电子有限公司 高性能缓存系统和方法
US9348762B2 (en) * 2012-12-19 2016-05-24 Nvidia Corporation Technique for accessing content-addressable memory
CN104679481B (zh) * 2013-11-27 2020-04-28 上海芯豪微电子有限公司 一种指令集转换系统和方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN86103765A (zh) * 1985-06-28 1986-12-24 惠普公司 在指令串中嵌入数据的方法
JPH06231047A (ja) * 1993-02-05 1994-08-19 Fujitsu Ltd アドレス変換方法および装置
CN1649274A (zh) * 2004-01-29 2005-08-03 松下电器产业株式会社 可变长度解码装置和可变长度解码方法以及再现系统
CN104049942A (zh) * 2013-03-14 2014-09-17 辉达公司 剖析代码部分以生成转译
CN103970507A (zh) * 2014-05-21 2014-08-06 龙芯中科技术有限公司 64位虚拟机处理访存指令的方法及装置

Also Published As

Publication number Publication date
CN109992529A (zh) 2019-07-09
WO2019134376A1 (zh) 2019-07-11

Similar Documents

Publication Publication Date Title
TWI654562B (zh) 藉由演算法匹配、停用特徵或限制效能之回溯相容性
KR101626533B1 (ko) 가비지 콜렉션을 위한 gpu 서포트
US10740247B2 (en) Method for accessing entry in translation lookaside buffer TLB and processing chip
KR102546238B1 (ko) 다중 테이블 분기 타겟 버퍼
JP5608594B2 (ja) プレロード命令制御
US11416256B2 (en) Selectively performing ahead branch prediction based on types of branch instructions
CN104252392A (zh) 一种访问数据缓存的方法和处理器
US20130159679A1 (en) Providing Hint Register Storage For A Processor
JP2016536665A (ja) 推論的ベクトル演算の実行を制御するためのデータ処理装置及び方法
US8095775B1 (en) Instruction pointers in very long instruction words
US8151096B2 (en) Method to improve branch prediction latency
US20140250289A1 (en) Branch Target Buffer With Efficient Return Prediction Capability
US9223714B2 (en) Instruction boundary prediction for variable length instruction set
US7124287B2 (en) Dynamically adaptive associativity of a branch target buffer (BTB)
US5276825A (en) Apparatus for quickly determining actual jump addresses by assuming each instruction of a plurality of fetched instructions is a jump instruction
US20160196156A1 (en) Simulation apparatus, simulation method, and computer product
JP5490711B2 (ja) テーブル内のエレメントのアドレスを決定するシステムおよび方法
CN109992529B (zh) 虚拟地址确定方法及装置、处理器、存储介质
US20160011889A1 (en) Simulation method and storage medium
KR20210025677A (ko) 초기 리턴 예측을 갖는 분기 타겟 버퍼
TWI517040B (zh) 保護二進制轉譯碼的完整性
KR20200107997A (ko) 다중 가드 태그 설정 명령어
CN114610388A (zh) 一种指令跳转方法、处理器及电子设备
US11436146B2 (en) Storage control apparatus, processing apparatus, computer system, and storage control method
US9395985B2 (en) Efficient central processing unit (CPU) return address and instruction cache

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