CN117555555A - 例外处理方法、装置、电子设备及存储介质 - Google Patents

例外处理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117555555A
CN117555555A CN202410045007.9A CN202410045007A CN117555555A CN 117555555 A CN117555555 A CN 117555555A CN 202410045007 A CN202410045007 A CN 202410045007A CN 117555555 A CN117555555 A CN 117555555A
Authority
CN
China
Prior art keywords
exception
instruction
target
preset
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202410045007.9A
Other languages
English (en)
Other versions
CN117555555B (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.)
Loongson Technology Corp Ltd
Original Assignee
Loongson Technology Corp 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 Loongson Technology Corp Ltd filed Critical Loongson Technology Corp Ltd
Priority to CN202410045007.9A priority Critical patent/CN117555555B/zh
Publication of CN117555555A publication Critical patent/CN117555555A/zh
Application granted granted Critical
Publication of CN117555555B publication Critical patent/CN117555555B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

本发明实施例提供了一种例外处理方法、装置、电子设备及存储介质,其中的方法包括:在执行到当前指令时,检测是否存在预设标志;所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外;若检测到存在所述预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志;若检测到不存在所述预设标志,则继续执行所述当前指令以及后续指令,并在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,以及设置所述预设标志。本发明实施例可以在实现精确例外的处理器中实现模拟x87 FPU指令的延迟例外机制。

Description

例外处理方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术领域,特别是涉及一种例外处理方法、装置、电子设备以及存储介质。
背景技术
二进制翻译可以将运行在一种ISA(Instruction Set Architecture,指令集架构)平台(称作GUEST平台)的源程序转换为运行在另一种ISA平台(称作HOST平台)的目标程序,例如使x86平台的程序运行在LoongArch平台上。在二进制翻译过程中需要针对两种ISA之间的差异做一些必要的特殊处理,例如针对x87浮点协处理器的有关处理。x87指令集使用了一个称为FPU(Floating-Point Unit)的数学协处理器,它独立于CPU,用于执行浮点运算。
x87 FPU指令区别于其他大多数指令集的一个特征是对例外的处理方式是延迟例外(也称为非精确例外)。也即,发生例外的x87 FPU指令并不报例外,而是由下一条x87 FPU指令报例外。然而,目前宿主机的处理器通常采用精确例外的方式处理例外。也即,由发生例外的那条指令直接报例外,因此,无法模拟x87 FPU指令的延迟例外机制。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种例外处理方法,可以在实现精确例外的处理器中实现模拟x87 FPU指令的延迟例外机制。
相应的,本发明实施例还提供了一种例外处理装置、电子设备、以及一种存储介质,用以保证上述方法的实现及应用。
第一方面,本发明实施例公开了一种例外处理方法,所述方法包括:
在执行到当前指令时,检测是否存在预设标志;所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外;
若检测到存在所述预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志;
若检测到不存在所述预设标志,则继续执行所述当前指令以及后续指令,并在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,以及设置所述预设标志。
第二方面,本发明实施例公开了一种例外处理装置,所述装置包括:
标志检测模块,用于在执行到当前指令时,检测是否存在预设标志;所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外;
第一处理模块,用于若检测到存在所述预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志;
第二处理模块,用于若检测到不存在所述预设标志,则继续执行所述当前指令以及后续指令,并在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,以及设置所述预设标志。
第三方面,本发明实施例公开了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如前述中任一所述的例外处理方法的步骤。
第四方面,本发明实施例公开了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时能够实现本发明实施例中任一所述的例外处理方法。
本发明实施例提供的例外处理方法、装置、电子设备及存储介质包括以下优点:
本发明实施例在执行到当前指令时,若当前指令产生目标例外,则针对该目标例外报第一次例外,并产生预设标志。本发明实施例针对某个目标例外报第一次例外时,并不处理该目标例外,而是在报第二次例外时处理,以实现对目标例外的延迟处理。所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外。在执行到后续相关指令时,如果检测到该预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志,表示该目标例外已经处理完成。由此,在二进制翻译场景下,在翻译执行到产生目标例外(如浮点例外的)x87 FPU指令时,可以先报第一次例外,并设置预设标志,但不处理该目标例外;在翻译执行到下一条x87FPU指令时,检测到该预设标志,则针对该目标例外报第二次例外,并处理该目标例外,从而可以在实现精确例外的处理器中实现模拟x87 FPU指令的延迟例外机制。
附图说明
图1是本发明的一种例外处理方法实施例的步骤流程图;
图2是本发明的一个示例中的例外处理的流程示意图;
图3是本发明的一种例外处理装置实施例的结构框图;
图4是本发明实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中的术语“和/或”用于描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本发明实施例中术语“多个”是指两个或两个以上,其它量词与之类似。
二进制翻译可以用来解决二进制层面的应用程序跨指令集架构运行的问题。具体而言,二进制翻译技术可将一种指令集架构中的指令序列转化成另一种指令集架构中的指令序列。例如,二进制翻译可以将x86指令集架构中的指令序列翻译成arm指令集架构(如arm64)中的指令序列,反之亦然。二进制翻译包括静态翻译和动态翻译两种。静态翻译是在源平台的二进制程序A执行之前,对该二进制程序A进行翻译,以将该二进制程序A翻译成目标平台上的二进制程序文件B。基于静态翻译技术,一次翻译得到的翻译结果可以被多次使用。动态翻译是在二进制程序运行时对执行到的片段进行翻译。本发明实施例的例外处理方法可应用于动态翻译,以基本块(Translation Block,TB)为单元进行翻译。一个基本块一般以控制流改变指令(如跳转、函数调用等)为结尾。
本发明实施例中,源程序(源代码)指的是待进行二进制翻译的程序,源程序可以是任意类型的应用程序。源平台指可运行源程序的机器平台。在一些实施例中,源平台也可称为客户平台(GUEST平台)或客户机。源平台的处理器可以是基于第一指令集架构的处理器。该第一指令集架构例如可以是x86指令集架构,也可以是arm指令集架构(如arm64)。源程序是基于第一指令集架构开发的程序,因此,源程序可以在源平台上正常运行。目标平台是希望移植源程序的机器平台。在一些实施例中,目标平台也可称为宿主平台(HOST平台)或宿主机。目标平台的处理器可以是基于第二指令集架构的处理器。该第二指令集架构与第一指令集架构为不同的指令集架构。例如,第一指令集架构为x86指令集架构,第二指令集架构为arm指令集架构。又如,第一指令集架构为arm指令集架构,第二指令集架构为x86指令集架构。再如,第一指令集架构为x86指令集架构,第二指令集架构为LoongArch(龙架构)。源程序可以采用源二进制代码在源平台上运行。该源二进制代码为基于第一指令集架构的代码。如果希望在目标平台上运行该源程序,则需要将该源二进制代码翻译成目标二进制代码(目标代码)。该目标二进制代码为基于第二指令集架构的代码,从而可以在目标平台上运行该目标二进制代码。
图1示出了本发明的一种例外处理方法实施例的步骤流程图,所述方法可以包括如下步骤:
步骤101、在执行到当前指令时,检测是否存在预设标志;所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外;
步骤102、若检测到存在所述预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志;
步骤103、若检测到不存在所述预设标志,则继续执行所述当前指令以及后续指令,并在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,以及设置所述预设标志。
本发明实施例提供的例外处理方法可应用于在执行指令的过程中需要实现延迟例外的场景。
例如,所述方法可应用于如下场景:将第一指定指令集合(称为第一集合)A中的指令产生的目标例外,延迟到执行下一条第二指定指令集合(称为第二集合)B中的指令时再进行处理。图1中所述的当前指令可以为第二集合B中的指令,产生目标例外的指令可以为A中的指令。
又如,所述方法可应用于二进制翻译场景,具体地,可应用于二进制翻译系统,所述二进制翻译系统用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码。图1中所述的当前指令可以为所述源代码中待翻译执行的指令;所述源代码可以包括x87 FPU指令;所述目标代码可以包括x87 FPU模拟指令;所述目标例外可以包括将所述x87 FPU指令翻译为所述x87 FPU模拟指令后执行时产生的浮点例外。由此,在二进制翻译场景下,在翻译执行到产生目标例外(如浮点例外的)的x87 FPU指令时,可以先报第一次例外,清空流水线中的后续的指令,并设置预设标志,保存发生第一次例外的现场、记录地址等,但不处理该目标例外;在翻译执行到下一条x87 FPU指令时,检测到该预设标志,则针对该目标例外报第二次例外,并处理该目标例外,从而可以在实现精确例外的处理器中实现模拟x87 FPU指令的延迟例外机制。
需要说明的是,本发明实施例中的翻译执行指的是将源代码中的指令(如x86平台的x87 FPU指令)翻译为目标平台的指令(如LoongArch平台的x87 FPU模拟指令),然后执行该目标平台的指令。例如,翻译执行到源代码中的某条x87 FPU指令(如浮点加法指令),指的是将该浮点加法指令翻译为x87fadd指令并执行。
需要说明的是,本发明实施例中主要以二进制翻译场景为例进行说明,其他应用场景相互参照即可。
本发明实施例对所述宿主平台和所述客户平台不做限制,为便于描述,本发明实施例中以客户平台为x86平台,宿主平台为LoongArch平台为例进行说明。也即,所述源代码可以基于x86指令集架构,所述目标代码可以基于LoongArch指令集架构。
x86指令集中包含多种类型的指令,如定点指令、向量(XMM)指令和x87 FPU指令等。其中,定点指令指的是指令的操作数为定点类型。向量(XMM)指令指的是指令的操作数为向量类型。x87 FPU具有自己的指令系统,共有几十种浮点指令,指令的操作数为浮点类型。
在对x86指令集的二进制翻译中,使用硬件实现一部分x87 FPU指令来提高效率,同时使用软件模拟一部分x87 FPU指令来节约硬件资源。然而,目标处理器通常采用精确例外的方式处理例外。精确例外要求处理完例外之后,回到产生例外的地方接着执行,还能执行正确,就好像没有发生过例外一样。这要求在处理例外时,发生例外指令之前所有的指令都已经执行完成,例外指令后面的所有指令都还没有执行。因此需要在发生例外的指令处处理例外,并保存该指令的现场,跳转到例外处理程序入口处理例外。在例外处理后,恢复该指令的现场并继续执行。这与x87延迟例外机制不同。在延迟例外中,由产生例外的下一条指令报例外,保存下一条指令的现场,然后进行例外处理,恢复现场后从下一条指令继续执行。现有技术无法在精确例外的宿主机上模拟x87 FPU指令的延迟例外机制。
本发明提供的例外处理方法可以在宿主机上翻译执行x87 FPU指令的过程中,模拟x87 FPU指令的延迟例外机制。
所谓“例外”(或者异常),是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。为了加强程序的鲁棒性,程序设计时,必须考虑到可能发生的异常事件并做出相应的处理。“报例外”也即异常事件发生时,对异常事件做出的相应的处理。“报例外”是软硬件协同处理例外的过程中的一种CPU行为,主要涉及记录发生例外的地址、调整CPU权限、保存例外现场、记录例外相关信息、以及跳转到例外处理程序入口地址。
浮点例外指的是浮点指令(如x87 FPU指令)产生的例外,包括但不限于上溢(即计算结果超出浮点数表示范围)、下溢、除0溢出等。需要说明的是,模拟x87 FPU指令的延迟例外机制是本发明实施例的一种应用场景。本发明实施例对所述源代码包含的指令的类型不做限制,对目标例外的类型也不做限制。本发明实施例可用于对二进制翻译过程中任意指令产生的例外进行处理。
一个场景中,本发明实施例提供的例外处理方法可以模拟x87 FPU指令的延迟例外机制。具体地,在翻译执行所述源代码中的当前指令时,若当前指令产生目标例外,则针对该目标例外报第一次例外,并产生预设标志。本发明实施例针对某个目标例外报第一次例外时,并不处理该目标例外,而是在报第二次例外时处理,以实现对目标例外的延迟处理,从而可以在精确例外的处理器中实现模拟x87 FPU指令的延迟例外机制。所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外。在翻译后续相关指令(如下一条x87 FPU指令)时,如果检测到该预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志,表示该目标例外已经处理完成。
在针对所述目标例外报第一次例外,以及设置所述预设标志之后,可以继续翻译执行后续指令。
所述目标例外可以是任意类型的例外,如前述的浮点例外。一个示例中,在LoongArch平台翻译执行基于x86指令集架构的源代码,源代码中包含x86指令和x87 FPU指令。如包括浮点加法指令,为实现该浮点加法指令,定义用于模拟该浮点加法指令的x87FPU模拟指令,如x87fadd指令。在翻译到该浮点加法指令时(该浮点加法指令即为当前指令),将该浮点加法指令翻译为x87fadd指令并执行。如果在执行该x87fadd指令时产生浮点例外(该浮点例外即为目标例外),则针对该浮点例外报第一次例外,并设置预设标志,清空流水线中的后续指令,并进保存现场、记录地址等,然后继续翻译执行后续指令。所述后续指令可以包括x86指令和/或x87 FPU指令。在翻译执行到该浮点加法指令之后的某条x87FPU指令时,检测是否存在预设标志。例如,在翻译到该浮点加法指令之后的第一条x87 FPU指令时,检测到已存在该预设标志,此时可以针对该目标例外报第二次例外,并处理该目标例外,以及在该目标例外处理完成后清除该预设标志,由此实现延迟例外机制。
进一步地,本发明实施例设置预设标志是在报第二次例外之前,预设标志可以由报第一次例外的硬件指令来设置,或者,可以由例外处理程序来设置。也即,预设标志可以通过硬件或软件的方式设置。而例外具有如下两个特征:一是在通常的程序中出现的概率较低;二是当发生例外时通常会取消掉后续所有指令。
因此,在处理器核设计时,后续指令可以不管是否存在预设标志位,而直接执行,因为如果发生了例外后续指令会被取消掉,这时执行结果错误也没有影响。因此,所述宿主机的处理器可以是乱序处理器,本发明实施例的例外处理方法可以实现在乱序处理器中模拟x87 FPU指令的延迟例外机制。
本发明实施例中,所述宿主机的处理器可以实现精确例外,同时,也可以实现x87FPU指令的延迟例外。
在本发明的一种可选实施例中,所述方法还可以包括:
针对所述目标例外报第一次例外之后,处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志。
进一步地,本发明实施例对设置所述预设标志的方式不做限制。例如,可以通过硬件设置,也可以通过软件设置。通过软件设置所述预设标志,可以将模拟x87 FPU指令的延迟例外机制的方式恢复成精确例外的方式。例如,在报第一次例外进入例外处理程序后,例外处理程序直接对目标例外进行处理,并且在处理完成后清除预设标志,则实现效果等同于精确例外。
在本发明的一种可选实施例中,所述方法还可以包括:
定义第一集合和第二集合,所述第一集合包括第一指定指令和每个第一指定指令对应的指定例外;第二集合包括第二指定指令;
所述在执行到当前指令时,检测是否存在预设标志,可以包括:
在执行到当前指令时,若所述当前指令为所述第二集合中的第二指定指令,则检测是否存在预设标志;
所述在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,可以包括:
若执行到的当前指令为所述第一集合中的第一指定指令,并且所述当前指令产生的例外为所述第一集合中该第一指定指令对应的指定例外,则确定该指定例外为目标例外,针对该目标例外报第一次例外。
其中,第一集合可以被定义为某类延迟例外的产生集。所述第二集合可以被定义为某类延迟例外的触发集。某类延迟例外指的是需要模拟实现延迟例外的一类例外。产生集中的指令指的是对目标例外报第一次例外的指令。触发集中的指令指的是对目标指令报第二次例外的指令。
一个示例中,可以定义(指令,例外)对如下:(a,e)。其中,a为第一指定指令,当然,a可以是任意指令。e是第一指定指令a对应的指定例外组成的集合。
可以定义第一集合如下:A={(a_1,e_1),…(a_n,e_n)}。其中,n可以是任意自然数,(a_i,e_i)是A中的一个“(指令,例外)对”,i的取值为1~n。
可以定义第二集合如下:B={b_1,…,b_m}。其中,m可以是任意自然数,b_j是B中的第二指定指令,当然,b_j可以是任意指令,j的取值为1~m。
需要说明的是,本发明实施例对第一集合和第二集合中包含的指令不做限制。第一集合中的指令和第二集合中的指令可以相同也可以不同,可以根据实际需求设置。
在本发明的一种可选实施例中,所述针对所述目标例外报第一次例外,可以包括:由产生所述目标例外的指令,针对所述目标例外报第一次例外;所述针对所述目标例外报第二次例外,可以包括:由产生目标例外的指令之后翻译执行的第一条第二集合中的指令,针对所述目标例外报第二次例外。
在本发明实施例中,对于A中的任意“(指令,例外)对”,如(a_i,e_i),1<=i<=n,当a_i产生e_i中的例外(本发明实施例中称该例外为目标例外)时,对该目标例外都需要报两次例外,报第一次例外也可以称为报产生例外。产生例外可以由发生目标例外的指令来报,也可以由其他指令来报。报第一次例外的目的在于令例外处理程序通知处理器该目标例外已经报过第一次例外,但还未报第二次例外,也即,该目标例外还未得到处理。报第二次例外也可以称为报触发例外。触发例外可以由产生目标例外的指令之后翻译执行的第一条第二集合中的指令来报,也可以由其他指令来报。报第二次例外的目的在于令例外处理程序对该目标例外进行处理,并通知处理器该目标例外已经报过第二次例外了。
报第一次例外的作用在于通知处理器已经发生过某类目标例外,但还未处理,从而可以在翻译执行后续相关指令时对该类目标例外报第二次例外,此时才对该类目标例外进行处理,由此在精确例外的处理器中实现延迟例外。需要说明的是,本发明实施例对报第二目标例外的指令不做限制,可以根据需要设置。例如,可以在报第一次例外后,翻译执行到第一条第二集合B中的指令时报第二次例外。
在本发明的一种可选实施例中,所述方法还可以包括:
初始化预置寄存器的第一标记位和第二标记位;
所述设置所述预设标志,包括:
将所述第二标记位设置为第一数值,以使例外处理程序检测到所述第二标记位为所述第一数值时,执行第一处理流程;所述第一处理流程用于将所述第一标记位设置为第二数值;所述第一标记位为第二数值表示存在预设标志;
所述针对所述目标例外报第二次例外之后,还包括:
将所述第二标记位设置为第二数值,以使例外处理程序检测到所述第二标记位为所述第二数值时,执行第二处理流程;所述第二处理流程用于处理所述目标例外;
所述清除所述预设标志,包括:
将所述第一标记位设置为第一数值。
对于某个第一集合A中的任意“(指令,例外)对”(a_i,e_i),1<=i<=n。当a_i产生e_i中的例外(本发明实施例中称该例外为目标例外)时,针对该目标例外报第一次例外,并设置预设标志。在翻译执行到第一条第二集合B中的指令时对该目标例外报第二次例外,并处理该目标例外,在处理完成后清除该预设标志。需要说明的是,报例外(包括报第一次例外或者报第二次例外)都会进入操作系统的例外处理程序进行处理。本发明实施例可以通过例外处理程序配合预置寄存器中的第一标记位和第二标记位,决定是否需要设置或清除预设标志。
所述预置寄存器可以为宿主平台中用于模拟x86的控制状态寄存器(EFLAGSRegister)的寄存器。控制状态寄存器又称程序状态寄存器,是一个控制标志和系统标志的寄存器。程序可以根据控制状态寄存器中的值进行条件判断和控制流程,从而实现不同的逻辑和功能。
在二进制翻译系统中,宿主平台可以使用一个通用寄存器模拟x86的控制状态寄存器,在翻译执行客户平台的源代码时根据该模拟的控制状态寄存器实现条件判断和控制流程等操作。
本发明实施例通过控制宿主平台的预置寄存器中的预留位(如第一标记位和第二标记位)来设置或清除预设标志。示例性地,所述第一标记位为控制状态寄存器的bit11位,所述第二标记位为控制状态寄存器的bit12位。
本发明实施例对所述第一数值和所述第二数值的具体值不做限制。示例性地,所述第一数值为0,所述第二数值为1;或者,所述第一数值为1,所述第二数值为0;等等。为便于描述,本发明实施例中以第一数值为0,第二数值为1为例进行说明。
进一步地,本发明实施例通过控制状态寄存器的第一标记位和第二标记位,可以描述如下三种状态:HF状态、SF状态和SS状态。其中,HF状态即表示存在预设标志,表示当前需要针对目标例外报触发例外。SF状态表示当前报的例外是针对目标例外报的产生例外。SS状态表示当前报的例外是针对目标例外报的触发例外。示例性地,本发明实施例利用控制状态寄存器的bit11位为1表示HF状态,bit11位为0表示非HF状态,bit12位为1表示SS状态,bit12位为0表示SF状态。SF和SS两种状态不能同时存在。
本发明实施例通过控制状态寄存器的第一标记位和第二标记位描述的状态,控制例外处理程序的处理流程。具体地,当例外处理程序检测到所述第二标记位为第一数值时,表示当前为SF状态,则执行第一处理流程;所述第一处理流程用于将所述第一标记位设置为第二数值;所述第一标记位为第二数值表示存在预设标志。当例外处理程序检测到所述第二标记位为第二数值时,表示当前为SS状态,则执行第二处理流程;所述第二处理流程用于处理所述目标例外。
参照图2,示出了本发明实施例一个示例中的例外处理的流程示意图。如图2所示,包括如下步骤:
步骤S1、开始翻译执行。
步骤S2、判断当前指令是否属于第二集合B;若是,则执行步骤S3,否则执行步骤S5。
步骤S3、判断是否存在预设标志;若是,则执行步骤S4,否则执行步骤S5。
步骤S4、报触发例外,也即,针对目标例外报第二次例外。
当翻译执行到当前指令时,判断当前指令是否属于第二集合B,如果当前指令属于第二集合B,则需要判断当前是否存在预设标志,也即判断控制状态寄存器描述的状态是否为HF状态;如果是HF状态,说明当前指令已针对某类例外(目标例外)报过第一次例外,则可以针对该目标例外报第二次例外,并保证此时已将控制状态寄存器描述的状态设置为SS状态。
步骤S5、继续翻译执行。
步骤S6、判断是否产生第一集合A中的例外;若是,则执行步骤S7,否则,执行步骤S8。
步骤S7、报产生例外,也即,针对目标例外报第一次例外。
步骤S8、结束翻译执行。
如果翻译执行到当前指令时,不存在预设标志,也即控制状态寄存器描述的状态不是HF状态,则继续翻译执行当前指令以及后续指令,并在翻译执行过程中检测是否存在第一集合A中的指令a,产生了(a,e)指定的e中的例外,如果当前翻译执行到指令a,并且指令a产生了e中的例外,则确定指令a产生了目标例外,针对该目标例外报第一次例外,并保证此时已将控制状态寄存器描述的状态设置为SF状态。
可以理解的是,在步骤S8之后,如果源代码中还存在未翻译执行的指令,则可以继续执行上述图2所示的流程。
在本发明实施例中,在进入例外处理程序之后,例外处理程序会检测控制状态寄存器描述的状态是否为SF状态或者SS状态。如果进入例外处理程序之后,例外处理程序检测到当前是SF状态,则进入产生例外的处理流程,也即执行第一处理流程,并保证此时已将控制状态寄存器描述的状态设置为HF状态。如果进入例外处理程序之后,例外处理程序检测到当前是SS状态,则进入触发例外的处理流程,也即执行第二处理流程,对目标例外进行处理,并保证此时已将控制状态寄存器描述的HF状态清除。
其中,例外处理程序是指所有例外发生后都会跳转到的入口程序,进入例外处理程序之后,例外处理程序再根据当前控制状态寄存器描述的状态确定实际应跳转至哪一个处理流程。例如,在报第一次例外后,例外处理程序检测到当前为SF状态(bit12为0),则跳转至产生例外的处理流程。产生例外的处理流程用于将控制状态寄存器描述的状态设置为HF状态,但并不处理目标例外。又如,在报第二次例外后,例外处理程序检测到当前为SS状态(bit12为1),则跳转至触发例外的处理流程。触发例外的处理流程用于处理目标例外。
一个示例中,假设在LoongArch指令集中添加如下3条x87 FPU模拟指令:x87fadd、x87fsub、x87fmul。其中,x87fadd用于模拟x87 FPU指令中的浮点加法指令;x87fsub用于模拟x87 FPU指令中的浮点减法指令;x87fmul用于模拟x87 FPU指令中的浮点乘法指令。此外,定义如下两种新的例外:X87FFPE和X87SFPE。其中,X87FFPE表示上文中所述的产生例外,X87SFPE表示上文中所述的触发例外。
示例性地,第一集合可以定义如下:A={(x87fadd, X87FFPE), (x87fsub,X87FFPE), (x87fmul, X87FFPE)}。(x87fadd, X87FFPE)、(x87fsub, X87FFPE)、(x87fmul,X87FFPE)分别该第一集合A中的“(指令,例外)对”。
第二集合可以定义如下:B={x87fadd, x87fsub, x87fmul}。
在控制状态寄存器中设置第一标记位(如bit11位)和第二标记位(如bit12位)。其中,bit11位为1代表HF状态(也即存在预设标志),bit11位为0代表非HF状态(也即不存在预设标志),bit12位为1代表SS状态,bit12位为0代表SF状态。
在初始化阶段,初始化控制状态寄存器的bit11位为0。当执行到第一条发生目标例外的x87 FPU模拟指令时,针对该目标例外报第一次例外,如报X87FFPE例外,并将控制状态寄存器的bit12位置0。可以理解的是,在该示例中,上述第一条发生目标例外的x87 FPU模拟指令可以为x87fadd、x87fsub、x87fmul中的任意一条指令。
操作系统接收到第一次例外后进入例外处理程序,例外处理程序检测到控制状态寄存器的bit12位为0,则进入产生例外的处理程序,产生例外的处理程序将控制状态寄存器的bit11位置1,此时例外处理程序结束,继续翻译执行后续指令。
当执行到下一条x87 FPU模拟指令时,检测到控制状态寄存器的bit11位为1,也即检测到存在预设标志,则针对目标例外报第二次例外,如报X87SFPE例外,并将控制状态寄存器的bit12位设置为1。可以理解的是,在该示例中,上述下一条x87 FPU模拟指令可以为x87fadd、x87fsub、x87fmul中的任意一条指令。
操作系统接收到第二次例外后进入例外处理程序,例外处理程序检测到控制状态寄存器的bit12位为1,则进入触发例外的处理程序,触发例外的处理程序对该目标例外进行处理,并将控制状态寄存器的bit11位设置为0。此时,针对该目标例外实现了延迟例外机制,也即,在执行到某条x87 FPU模拟指令产生该目标例外时,只是通知处理器已产生某类例外,但是并未处理该目标例外;而是在执行到下一条x87 FPU模拟指令时,才处理该目标例外。
在进一步的示例中,在乱序处理的精确例外处理器中模拟x87的延迟例外机制。x87 FPU模拟指令顺序为x87fadd、x87fsub、x87fmul,其中,假设x87fsub会发生溢出例外。
要模拟x87的延迟例外机制,需要在x87fsub的下一条指令x87fmul报例外并处理例外,保存x87fmul的执行状态。但在乱序处理器中,x87fmul可能在指令x87fsub之前被执行。采用本申请实施例中的方法,在执行到x87fsub指令时,报第一次例外(产生例外)。在第一次例外处理中按上一示例描述的方式设置控制状态寄存器的状态,保存x87fsub指令的执行状态,并取消包括下一条指令x87fmul在内的后续指令的执行。之后,回到产生例外的x87fsub指令继续执行。x87fmul由此又被执行,能够检测到产生例外的x87fsub设置的控制状态寄存器,并报第二次例外(触发例外),实际处理溢出例外并保存x87fmul的执行状态,然后回到x87fmul指令继续执行。可见,本申请实施例能够在精确例外的乱序处理器上模拟延迟例外。
进一步地,本发明实施例可以通过定义不同组合实现对不同类型的例外的延迟例外机制。例如,通过定义第一集合A1、第二集合B1以及控制状态寄存器描述的HF、SF、SS三个状态,实现对某类例外的延迟例外机制。又如,通过定义第一集合A2、第二集合B2以及控制状态寄存器表达的HF、SF、SS三个状态,实现对另一类例外的延迟例外机制;等等。此外,所述目标代码的指令集中,可以同时存在多个类别的延迟例外,且同一条指令可以同时属于不同类的延迟例外。
在本发明的一种可选实施例中,所述预设标志可以通过预置指令设置或清除,所述预设标志可以在进入所述目标例外的处理流程之前被设置,所述预设标志可以在所述目标例外的处理流程返回之前被清除。
所述预置指令可以为自定义的专用指令,或者,所述预置指令可以为产生例外的指令。示例性地,可以由报第一次例外的指令设置预设标志,由报第二次例外的指令清除预设标志。可以理解的是,本发明实施例对设置或清除预设标志的指令不做限制,只要在进入所述目标例外的处理流程(第二处理流程)之前设置预设标志,以及在所述目标例外的处理流程返回之前清除预设标志即可。
需要说明的是,上述示例中的例外处理流程仅作为本发明的一种示例性说明。在具体实施中,本发明实施例对设置控制状态寄存器的第一标记位的方式不做限制。示例性地,可以通过硬件或者软件设置控制状态寄存器的bit11位。此外,本发明实施例对设置控制状态寄存器的第一标记位的时机不做限制。例如,可以在报第一次例外时将控制状态寄存器的bit11位设置为1,在报第二次例外时将控制状态寄存器的bit11为设置为0。
进一步地,本发明实施例对设置控制状态寄存器的第二标记位的方式不做限制。示例性地,可以通过硬件或者软件设置控制状态寄存器的bit12位。此外,本发明实施例对设置控制状态寄存器的第二标记位的时机不做限制。例如,每次进入产生例外的处理程序时将制状态寄存器的bit12位设置为1,每次进入触发例外的处理程序时将制状态寄存器的bit12为设置为0。
需要说明的是,上述通过控制状态寄存器的第一标记位和第二标记位描述的三种状态,识别当前报的是第一次例外还是第二次例外仅作为本发明实施例的一种应用示例。示例性地,还可以通过设置例外码来区分当前报的例外是针对目标例外报的第一次例外还是第二次例外。例如,将报第一次例外对应的例外码定义为11,将报第二次例外对应的例外码定义为12,当发生目标例外时将对应的例外码保存到专门的寄存器中,而不是控制状态寄存器中。通过识别该专门的寄存器中的例外码可以得知当前报的是第一次例外还是第二次例外。
进一步地,本发明实施例通过复用宿主平台模拟客户平台的控制状态寄存器的通用寄存器,将其中的保留位作为第一标记位和第二标记位,并在翻译执行源代码中的指令时动态维护第一标记位和第二标记位,描述目标例外的三种不同状态,从而实现对目标例外的延迟例外机制。所述第一标记位和第二标记位可以为宿主平台中用于模拟x86的控制状态寄存器(EFLAGS Register)的预置寄存器的预留位,可以节省硬件成本。
综上,本发明实施例提供的例外处理方法,在执行到当前指令时,若当前指令产生目标例外,则针对该目标例外报第一次例外,并产生预设标志。本发明实施例针对某个目标例外报第一次例外时,并不处理该目标例外,而是在报第二次例外时处理,以实现对目标例外的延迟处理。所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外。在执行到后续相关指令时,如果检测到该预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志,表示该目标例外已经处理完成。由此,在二进制翻译场景下,在翻译执行到产生目标例外(如浮点例外的)x87 FPU指令时,可以先报第一次例外,并设置预设标志,但不处理该目标例外;在翻译执行到下一条x87 FPU指令时,检测到该预设标志,则针对该目标例外报第二次例外,并处理该目标例外,从而可以在实现精确例外的处理器中实现模拟x87 FPU指令的延迟例外机制。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
本申请实施例还提供了一种处理器,包括处理电路、例外状态寄存器和例外控制电路。处理电路用于执行指令序列和例外处理程序,例如包括多个流水级的流水线处理电路。例外状态寄存器例如可以是上文中的控制状态寄存器中的一个。例外控制电路,被配置为:在处理电路执行的当前指令发生目标例外时,在当前指令处第一次例外,使处理器进入第一例外处理流程,并设置控制状态寄存器指示已针对目标例外报第一次例外,但还未报第二次例外;根据控制状态寄存器的指示,在处理电路执行当前指令的下一条指令时,在下一条指令报第二次例外,使处理器进入第二例外处理流程,并清除例外状态寄存器的指示。在第一次例外处理流程中,保存当前指令的现场并取消处理电路对当前指令及后续指令的执行;在第二次例外处理流程中,保存下一条指令的现场,取消处理电路对下一条指令及后续指令的执行,并处理目标例外。
参照图3,示出了本发明的一种例外处理装置实施例的结构框图,所述装置可以包括:
标志检测模块301,用于在执行到当前指令时,检测是否存在预设标志;所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外;
第一处理模块302,用于若检测到存在所述预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志;
第二处理模块303,用于若检测到不存在所述预设标志,则继续执行所述当前指令以及后续指令,并在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,以及设置所述预设标志。
可选地,所述装置还包括:
初始化模块,用于初始化预置寄存器的第一标记位和第二标记位;
所述第二处理模块,包括:
第一设置子模块,用于将所述第二标记位设置为第一数值,以使例外处理程序检测到所述第二标记位为所述第一数值时,执行第一处理流程;所述第一处理流程用于将所述第一标记位设置为第二数值;所述第一标记位为第二数值表示存在预设标志;
所述装置还包括:
第二设置子模块,用于针对所述目标例外报第二次例外之后,将所述第二标记位设置为第二数值,以使例外处理程序检测到所述第二标记位为所述第二数值时,执行第二处理流程;所述第二处理流程用于处理所述目标例外;
所述第一处理模块,具体用于将所述第一标记位设置为第一数值。
可选地,所述装置还包括:
集合定义模块,用于定义第一集合和第二集合,所述第一集合包括第一指定指令和每个第一指定指令对应的指定例外;第二集合包括第二指定指令;
所述标志检测模块,具体用于在执行到当前指令时,若所述当前指令为所述第二集合中的第二指定指令,则检测是否存在预设标志;
所述第二处理模块,具体用于若执行到的当前指令为所述第一集合中的第一指定指令,并且所述当前指令产生的例外为所述第一集合中该第一指定指令对应的指定例外,则确定该指定例外为目标例外,针对该目标例外报第一次例外。
可选地,所述装置还包括:
精确例外转换模块,用于针对所述目标例外报第一次例外之后,处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志。
可选地,所述预设标志通过预置指令设置或清除,所述预设标志在进入所述目标例外的处理流程之前被设置,所述预设标志在所述目标例外的处理流程返回之前被清除。
可选地,所述装置应用于二进制翻译系统,所述二进制翻译系统用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述当前指令为所述源代码中待翻译执行的指令;所述源代码包括x87 FPU指令;所述目标代码包括x87 FPU模拟指令;所述目标例外包括将所述x87 FPU指令翻译为所述x87FPU模拟指令后执行时产生的浮点例外。
本发明实施例提供的例外处理装置,在执行到当前指令时,若当前指令产生目标例外,则针对该目标例外报第一次例外,并产生预设标志。本发明实施例针对某个目标例外报第一次例外时,并不处理该目标例外,而是在报第二次例外时处理,以实现对目标例外的延迟处理。所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外。在执行到后续相关指令时,如果检测到该预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志,表示该目标例外已经处理完成。由此,在二进制翻译场景下,在翻译执行到产生目标例外(如浮点例外的)x87 FPU指令时,可以先报第一次例外,并设置预设标志,但不处理该目标例外;在翻译执行到下一条x87 FPU指令时,检测到该预设标志,则针对该目标例外报第二次例外,并处理该目标例外,从而可以在实现精确例外的处理器中实现模拟x87 FPU指令的延迟例外机制。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
参照图4,是本发明实施例提供的电子设备的结构示意图。如图4所示,所述电子设备包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行前述实施例的例外处理方法的步骤。
本发明实施例提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的程序或处理器执行时,使得终端能够执行前述实施例的例外处理方法的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (14)

1.一种例外处理方法,其特征在于,所述方法包括:
在执行到当前指令时,检测是否存在预设标志;所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外;
若检测到存在所述预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志;
若检测到不存在所述预设标志,则继续执行所述当前指令以及后续指令,并在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,以及设置所述预设标志。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
初始化预置寄存器的第一标记位和第二标记位;
所述设置所述预设标志,包括:
将所述第二标记位设置为第一数值,以使例外处理程序检测到所述第二标记位为所述第一数值时,执行第一处理流程;所述第一处理流程用于将所述第一标记位设置为第二数值;所述第一标记位为第二数值表示存在预设标志;
所述针对所述目标例外报第二次例外之后,还包括:
将所述第二标记位设置为第二数值,以使例外处理程序检测到所述第二标记位为所述第二数值时,执行第二处理流程;所述第二处理流程用于处理所述目标例外;
所述清除所述预设标志,包括:
将所述第一标记位设置为第一数值。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
定义第一集合和第二集合,所述第一集合包括第一指定指令和每个第一指定指令对应的指定例外;第二集合包括第二指定指令;
所述在执行到当前指令时,检测是否存在预设标志,包括:
在执行到当前指令时,若所述当前指令为所述第二集合中的第二指定指令,则检测是否存在预设标志;
所述在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,包括:
若执行到的当前指令为所述第一集合中的第一指定指令,并且所述当前指令产生的例外为所述第一集合中该第一指定指令对应的指定例外,则确定该指定例外为目标例外,针对该目标例外报第一次例外。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
针对所述目标例外报第一次例外之后,处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志。
5.根据权利要求1所述的方法,其特征在于,所述预设标志通过预置指令设置或清除,所述预设标志在进入所述目标例外的处理流程之前被设置,所述预设标志在所述目标例外的处理流程返回之前被清除。
6.根据权利要求1至5中任一所述的方法,其特征在于,所述方法应用于二进制翻译系统,所述二进制翻译系统用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述当前指令为所述源代码中待翻译执行的指令;所述源代码包括x87 FPU指令;所述目标代码包括x87 FPU模拟指令;所述目标例外包括将所述x87 FPU指令翻译为所述x87 FPU模拟指令后执行时产生的浮点例外。
7.一种例外处理装置,其特征在于,所述装置包括:
标志检测模块,用于在执行到当前指令时,检测是否存在预设标志;所述预设标志用于指示前序指令已针对目标例外报第一次例外,但还未报第二次例外;
第一处理模块,用于若检测到存在所述预设标志,则针对所述目标例外报第二次例外,并处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志;
第二处理模块,用于若检测到不存在所述预设标志,则继续执行所述当前指令以及后续指令,并在执行到产生所述目标例外的指令时,针对所述目标例外报第一次例外,以及设置所述预设标志。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
初始化模块,用于初始化预置寄存器的第一标记位和第二标记位;
所述第二处理模块,包括:
第一设置子模块,用于将所述第二标记位设置为第一数值,以使例外处理程序检测到所述第二标记位为所述第一数值时,执行第一处理流程;所述第一处理流程用于将所述第一标记位设置为第二数值;所述第一标记位为第二数值表示存在预设标志;
所述装置还包括:
第二设置子模块,用于针对所述目标例外报第二次例外之后,将所述第二标记位设置为第二数值,以使例外处理程序检测到所述第二标记位为所述第二数值时,执行第二处理流程;所述第二处理流程用于处理所述目标例外;
所述第一处理模块,具体用于将所述第一标记位设置为第一数值。
9.根据权利要求7所述的装置,其特征在于,所述装置还包括:
集合定义模块,用于定义第一集合和第二集合,所述第一集合包括第一指定指令和每个第一指定指令对应的指定例外;第二集合包括第二指定指令;
所述标志检测模块,具体用于在执行到当前指令时,若所述当前指令为所述第二集合中的第二指定指令,则检测是否存在预设标志;
所述第二处理模块,具体用于若执行到的当前指令为所述第一集合中的第一指定指令,并且所述当前指令产生的例外为所述第一集合中该第一指定指令对应的指定例外,则确定该指定例外为目标例外,针对该目标例外报第一次例外。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
精确例外转换模块,用于针对所述目标例外报第一次例外之后,处理所述目标例外,以及在所述目标例外处理完成后清除所述预设标志。
11.根据权利要求7所述的装置,其特征在于,所述预设标志通过预置指令设置或清除,所述预设标志在进入所述目标例外的处理流程之前被设置,所述预设标志在所述目标例外的处理流程返回之前被清除。
12.根据权利要求7至11中任一所述的装置,其特征在于,所述装置应用于二进制翻译系统,所述二进制翻译系统用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述当前指令为所述源代码中待翻译执行的指令;所述源代码包括x87 FPU指令;所述目标代码包括x87 FPU模拟指令;所述目标例外包括将所述x87 FPU指令翻译为所述x87 FPU模拟指令后执行时产生的浮点例外。
13.一种电子设备,其特征在于,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1至6任一所述的例外处理方法的步骤。
14.一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1至6任一所述的例外处理方法的步骤。
CN202410045007.9A 2024-01-11 2024-01-11 例外处理方法、装置、电子设备及存储介质 Active CN117555555B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410045007.9A CN117555555B (zh) 2024-01-11 2024-01-11 例外处理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410045007.9A CN117555555B (zh) 2024-01-11 2024-01-11 例外处理方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN117555555A true CN117555555A (zh) 2024-02-13
CN117555555B CN117555555B (zh) 2024-04-12

Family

ID=89817068

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410045007.9A Active CN117555555B (zh) 2024-01-11 2024-01-11 例外处理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117555555B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5887175A (en) * 1997-02-14 1999-03-23 Integrated Device Technology, Inc. Apparatus and method for managing interrupt delay on floating point error
US6247117B1 (en) * 1999-03-08 2001-06-12 Advanced Micro Devices, Inc. Apparatus and method for using checking instructions in a floating-point execution unit
CN1529229A (zh) * 2003-10-21 2004-09-15 中国科学院计算技术研究所 二进制翻译中标志位的优化处理方法
WO2006111705A2 (en) * 2005-04-20 2006-10-26 Transitive Limited Method and apparatus for precise handling of exceptions during program code conversion
CN105930133A (zh) * 2016-04-19 2016-09-07 南京亚派科技股份有限公司 一种基于单片机系统的串行指令的发送方法
CN114461227A (zh) * 2022-04-13 2022-05-10 飞腾信息技术有限公司 运行软件的方法、装置以及机器可读存储介质
CN114911525A (zh) * 2022-04-28 2022-08-16 山东浪潮科学研究院有限公司 二进制指令翻译执行方法及装置
CN117369830A (zh) * 2023-07-26 2024-01-09 龙芯中科技术股份有限公司 二进制翻译方法、电子设备和可读存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5887175A (en) * 1997-02-14 1999-03-23 Integrated Device Technology, Inc. Apparatus and method for managing interrupt delay on floating point error
US6247117B1 (en) * 1999-03-08 2001-06-12 Advanced Micro Devices, Inc. Apparatus and method for using checking instructions in a floating-point execution unit
CN1529229A (zh) * 2003-10-21 2004-09-15 中国科学院计算技术研究所 二进制翻译中标志位的优化处理方法
WO2006111705A2 (en) * 2005-04-20 2006-10-26 Transitive Limited Method and apparatus for precise handling of exceptions during program code conversion
CN105930133A (zh) * 2016-04-19 2016-09-07 南京亚派科技股份有限公司 一种基于单片机系统的串行指令的发送方法
CN114461227A (zh) * 2022-04-13 2022-05-10 飞腾信息技术有限公司 运行软件的方法、装置以及机器可读存储介质
CN114911525A (zh) * 2022-04-28 2022-08-16 山东浪潮科学研究院有限公司 二进制指令翻译执行方法及装置
CN117369830A (zh) * 2023-07-26 2024-01-09 龙芯中科技术股份有限公司 二进制翻译方法、电子设备和可读存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
张龙龙;董卫宇;王立新;: "DBT中基于译码制导的指令动态翻译优化技术研究", 信息工程大学学报, no. 06, 15 December 2013 (2013-12-15) *
马湘宁, 武成岗, 唐锋, 冯晓兵, 张兆庆: "二进制翻译中的标志位优化技术", 计算机研究与发展, no. 02, 16 February 2005 (2005-02-16) *

Also Published As

Publication number Publication date
CN117555555B (zh) 2024-04-12

Similar Documents

Publication Publication Date Title
CN108139908B (zh) 移动前缀指令
US11803387B2 (en) System for executing new instructions and method for executing new instructions
US11604643B2 (en) System for executing new instructions and method for executing new instructions
US20030149963A1 (en) Condition code flag emulation for program code conversion
US11625247B2 (en) System for executing new instructions and method for executing new instructions
US10754656B2 (en) Determining and predicting derived values
US11314511B2 (en) Concurrent prediction of branch addresses and update of register contents
US10929135B2 (en) Predicting and storing a predicted target address in a plurality of selected locations
US10884746B2 (en) Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10891133B2 (en) Code-specific affiliated register prediction
CN117555555B (zh) 例外处理方法、装置、电子设备及存储介质
US10901741B2 (en) Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10884748B2 (en) Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10884747B2 (en) Prediction of an affiliated register
US7765389B2 (en) Management of exceptions and hardware interruptions by an exception simulator
KR101171423B1 (ko) 컴퓨터 아키텍쳐 상태 코드 세팅을 효율적으로 에뮬레이트하는 방법
CN117742727A (zh) 二进制翻译方法、装置、电子设备及存储介质
US11775297B2 (en) Transaction nesting depth testing instruction

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