CN105122206B - 用于支持推测的访客返回地址栈仿真的方法和装置 - Google Patents
用于支持推测的访客返回地址栈仿真的方法和装置 Download PDFInfo
- Publication number
- CN105122206B CN105122206B CN201480021703.0A CN201480021703A CN105122206B CN 105122206 B CN105122206 B CN 105122206B CN 201480021703 A CN201480021703 A CN 201480021703A CN 105122206 B CN105122206 B CN 105122206B
- Authority
- CN
- China
- Prior art keywords
- return
- instruction
- visitor
- address
- stack
- 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
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/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- 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/3017—Runtime instruction translation, e.g. macros
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
公开了一种用于维护乱序微处理器管线中的访客返回地址栈的微处理器实现的方法。方法包括将访客地址空间中的多个指令映射到本地地址空间中的对应的多个指令。针对在执行期间取回的所述本地地址空间中的每个函数调用指令,所述方法进一步包括实施以下步骤:(a)响应于函数调用将当前条目入栈到访客返回地址栈(GRAS)中,其中GRAS在管线的取回段处维护,并且其中当前条目包括关于与函数调用相关联的访客目标返回地址和对应的本地目标返回地址两者的信息;(b)响应于处理返回指令将当前条目从所述GRAS出栈;以及(c)在从GRAS出栈之后从当前条目中的本地目标返回地址取回指令。
Description
技术领域
根据本发明的实施例一般地涉及微处理器体系架构,并且更具体地,涉及用于乱序(OOO)微处理器的仿真体系架构。
背景技术
很多类型的数字计算机系统利用代码变换/转译或仿真来实现基于软件的功能。通常,转译和仿真两者都涉及对软件程序指令进行检查并且实施由软件指令指定的功能和动作,即使指令对于计算机系统并非是“本地”(native)的。例如,在仿真体系架构中,非本地的(或访客)指令可以映射为本地指令的形式,其被设计为在计算机的硬件上执行。
如关于2012年1月27日提交的名为“GUEST INSTRUCTION TO NATIVE INSTRUCTIONRANGE BASED MAPPING USING A CONERSION LOOK ASIDE BUFFER OF A PROCESSOR”的、律师案号为SMII-0030的、Mohammad Abdallah的美国专利申请No.13/359,767(以下称为“申请No.13/359,767”)详细描述的,访客指令块在仿真体系架构中被转换或者映射为本地转换块。如申请No.13/359,767中所述,仿真体系架构中的访客指令可以来自若干不同的访客指令体系架构(例如,Java,x86,MIPS等)并且多个访客指令块可以被转换为一个或多个对应的本地转换块。该转换在每指令的基础上发生。例如,访客代码块可以转换为本地代码的数个对应指令系列。
另外,如申请No.13/359,767中所述,诸如转换后备缓冲器(CLB)的结构常用于在仿真体系架构中,以提供访客地址和本地地址之间的映射。转换后备缓冲器一般用于高速缓存访客块和本地块之间的地址映射,从而通过低的处理器可用延迟对最常遇到的本地转换块进行访问。使用CLB加速了来自访客指令体系架构的访客指令到用于在本地处理器上执行的本地指令体系架构的本地指令的转译处理。通过使用CLB,访客指令被快速转换为本地指令并且被管线化到本地处理器硬件用于快速执行。
在某些情况下,由于对访客空间中的相同函数的函数调用,转换后备缓冲器(CLB)可能临时充满太多条目。函数调用包括对来自指令序列内的对函数的调用以及在函数已经执行之后返回到指令序列。对于在调用后随后从访客空间的函数的每个返回(以下称为“函数返回”),新的对应指令系列在本地空间中一般从函数的返回地址处开始。因此,必须在CLB中为每个这样的返回创建新的映射。因为可以从来自访客代码块内的多个地方调用函数,所以结果是CLB中用于函数的数个访客-到-本地的映射。这导致在处理器管线中为宝贵的资源的CLB被临时充满,并且这是对CLB结构非常低效的使用。
发明内容
相应地,需要用于创建更高效和灵活的途径来对用于访客代码中的函数返回的访客-到-本地映射进行高速缓存的方法和装置。在一个实施例中,称为访客返回地址栈(GRAS)的专用硬件结构被用于推测性地高速缓存用于函数返回的映射,其中GRAS结构对用于函数返回的访客地址和本地地址两者进行高速缓存,并且其中GRAS驻留在处理器管线的前端,例如在取回段。在创建映射之后,当在代码中遇到函数时,查找GRAS以确定对函数返回的目标的预测。因此,防止CLB被与来自相同函数的函数返回相关联的多个条目充满并有利地节省了CLB中的宝贵空间。
在一个实施例中,GRAS在硬件中实现并用于预测函数返回的目标。相应地,在一个实施例中,在乱序(OOO)微处理器的取回单元中推测性地实施栈操作。然而,在深而宽的超标量处理器中可以存在可能在执行期间在代码中遇到的许多个调用和返回。由于在GRAS内创建的一些映射可能与错误预测路径上的函数相关联(例如,由于推测可能不正确),因此GRAS内的栈信息可能损坏。
在本发明的一个实施例中,类似于链表结构来维护和更新GRAS以防止栈损坏。例如,使用循环缓冲器来实现GRAS,每个条目载有指向在前条目的指针。另外,在一个实施例中,维护两个全局变量,其中一个指向栈顶并且另一个指向GRAS中下一个可用条目。与函数调用相关联的新的映射被插入到下一个可用条目,因此没有条目被覆写。相应的,在错误预测的情况下,可以简单调整用于保持跟踪GRAS中的条目的指针以恢复先前的状态。由于没有条目被覆写,因此GRAS结构的链表实现防止了如果错误预测情况下栈的损坏。
在一个实施例中,提供一种用于维护乱序微处理器管线中的访客返回地址栈的微处理器实现的方法。方法包括将访客地址空间中的多个指令映射到本地地址空间中的对应的多个指令。针对在执行期间取回的本地地址空间中的每个函数调用指令,所述方法进一步包括实施以下步骤:(a)响应于函数调用将当前条目入栈到访客返回地址栈(GRAS)中,其中GRAS在管线的取回段处维护,并且其中当前条目包括关于与函数调用相关联的访客目标返回地址和对应的本地目标返回地址两者的信息;(b)响应于处理返回指令将当前条目从所述GRAS出栈;以及(c)在从GRAS出栈之后从当前条目中的本地目标返回地址取回指令。
接下来与附图一起的详细描述将提供对本发明性质和优点的更好理解。
附图说明
本发明的实施例在附图中以示例的方式示出,但并非以限制的方式,在附图中相似的参考标号指代相似的元件。
图1是根据本发明的实施例的示例性计算机系统。
图2是根据本发明的一个实施例的、本发明的实施例可以在其上实现的用于乱序微处理器的管线的管段的示例性框图。
图3A示出了访客地址空间中的函数的示例性系列。
图3B示出了从驻留在访客地址空间中的图3A的函数映射到本地地址空间所导致的各个指令序列。
图4A示出了多次调用相同的函数的访客地址空间中的示例性指令序列。
图4B-C示出了根据发明的实施例的GRAS更新的方式。
图5示出了根据本发明实施例的GRAS更新的方式的另一个示例。
图6示出了GRAS如果维护为常规堆栈可能损坏的方式的示例。
图7示出了根据本发明的一个实施例的、响应于图6中所示的指令序列,推测地更新GRAS的链表实现的方式。
图8示出了根据本发明的一个实施例的、响应于分支错误预测,GRAS的链表实现的更新的方式。
图9描述了根据本发明的实施例的、用于维护访客返回地址栈的示例性计算机控制的过程的流程图900。
具体实施方式
现在将详细参考本发明的各实施例,其示例在附图中示出。虽然本发明将结合这些实施例进行描述,但是应该理解它们并非旨在将本发明限定于这些实施例。相反,本发明旨在覆盖可以包括在如随附权利要求所限定的本发明的精神和范围内的替换、修改和等同物。此外,在本发明的实施例的以下详细描述中,阐述了许多具体细节以提供对本发明的透彻理解。然而本领域普通技术人员将认识到本发明可以没有这些具体细节而实施。在其他实例中,没有详细描述公知的方法、步骤、组件和电路以免对本发明的实施例的各方面造成不必要的混淆。
符号和术语:
接下来的部分详细描述以过程、逻辑块、处理以及对计算机存储器内数据比特进行操作其他象征性表示来呈现。这些描述和表示是由数据处理领域技术人员所使用的手段,以向本领域的其他技术人员最有效地传达他们工作的实质。在本申请中,过程、逻辑块、处理等等,被设想为得出期望结果的步骤或指令的自洽序列。步骤利用对物理量的物理操纵。通常,尽管不是必要地,这些量采用能在计算机系统中被存储、转移、组合、对比和另外操纵的电或磁信号的形式。已经证明,主要是出于共同使用的原因,将这些信号称为事务处理、比特、值、元素、符号、字符、样本、像素等等有时是方便的。
然而,要牢记的是,所有的这些和类似的术语都要与适当的物理量相关联,且仅仅是应用于这些量的便捷标签。除非特别声明,否则在下面的论述中很明显,应意识到贯穿本公开,利用术语诸如“映射”、“入栈”、“出栈”、“取回”、“确定”等等的讨论,指的是计算机系统的动作与过程(如图9的流程图900)或类似的电子计算设备或处理器(如图1的系统110)。计算机系统或类似的电子计算设备对计算机系统存储器、寄存器或其他这类信息存储、传输或显示设备内以物理(电子)量表示的数据进行操纵和转换。
本文描述的实施例可一般围绕着驻留在某一形式的计算机可读存储介质上的计算机可执行指令加以讨论,诸如由一台或多台计算机或其他设备执行的程序模块。以示例的方式但非限制,计算机可读存储介质可以包括非暂时性计算机可读存储介质和通信介质;非暂时性计算机可读介质包括除了暂时性传播信号之外所有的计算机可读介质。通常,程序模块包括例程、程序、对象、组件、数据结构等等,其执行特定任务或实现特定的抽象数据类型。程序模块的功能可以在各种实施例中按照期望加以组合或分配。
计算机存储介质包括易失性和非易失性、可移动的和不可移动的以任何方法或技术实现的介质,用于存储信息诸如计算机可读指令、数据结构、程序模块或其他数据。计算机存储介质包括但不限于,随机存取存储器(RAM)、只读存储器(ROM)、电可擦可编程ROM(EEPROM)、闪速存储器或其他存储器技术、压缩光盘ROM(CD-ROM)、数字多用盘(DVD)或其他光学存储、盒式磁带、磁带、磁盘存储或其他磁性存储设备、或任何其他可用来存储期望信息并可访问以重新得到这些信息的介质。
通信介质可体现计算机可执行指令、数据结构及程序模块,并包括任何信息递送介质。以示例的方式但非限制,通信介质包括有线介质诸如有线网络或直接有线连接,以及无线介质诸如声频、射频(RF)、红外线及其他无线介质。以上的任意组合也可包括在计算机可读介质范围内。
图1是能够集成本公开的实施例的处理器114的计算系统110的示例的框图。计算系统110宽泛地代表任何能执行计算机可读指令的单处理器或多处理器计算设备或能够执行计算机可读指令的系统。计算系统110的示例包括但不限于,工作站、膝上型计算机、客户端侧终端、服务器、分布式计算系统、手持设备或任何其他计算系统或设备。在其最基本的配置中,计算系统110可以包括至少一个本发明的实施例的处理器114和系统存储器116。
处理器114包含本发明的实施例并且通常代表任何类型或形式的、能处理数据或解释并执行指令的处理单元。在某些实施例中,处理器114可以从软件应用或模块接收指令。这些指令可以使处理器114实施一个或多个本文描述和/或示出的示范性实施例的功能。在一个实施例中,处理器114可以是乱序微处理器。在不同的实施例中,处理器114可以是超标量处理器。在另一个实施例中,处理器114可以包括并行运行的多处理器。
系统存储器116通常代表任何类型或形式的、能存储数据和/或其他计算机可读指令的易失性或非易失性存储设备或介质。系统存储器116的示例包括但不限于,RAM、ROM、闪速存储器或任何其他适合的存储器设备。虽然不加以要求,但在某些实施例中计算系统110可以包括易失性存储器单元(诸如,系统存储器116)和非易失性存储设备(诸如,主存储设备132)这两者。
计算系统110除处理器114和系统存储器116外还可以包括一个或多个组件或元件。例如,在图1的实施例中,计算系统110包括存储器控制器118、输入/输出(I/O)控制器120以及通信接口122,它们每个都可以经由通信基础设施112互相连接。通信基础设施112通常代表任何类型或形式的、能促进计算设备中一个或多个组件之间通信的基础设施。通信基础设施112的示例包括但不限于,通信总线(诸如工业标准体系架构(ISA)、外围组件互连(PCI)、PCI Express(PCIe)或类似总线和网络。
存储器控制器118通常代表任何类型或形式的、能处理存储器或数据或者能控制计算系统110的一个或多个组件间通信的设备。举例来说,存储器控制器118可以经由通信基础设施112来控制处理器114、系统存储器116及I/O控制器120之间的通信。
I/O控制器120通常代表任何类型或形式的、能协调和/或控制计算设备的输入输出功能的模块。举例来说,I/O控制器120可以控制或促进计算系统110的一个或多个元件之间的数据的转移,诸如处理器114、系统存储器116、通信接口122、显示适配器126、输入接口130以及存储接口134。
通信接口122宽泛地代表任何类型或形式的、能促进示例计算系统110和一个或多个附加设备之间通信的通信设备或适配器。举例来说,通信接口122可以促进计算系统110和包括附加计算系统的私人或公共网络之间的通信。通信接口122的示例包括但不限于,有线网络接口(诸如网络接口卡)、无线网络接口(诸如无线网络接口卡)、调制解调器以及任何其他适合的接口。在一个实施例中,通信接口122经由至诸如因特网的网络的直接链路提供了到远程服务器的直接连接。通信接口122也可以通过任何其他适合的连接来间接提供这种连接。
通信接口122也可以代表主机适配器,配置为经由外部总线或通信通道来促进计算系统110与一个或多个附加网络或存储设备之间的通信。主机适配器的示例包括但不限于,小型计算机系统接口(SCSI)主机适配器、通用串行总线(USB)主机适配器、IEEE(电气与电子工程师协会)1394主机适配器、串行高级技术附件(SATA)和外部SATA(eSATA)主机适配器、高级技术附件(ATA)和并行ATA(PATA)主机适配器、光纤通道接口适配器、以太网适配器等等。通信接口122也可以允许计算系统110参与分布式或远程计算。例如,通信接口122可以从远程设备接收指令,或向远程设备发送指令用于执行。
如图1所示,计算系统110还可以包括至少一个经由显示适配器126耦合到通信基础设施112的显示设备124。显示设备124通常代表任何类型或形式的、能视觉显示由显示适配器126所转发的信息的设备。类似地,显示适配器126通常代表任何类型或形式的、配置为转发图形、文本和其他数据用于在显示设备124上显示的设备。
如图1所示,计算系统110也可包括至少一个经由输入接口130耦合到通信基础设施112的输入设备128。输入设备128通常代表任何类型或形式的、能向计算系统110提供计算机生成或人工生成的输入的输入设备。输入设备128的示例包括但不限于,键盘、定位设备、语音识别设备、或任何其他输入设备。
如图1所示,计算系统110也可包括主存储设备132和经由存储接口134耦合到通信基础设施112的可选备用存储设备133。存储设备132和133通常代表任何类型或形式的、能存储数据和/或其他计算机可读指令的存储设备或介质。举例来说,存储设备132和133可以是磁盘驱动器(例如,所谓的硬盘驱动器)、软盘驱动器、磁带驱动器、光盘驱动器、闪盘驱动器等等。存储接口134通常代表任何类型或形式的、用来在存储设备132和133与计算系统110的其他组件之间转移数据的接口或设备。
在一个示例中,数据库140可存储在主存储设备132内。数据库140可代表单个数据库或计算设备的一部分,或者它可代表多个数据库或计算设备。举例来说,数据库140可代表(存储于)计算系统110的一部分。可替代地,数据库140可代表(存储于)一个或多个能被诸如计算系统110的计算设备所访问的物理上分离的设备。
继续参考图1,存储设备132和133可配置为,对配置为存储计算机软件、数据或其他计算机可读信息的可移动存储单元进行读取和/或写入。适合的可移动存储单元的示例包括但不限于,软盘、盒式磁带、光盘、闪速存储器设备等等。存储设备132和133还可包括其他类似结构或设备,以允许计算机软件、数据或其他计算机可读指令载入计算系统110。举例来说,存储设备132和133可配置为读取和写入软件、数据或其他计算机可读信息。存储设备132和133还可以是计算系统110的一部分,或可以是通过其他接口系统访问的单独设备。
许多其他设备或子系统可连接至计算系统110。相反,无需具备图1示出的所有组件和设备来施行本文所述的实施例。上文涉及的设备和子系统还可以不同于图1所示的方式互相连接。计算系统110还可采用任意数量的软件、固件和/或硬件配置。举例来说,本文公开的示范性实施例可在计算机可读介质上编码为计算机程序(也称作计算机软件、软件应用、计算机可读指令或计算机控制逻辑)。
包含计算机程序的计算机可读介质可载入计算系统110。存储于计算机可读介质上的全部或部分计算机程序随后可存储于系统存储器116和/或存储设备132和133的各部分中。当由处理器114执行时,载入计算系统110中的计算机程序可使处理器114实施和/或作为实施本文描述和/或示出的示范性实施例的功能的手段。附加地或替代地,本文描述和/或示出的示范性实施例可在固件和/或硬件中实现。
用于支持推测的访客返回地址栈仿真的方法和装置
如关于2012年1月27日提交的名为“GUEST INSTRUCTION TO NATIVE INSTRUCTIONRANGE BASED MAPPING USING A CONERSION LOOK ASIDE BUFFER OF A PROCESSOR”的、律师案号为SMII-0030的、Mohammad Abdallah的美国专利申请No.13/359,767(以下称为“申请No.13/359767”)详细描述的并且通过引用结合到本文中,诸如转换后备缓冲器(CLB)的结构常用于在仿真体系架构中,以提供访客地址和本地地址之间的映射。转换后备缓冲器一般用于高速缓存访客块和本地块之间的地址映射,从而最常遇到的本地转换块通过低的处理器可用延迟进行访问。
在某些实例中,由于对访客空间中的相同函数的函数调用,CLB可能临时充满太多条目。函数调用包括对来自指令序列内的函数的调用以及返回,所述返回是在函数已经执行之后到指令序列的分支返回。对于在调用后的每个返回(以下称为“函数返回”),新的对应指令系列在本地空间中一般从函数的返回地址处开始。因此,必须在CLB中为每个这样的返回创建新的映射(从访客地址到对应的本地返回地址)。因为可以从来自访客代码块内的多个地方调用函数,所以为函数返回的每个实例创建新的映射的结果是CLB中用于函数的数个访客-到-本地的映射。这导致在处理器管线中为宝贵的资源的CLB被临时充满,并且这是对CLB结构的非常低效的使用。
本发明的实施例提供用于创建更高效和灵活的途径来对用于访客代码中的函数返回的访客-到-本地映射进行高速缓存的方法和装置。在一个实施例中,称为访客返回地址栈(GRAS)的专用硬件结构被用于在处理器管线的前端对用于函数返回的映射进行高速缓存,其中GRAS结构对用于函数返回的访客地址和本地地址两者进行高速缓存。在创建映射之后,当在代码中遇到相同的函数时,查找GRAS以确定对函数返回的目标的预测。因此,防止CLB被与来自相同函数的函数返回相关联的多个条目充满并有利地节省了CLB中的宝贵空间。
在一个实施例中,GRAS在硬件中实现并用于预测函数返回的目标。相应地,在一个实施例中,栈操作推测性地并且一般在乱序(OOO)微处理器的取回单元中实施。然而,在深而宽的超标量处理器中可以存在可能在执行期间在代码中遇到的许多个调用和返回。由于在GRAS内创建的一些映射可能与错误预测路径上的函数相关联,因此GRAS内的栈信息可能损坏。
在本发明的一个实施例中,类似于链表结构来维护和更新GRAS以防止栈损坏。例如,使用循环缓冲器来实现GRAS,每个条目载有指向在前条目的指针。另外,在一个实施例中,维护指向栈顶的第一全局变量并且维护指向GRAS中下一个可用条目的第二全局变量。与函数调用相关联的新的映射被插入到下一个可用条目,因此没有条目被覆写。相应的,在错误预测的情况下,可以简单调整用于保持跟踪GRAS中的条目的指针以恢复先前的状态。由于没有条目被覆写,因此GRAS结构的链表实现防止了如果错误预测情况下栈的损坏。
图2是根据本发明的实施例的用于OOO微处理器的示例性管线的管段的框图。
在取回段202指令被取回并放置在取回段202内的指令获取队列(IFQ)(未示出)中。指令通常是在可执行程序中得到的原始汇编指令。这些指令引用存储在寄存器文件210中的体系架构寄存器。如果第一获取的指令将被中断或者引发异常,那么体系架构寄存器文件210存储直到该点的所有指令的结果。换言之,体系架构寄存器文件对需要被保存并恢复以便在调试或者其他期间返回到程序断点的状态进行存储。
在OOO微处理器中,指令乱序执行但同时仍然保留数据依赖约束。由于指令可以与任意顺序完成,因此体系架构寄存器文件210不能随着乱序指令的完成由其结果来修改,因为这会使得在异常或者中断的情况下准确地恢复其值变得困难。因此,为每个进入管线的指令提供可以保存其结果的临时寄存器。当相关联的指令退隐(retire)时最终以程序顺序将临时寄存器写入到体系架构寄存器文件中。因此,尽管是乱序执行指令,但体系架构寄存器文件的内容就好像指令是以程序顺序执行的一样进行变化。
ROB 208促进指令退隐的过程。在指令从取回单元202分派之后,它们由解码模块204解码并且放置在ROB 208和发布队列206(IQ)中。ROB208和IQ 206可以是调度器模块272的一部分。随着指令以乱序从IQ 206派送出,它们由执行模块212执行。只要数据依赖被维护,在212处的指令执行允许是乱序的。
在一个实施例中,写回模块214会将来自那些指令的结果值写回到ROB 208中的临时寄存器,并且依赖ROB 208按顺序促进提交或者“隐退”指令。然而,在不同的实施例中,写回模块214将来自指令执行的结果值直接写到寄存器文件210而不对其存储。乱序的元素以乱序的方式在物理存储器中添加到寄存器文件210,并且随后在退隐阶段使用ROB发起的协议以顺序的方式退隐到体系架构文件。
从IQ 206乱序发布的指令还可以包括加载和存储。如上解释,当加载和存储从IQ206乱序发布时,在那些指令可以被提交前需要解决它们之间的存储器依赖关系。因此,存储指令在加载存储队列(LSQ)216中按顺序进行存储而加载和存储之间的依赖关系依靠ROB208的帮助得以解决。
图3A示出了访客地址空间中的函数的示例性系列。主函数351包括对函数A 354的调用。函数A 354包括对函数B 356的调用。主函数351中跟随对函数A的调用后面的指令是L0 321,并且相应地,L0 321是从函数A 354的返回地址。函数A 354中跟随对函数B的调用的指令是L1 322,并且相应地,L1 322是从函数B 356的返回地址。
如申请No.13/359767中所讨论,在仿真体系架构中访客指令块被转换或者映射为本地转换块。如申请No.13/359767中所述,仿真体系架构中的访客指令可以来自若干不同的访客指令体系架构(例如,Java,x86,MIPS等)并且多个访客指令块可以被转换为一个或多个对应的本地转换块。该转换在每指令的基础上发生。
另外,如申请No.13/359767中所述,在一个实施例中,每个指令块以远分支结束。(在申请No.13/359767中详述了近分支和远分支之间的关系,然而,出于本发明的实施例的目的,远分支被用作示例并且下文中将称为“分支”)。例如,访客空间中的函数调用将导致访客分支并且相应地结束该函数调用发生在其中的指令队列。新的指令队列将从函数调用的返回处开始。
图3B示出了从驻留在访客地址空间中的图3A的函数映射到本地地址空间所导致的各个指令序列。本地地址空间中的序列0 371对应于在主函数351的起始处开始,并且在对主函数351中的函数A的调用处结束的序列。序列3对应于在L0标签321处开始的序列,所述L0标签321处也是从对函数A的调用的返回地址。
本地空间中的序列1 375对应于在函数A 354的起始处开始并且在对函数A 354中的函数B调用处结束的序列。序列3对应于在L1标签322处开始的序列,所述L1标签322处也是从对函数B调用的返回地址。
序列2 376对应于函数B 356。
典型地,需要在CLB中为每个从调用的返回地址创建单独的映射。例如,将为访客地址空间中的L0 321创建单独的映射,其将映射到本地地址空间中的序列3 378。另外,将为访客地址空间中的L1 322创建单独的映射,其将映射到本地地址空间中的序列4 379。只有在从函数A 354中的相同的地址(对应于序列4 379条目)调用函数B 356并且从函数主A中相同的地址(对应于序列3 378条目)调用函数A 354时,在CLB映射中所创建的两个条目才有用。
由于在程序中从数个不同的地址调用典型的函数,因此对于每个函数调用,为从各自的函数调用的返回地址创建新的映射。这是因为返回地址是对应调用从其进行的地址的函数,因此CLB中的对应条目不能由函数返回的任何其他实例重新使用。如上所述,这导致作为宝贵资源的CLB被临时充满,并且这是对CLB非常低效的使用。
在传统的非仿真体系架构中,该问题不会发生,因为偏移地址会被简单地添加到调用的地址中以确定本地空间中的返回地址。例如,如果图3A中的访客地址空间中的指令不需要映射到本地地址空间中的对应的指令集,那么可以将偏移添加到调用,例如到调用A,以确定调用的返回地址,例如L0 321(其是调用A的对应的返回地址)
典型的,在传统的非仿真体系架构中,可以在软件或硬件中维护本地空间中的返回地址栈(RAS)。RAS是典型用于预测函数返回的目标的结构。当在代码中遇到调用时,调用指令的程序计数(PC)加偏移(等于指令的大小)将插入到RAS。换言之,返回地址的PC(计算为调用指令的PC加偏移)将被插入(或者入栈)到RAS中。从所调用的函数的返回将导致栈使用所保存的地址作为下一个PC地址进行出栈。
本发明的实施例以硬件的形式在管线的前端维护访客返回地址栈(GRAS),以仿真访客地址空间中的软件返回地址栈。本发明的GRAS仿真传统的RAS的结构,并且如同RAS也用于预测函数返回的目标。应该注意,GRAS并不代替在机器(machine)的后端维护的软件RAS,而是在软件RAS之外另行维护,以便在机器的前端推测性地确定函数的返回地址。与RAS相比,GRA存储函数返回地址的访客-目标和对应的本地-目标两者。
通过存储访客-目标和本地-目标两者,本发明的GRAS有利地阻止了为函数返回的每个实例添加条目到CLB。相反的,从GRAS获得信息。
应该注意,在管线的前端推测性地维护GRAS结构。例如,对GRAS的栈操作典型在获取单元中实现。因为GRAS被推测性地维护,所以在程序代码的控制流中错误预测的情况下GRAS中的条目可能需要偶尔清除或划掉(flush)。因此,本发明的实施例需要在机器的后端继续维护软件RAS,以比较和验证由硬件GRAS预测的返回地址。
图4A示出多次调用相同函数的访客地址空间中的示例性指令序列。函数foo 452在本地代码中的3个实例处被调用(invoke)(或调用),例如在地址471、434和476处。调用471例如具有返回地址0xA,其将映射到本地地址空间中的序列T2。调用434例如具有返回地址0xB,其将映射到本地地址空间中的序列T4。并且,调用476例如具有返回地址0xC,其将映射到本地地址空间中的序列T5。
代替针对函数foo的每个调用将用于对应返回地址的映射存储在CLB中,本发明的实施例提供GRAS,其中响应于函数调用,新的条目可以和调用的返回地址一起入栈到栈中。当条目被入栈到栈中时,与函数返回相关联的访客地址和对应的本地地址两者都被入栈到栈中。另外,条目可以根据访客代码中的返回从栈中出栈,并且与出栈的条目对应的本地地址可以用于重定向机器的前端以从其取回指令。通过在GRAS中维护访客地址和对应的本地地址两者,不需要在CLB中保存用于函数返回的每个实例的各自的映射。
响应于访客-代码中的返回将新条目入栈到栈中和从栈中出栈条目使得GRAS被用作存储映射的临时空间。这摒弃了需要针对访客空间中的返回地址查找CLB。相反,访客和本地返回地址两者都从GRAS出栈。所获得的对应的本地地址可以用于重定向机器的前端以获取本地地址空间中函数返回之后的下一个指令。
图4B-C示出了根据发明实施例的GRAS更新的方式。图4B提供响应于函数foo的调用471,GRAS更新的方式的示例。当在代码执行期间遇到针对函数foo 452的函数调用471时,访客返回地址(0xA)和对应的本地返回地址(T2)两者都入栈到GRAS 490在条目491处。随后,在函数foo已经执行并返回后,条目491从GRAS 490出栈并用于重定向机器的前端到本地序列T2以从其获取指令。
图4C提供响应于函数foo的调用434,GRAS更新的方式的示例。当在代码执行期间遇到针对函数foo 452的函数调用434时,访客返回地址(0xB)和对应的本地返回地址(T4)两者都入栈到GRAS 490在条目492处。随后,在函数foo已经执行并返回后,条目492从GRAS490出栈并用于重定向机器的前端到本地序列T4以从其获取指令。
函数foo的例示476当在执行期间进行处理时以类似于调用471和434的方式对待。
如上所述,(响应于调用)将新的条目入栈到栈中以及响应于访客-代码中的返回将条目从栈中出栈使得GRAS将被用作用于存储映射的临时空间,所述映射用于访客空间和本地地址空间之间的函数返回。这摒弃了需要针对访客空间中的返回地址查找CLB。相反,访客和本地返回地址两者同时从GRAS出栈。本地地址随后用于重定向前端以从其获取指令,如上所述。
在一个实施例中,当在代码执行之前最初在软件中创建访客到本地的映射时,某些指令在映射期间被引入以便消除访客调用-返回行为。例如,访客代码中的函数调用可以转换为“GRAS.PUSH”指令,随其后为“G.BRN”指令,如下将进一步讨论的。另外,访客代码中的函数返回可以转换为“G.BRN.RTN”指令,以下也将对其进行描述。
A)GRAS.PHSH disp 32:在映射处理期间,使用“GRAS.PUSH”指令,随其后为“G.BRN”指令来消除访客代码中的函数调用。GRAS.PUSH指令将返回地址(访客和对应的本地返回地址两者)入栈到栈中。Disp 32是从当前调用函数起始处的位移。采用GRAS.PUSH,访客空间中的返回地址可以用当前调用的地址加上位移来计算。该计算的返回地址随后和对应的本地地址一起入栈到栈中,其在映射处理期间还由软件编码到指令GRAS.PUSH中。一旦各自的返回地址已经入栈到GRAS中,“G.BRN”指令是跳转到所调用的函数的分支指令。
如上所述,入栈到栈中的返回地址包括本地地址组件和访客地址组件两者。在机器中提前解码指令以使得返回地址入栈到硬件GRAS。
B)G.BRN.RTN:在映射处理期间,使用“G.BRN.RTN”指令来仿真访客代码中的函数返回。G.BRN.RTN弹出栈并跳转到所出栈的本地空间中的地址。机器的前端随后从该本地地址处开始取回。
由于GRAS大小有限并且由于在机器的前端推测性地实施对于硬件栈的操作,因此它们的准确性无法保证。相应地,这要求对从GRAS出栈的条目的附加验证。从GRAS出栈的内容典型地与“G.BRN.RTN”指令相依附并且被向下发送到管线。通过从软件RAS出栈相应的条目并且将两条目进行比较来实现验证。换言之,将从GRAS出栈的条目与在机器的后端从软件RAS出栈的条目进行比较。不匹配时,软件栈中的条目优先并且可以用于重定向机器的前端。
图5示出了根据本发明实施例的GRAS更新的方式的另一个示例。执行开始于指令序列571。当执行对函数A 575的调用572时,对应于调用A 575的返回地址入栈到栈中在条目502处。条目502包括访客返回地址(调用A的PC+4)和本地返回地址(未示出)。当随后执行对函数B 576的调用573时,对应于调用B 573的返回地址入栈到栈中在条目501处。条目501包括访客返回地址(调用B的PC+4)和本地返回地址(未示出)。GRAS包括两个条目。
当遇到函数B 576中的返回577时,栈顶(TOS)指针509将用于预测返回的目标并且栈将被弹出。当遇到函数A 575中的返回578时,TOS(现在指在条目502)又将用于预测返回的目标并且栈将被弹出。在返回577和578之后,GRAS将为空。
图5中所示的简单的栈操作在宽而深的超标量处理器中可能是不足够的,其中可能会遇到运行中(in flight)的数个调用和返回。这些调用中的一些可能在错误(错误预测)的路径中并且即使TOS正确恢复也损坏了栈信息。
图6示出了GRAS如果维护为常规栈可能损坏的方式的示例。例如,指令序列675包括OOO处理器所跟随的推测路径,而指令序列676包括在管线的后端实际提交的指令。当在执行期间在推测路径上遇到调用A和调用B时,与调用对应的返回地址入栈到GRAS 650分别在条目673和671处。如果在推测路径上分支C被错误地预测为未采取(Not Taken)(NT),那么指令返回D和返回E将弹出栈两次并且用于调用A和调用B的条目将由对应于调用F和调用G的新的条目覆写(其将在出栈对应于调用A和调用B的条目之后被弹出栈)。
然而,如上提到的,分支C错误预测并且因此指令返回D以及其后将处于分支C的错误预测的影响之下。一旦分支被错误预测,在软件中TOS指针651可以恢复到栈条目671。然而,栈条目671和673两者的内容已经被覆写并损坏。用于调用A和调用B的条目由于其被覆写而不能够恢复。结果是,在提交路径上响应于指令返回H和返回I的出栈将产生错误地址。
在本发明的一个实施例中,类似于链表结构来维护和更新GRAS以防止栈损坏。例如,使用循环缓冲器来实现GRAS,每个条目载有指向在前的指针。另外,在一个实施例中,维护指向栈顶的第一全局变量并且维护指向GRAS中下一个可用条目的第二全局变量。与函数调用相关联的新的映射被插入到下一个可用条目,因此没有条目被覆写。相应的,在错误预测的情况下,用于保持跟踪GRAS中的条目的指针可以被简单调整以恢复先前的状态。由于没有条目被覆写,因此GRAS结构的链表实现防止了如果错误预测情况下栈的损坏。
应该注意,与本发明的GRAS相关联来使用链表结构以解决与访客空间中的推测有关的问题同时,在本地空间中也结合常规的RAS来使用链表。
如上提及,在循环GRAS中的每个条目维护先前指针以维护栈语义(semantics)。因为栈条目不再是必须连贯的,所以每个条目维护指向在前栈条目的指针,当条目被插入时其为TOS。结合图7和8所示的示例将阐明用于每个栈条目的先前指针工作的方式。
维护全局下一指针变量来以循环的方式指向GRAS中的下一个可用条目。在一个实施例中,下一指针总是被增量但从不减量。相应地调用被插入到下一个可用条目并且因此没有条目被覆写。
图7示出了根据本发明的一个实施例的、响应于图6中所示的指令序列,推测性地更新GRAS的链表实现的方式。图7将示出假设序列675(在图7中还示出为序列750)中的分支C被错误预测为未采取时GRAS更新的方式。
在调用A之前,下一指针和栈顶(TOS)指针两者都可以初始化为值0。在到函数A的调用之后,用于调用A的返回地址(访客地址和本地映射)入栈到GRAS中在位置1处,如表711中所示。先前指针值更新为值0,其是当用于调用A的条目被插入时可用的TOS具有的值。插入用于调用A的条目之后,用于TOS的指针更新为值1并且下一指针更新为指向栈中的下一个可用条目,2。
对函数B的调用之后,用于调用B的对应条目入栈到GRAS中在位置2处,如表772所示。用于条目2的先前指针值更新为值1,其是当用于调用B的条目被插入时可用的TOS具有的值。插入用于调用B的条目之后,用于TOS的指针更新为值2并且下一指针更新为指向栈中的下一个可用条目,3。
如果分支C被错误预测为未采取,那么接下来将进行指令返回D和返回E。返回D出栈与调用B相关联的条目,如表733所示,然而该条目在硬件中并没有被删除或者覆写。相反,在本发明的链表实现中,TOS指针更新为指向位置1以指示位置2处的条目已经出栈。然而,下一指针值仍维持在值3,其是下一个可用位置。维持下一指针指向位置3确保条目1和2不会被覆写。
指令返回E出栈与调用A相关联的条目,如表774中所示。再次,与调用A相关联的条目不被覆写或删除。TOS指针简单更新为值0,指示位置1处的条目被出栈。同时,下一指针仍维持在3。
当在指令序列750中遇到调用F时,与调用F对应的条目进入到位置3,如表775所示。如上所述,即使对应于调用A和B的条目被出栈,下一指针仍指向位置3。用于调用F进入的对应的先前指针值为0,因为在当前条目之前它用TOS的值。同时,TOS更新为3并且下一指针更新为值4。
最后,针对调用G,与调用G对应的条目进入到位置4,如表776所示。用于进入在位置4的调用G的对应的先前指针值为3,因为它是在用用于调用G的条目更新GRAS之前TOS的值。TOS更新为4并且下一指针更新为值5,其是GRAS中的下一个可用条目。
图8示出了根据本发明的一个实施例的、响应于分支误预测,GRAS的链表实现的更新的方式。图8使用图6和7的示例示出了,假设正确路径包括图6的序列676(在图8中还示出为序列850)内的分支C被采取时GRAS的更新方式。
如果分支C被错误预测,那么用于调用G和调用F的条目需要从GRAS出栈,并且GRAS需要还原到分支C错误预测之前的状态。为了将GRAS还原到其先前状态,TOS恢复到值2。下一指针不变。TOS被恢复是因为每个分支载有其状态信息,例如关于在进行预测时TOS的值的信息。这允许在分支错误预测的情况下TOS的值被恢复。将TOS设置为2实际上还原栈回到如表772中所反映的其所在状态(除了下一指针目前指向5)。当在序列850中遇到指令返回H和返回I时,用于调用B和调用A的对应条目被出栈,如图8所示。
图9描述了根据本发明的实施例的、用于维护访客返回地址栈的示例性计算机控制的过程的流程图900。虽然顺序表示和描述流程图中各步骤,普通技术人员应该理解一些或所有步骤都可以按不同顺序执行,并且一些或者所有步骤可以并行执行。此外,在本发明的一个或多个实施例中,以下所描述的一个或多个步骤可以省略、重复和/或以不同的顺序实现。相应,图9中步骤的布置不应解释为对发明的方面进行限制。此外,对于参照本文所提供的教导的相关领域的技术人员来说显而易见的是,其他功能流程也在本发明的范围与精神内。流程900可以继续参考上述示例性实施例来描述,虽然方法不限于这实施例。过程900也可以在硬件中实现。
在步骤902,将多个指令从访客地址空间映射到本地地址空间。
在步骤904,本地地址空间中的指令开始执行。针对处理的每个函数调用指令,条目入栈到访客返回地址栈(GRAS)中,其中如上所述以及如图4B、图4C和图5中所示,条目包括与函数调用相关联的访客目标返回地址和对应的本地目标返回地址。另外,在机器的前端推测性地更新访客返回地址栈,例如在管线的取回段。
在步骤906,响应于处理返回指令与函数调用相关联的条目出栈。如关于图4B和4C所讨论的,所出栈的条目包括用于程序的控制流跳转到的、预测的本地目标返回地址。
在步骤908,从本地目标返回地址推测性地获取指令,所述本地目标返回地址从访客返回地址栈中出栈的条目获得。
同时,前述公开阐述了使用特定框图、流程图和示例的各种实施例,每个框图组件、流程图步骤、操作和/或本文描述和/或示出的组件均可单独地和/或共同地,通过使用各种不同的硬件、软件或固件(或其任意组合)配置来实现。另外,对包含在其他组件内的组件的任何公开均应视为示例,因为可实现许多其他体系架构来达到相同的功能。
本文描述和/或示出的工艺参数和步骤序列仅以示例方式给出。举例来说,虽然本文示出和/或描述的步骤可能以特定的顺序显示或论述,但这些步骤不是必须按所示出或论述的顺序来实施。本文描述和/或示出的各种示范性方法也可以省略一个或多个本文描述或示出的步骤,或包括附加步骤作为那些所公开步骤的补充。
虽然本文已围绕全功能计算系统描述和/或示出了各种实施例,但这些示范性实施例中的一个或多个可分配为各种各样的形式的程序产品,而与用来实际执行分配的计算机可读介质的特定类型无关。本文公开的实施例也可以使用实施某些任务的软件模块来实现。这些软件模块可包括脚本、批处理或其他可被存储在计算机可读存储介质上或计算系统内的可执行文件。这些软件模块可以配置计算系统来实施一个或多个本文公开的示范性实施例。本文公开的软件模块中的一个或多个可在云计算环境中实现。云计算环境可经由因特网提供各种服务和应用。这些基于云的服务(例如,软件即服务、平台即服务、基础设施即服务等等)可通过网页浏览器或其他远程接口访问。本文描述的各种功能可通过远程桌面环境或任何其他基于云计算的环境提供。
前述的描述,出于解释的目的,已参考特定实施例进行了描述。然而,上述说明性的论述不旨在穷举或将本发明限制在所公开的明确形式上。鉴于以上教导,许多修改和变形是可能的。实施例被选择和描述以最好地解释本发明的原理及其实际应用,从而使其他的本领域技术人员采用各种适用于特定预期用途的修改来最好地利用本发明和各种实施例。
根据本发明的实施例因此被描述。虽然本公开已在特定实施例中加以描述,但应理解本发明不应被解释为限于这些实施例,而应根据以下的权利要求来进行解释。
Claims (23)
1.一种用于推测性地维护乱序微处理器管线中的访客返回地址栈的微处理器实现的方法,所述方法包括:
将访客地址空间中的多个指令映射到本地地址空间中的对应的多个指令;以及
针对在执行期间取回的所述本地地址空间中的每个函数调用指令,实施以下步骤:
响应于函数调用,将当前条目入栈到访客返回地址栈GRAS中,其中所述访客返回地址栈GRAS在所述管线的取回段处维护,并且其中所述当前条目包括关于与所述函数调用相关联的访客目标返回地址和对应的本地目标返回地址两者的信息;
响应于处理返回指令,将所述当前条目从所述访客返回地址栈GRAS出栈;以及
在所述出栈之后从所述当前条目中的所述本地目标返回地址取回指令。
2.根据权利要求1所述的方法,其中所述返回指令对应于从所述函数调用的返回。
3.根据权利要求1所述的方法,其中所述映射包括:
将所述访客地址空间中的函数调用映射到所述本地地址空间中对应的指令,其中当执行期间在所述本地地址空间中处理所述对应的指令时,所述对应的指令实施所述入栈。
4.根据权利要求3所述的方法,其中所述映射进一步包括:
将返回指令映射到所述本地地址空间中的对应指令,其中当执行期间在所述本地地址空间中处理所述返回指令时,所述返回指令实施所述出栈。
5.根据权利要求1所述的方法,其中所述访客返回地址栈GRAS是循环缓冲器,并且其中所述循环缓冲器维护:
全局下一指针值,其中所述全局下一指针值指示所述访客返回地址栈GRAS中下一个可用条目的位置;以及
用于所述访客返回地址栈GRAS中的每个条目的先前指针值,其中所述先前指针值指向所述访客返回地址栈GRAS中的在前条目。
6.根据权利要求5所述的方法,其中所述入栈进一步包括:
增量全局栈顶TOS值,其中所述全局栈顶值指示所述访客返回地址栈GRAS的栈顶位置;
增量所述全局下一指针值以指向所述访客返回地址栈GRAS中的下一个可用条目;以及
在所述入栈之前用栈顶TOS值更新用于所述当前条目的先前指针。
7.根据权利要求6所述的方法,其中所述出栈进一步包括:
减量所述全局栈顶TOS值;以及
在所述出栈之前用栈顶TOS值更新用于所述当前条目的先前指针。
8.一种配置为实施用于推测性地维护乱序微处理器管线中的访客返回地址栈的方法的处理器单元,所述方法包括:
将访客地址空间中的多个指令映射到本地地址空间中的对应的多个指令;以及
针对在执行期间取回的所述本地地址空间中的每个函数调用指令,实施以下步骤:
响应于函数调用将当前条目入栈到访客返回地址栈GRAS中,其中所述访客返回地址栈GRAS在所述管线的取回段处维护,并且其中所述当前条目包括关于与所述函数调用相关联的访客目标返回地址和对应的本地目标返回地址两者的信息;
响应于处理返回指令将所述当前条目从所述访客返回地址栈GRAS出栈;以及
在所述出栈之后从所述当前条目中的所述本地目标返回地址取回指令。
9.根据权利要求8所述的处理器单元,其中所述返回指令对应于从所述函数调用的返回。
10.根据权利要求8所述的处理器单元,其中所述映射包括:
将所述访客地址空间中的函数调用映射到所述本地地址空间中对应的指令,其中当执行期间在所述本地地址空间中处理所述对应的指令时,所述对应的指令实施所述入栈。
11.根据权利要求10所述的处理器单元,其中所述映射进一步包括:
将返回指令映射到所述本地地址空间中的对应指令,其中当执行期间在所述本地地址空间中处理所述返回指令时,所述返回指令实施所述出栈。
12.根据权利要求8所述的处理器单元,其中所述访客返回地址栈GRAS是循环缓冲器,并且其中所述循环缓冲器维护:
全局下一指针值,其中所述全局下一指针值指示所述访客返回地址栈GRAS中下一个可用条目的位置;以及
用于所述访客返回地址栈GRAS中的每个条目的先前指针值,其中所述先前指针值指向所述访客返回地址栈GRAS中的在前条目。
13.根据权利要求12所述的处理器单元,其中所述入栈进一步包括:
增量全局栈顶TOS值,其中所述全局栈顶值指示所述访客返回地址栈GRAS的栈顶位置;
增量所述全局下一指针值以指向所述访客返回地址栈GRAS中的下一个可用条目;以及
在所述入栈之前用栈顶TOS值更新用于所述当前条目的先前指针。
14.根据权利要求13所述的处理器单元,其中所述出栈进一步包括:
减量所述全局栈顶TOS值;以及
在所述出栈之前用栈顶TOS值更新用于所述当前条目的先前指针。
15.一种配置为实施用于推测性地维护乱序微处理器管线中的访客返回地址栈的方法的装置,所述装置包括:
存储器;
处理器,其通信地耦连到所述存储器,其中所述处理器配置为乱序处理指令,并且进一步其中所述处理器配置为实施方法,所述方法包括:
将访客地址空间中的多个指令映射到本地地址空间中的对应的多个指令;以及
针对在执行期间取回的所述本地地址空间中的每个函数调用指令,实施以下步骤:
响应于函数调用将当前条目入栈到访客返回地址栈GRAS中,其中所述访客返回地址栈GRAS在所述管线的取回段处维护,并且其中所述当前条目包括关于与所述函数调用相关联的访客目标返回地址和对应的本地目标返回地址两者的信息;
响应于处理返回指令将所述当前条目从所述访客返回地址栈GRAS出栈;以及
在从所述访客返回地址栈GRAS出栈之后从所述当前条目中的所述本地目标返回地址取回指令。
16.根据权利要求15所述的装置,其中所述返回指令对应于从所述函数调用的返回。
17.根据权利要求15所述的装置,其中所述映射包括:
将所述访客地址空间中的函数调用映射到所述本地地址空间中对应的指令,其中当执行期间在所述本地地址空间中处理所述对应的指令时,所述对应的指令实施所述入栈。
18.根据权利要求17所述的装置,其中所述映射进一步包括:
将返回指令映射到所述本地地址空间中的对应指令,其中当执行期间在所述本地地址空间中处理所述返回指令时,所述返回指令实施所述出栈。
19.根据权利要求15所述的装置,其中所述访客返回地址栈GRAS是循环缓冲器,并且其中所述循环缓冲器维护:
全局下一指针值,其中所述全局下一指针值指示所述访客返回地址栈GRAS中下一个可用条目的位置;以及
用于所述访客返回地址栈GRAS中的每个条目的先前指针值,其中所述先前指针值指向所述访客返回地址栈GRAS中的在前条目。
20.根据权利要求19所述的装置,其中所述入栈进一步包括:
增量全局栈顶TOS值,其中所述全局栈顶值指示所述访客返回地址栈GRAS的栈顶位置;
增量所述全局下一指针值以指向所述访客返回地址栈GRAS中的下一个可用条目;以及
在所述入栈之前采用栈顶TOS值更新用于所述当前条目的先前指针。
21.根据权利要求20所述的装置,其中所述出栈进一步包括:
减量所述全局栈顶TOS值;以及
在所述出栈之前采用栈顶TOS值更新用于所述当前条目的先前指针。
22.一种计算机可读存储介质,所述计算机可读存储介质包括代码,所述代码在被执行时使计算机执行如权利要求1-7中的任一项所述的方法。
23.一种用于推测性地维护乱序微处理器管线中的访客返回地址栈的设备,包括用于执行如权利要求1-7中的任一项所述的方法的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811210995.9A CN109358948B (zh) | 2013-03-15 | 2014-03-13 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361793174P | 2013-03-15 | 2013-03-15 | |
US61/793,174 | 2013-03-15 | ||
PCT/US2014/026252 WO2014151691A1 (en) | 2013-03-15 | 2014-03-13 | Method and apparatus for guest return address stack emulation supporting speculation |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811210995.9A Division CN109358948B (zh) | 2013-03-15 | 2014-03-13 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105122206A CN105122206A (zh) | 2015-12-02 |
CN105122206B true CN105122206B (zh) | 2018-11-09 |
Family
ID=51533980
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480021703.0A Active CN105122206B (zh) | 2013-03-15 | 2014-03-13 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
CN201811210995.9A Active CN109358948B (zh) | 2013-03-15 | 2014-03-13 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811210995.9A Active CN109358948B (zh) | 2013-03-15 | 2014-03-13 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (2) | US10228950B2 (zh) |
EP (1) | EP2972798B1 (zh) |
KR (1) | KR101761498B1 (zh) |
CN (2) | CN105122206B (zh) |
TW (1) | TWI522915B (zh) |
WO (1) | WO2014151691A1 (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012103367A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
CN108874693B (zh) | 2011-01-27 | 2022-09-23 | 英特尔公司 | 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射 |
WO2012103245A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines Inc. | Guest instruction block with near branching and far branching sequence construction to native instruction block |
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2012103253A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Multilevel conversion table cache for translating guest instructions to native instructions |
US9436476B2 (en) | 2013-03-15 | 2016-09-06 | Soft Machines Inc. | Method and apparatus for sorting elements in hardware structures |
CN105122206B (zh) | 2013-03-15 | 2018-11-09 | 英特尔公司 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
US20140281116A1 (en) | 2013-03-15 | 2014-09-18 | Soft Machines, Inc. | Method and Apparatus to Speed up the Load Access and Data Return Speed Path Using Early Lower Address Bits |
WO2014151652A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
US9627038B2 (en) | 2013-03-15 | 2017-04-18 | Intel Corporation | Multiport memory cell having improved density area |
US9582322B2 (en) | 2013-03-15 | 2017-02-28 | Soft Machines Inc. | Method and apparatus to avoid deadlock during instruction scheduling using dynamic port remapping |
JP2017516228A (ja) | 2014-05-12 | 2017-06-15 | インテル・コーポレーション | 自己書き換えコードのハードウェアサポートを提供する方法及び装置 |
US10394556B2 (en) | 2015-12-20 | 2019-08-27 | Intel Corporation | Hardware apparatuses and methods to switch shadow stack pointers |
US10095517B2 (en) * | 2015-12-22 | 2018-10-09 | Intel Corporation | Apparatus and method for retrieving elements from a linked structure |
US10430580B2 (en) * | 2016-02-04 | 2019-10-01 | Intel Corporation | Processor extensions to protect stacks during ring transitions |
US10847068B2 (en) | 2016-10-27 | 2020-11-24 | Dualitas Ltd | Method of operating a display driver |
JP6528820B2 (ja) * | 2017-09-19 | 2019-06-12 | カシオ計算機株式会社 | コンピュータ、情報機器、これらを動作させるプログラム、情報処理システム、及び情報処理システムの制御方法 |
KR102467842B1 (ko) * | 2017-10-13 | 2022-11-16 | 삼성전자주식회사 | 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템 |
KR102391312B1 (ko) * | 2020-08-04 | 2022-04-28 | 경북대학교 산학협력단 | 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870575A (en) * | 1997-09-22 | 1999-02-09 | International Business Machines Corporation | Indirect unconditional branches in data processing system emulation mode |
CN1823323A (zh) * | 2003-07-15 | 2006-08-23 | 可递有限公司 | 用于执行本机绑定的方法和装置 |
CN101506773A (zh) * | 2006-08-31 | 2009-08-12 | 高通股份有限公司 | 用于模拟显式子例行程序调用的分支预测行为的方法和设备 |
Family Cites Families (141)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5053952A (en) * | 1987-06-05 | 1991-10-01 | Wisc Technologies, Inc. | Stack-memory-based writable instruction set computer having a single data bus |
JP3015493B2 (ja) | 1991-04-26 | 2000-03-06 | 株式会社東芝 | 半導体連想記憶装置 |
US5438668A (en) | 1992-03-31 | 1995-08-01 | Seiko Epson Corporation | System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer |
WO1994027214A1 (en) | 1993-05-07 | 1994-11-24 | Apple Computer, Inc. | Method for decoding sequences of guest instructions for a host computer |
US5761467A (en) | 1993-09-28 | 1998-06-02 | Mitsubishi Denki Kabushiki Kaisha | System for committing execution results when branch conditions coincide with predetermined commit conditions specified in the instruction field |
JPH07271672A (ja) | 1994-03-30 | 1995-10-20 | Toshiba Corp | マルチウェイセットアソシアティブキャッシュシステム |
EP0803095A1 (en) | 1994-10-14 | 1997-10-29 | Silicon Graphics, Inc. | Indexing and multiplexing of interleaved cache memory arrays |
US5651124A (en) | 1995-02-14 | 1997-07-22 | Hal Computer Systems, Inc. | Processor structure and method for aggressively scheduling long latency instructions including load/store instructions while maintaining precise state |
US5742802A (en) | 1996-02-16 | 1998-04-21 | International Business Machines Corporation | Method and system for efficiently mapping guest instruction in an emulation assist unit |
US5784638A (en) * | 1996-02-22 | 1998-07-21 | International Business Machines Corporation | Computer system supporting control transfers between two architectures |
US5892934A (en) * | 1996-04-02 | 1999-04-06 | Advanced Micro Devices, Inc. | Microprocessor configured to detect a branch to a DSP routine and to direct a DSP to execute said routine |
US5961639A (en) | 1996-12-16 | 1999-10-05 | International Business Machines Corporation | Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution |
US5893121A (en) | 1997-04-23 | 1999-04-06 | Sun Microsystems, Inc. | System and method for swapping blocks of tagged stack entries between a tagged stack cache and an untagged main memory storage |
US6142682A (en) | 1997-06-13 | 2000-11-07 | Telefonaktiebolaget Lm Ericsson | Simulation of computer processor |
US5995743A (en) | 1997-09-22 | 1999-11-30 | International Business Machines Corporation | Method and system for interrupt handling during emulation in a data processing system |
US5956495A (en) | 1997-09-22 | 1999-09-21 | International Business Machines Corporation | Method and system for processing branch instructions during emulation in a data processing system |
US5953520A (en) * | 1997-09-22 | 1999-09-14 | International Business Machines Corporation | Address translation buffer for data processing system emulation mode |
US6202127B1 (en) | 1997-11-26 | 2001-03-13 | Compaq Computer Corporation | Apparatus for spatial and temporal sampling in a computer memory system |
US5974525A (en) | 1997-12-05 | 1999-10-26 | Intel Corporation | System for allowing multiple instructions to use the same logical registers by remapping them to separate physical segment registers when the first is being utilized |
US6138225A (en) | 1997-12-24 | 2000-10-24 | Intel Corporation | Address translation system having first and second translation look aside buffers |
JP3246438B2 (ja) | 1998-04-01 | 2002-01-15 | 日本電気株式会社 | 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体 |
JPH11296381A (ja) | 1998-04-08 | 1999-10-29 | Matsushita Electric Ind Co Ltd | 仮想マシン及びコンパイラ |
US6205545B1 (en) | 1998-04-30 | 2001-03-20 | Hewlett-Packard Company | Method and apparatus for using static branch predictions hints with dynamically translated code traces to improve performance |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
GB9825102D0 (en) | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US7225436B1 (en) | 1998-12-08 | 2007-05-29 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US6332215B1 (en) | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US6460114B1 (en) | 1999-07-29 | 2002-10-01 | Micron Technology, Inc. | Storing a flushed cache line in a memory buffer of a controller |
US6928641B1 (en) | 1999-10-08 | 2005-08-09 | Texas Instruments Incorporated | Method and system for far branch and call instructions |
US7418580B1 (en) | 1999-12-02 | 2008-08-26 | International Business Machines Corporation | Dynamic object-level code transaction for improved performance of a computer |
JP3556556B2 (ja) | 2000-02-08 | 2004-08-18 | 株式会社東芝 | 命令コード変換装置及び情報処理システム |
US20020066081A1 (en) | 2000-02-09 | 2002-05-30 | Evelyn Duesterwald | Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator |
US20010037492A1 (en) | 2000-03-16 | 2001-11-01 | Holzmann Gerard J. | Method and apparatus for automatically extracting verification models |
JP2001273138A (ja) | 2000-03-24 | 2001-10-05 | Fujitsu Ltd | プログラム変換装置および方法 |
US20020100022A1 (en) | 2000-05-08 | 2002-07-25 | Holzmann Gerard J. | Method and apparatus for automatic verification of properties of a concurrent software system |
US6615300B1 (en) * | 2000-06-19 | 2003-09-02 | Transmeta Corporation | Fast look-up of indirect branch destination in a dynamic translation system |
US7107437B1 (en) | 2000-06-30 | 2006-09-12 | Intel Corporation | Branch target buffer (BTB) including a speculative BTB (SBTB) and an architectural BTB (ABTB) |
US6711672B1 (en) * | 2000-09-22 | 2004-03-23 | Vmware, Inc. | Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers |
GB2367651B (en) | 2000-10-05 | 2004-12-29 | Advanced Risc Mach Ltd | Hardware instruction translation within a processor pipeline |
JP2002215387A (ja) | 2001-01-22 | 2002-08-02 | Mitsubishi Electric Corp | 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置 |
US7487330B2 (en) | 2001-05-02 | 2009-02-03 | International Business Machines Corporations | Method and apparatus for transferring control in a computer system with dynamic compilation capability |
US7165169B2 (en) | 2001-05-04 | 2007-01-16 | Ip-First, Llc | Speculative branch target address cache with selective override by secondary predictor based on branch instruction type |
US7200740B2 (en) * | 2001-05-04 | 2007-04-03 | Ip-First, Llc | Apparatus and method for speculatively performing a return instruction in a microprocessor |
US6826681B2 (en) * | 2001-06-18 | 2004-11-30 | Mips Technologies, Inc. | Instruction specified register value saving in allocated caller stack or not yet allocated callee stack |
JP4027620B2 (ja) | 2001-06-20 | 2007-12-26 | 富士通株式会社 | 分岐予測装置、プロセッサ、及び分岐予測方法 |
US6832307B2 (en) | 2001-07-19 | 2004-12-14 | Stmicroelectronics, Inc. | Instruction fetch buffer stack fold decoder for generating foldable instruction status information |
US6898699B2 (en) * | 2001-12-21 | 2005-05-24 | Intel Corporation | Return address stack including speculative return address buffer with back pointers |
US7577944B2 (en) | 2002-03-18 | 2009-08-18 | Hewlett-Packard Development Company, L.P. | Unbundling, translation and rebundling of instruction bundles in an instruction stream |
WO2004027600A1 (ja) | 2002-08-30 | 2004-04-01 | Renesas Technology Corp. | データ処理装置及びicカード |
WO2004059472A2 (en) | 2002-12-24 | 2004-07-15 | Sun Microsystems, Inc. | Method and apparatus for generating prefetches |
US20040128658A1 (en) | 2002-12-27 | 2004-07-01 | Guei-Yuan Lueh | Exception handling with stack trace cache |
US7203932B1 (en) | 2002-12-30 | 2007-04-10 | Transmeta Corporation | Method and system for using idiom recognition during a software translation process |
US6810473B2 (en) | 2003-01-06 | 2004-10-26 | Sun Microsystems, Inc. | Replacement algorithm for a replicated fully associative translation look-aside buffer |
US7191291B2 (en) | 2003-01-16 | 2007-03-13 | Ip-First, Llc | Microprocessor with variable latency stack cache |
JP3896087B2 (ja) | 2003-01-28 | 2007-03-22 | 松下電器産業株式会社 | コンパイラ装置およびコンパイル方法 |
US7069413B1 (en) | 2003-01-29 | 2006-06-27 | Vmware, Inc. | Method and system for performing virtual to physical address translations in a virtual machine monitor |
US7278030B1 (en) | 2003-03-03 | 2007-10-02 | Vmware, Inc. | Virtualization system for computers having multiple protection mechanisms |
US7111145B1 (en) | 2003-03-25 | 2006-09-19 | Vmware, Inc. | TLB miss fault handler and method for accessing multiple page tables |
US7290253B1 (en) * | 2003-09-30 | 2007-10-30 | Vmware, Inc. | Prediction mechanism for subroutine returns in binary translation sub-systems of computers |
US7590982B1 (en) | 2003-12-17 | 2009-09-15 | Vmware, Inc. | System and method for virtualizing processor and interrupt priorities |
US7237067B2 (en) | 2004-04-22 | 2007-06-26 | Hewlett-Packard Development Company, L.P. | Managing a multi-way associative cache |
US8443171B2 (en) | 2004-07-30 | 2013-05-14 | Hewlett-Packard Development Company, L.P. | Run-time updating of prediction hint instructions |
JP4520790B2 (ja) | 2004-07-30 | 2010-08-11 | 富士通株式会社 | 情報処理装置およびソフトウェアプリフェッチ制御方法 |
US7571090B2 (en) | 2004-09-30 | 2009-08-04 | Intel Corporation | Emulating a host architecture in guest firmware |
US7496735B2 (en) | 2004-11-22 | 2009-02-24 | Strandera Corporation | Method and apparatus for incremental commitment to architectural state in a microprocessor |
US7428626B2 (en) | 2005-03-08 | 2008-09-23 | Microsoft Corporation | Method and system for a second level address translation in a virtual machine environment |
US8370819B2 (en) | 2005-03-25 | 2013-02-05 | Microsoft Corporation | Mechanism to store information describing a virtual machine in a virtual disk image |
US7383374B2 (en) | 2005-03-31 | 2008-06-03 | Intel Corporation | Method and apparatus for managing virtual addresses |
US7734895B1 (en) | 2005-04-28 | 2010-06-08 | Massachusetts Institute Of Technology | Configuring sets of processor cores for processing instructions |
TWI306215B (en) | 2005-04-29 | 2009-02-11 | Ind Tech Res Inst | Method and corresponding apparatus for compiling high-level languages into specific processor architectures |
US20070006178A1 (en) | 2005-05-12 | 2007-01-04 | Microsoft Corporation | Function-level just-in-time translation engine with multiple pass optimization |
US20060282821A1 (en) * | 2005-06-10 | 2006-12-14 | Renno Erik K | Efficient subprogram return in microprocessors |
US7703088B2 (en) | 2005-09-30 | 2010-04-20 | Intel Corporation | Compressing “warm” code in a dynamic binary translation environment |
US9003421B2 (en) | 2005-11-28 | 2015-04-07 | Intel Corporation | Acceleration threads on idle OS-visible thread execution units |
US20070174717A1 (en) | 2006-01-10 | 2007-07-26 | Sun Microsystems, Inc. | Approach for testing instruction TLB using user/application level techniques |
TWI287801B (en) | 2006-01-13 | 2007-10-01 | Optimum Care Int Tech Inc | Memory module having address transforming function and method for controlling memory |
US8099730B2 (en) | 2006-03-30 | 2012-01-17 | Intel Corporation | Heterogeneous virtualization of host and guest OS having different register sizes using translation layer to extract device port numbers for host OS system memory addresses |
JP5010164B2 (ja) | 2006-03-31 | 2012-08-29 | 株式会社日立製作所 | サーバ装置及び仮想計算機の制御プログラム |
US7568189B2 (en) | 2006-05-03 | 2009-07-28 | Sony Computer Entertainment Inc. | Code translation and pipeline optimization |
US7752417B2 (en) | 2006-06-05 | 2010-07-06 | Oracle America, Inc. | Dynamic selection of memory virtualization techniques |
US7617493B2 (en) | 2007-01-23 | 2009-11-10 | International Business Machines Corporation | Defining memory indifferent trace handles |
US8190664B2 (en) | 2007-04-26 | 2012-05-29 | International Business Machines Corporation | Employing a mask field of an instruction to encode a sign of a result of the instruction |
US8688920B2 (en) | 2007-05-14 | 2014-04-01 | International Business Machines Corporation | Computing system with guest code support of transactional memory |
JP2008299795A (ja) * | 2007-06-04 | 2008-12-11 | Nec Electronics Corp | 分岐予測制御装置及びその方法 |
US8205194B2 (en) | 2007-06-29 | 2012-06-19 | Microsoft Corporation | Updating offline virtual machines or VM images |
KR101498673B1 (ko) | 2007-08-14 | 2015-03-09 | 삼성전자주식회사 | 반도체 드라이브, 그것의 데이터 저장 방법, 그리고 그것을포함한 컴퓨팅 시스템 |
CN100478915C (zh) * | 2007-09-20 | 2009-04-15 | 福建星网锐捷网络有限公司 | 一种基于mips架构cpu的异常点定位诊断方法 |
JP2009087028A (ja) | 2007-09-28 | 2009-04-23 | Toshiba Corp | メモリシステム及びメモリの読出し方法並びにプログラム |
US7971044B2 (en) * | 2007-10-05 | 2011-06-28 | Qualcomm Incorporated | Link stack repair of erroneous speculative update |
US7844954B2 (en) | 2007-11-06 | 2010-11-30 | Vmware, Inc. | Using branch instruction counts to facilitate replay of virtual machine instruction execution |
JP5091655B2 (ja) | 2007-12-21 | 2012-12-05 | 株式会社日立製作所 | 計算機仮想化装置、そのプログラム、及びその方法 |
CN101470661B (zh) | 2007-12-28 | 2012-03-14 | 鸿富锦精密工业(深圳)有限公司 | 计算机程序除错系统及方法 |
US8041922B2 (en) | 2008-01-11 | 2011-10-18 | International Business Machines Corporation | Enhanced dynamic address translation with load real address function |
US20090182985A1 (en) | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Move Facility and Instructions Therefore |
US8151085B2 (en) | 2008-01-17 | 2012-04-03 | International Business Machines Corporation | Method for address translation in virtual machines |
US8099541B2 (en) | 2008-01-22 | 2012-01-17 | Globalfoundries Inc. | Minivisor entry point in virtual machine monitor address space |
US8819647B2 (en) | 2008-01-25 | 2014-08-26 | International Business Machines Corporation | Performance improvements for nested virtual machines |
US8832682B2 (en) | 2008-03-28 | 2014-09-09 | Vmware, Inc. | Trace collection for a virtual machine |
US9009727B2 (en) | 2008-05-30 | 2015-04-14 | Vmware, Inc. | Virtualization with in-place translation |
US8275971B2 (en) | 2008-08-27 | 2012-09-25 | International Business Machines Corporation | Method and apparatus for managing software controlled cache of translating the physical memory access of a virtual machine between different levels of translation entities |
US8473930B2 (en) | 2008-11-05 | 2013-06-25 | Oracle America, Inc. | Handling signals and exceptions in a dynamic translation environment |
CN101751345B (zh) | 2008-12-10 | 2012-04-11 | 国际商业机器公司 | 在主机中运行客户机的程序的模拟器和模拟方法 |
US8959277B2 (en) | 2008-12-12 | 2015-02-17 | Oracle America, Inc. | Facilitating gated stores without data bypass |
US8078854B2 (en) | 2008-12-12 | 2011-12-13 | Oracle America, Inc. | Using register rename maps to facilitate precise exception semantics |
US8561040B2 (en) | 2009-03-10 | 2013-10-15 | Oracle America, Inc. | One-pass compilation of virtual instructions |
US8832354B2 (en) | 2009-03-25 | 2014-09-09 | Apple Inc. | Use of host system resources by memory controller |
US8103894B2 (en) | 2009-04-24 | 2012-01-24 | International Business Machines Corporation | Power conservation in vertically-striped NUCA caches |
US8140758B2 (en) | 2009-04-24 | 2012-03-20 | International Business Machines Corporation | Data reorganization in non-uniform cache access caches |
US8799879B2 (en) | 2009-06-30 | 2014-08-05 | Oracle America, Inc. | Method and apparatus for protecting translated code in a virtual machine |
US8386745B2 (en) | 2009-07-24 | 2013-02-26 | Advanced Micro Devices, Inc. | I/O memory management unit including multilevel address translation for I/O and computation offload |
US8428930B2 (en) | 2009-09-18 | 2013-04-23 | International Business Machines Corporation | Page mapped spatially aware emulation of a computer instruction set |
US8301434B2 (en) | 2009-09-18 | 2012-10-30 | International Buisness Machines Corporation | Host cell spatially aware emulation of a guest wild branch |
US8447583B2 (en) | 2009-09-18 | 2013-05-21 | International Business Machines Corporation | Self initialized host cell spatially aware emulation of a computer instruction set |
US9158566B2 (en) | 2009-09-18 | 2015-10-13 | International Business Machines Corporation | Page mapped spatially aware emulation of computer instruction set |
US8612731B2 (en) | 2009-11-06 | 2013-12-17 | International Business Machines Corporation | Branch target buffer for emulation environments |
US8364461B2 (en) | 2009-11-09 | 2013-01-29 | International Business Machines Corporation | Reusing invalidated traces in a system emulator |
JP5984118B2 (ja) | 2009-12-04 | 2016-09-06 | マーベル ワールド トレード リミテッド | 格納デバイスの仮想化 |
KR101247259B1 (ko) | 2009-12-17 | 2013-04-01 | 한국전자통신연구원 | 가상화 장치 및 그 처리 방법 |
US8438334B2 (en) | 2009-12-22 | 2013-05-07 | International Business Machines Corporation | Hybrid storage subsystem with mixed placement of file contents |
US8775153B2 (en) | 2009-12-23 | 2014-07-08 | Intel Corporation | Transitioning from source instruction set architecture (ISA) code to translated code in a partial emulation environment |
JP2011198091A (ja) | 2010-03-19 | 2011-10-06 | Toshiba Corp | 仮想アドレスキャッシュメモリ、プロセッサ及びマルチプロセッサシステム |
US20110238962A1 (en) | 2010-03-23 | 2011-09-29 | International Business Machines Corporation | Register Checkpointing for Speculative Modes of Execution in Out-of-Order Processors |
US8650337B2 (en) | 2010-06-23 | 2014-02-11 | International Business Machines Corporation | Runtime determination of translation formats for adapter functions |
US8572635B2 (en) | 2010-06-23 | 2013-10-29 | International Business Machines Corporation | Converting a message signaled interruption into an I/O adapter event notification |
CN108874693B (zh) | 2011-01-27 | 2022-09-23 | 英特尔公司 | 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射 |
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2012103367A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
WO2012103245A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines Inc. | Guest instruction block with near branching and far branching sequence construction to native instruction block |
WO2012103253A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Multilevel conversion table cache for translating guest instructions to native instructions |
WO2012103373A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Variable caching structure for managing physical storage |
US9495183B2 (en) | 2011-05-16 | 2016-11-15 | Microsoft Technology Licensing, Llc | Instruction set emulation for guest operating systems |
US8645633B2 (en) | 2011-05-17 | 2014-02-04 | International Business Machines Corporation | Facilitating data coherency using in-memory tag bits and faulting stores |
US9354886B2 (en) * | 2011-11-28 | 2016-05-31 | Apple Inc. | Maintaining the integrity of an execution return address stack |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US10656945B2 (en) | 2012-06-15 | 2020-05-19 | International Business Machines Corporation | Next instruction access intent instruction for indicating usage of a storage operand by one or more instructions subsequent to a next sequential instruction |
US8819648B2 (en) | 2012-07-20 | 2014-08-26 | International Business Machines Corporation | Control flow management for execution of dynamically translated non-native code in a virtual hosting environment |
US20140258696A1 (en) | 2013-03-05 | 2014-09-11 | Qualcomm Incorporated | Strided target address predictor (stap) for indirect branches |
CN105122206B (zh) | 2013-03-15 | 2018-11-09 | 英特尔公司 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
WO2014151652A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
CN104679480A (zh) | 2013-11-27 | 2015-06-03 | 上海芯豪微电子有限公司 | 一种指令集转换系统和方法 |
US9477453B1 (en) * | 2015-06-24 | 2016-10-25 | Intel Corporation | Technologies for shadow stack manipulation for binary translation systems |
-
2014
- 2014-03-13 CN CN201480021703.0A patent/CN105122206B/zh active Active
- 2014-03-13 EP EP14770972.9A patent/EP2972798B1/en active Active
- 2014-03-13 WO PCT/US2014/026252 patent/WO2014151691A1/en active Application Filing
- 2014-03-13 KR KR1020157029321A patent/KR101761498B1/ko active IP Right Grant
- 2014-03-13 CN CN201811210995.9A patent/CN109358948B/zh active Active
- 2014-03-14 US US14/211,655 patent/US10228950B2/en active Active
- 2014-03-17 TW TW103109877A patent/TWI522915B/zh not_active IP Right Cessation
-
2019
- 2019-01-18 US US16/251,941 patent/US10810014B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870575A (en) * | 1997-09-22 | 1999-02-09 | International Business Machines Corporation | Indirect unconditional branches in data processing system emulation mode |
CN1823323A (zh) * | 2003-07-15 | 2006-08-23 | 可递有限公司 | 用于执行本机绑定的方法和装置 |
CN101506773A (zh) * | 2006-08-31 | 2009-08-12 | 高通股份有限公司 | 用于模拟显式子例行程序调用的分支预测行为的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
EP2972798B1 (en) | 2020-06-17 |
EP2972798A1 (en) | 2016-01-20 |
US20140281388A1 (en) | 2014-09-18 |
TW201506783A (zh) | 2015-02-16 |
TWI522915B (zh) | 2016-02-21 |
US10228950B2 (en) | 2019-03-12 |
WO2014151691A1 (en) | 2014-09-25 |
US10810014B2 (en) | 2020-10-20 |
KR101761498B1 (ko) | 2017-07-25 |
US20190155609A1 (en) | 2019-05-23 |
CN105122206A (zh) | 2015-12-02 |
KR20150132431A (ko) | 2015-11-25 |
CN109358948B (zh) | 2022-03-25 |
EP2972798A4 (en) | 2017-04-19 |
CN109358948A (zh) | 2019-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105122206B (zh) | 用于支持推测的访客返回地址栈仿真的方法和装置 | |
US9934033B2 (en) | Operation of a multi-slice processor implementing simultaneous two-target loads and stores | |
US10564965B2 (en) | Compare string processing via inline decode-based micro-operations expansion | |
US10789069B2 (en) | Dynamically selecting version of instruction to be executed | |
US10372447B2 (en) | Selecting processing based on expected value of selected character | |
US10289419B2 (en) | Method and apparatus for sorting elements in hardware structures | |
US10613862B2 (en) | String sequence operations with arbitrary terminators | |
WO2014151652A1 (en) | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor | |
US20180004527A1 (en) | Operation of a multi-slice processor implementing prioritized dependency chain resolution | |
US10282207B2 (en) | Multi-slice processor issue of a dependent instruction in an issue queue based on issue of a producer instruction | |
US10241905B2 (en) | Managing an effective address table in a multi-slice processor | |
US20170344368A1 (en) | Identifying an effective address (ea) using an interrupt instruction tag (itag) in a multi-slice processor | |
US10528353B2 (en) | Generating a mask vector for determining a processor instruction address using an instruction tag in a multi-slice processor | |
US10678551B2 (en) | Operation of a multi-slice processor implementing tagged geometric history length (TAGE) branch prediction | |
US10528352B2 (en) | Blocking instruction fetching in a computer processor | |
US20230229447A1 (en) | Stateful microcode branching | |
US10296337B2 (en) | Preventing premature reads from a general purpose register | |
US20170315809A1 (en) | Supporting even instruction tag ('itag') requirements in a multi-slice processor using null internal operations (iops) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20170322 Address after: American California Applicant after: Intel Corporation Address before: American California Applicant before: Soft Machines Inc. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |