1.浮点异常
mips浮点例外有两个部分:一是浮点部件不可用例外; 一是浮点部件异常。
1)浮点部件不可用例外
这个例外产生的原因是在浮点部件不可用的情况下要执行浮点指令,具体表现是在status寄存器的CU1位为0的情况下执行浮点指令。例外属于协处理器不可用异常,一般是1号协处理器。
这个例外是正常现象,因为对于一般进程来说,浮点部件默认不可用,第一次使用总会产生浮点部件不可用例外。
2)浮点部件异常
这个例外主要是浮点部件运行过程中,出现的异常原因有如下6种
a.未实现的指令:比如出现某些特殊的双精度指令,浮点部件不识别
b.无效的操作:例如square(-1)
c.除0异常
d.上溢
e.下溢
g.不精确:无限循环小数 1/3截断等。
浮点异常类型获得是fcsr寄存器的cause和E位,注意在写fcsr时不能写这些位,否则会立即产生浮点部件异常。
进程的浮点管理主要可以分为三个部分:
1)初始化
在进程第一次使用浮点部件的时候,由于浮点部件默认是不可用的,因此会产生浮点部件不可用异常,异常检查进程是否是第一次使用,如果是第一次使用则初始化task_struct ,thread_info等结构体相应的标识,并打开浮点部件。
2)浮点现场保存
在进程切换的时候检查进程是否使用了浮点部件(即检查上述初始化的标识),如果没使用则不保存,否则保存现场并关闭浮点部件。
3)浮点现场恢复
浮点现场恢复并不是在进程切换的时候,而是在进程切换后第一次使用浮点部件的时候。因为进程切换后浮点部件一定是关闭的。(原因是浮点部件默认关闭,而且即使前一个进程打开了浮点部件,切换时也会关闭)。在第一次使用时会产生浮点部件不可用例外,例外检查到进程不是第一次使用浮点部件则恢复浮点部件现场,并打开浮点部件。
阅读(2617) | 评论(0) | 转发(0) |