关键字:E500 精确异常 同步异常 异步异常
E500的异常可以分为三种:异步,同步精确和同步非精确。
异步异常:被认为是一种和指令执行无关的异常,常见的异常类型为外部中断
同步精确异常:直接由指令执行而导致的异常为同步异常,这种异常处理可以是精确的(precise)也可以是不精确的(imprecise)。精确异常,记录的是发生异常的这条指令。简单的说就是在引起异常之前的所有指令必须都执行完毕,而在引起异常之后的所有指令都没有执行。而引起异常的这条指令可以处在没有执行,正在执行中,或者已经执行完毕,这取决于异常的类型。
同步非精确异常:非精确异常记录的是发生异常的指令或者“发生异常的后几条指令”。也就是说发生异常之后,有可能导致异常这条指令的后几条指令也被执行了。
精确异常:实现简单但是不能充分利用当前处理器多发射的技术,对于现代的多发射的处理器来说,CPU中同时有几条或者几十条指令同时执行,发生异常的指令会导致已经进入流水线的并且在这条指令之后的所有指令都被抛弃。
非精确异常:实现复杂,但是能够提高性能。可以在发生同步异常后,能够多执行几条指令.但是实现起来需要对不同的异常类型进行不同的考虑。
中断处理过程包含了保存当前处理器状态到特定的寄存器中,识别中断类型从而跳转到不同的中断向量地址。对于E500的架构来说,主要为如下几步:
1、根据异常类型不同,保存发生异常的指令到SRR0(对于非关键中断)或者MCSRR0(对于机器检查中断)或者CSRR0(对于关键中断)中
2、在ESR或者MCSR中加载一些和具体中断相关的特定信息。
3、SRR1(对于非关键中断)或者CSRR1(对于关键中断)或者MCSRR1加载MSR的内容。
4、在进入中断处理程序之前,更新MSR的值,如下: a.清空MSR的SPE,WE,EE,PR,FP,FE0,FE1,IS,DS位 b.如果是关键类中断需要清空MSR的CE和DE位,如果是非关键中断,则CE和DE保持不变 c.如果是机器检查中断,需清空ME位,如是其他类型中断,则保持不变 d,其他的所有位保持不变 5、指令流恢复执行,执行地址为( IVPR[32 ~ 47] || IVORn[48~59])。IVPR的选择根据中断类型不同而不同,IVPR和IVOR的内容必须在系统初始化时由系统软件进行赋值。
(未完待续) 作者:michael.kang ([email protected])